PandaRoot
PndMQFileSinkBursts.h
Go to the documentation of this file.
1 /********************************************************************************
2  * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
3  * *
4  * This software is distributed under the terms of the *
5  * GNU Lesser General Public Licence version 3 (LGPL) version 3, *
6  * copied verbatim in the file "LICENSE" *
7  ********************************************************************************/
15 #ifndef PndMQFileSinkBursts_H_
16 #define PndMQFileSinkBursts_H_
17 
18 #include <iostream>
19 
20 #include "Rtypes.h"
21 #include "TFile.h"
22 #include "TTree.h"
23 #include "TClonesArray.h"
24 #include "TVector3.h"
25 #include "TString.h"
26 #include "TSystem.h"
27 #include "TList.h"
28 #include "TObjString.h"
29 
30 #include "FairMQDevice.h"
31 #include "FairMQLogger.h"
32 #include "FairParGenericSet.h"
33 #include "FairGeoParSet.h"
34 
36 #include "PndSdsPixelDigiPar.h"
37 #include "PndSdsTotDigiPar.h"
38 #include "PndSensorNamePar.h"
39 
40 #include "PndSdsHit.h"
41 
42 #include "baseMQtools.h"
43 
44 #include "TMessage.h"
45 
46 #ifndef __CINT__
47 #include <boost/thread.hpp>
48 #include <boost/bind.hpp>
49 #include <boost/serialization/access.hpp>
50 #include <boost/archive/text_iarchive.hpp>
51 #include <boost/archive/binary_iarchive.hpp>
52 #include <boost/serialization/vector.hpp>
53 #include <boost/serialization/unique_ptr.hpp>
54 #endif //__CINT__
55 
56 class TVector3;
57 class TFile;
58 class TTree;
59 class TClonesArray;
60 
61 using namespace std;
62 
63 class PndMQFileSinkBursts : public FairMQDevice {
64  public:
65  PndMQFileSinkBursts(std::string outputFileName = "FilesSinkBursts.root")
66  : fOutFile(nullptr), fTree(nullptr), fOutput(nullptr), fHitVector(), fHasBoostSerialization(false), fOutputFileName(outputFileName), fBranchNameList(0), fCurrentRunId(0)
67  {
68  gSystem->ResetSignal(kSigInterrupt);
69  gSystem->ResetSignal(kSigTermination);
70 
71  // Check if boost serialization is available if it is chosen
72  using namespace baseMQ::tools::resolve;
73  // coverity[pointless_expression]: suppress coverity warnings on apparant if(const).
74  if (is_same<boost::archive::binary_iarchive, boost::archive::binary_iarchive>::value || is_same<boost::archive::binary_iarchive, boost::archive::text_iarchive>::value) {
75  if (has_BoostSerialization<FairTimeStamp, void(boost::archive::binary_iarchive &, const unsigned int)>::value == 1) {
76  fHasBoostSerialization = true;
77  }
78  }
79 
80  fGeoPar = new FairGeoParSet("FairGeoParSet");
81  fParCList = new TList();
82  fParCList->Add(fGeoPar);
83 
84  fDigiPar = new PndSdsPixelDigiPar("MVDPixelDigiPar");
85  fParCList->Add(fDigiPar);
86 
87  fTotPar = new PndSdsTotDigiPar("MVDPixelTotDigiPar");
88  fParCList->Add(fTotPar);
89 
90  fSensorPar = new PndSensorNamePar("PndSensorNamePar");
91  fParCList->Add(fSensorPar);
92  }
93 
95  {
96  // fBranchNameList->Write("BranchList", TObject::kSingleKey);
97  // fTree->Write();
98  // fOutFile->Close();
99  if (fHitVector.size() > 0) {
100  fHitVector.clear();
101  }
102  }
103 
104  virtual void SetFileName(std::string fileName) { fOutputFileName = fileName; }
105 
106  virtual void InitOutputFile(TString defaultId = "100")
107  {
108  // fOutput = new TClonesArray("PndSdsHit");
109  //
110  // std::stringstream ss;
111  // // ss << "/Volumes/RAMDisk/";
112  // ss << fOutputFileName.c_str();
113  //
114  //
115  // fOutFile = new TFile(ss.str().c_str(), "recreate");
116  // fTree = new TTree("pndsim", "Test output");
117  // fTree->Branch("Output", "TClonesArray", &fOutput, 64000, 99);
118  // fBranchNameList = new TList();
119  // fBranchNameList->AddLast(new TObjString("Output"));
120  }
121 
122  void UpdateParameters();
123  FairParGenericSet *UpdateParameter(FairParGenericSet *thisPar);
124  static void CustomCleanup(void *data, void *hint);
125 
126  template <class Archive>
127  void serialize(Archive &ar, const unsigned int version)
128  {
129  ar &fHitVector;
130  ar &fBurstData;
131  }
132 
133  protected:
134  virtual void Run();
135 
136  private:
137  TFile *fOutFile;
138  TTree *fTree;
139  TClonesArray *fOutput;
140  TList *fBranchNameList;
141  std::string fOutputFileName;
142  BurstData fBurstData;
143  int fCurrentRunId;
144  int fNewRunId;
145  TList *fParCList;
146  FairGeoParSet *fGeoPar;
147  PndSdsPixelDigiPar *fDigiPar;
148  PndSdsTotDigiPar *fTotPar;
149  PndSensorNamePar *fSensorPar;
150 
151 #ifndef __CINT__ // for BOOST serialization
152  friend class boost::serialization::access;
153  vector<FairTimeStamp *> fHitVector;
154  bool fHasBoostSerialization;
155 #endif // for BOOST serialization
156 
158  // PndMQFileSinkBursts(const PndMQFileSinkBursts&);
159  // PndMQFileSinkBursts operator=(const PndMQFileSinkBursts&);
160 };
161 
162 #endif /* PndMQFileSinkBursts_H_ */
PndMQFileSinkBursts(std::string outputFileName="FilesSinkBursts.root")
STL namespace.
Charge Digitization Parameter Class for SDS.
void serialize(Archive &ar, const unsigned int version)
virtual void InitOutputFile(TString defaultId="100")
virtual void SetFileName(std::string fileName)
Unique match between SensorID and path in TGeoManager.
Digitization Parameter Class for SDS-Pixel part.