HerdSoftware  0.4.0
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
30 
31 // HS readers
46 
47 #ifndef GGSSMARTLOG_H_
48 #define HERD_GGSDATAPROVIDER_H_UNDEF_LOGGING
49 #endif
50 
51 // GGS headers
52 #include "montecarlo/dataobjs/GGSTHits.h"
53 #include "montecarlo/readers/GGSTRootReader.h"
54 
55 class GGSTHitsReader;
56 class GGSTMCTruthReader;
57 class GGSTHadrIntReader;
58 class GGSTPrimaryDisReader;
59 
60 #ifdef HERD_GGSDATAPROVIDER_H_UNDEF_LOGGING
61 // Remove the definitions of GGS output macros (would conflict with the same macros defined in EventAnalysis)
62 // We only do this if GGSSmartLog.h is being parsed in this TU, otherwise there would be nothing to undef
63 // (or we could even be undefining the EA macros)
64 #undef COUT
65 #undef CCOUT
66 #undef ENDL
67 #endif
68 
69 // EventAnalysis headers
70 #include "data/DataProvider.h"
71 
72 // ROOT headers
73 #include "TGeoManager.h"
74 
75 // Standard C++ hedaders
76 #include <functional>
77 #include <vector>
78 
79 namespace Herd {
80 // clang-format off
118 // clang-format on
119 
120 class GGSDataProvider : public EA::DataProvider {
121 public:
128  GGSDataProvider(const std::string &name, const std::string &source);
129 
135  bool Connect() override;
136 
137  // avoid other overloads from base class to be hidden by derived version
138  using DataProvider::SetCurrentEvent;
139 
145  bool SetCurrentEvent(unsigned int event) override;
146 
147  // avoid other overloads from base class to be hidden by derived version
148  using DataProvider::GetObject;
149 
160  EA::RetrievalResult GetObject(const std::string &name, EA::ObjectCategory category, EA::ObjectWrapper &wrapper,
161  std::string &actualName) override;
162 
181  std::vector<std::string> FreeObjects(const std::vector<std::string> &objs, EA::Memory::Status memStatus) override;
182 
183 private:
184  unsigned int m_currEv;
185  unsigned int m_currReadEv;
186  // Utility class that wraps a std::function<bool()> and adds automatic caching,
187  // for actually calling a function only once.
189  public:
191  template <typename T> CachedFunction(T func) : function{func} {}
192  template <typename T> CachedFunction &operator=(T func) {
193  function = func;
194  return *this;
195  }
196  bool operator()() {
197  if (called) {
198  return result;
199  }
200  called = true;
201  return (result = function());
202  }
203 
204  private:
205  std::function<bool()> function;
206  bool called = false;
207  bool result = true;
208  };
209  // generic struct to describe an object
210  struct ObjDescriptor {
211  std::string name;
212  std::vector<std::string> aliases;
213  EA::ObjectCategory category;
214  // these closures should capture "this" so they can see everything in the dataprovider
216  std::function<EA::RetrievalResult(EA::ObjectWrapper &)> get;
217  std::function<void()> post_load;
218  // a list of objects this object depends on
219  std::vector<ObjDescriptor> prerequisites;
220  };
221 
222  std::vector<ObjDescriptor> m_objDescriptors = {};
223 
224  bool LoadPrerequisites(ObjDescriptor &objDesc);
225 
226  // GGS
227  std::shared_ptr<GGSTRootReader> m_reader;
228 
229  // HS readers
230  std::unique_ptr<Readers::GGSMCGenReader> m_mcGenReader = nullptr;
231  std::unique_ptr<Readers::GGSTGeoReader> m_mcTGeoReader = nullptr;
232  std::unique_ptr<Readers::ParametricGeoCssReader> m_mcPGCssReader = nullptr;
233  std::unique_ptr<Readers::ParametricGeoCaloReader> m_mcPGCaloReader = nullptr;
234  std::unique_ptr<Readers::ParametricGeoFitReader> m_mcPGFitReader = nullptr;
235  std::unique_ptr<Readers::ParametricGeoPsdReader> m_mcPGPsdReader = nullptr;
236  std::unique_ptr<Readers::ParametricGeoScdReader> m_mcPGScdReader = nullptr;
237 
238  std::unique_ptr<Readers::GGSMCTruthReader> m_mcTruthReader = nullptr;
239  std::unique_ptr<Readers::GGSCaloHitsReader> m_caloHitsReader = nullptr;
240  std::unique_ptr<Readers::GGSCaloLpdHitsReader> m_caloLpdHitsReader = nullptr;
241  std::unique_ptr<Readers::GGSCaloSpdHitsReader> m_caloSpdHitsReader = nullptr;
242  std::unique_ptr<Readers::GGSScdHitsReader> m_scdHitsReader = nullptr;
243  std::unique_ptr<Readers::GGSFitHitsReader> m_fitHitsReader = nullptr;
244  std::unique_ptr<Readers::GGSPsdHitsReader> m_psdHitsReader = nullptr;
245 };
246 
247 } // namespace Herd
248 
249 #endif /* HERD_GGSDATAPROVIDER_H_ */
FitHitsColl.h
Herd::GGSDataProvider::ObjDescriptor::get
std::function< EA::RetrievalResult(EA::ObjectWrapper &)> get
Definition: GGSDataProvider.h:216
Herd::GGSDataProvider::ObjDescriptor::post_load
std::function< void()> post_load
Definition: GGSDataProvider.h:217
GGSCaloLpdHitsReader.h
Herd::GGSDataProvider::m_mcPGScdReader
std::unique_ptr< Readers::ParametricGeoScdReader > m_mcPGScdReader
Definition: GGSDataProvider.h:236
Herd::GGSDataProvider::m_mcPGFitReader
std::unique_ptr< Readers::ParametricGeoFitReader > m_mcPGFitReader
Definition: GGSDataProvider.h:234
MCGenerationInfo.h
Herd::GGSDataProvider::ObjDescriptor::name
std::string name
Definition: GGSDataProvider.h:211
Herd::GGSDataProvider::GetObject
EA::RetrievalResult GetObject(const std::string &name, EA::ObjectCategory category, EA::ObjectWrapper &wrapper, std::string &actualName) override
Provides an object.
Definition: GGSDataProvider.cpp:436
FitGeoParamsColl.h
Herd::GGSDataProvider::m_reader
std::shared_ptr< GGSTRootReader > m_reader
Definition: GGSDataProvider.h:227
Herd::GGSDataProvider
Data provider for Geant4 Monte Carlo data.
Definition: GGSDataProvider.h:120
Herd::GGSDataProvider::CachedFunction::called
bool called
Definition: GGSDataProvider.h:206
Herd::GGSDataProvider::m_scdHitsReader
std::unique_ptr< Readers::GGSScdHitsReader > m_scdHitsReader
Definition: GGSDataProvider.h:242
Herd::GGSDataProvider::m_mcTGeoReader
std::unique_ptr< Readers::GGSTGeoReader > m_mcTGeoReader
Definition: GGSDataProvider.h:231
GGSCaloSpdHitsReader.h
Herd::GGSDataProvider::CachedFunction::operator()
bool operator()()
Definition: GGSDataProvider.h:196
Herd::GGSDataProvider::m_mcPGPsdReader
std::unique_ptr< Readers::ParametricGeoPsdReader > m_mcPGPsdReader
Definition: GGSDataProvider.h:235
Herd::GGSDataProvider::m_psdHitsReader
std::unique_ptr< Readers::GGSPsdHitsReader > m_psdHitsReader
Definition: GGSDataProvider.h:244
Herd::GGSDataProvider::ObjDescriptor::aliases
std::vector< std::string > aliases
Definition: GGSDataProvider.h:212
CaloLpdHits.h
Herd::GGSDataProvider::CachedFunction::result
bool result
Definition: GGSDataProvider.h:207
Herd::GGSDataProvider::m_caloHitsReader
std::unique_ptr< Readers::GGSCaloHitsReader > m_caloHitsReader
Definition: GGSDataProvider.h:239
Herd::GGSDataProvider::m_fitHitsReader
std::unique_ptr< Readers::GGSFitHitsReader > m_fitHitsReader
Definition: GGSDataProvider.h:243
GGSPsdHitsReader.h
MCTruth.h
Herd::GGSDataProvider::CachedFunction::function
std::function< bool()> function
Definition: GGSDataProvider.h:205
GGSMCGenReader.h
ParametricGeoCaloReader.h
Herd::GGSDataProvider::m_mcPGCssReader
std::unique_ptr< Readers::ParametricGeoCssReader > m_mcPGCssReader
Definition: GGSDataProvider.h:232
Herd::GGSDataProvider::CachedFunction::CachedFunction
CachedFunction(T func)
Definition: GGSDataProvider.h:191
Herd
CssGeoParams.h CssGeoParams class declaration.
Definition: CaloPDCalibrationAlgo.h:22
PsdHitsColl.h
Herd::GGSDataProvider::m_mcTruthReader
std::unique_ptr< Readers::GGSMCTruthReader > m_mcTruthReader
Definition: GGSDataProvider.h:238
Herd::GGSDataProvider::m_currReadEv
unsigned int m_currReadEv
Definition: GGSDataProvider.h:185
FitParticleHitsColl.h
Herd::GGSDataProvider::FreeObjects
std::vector< std::string > FreeObjects(const std::vector< std::string > &objs, EA::Memory::Status memStatus) override
Free the memory of unneeded objects.
Definition: GGSDataProvider.cpp:479
ParametricGeoCssReader.h
Herd::GGSDataProvider::m_caloSpdHitsReader
std::unique_ptr< Readers::GGSCaloSpdHitsReader > m_caloSpdHitsReader
Definition: GGSDataProvider.h:241
CaloSpdHits.h
Herd::GGSDataProvider::GGSDataProvider
GGSDataProvider(const std::string &name, const std::string &source)
Constructor.
Definition: GGSDataProvider.cpp:36
Herd::GGSDataProvider::CachedFunction::CachedFunction
CachedFunction()
Definition: GGSDataProvider.h:190
Herd::GGSDataProvider::CachedFunction
Definition: GGSDataProvider.h:188
Herd::GGSDataProvider::SetCurrentEvent
bool SetCurrentEvent(unsigned int event) override
Sets the current event.
Definition: GGSDataProvider.cpp:420
GGSScdHitsReader.h
CaloGeoParams.h
ScdGeoParamsColl.h
GGSFitHitsReader.h
Herd::GGSDataProvider::m_mcGenReader
std::unique_ptr< Readers::GGSMCGenReader > m_mcGenReader
Definition: GGSDataProvider.h:230
Herd::GGSDataProvider::LoadPrerequisites
bool LoadPrerequisites(ObjDescriptor &objDesc)
Definition: GGSDataProvider.cpp:41
CaloHits.h
Herd::GGSDataProvider::ObjDescriptor
Definition: GGSDataProvider.h:210
GGSTGeoReader.h
Herd::GGSDataProvider::m_objDescriptors
std::vector< ObjDescriptor > m_objDescriptors
Definition: GGSDataProvider.h:222
CssGeoParams.h
ParametricGeoFitReader.h
ScdHitsColl.h
Herd::GGSDataProvider::m_currEv
unsigned int m_currEv
Definition: GGSDataProvider.h:184
PsdParticleHitsColl.h
Herd::GGSDataProvider::m_caloLpdHitsReader
std::unique_ptr< Readers::GGSCaloLpdHitsReader > m_caloLpdHitsReader
Definition: GGSDataProvider.h:240
ParametricGeoScdReader.h
ScdParticleHitsColl.h
Herd::GGSDataProvider::m_mcPGCaloReader
std::unique_ptr< Readers::ParametricGeoCaloReader > m_mcPGCaloReader
Definition: GGSDataProvider.h:233
Herd::GGSDataProvider::CachedFunction::operator=
CachedFunction & operator=(T func)
Definition: GGSDataProvider.h:192
GGSCaloHitsReader.h
ParametricGeoPsdReader.h
GGSMCTruthReader.h
PsdGeoParamsColl.h
Herd::GGSDataProvider::ObjDescriptor::prerequisites
std::vector< ObjDescriptor > prerequisites
Definition: GGSDataProvider.h:219
Herd::GGSDataProvider::Connect
bool Connect() override
Connects the given GGS files(s).
Definition: GGSDataProvider.cpp:65
Herd::GGSDataProvider::ObjDescriptor::category
EA::ObjectCategory category
Definition: GGSDataProvider.h:213
Herd::GGSDataProvider::ObjDescriptor::is_available
CachedFunction is_available
Definition: GGSDataProvider.h:215