NAIA
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
Rich.h
Go to the documentation of this file.
1 
8 #ifndef NAIA_RICH_H
9 #define NAIA_RICH_H
10 
11 // gbatch headers
12 #ifdef ENABLE_PRODUCTION_CODE
13 #include "root.h"
14 #endif
15 
17 #include "Containers/Tof.h"
18 #include "Containers/Utils.h"
19 
20 #include <array>
21 #include <map>
22 #include <vector>
23 
24 namespace NAIA {
25 
29 template <class T> using RichBetaVariable = std::map<Rich::BetaType, T>;
30 
38 class RichBaseData : public TObject {
39 public:
46 
53 
54 #ifdef ENABLE_PRODUCTION_CODE
55  void Fill(RichRingR *ringPtr, RichRingBR *ringBPtr);
56 
57  // void SetMC(bool isMC) { _isMC = isMC; }
58 #endif
59 
64  void Clear();
65 
70  void Dump() const;
71 
79  double BetaConsistency() const;
80 
89  double BetaConsistencyTof(const TofBaseData &tofData) const;
90 
91 private:
92  // ugly empty-object optimization trick
93  std::vector<std::pair<Rich::RichMeasType, RichBetaVariable<float>>> m_beta;
94 
95  ClassDef(RichBaseData, 1)
96 };
97 
106 class RichBase : public OnDemandContainer<RichBase>, public RichBaseData {
107 public:
108  static const std::string BranchName;
109 
111 };
112 
118 class RichPlusData : public TObject {
119 public:
130  short NHitsTot = 0;
131  short NHitsUsed = 0;
132  short NPEExpUncorr = 0;
133  short NPEMeasUncorr = 0;
134  short RingPMTs = 0;
135  short NBadClusters = 0;
136  short NSecondaryHits = 0;
137  float NPETotUncorr = 0.0f;
138  float NPEHyp1UncorrTot = 0.0f;
139  double Probability = 0.0;
140  double ChargeConsistency = 0.0;
141  // clang-format off
142  std::array<short, 2> NHitsHyp1Tot{0, 0};
143  std::array<short, 2> NHitsHyp1OutOfRing{0, 0};
145  // clang-format on
146  };
147 
152  bool IsAvailable() const { return m_data.size() > 0; }
153 
159  const RichAdditionalData &GetData() const { return m_data.at(0); }
160 #ifdef ENABLE_PRODUCTION_CODE
161  void Fill(AMSEventR *evPtr, RichRingR *ringPtr, TrTrackR *trackPtr);
162  void FillHyp1Data(RichAdditionalData &data, AMSEventR *evPtr, RichRingR *ringPtr, TrTrackR *trackPtr);
163 
164  void SetMC(bool isMC) { m_isMC = isMC; }
165 #endif
166 
171  void Clear();
172 
177  void Dump() const;
178 
179 private:
180  bool m_isMC = false;
181  std::vector<RichAdditionalData> m_data;
182 
183  ClassDef(RichPlusData, 1)
184 };
185 
194 class RichPlus : public OnDemandContainer<RichPlus>, public RichPlusData {
195 public:
196  static const std::string BranchName;
197 
199 };
200 
201 } // namespace NAIA
202 
203 #endif
void Dump() const
Dump on screen container content.
Definition: Rich.cpp:45
Container class for base Rich info.
Definition: Rich.h:38
std::vector< RichAdditionalData > m_data
Definition: Rich.h:181
OnDemandContainer container class description.
std::vector< std::pair< Rich::RichMeasType, RichBetaVariable< float > > > m_beta
Definition: Rich.h:93
Rich::RichMeasType GetBetaType() const
Get the Rich measurement type (NaF or Agl)
Definition: Rich.cpp:11
std::array< short, 2 > NHitsHyp1Tot
Number of hits associated with hypothesys (direct, reflected)
Definition: Rich.h:142
double BetaConsistencyTof(const TofBaseData &tofData) const
Get the estimator for beta consistency between Rich and Tof.
Definition: Rich.cpp:35
void Clear()
Clear container content.
Definition: Rich.cpp:44
Container class for base Tof info.
Definition: Tof.h:46
Container class for additional Rich info.
Definition: Rich.h:118
const RichAdditionalData & GetData() const
Get the Rich additional data.
Definition: Rich.h:159
static const std::string BranchName
Definition: Rich.h:108
double ChargeConsistency
PMT charge consistency.
Definition: Rich.h:140
float NPEHyp1UncorrOutOfRing
Number of photoelectrons associated with hypothesys outside of the ring.
Definition: Rich.h:144
RichMeasType
Definition: Utils.h:403
Handy struct for collecting Rich variables.
Definition: Rich.h:129
short NPEExpUncorr
Expected number of photoelectrons (no correction)
Definition: Rich.h:132
short NSecondaryHits
Number of secondary hits.
Definition: Rich.h:136
Mixin class to add &quot;read-on-demand&quot; behavior to an existing container class.
float NPETotUncorr
Total number of photoelectrons (no correction)
Definition: Rich.h:137
double BetaConsistency() const
Get the estimator for beta consistency between CIEMAT and LIP reconstructions.
Definition: Rich.cpp:27
bool IsAvailable() const
Check if Rich data is actually available for this event. Use before accessing data ...
Definition: Rich.h:152
short RingPMTs
Total number of fired PMTs.
Definition: Rich.h:134
Accessor class for base Rich info.
Definition: Rich.h:106
short NBadClusters
Number of bad Rich clusters.
Definition: Rich.h:135
float NPEHyp1UncorrTot
Number of photoelectrons associated with hypothesys.
Definition: Rich.h:138
short NHitsUsed
Total number of Rich hits used for ring reconstruction.
Definition: Rich.h:131
std::array< short, 2 > NHitsHyp1OutOfRing
Number of hits associated with hypothesys outside of the ring (direct, reflected) ...
Definition: Rich.h:143
static const std::string BranchName
Definition: Rich.h:196
short NPEMeasUncorr
Measured number of photoelectrons (no correction)
Definition: Rich.h:133
Tof container class description.
RichBetaVariable< float > GetBeta() const
Get the Beta measurements.
Definition: Rich.cpp:19
void Dump() const
Dump on screen container content.
Definition: Rich.cpp:9
double Probability
Rich reconstruction probability.
Definition: Rich.h:139
short NHitsTot
Total number of Rich hits.
Definition: Rich.h:130
std::map< Rich::BetaType, T > RichBetaVariable
Definition: Rich.h:29
Accessor class for additional Rich info.
Definition: Rich.h:194
void Clear()
Clear container content.
Definition: Rich.cpp:8