HerdSoftware  0.1.1
GGSDataProvider.h
Go to the documentation of this file.
1 /*
2  * GGSDataProvider.h
3  *
4  * Created on: 14 Nov 2018
5  * Author: Nicola Mori
6  */
7 
10 #ifndef HERD_GGSDATAPROVIDER_H_
11 #define HERD_GGSDATAPROVIDER_H_
12 
13 // HerdSoftware headers
15 #include "dataobjects/CaloHits.h"
21 #include "dataobjects/MCTruth.h"
31 
32 #ifndef GGSSMARTLOG_H_
33 #define HERD_GGSDATAPROVIDER_H_UNDEF_LOGGING
34 #endif
35 
36 // GGS headers
37 #include "montecarlo/dataobjs/GGSTHits.h"
38 #include "montecarlo/readers/GGSTRootReader.h"
39 
40 class GGSTHitsReader;
41 class GGSTMCTruthReader;
42 class GGSTHadrIntReader;
43 class GGSTPrimaryDisReader;
44 
45 #ifdef HERD_GGSDATAPROVIDER_H_UNDEF_LOGGING
46 // Remove the definitions of GGS output macros (would conflict with the same macros defined in EventAnalysis)
47 // We only do this if GGSSmartLog.h is being parsed in this TU, otherwise there would be nothing to undef
48 // (or we could even be undefining the EA macros)
49 #undef COUT
50 #undef CCOUT
51 #undef ENDL
52 #endif
53 
54 // EventAnalysis headers
55 #include "data/DataProvider.h"
56 
57 // additional HerdSoftware headers
58 // these depend on EA headers so they must be included after the #undef
61 
62 // ROOT headers
63 #include "TGeoManager.h"
64 
65 // Standard C++ hedaders
66 #include <functional>
67 #include <vector>
68 
69 using namespace EA;
70 
71 namespace Herd {
72 // clang-format off
115 // clang-format on
116 
117 class GGSDataProvider : public DataProvider {
118 public:
125  GGSDataProvider(const std::string &name, const std::string &source);
126 
132  bool Connect() override;
133 
134  // avoid other overloads from base class to be hidden by derived version
135  using DataProvider::SetCurrentEvent;
136 
142  bool SetCurrentEvent(unsigned int event) override;
143 
144  // avoid other overloads from base class to be hidden by derived version
145  using DataProvider::GetObject;
146 
157  RetrievalResult GetObject(const std::string &name, ObjectCategory category, ObjectWrapper &wrapper,
158  std::string &actualName) override;
159 
181  std::vector<std::string> FreeObjects(const std::vector<std::string> &objs, Memory::Status memStatus) override;
182 
183 private:
184  unsigned int m_currEv;
185  unsigned int m_currReadEv;
186 
187  // GGS
188  std::shared_ptr<GGSTRootReader> m_reader;
189 
190  struct ObjDescriptor;
191  using ObjPrerequisite = std::pair<ObjDescriptor, std::function<void(DataReader *, DataReader *)>>;
192  struct ObjDescriptor {
193  std::string name;
194  std::vector<std::string> aliases;
195  ObjectCategory category;
198  // VF: This is fun! We allow for more than one prerequisite object to be loaded before
199  // we can actually get this object. After the each prerequisite is loaded, a callback
200  // can be called on both readers (object and prerequisite) to pass data around
201  std::vector<ObjPrerequisite> prerequisites;
202  };
203  std::vector<ObjDescriptor> m_objDescriptors;
204 
205  // helper function to allow recursive load of prerequisites for ObjectDescriptors
206  bool _LoadPrerequisites(ObjDescriptor &objDesc);
207 
208  // Names and aliases of the data objects
209  const std::pair<std::string, std::vector<std::string>> m_caloHitsNames{"caloHitsGGS", {"caloHitsMC", "caloHitsGeV"}};
210  const std::pair<std::string, std::vector<std::string>> m_fitHitsCollNames{"fitHitsCollGGS",
211  {"fitHitsCollMC", "fitHitsCollGeV"}};
212  const std::pair<std::string, std::vector<std::string>> m_fitParticleHitsCollNames{
213  "fitParticleHitsCollGGS", {"fitParticleHitsCollMC", "fitParticleHitsCollGeV"}};
214  const std::pair<std::string, std::vector<std::string>> m_stkStripHitsCollNames{"stkStripHitsCollGGS",
215  {"stkHitsCollMC", "stkHitsCollGeV"}};
216  const std::pair<std::string, std::vector<std::string>> m_stkWaferHitsCollNames{
217  "stkWaferHitsCollGGS", {"stkWaferHitsCollMC", "stkWaferHitsCollGeV"}};
218  const std::pair<std::string, std::vector<std::string>> m_stkWaferParticleHitsCollNames{
219  "stkWaferParticleHitsCollGGS", {"stkWaferParticleHitsCollMC", "stkWaferParticleHitsCollGeV"}};
220  const std::pair<std::string, std::vector<std::string>> m_scdStripHitsCollNames{"scdStripHitsCollGGS",
221  {"scdHitsCollMC", "scdHitsCollGeV"}};
222  const std::pair<std::string, std::vector<std::string>> m_scdWaferHitsCollNames{
223  "scdWaferHitsCollGGS", {"scdWaferHitsCollMC", "scdWaferHitsCollGeV"}};
224  const std::pair<std::string, std::vector<std::string>> m_scdWaferParticleHitsCollNames{
225  "scdWaferParticleHitsCollGGS", {"scdWaferParticleHitsCollMC", "scdWaferParticleHitsCollGeV"}};
226  const std::pair<std::string, std::vector<std::string>> m_psdHitsCollNames{"psdHitsCollGGS",
227  {"psdHitsCollMC", "psdHitsCollGeV"}};
228  const std::pair<std::string, std::vector<std::string>> m_psdParticleHitsCollNames{
229  "psdParticleHitsCollGGS", {"psdParticleHitsCollMC", "psdParticleHitsCollGeV"}};
230  const std::pair<std::string, std::vector<std::string>> m_mcTruthNames{"mcTruth", {}};
231 
232  std::unique_ptr<ParametricGeoReader> m_geoReader;
233  std::unique_ptr<GGSSimReader> m_evReader;
234 };
235 
236 } // namespace Herd
237 
238 #endif /* HERD_GGSDATAPROVIDER_H_ */
std::pair< ObjDescriptor, std::function< void(DataReader *, DataReader *)> > ObjPrerequisite
Definition: GGSDataProvider.h:191
CssGeoParams.h CssGeoParams class declaration.
Definition: CaloPDCalibrationAlgo.h:24
Data provider for Geant4 Monte Carlo data.
Definition: GGSDataProvider.h:117
DataReader * reader
Definition: GGSDataProvider.h:196
bool hasPrerequisites
Definition: GGSDataProvider.h:197
Definition: GGSDataProvider.h:192
std::vector< std::string > aliases
Definition: GGSDataProvider.h:194
std::string name
Definition: GGSDataProvider.h:193
ObjectCategory category
Definition: GGSDataProvider.h:195
std::unique_ptr< GGSSimReader > m_evReader
Definition: GGSDataProvider.h:233
unsigned int m_currReadEv
Definition: GGSDataProvider.h:185
std::vector< ObjPrerequisite > prerequisites
Definition: GGSDataProvider.h:201
std::unique_ptr< ParametricGeoReader > m_geoReader
Definition: GGSDataProvider.h:232
std::vector< ObjDescriptor > m_objDescriptors
Definition: GGSDataProvider.h:203
Base class for DataReaders.
Definition: DataReader.h:38
unsigned int m_currEv
Definition: GGSDataProvider.h:184
std::shared_ptr< GGSTRootReader > m_reader
Definition: GGSDataProvider.h:188