FairRoot/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 {
65  public:
66  PndMQFileSinkBursts(std::string outputFileName = "FilesSinkBursts.root")
67  : fOutFile(NULL)
68  , fTree(NULL)
69  , fOutput(NULL)
70  , fHitVector()
71  , fHasBoostSerialization(false)
72  , fOutputFileName(outputFileName)
73  , fBranchNameList(0)
74  , fCurrentRunId(0)
75  {
76  gSystem->ResetSignal(kSigInterrupt);
77  gSystem->ResetSignal(kSigTermination);
78 
79  // Check if boost serialization is available if it is chosen
80  using namespace baseMQ::tools::resolve;
81  // coverity[pointless_expression]: suppress coverity warnings on apparant if(const).
82  if (is_same<boost::archive::binary_iarchive, boost::archive::binary_iarchive>::value || is_same<boost::archive::binary_iarchive, boost::archive::text_iarchive>::value)
83  {
84  if (has_BoostSerialization<FairTimeStamp, void(boost::archive::binary_iarchive&, const unsigned int)>::value == 1)
85  {
86  fHasBoostSerialization = true;
87  }
88  }
89 
90  fGeoPar = new FairGeoParSet("FairGeoParSet");
91  fParCList = new TList();
92  fParCList->Add(fGeoPar);
93 
94  fDigiPar = new PndSdsPixelDigiPar("MVDPixelDigiPar");
95  fParCList->Add(fDigiPar);
96 
97  fTotPar = new PndSdsTotDigiPar("MVDPixelTotDigiPar");
98  fParCList->Add(fTotPar);
99 
100  fSensorPar = new PndSensorNamePar("PndSensorNamePar");
101  fParCList->Add(fSensorPar);
102  }
103 
105  {
106  //fBranchNameList->Write("BranchList", TObject::kSingleKey);
107  //fTree->Write();
108  //fOutFile->Close();
109  if (fHitVector.size() > 0)
110  {
111  fHitVector.clear();
112  }
113 
114  }
115 
116  virtual void SetFileName(std::string fileName){
117  fOutputFileName = fileName;
118  }
119 
120  virtual void InitOutputFile(TString defaultId = "100")
121  {
122 // fOutput = new TClonesArray("PndSdsHit");
123 //
124 // std::stringstream ss;
125 // // ss << "/Volumes/RAMDisk/";
126 // ss << fOutputFileName.c_str();
127 //
128 //
129 // fOutFile = new TFile(ss.str().c_str(), "recreate");
130 // fTree = new TTree("pndsim", "Test output");
131 // fTree->Branch("Output", "TClonesArray", &fOutput, 64000, 99);
132 // fBranchNameList = new TList();
133 // fBranchNameList->AddLast(new TObjString("Output"));
134  }
135 
136  void UpdateParameters();
137  FairParGenericSet* UpdateParameter(FairParGenericSet* thisPar);
138  static void CustomCleanup(void *data, void *hint);
139 
140  template <class Archive>
141  void serialize(Archive& ar, const unsigned int version)
142  {
143  ar& fHitVector;
144  ar& fBurstData;
145  }
146 
147  protected:
148  virtual void Run();
149 
150  private:
151  TFile* fOutFile;
152  TTree* fTree;
153  TClonesArray* fOutput;
155  std::string fOutputFileName;
159  TList* fParCList;
160  FairGeoParSet* fGeoPar;
164 
165 #ifndef __CINT__ // for BOOST serialization
166  friend class boost::serialization::access;
167  vector<FairTimeStamp*> fHitVector;
169 #endif // for BOOST serialization
170 
172 // PndMQFileSinkBursts(const PndMQFileSinkBursts&);
173 // PndMQFileSinkBursts operator=(const PndMQFileSinkBursts&);
174 };
175 
176 #endif /* PndMQFileSinkBursts_H_ */
PndMQFileSinkBursts(std::string outputFileName="FilesSinkBursts.root")
PndSdsTotDigiPar * fTotPar
Charge Digitization Parameter Class for SDS.
void serialize(Archive &ar, const unsigned int version)
TString fOutFile
Definition: run_full.C:10
PndSensorNamePar * fSensorPar
virtual void InitOutputFile(TString defaultId="100")
PndSdsPixelDigiPar * fDigiPar
fRun Run(0, nEvents)
vector< FairTimeStamp * > fHitVector
virtual void SetFileName(std::string fileName)
Unique match between SensorID and path in TGeoManager.
Digitization Parameter Class for SDS-Pixel part.