HerdSoftware  0.4.0
GGSPsdHitsReader.h
Go to the documentation of this file.
1 /*
2  * GGSPsdHitsReader.h
3  *
4  * Created on: 31 May 2021
5  * Author: Valerio Formato
6  */
7 
10 #ifndef HERD_GGSPSDHITSREADER_H_
11 #define HERD_GGSPSDHITSREADER_H_
12 
13 #ifndef GGSSMARTLOG_H_
14 #define HERD_GGSPSDHITSREADER_H_UNDEF_LOGGING
15 #endif
16 
17 // GGS headers
18 #include "montecarlo/readers/GGSTHitsReader.h"
19 #include "montecarlo/readers/GGSTRootReader.h"
20 
21 #ifdef HERD_GGSPSDHITSREADER_H_UNDEF_LOGGING
22 // Remove the definitions of GGS output macros (would conflict with the same macros defined in EventAnalysis)
23 // We only do this if GGSSmartLog.h is being parsed in this TU, otherwise there would be nothing to undef
24 // (or we could even be undefining the EA macros)
25 #undef COUT
26 #undef CCOUT
27 #undef ENDL
28 #endif
29 
30 // EA headers
31 #include "core/ObjectWrapper.h"
32 #include "core/RetrievalResult.h"
33 #include "utils/Memory.h"
34 
35 // HerdSoftware headers
40 
41 // c++ headers
42 #include <functional>
43 #include <string>
44 #include <utility>
45 
46 namespace Herd::Readers {
47 // clang-format off
53 // clang-format on
55 public:
61  explicit GGSPsdHitsReader(std::shared_ptr<GGSTRootReader> ggsReader);
62 
69 
78  EA::RetrievalResult GetPsdHitsColl(EA::ObjectWrapper &wrapper);
79 
89 
96  EA::RetrievalResult GetPsdParticleHitsColl(EA::ObjectWrapper &wrapper);
97 
98  std::vector<std::string> FreeObjects(const std::vector<std::string> &objs, EA::Memory::Status memStatus);
99 
106  void SetPsdGeoParamsColl(EA::observer_ptr<PsdGeoParamsColl> psdGeoParamsColl);
107 
113  void SetFileName(const std::string &fileName) { m_fileName = fileName; };
114 
115 private:
116  std::shared_ptr<GGSTRootReader> m_ggsReader;
117  GGSTHitsReader *m_hitReader = nullptr;
118  long long int m_lastHitsReadEvent = std::numeric_limits<long long int>::max();
119  long long int m_lastPartHitsReadEvent = std::numeric_limits<long long int>::max();
120  std::pair<unsigned, unsigned> getLayerAndLayerID(RefFrame::Side side, int GGSPsdID);
121 
122  struct PsdIDVolInfo {
123  unsigned int ID;
124  unsigned int layer;
126  };
127 
128  bool m_readPsdParticleHits = false;
129  bool m_pre04 = false; // Constructor sets this to true if we are reading a MC file produced with HS < 0.4.0
130  std::vector<int> m_nElemPerLayer; // Total number of tiles in a single layer of a GGS detector
131  std::vector<int> m_nElemPerSide; // Total number of tiles per GGS detector on a single side
132 
133  EA::observer_ptr<PsdGeoParamsColl> m_psdGeoParamsColl = nullptr;
134  std::vector<int> m_topPsdDetIndexes;
135  std::vector<int> m_sidePsdDetIndexes;
136  bool SetupPsdReadout(bool getParticleHits);
137  bool m_setupToBeDone = true;
138  PsdIDVolInfo SidePsdHitIDLayerSideFromGGSID(int iGGSPsdID, int evenOddIndex);
139 
142 
143  std::string m_fileName;
144 };
145 } // namespace Herd::Readers
146 
147 #endif
Herd::Readers::GGSPsdHitsReader::m_nElemPerSide
std::vector< int > m_nElemPerSide
Definition: GGSPsdHitsReader.h:131
Herd::Readers::GGSPsdHitsReader::m_psdParticleHitsColl
PsdParticleHitsColl m_psdParticleHitsColl
Definition: GGSPsdHitsReader.h:141
Herd::Readers::GGSPsdHitsReader::PsdIDVolInfo
Definition: GGSPsdHitsReader.h:122
Herd::Readers::GGSPsdHitsReader::PsdIDVolInfo::ID
unsigned int ID
Definition: GGSPsdHitsReader.h:123
Herd::Readers::GGSPsdHitsReader::m_setupToBeDone
bool m_setupToBeDone
Definition: GGSPsdHitsReader.h:137
Herd::Readers::GGSPsdHitsReader::IsPsdHitsCollAvailable
bool IsPsdHitsCollAvailable()
Checks if PSD hits are available.
Definition: GGSPsdHitsReader.cpp:27
Herd::Readers::GGSPsdHitsReader::m_topPsdDetIndexes
std::vector< int > m_topPsdDetIndexes
Definition: GGSPsdHitsReader.h:134
Herd::Readers::GGSPsdHitsReader::GetPsdHitsColl
EA::RetrievalResult GetPsdHitsColl(EA::ObjectWrapper &wrapper)
Checks if PSD particle hits are available in the simulation file.
Definition: GGSPsdHitsReader.cpp:168
Herd::Readers::GGSPsdHitsReader::m_hitReader
GGSTHitsReader * m_hitReader
Definition: GGSPsdHitsReader.h:117
Herd::Readers::GGSPsdHitsReader::m_fileName
std::string m_fileName
Definition: GGSPsdHitsReader.h:143
Herd::Readers
Definition: GGSCaloHitsReader.h:43
Herd::Readers::GGSPsdHitsReader::PsdIDVolInfo::side
RefFrame::Side side
Definition: GGSPsdHitsReader.h:125
Herd::RefFrame::Side
Side
Aliases for the five sides.
Definition: RefFrame.h:111
PsdHitsColl.h
Herd::Readers::GGSPsdHitsReader::m_lastPartHitsReadEvent
long long int m_lastPartHitsReadEvent
Definition: GGSPsdHitsReader.h:119
Herd::Readers::GGSPsdHitsReader::m_readPsdParticleHits
bool m_readPsdParticleHits
Definition: GGSPsdHitsReader.h:128
Herd::Readers::GGSPsdHitsReader::FreeObjects
std::vector< std::string > FreeObjects(const std::vector< std::string > &objs, EA::Memory::Status memStatus)
Definition: GGSPsdHitsReader.cpp:390
Herd::Readers::GGSPsdHitsReader::SetFileName
void SetFileName(const std::string &fileName)
Set the name of the input file.
Definition: GGSPsdHitsReader.h:113
Herd::Readers::GGSPsdHitsReader
PsdHits reader class.
Definition: GGSPsdHitsReader.h:54
Herd::Readers::GGSPsdHitsReader::SetPsdGeoParamsColl
void SetPsdGeoParamsColl(EA::observer_ptr< PsdGeoParamsColl > psdGeoParamsColl)
Set the reference for the PSD geometric parameters.
Definition: GGSPsdHitsReader.cpp:18
Herd::Readers::GGSPsdHitsReader::m_pre04
bool m_pre04
Definition: GGSPsdHitsReader.h:129
Herd::Readers::GGSPsdHitsReader::GGSPsdHitsReader
GGSPsdHitsReader(std::shared_ptr< GGSTRootReader > ggsReader)
Constructor.
Definition: GGSPsdHitsReader.cpp:11
Herd::Readers::GGSPsdHitsReader::PsdIDVolInfo::layer
unsigned int layer
Definition: GGSPsdHitsReader.h:124
Herd::Readers::GGSPsdHitsReader::SidePsdHitIDLayerSideFromGGSID
PsdIDVolInfo SidePsdHitIDLayerSideFromGGSID(int iGGSPsdID, int evenOddIndex)
Definition: GGSPsdHitsReader.cpp:348
Herd::Readers::GGSPsdHitsReader::m_sidePsdDetIndexes
std::vector< int > m_sidePsdDetIndexes
Definition: GGSPsdHitsReader.h:135
Herd::Readers::GGSPsdHitsReader::m_lastHitsReadEvent
long long int m_lastHitsReadEvent
Definition: GGSPsdHitsReader.h:118
Herd::Readers::GGSPsdHitsReader::SetupPsdReadout
bool SetupPsdReadout(bool getParticleHits)
Definition: GGSPsdHitsReader.cpp:63
Herd::Readers::GGSPsdHitsReader::m_psdGeoParamsColl
EA::observer_ptr< PsdGeoParamsColl > m_psdGeoParamsColl
Definition: GGSPsdHitsReader.h:133
PsdParticleHitsColl.h
Herd::Readers::GGSPsdHitsReader::m_psdHitsColl
PsdHitsColl m_psdHitsColl
Definition: GGSPsdHitsReader.h:140
DefaultValues.h
Herd::Readers::GGSPsdHitsReader::m_nElemPerLayer
std::vector< int > m_nElemPerLayer
Definition: GGSPsdHitsReader.h:130
Herd::Readers::GGSPsdHitsReader::GetPsdParticleHitsColl
EA::RetrievalResult GetPsdParticleHitsColl(EA::ObjectWrapper &wrapper)
Get the PSD Particle Hits.
Definition: GGSPsdHitsReader.cpp:288
Herd::Readers::GGSPsdHitsReader::getLayerAndLayerID
std::pair< unsigned, unsigned > getLayerAndLayerID(RefFrame::Side side, int GGSPsdID)
PsdGeoParamsColl.h
Herd::SidesArray< PsdHits >
Herd::Readers::GGSPsdHitsReader::IsPsdParticleHitsCollAvailable
bool IsPsdParticleHitsCollAvailable()
Checks if PSD particle hits are available in the simulation file.
Definition: GGSPsdHitsReader.cpp:37
Herd::Readers::GGSPsdHitsReader::m_ggsReader
std::shared_ptr< GGSTRootReader > m_ggsReader
Definition: GGSPsdHitsReader.h:113