PandaRoot
PndMvdMQFileSamplerBursts.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 PndMvdMQFileSamplerBursts_H_
16 #define PndMvdMQFileSamplerBursts_H_
17 
18 #include <string>
19 
20 #include "FairFileSource.h"
21 #include "FairRunAna.h"
22 #include "FairTimeStamp.h"
23 
24 #include "FairMQDevice.h"
25 
26 #include "PndBurstVectorBuilder.h"
27 
28 #include "TClonesArray.h"
29 
30 struct BurstHeader {
31  unsigned int fRunID;
32  unsigned int fBurstID;
33  std::string fBranchName;
34 
35  template <class Archive>
36  void serialize(Archive &ar, const unsigned int version)
37  {
38  ar &fRunID;
39  ar &fBurstID;
40  ar &fBranchName;
41  }
42 
43 #ifndef __CINT__ // for BOOST serialization
45 #endif // for BOOST serialization
46 };
47 
48 struct BurstData {
49  BurstData() : fHeader(), fData(){};
50  virtual ~BurstData()
51  {
52  for (auto itr : fData) {
53  for (auto dataItr : itr) {
54  delete (dataItr);
55  }
56  itr.clear();
57  }
58  fData.clear();
59  };
61  std::vector<std::vector<FairTimeStamp *>> fData;
62 
63  virtual void Reset() {}
64 
65  template <class Archive>
66  void serialize(Archive &ar, const unsigned int version)
67  {
68  ar &fHeader;
69  ar &fData;
70  }
71 
72 #ifndef __CINT__ // for BOOST serialization
73  friend class boost::serialization::access;
74 #endif
75 };
76 
77 class PndMvdMQFileSamplerBursts : public FairMQDevice {
78  public:
79  enum { InputFileName = FairMQDevice::Last, Last };
80 
82  virtual ~PndMvdMQFileSamplerBursts();
83 
84  void AddInputFileName(std::string tempString) { fFileNames.push_back(tempString); }
85  void AddInputChannelBranchName(std::pair<std::string, std::string> tempString)
86  {
87  fPortBranchNameMap.insert(std::pair<std::string, std::string>(tempString.first, tempString.second));
88  fBranchNames.push_back(tempString);
89  fPorts.insert(tempString.first);
90  }
91 
92  void SetMaxIndex(int64_t tempInt) { fMaxIndex = tempInt; }
93 
94  template <class Archive>
95  void serialize(Archive &ar, const unsigned int version)
96  {
97  ar &fHitVector;
98  }
99 
100 #ifndef __CINT__ // for BOOST serialization
101  friend class boost::serialization::access;
102 #endif
103 
104  protected:
105  virtual void Run();
106  virtual void InitTask();
107 
108  virtual void InitBurstBuilder(std::string branchName);
109 
110  private:
111  FairRunAna *fRunAna;
112  FairFileSource *fSource;
113  std::set<std::string> fPorts; //< set of output ports
114  std::multimap<std::string, std::string> fPortBranchNameMap;
115  std::vector<std::pair<std::string, std::string>> fBranchNames; //< vector of output ports and branch names. One port can have multiple branches send to it
116  std::map<std::string, std::vector<std::vector<FairTimeStamp *>>> fOutputData; //< map of branch and data object to be send
117  std::map<std::string, TObject *> fInputBranches; //< branch name and TClonesArray in root tree
118  std::map<std::string, PndBurstVectorBuilderBase *> fBurstBuilder; //< branch name and associated burst builder
119  std::vector<FairTimeStamp *> fHitVector;
120  FairEventHeader *fEventHeader;
121 
122  int fNObjects;
123  int64_t fMaxIndex;
124 
125  std::vector<std::string> fFileNames;
126 };
127 
128 #endif /* PndMvdMQFileSamplerBursts_H_ */
void serialize(Archive &ar, const unsigned int version)
virtual void Reset()
void serialize(Archive &ar, const unsigned int version)
std::vector< std::vector< FairTimeStamp * > > fData
void AddInputFileName(std::string tempString)
void AddInputChannelBranchName(std::pair< std::string, std::string > tempString)
void serialize(Archive &ar, const unsigned int version)
friend class boost::serialization::access