NAIA  1.1.1
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:
45  [[nodiscard]] bool IsNaF() const;
46 
51  [[nodiscard]] bool HasBetaLIP() const;
52 
58  [[nodiscard]] RichBetaVariable<float> GetBeta() const;
59 
65  [[nodiscard]] RichBetaVariable<float> GetBetaError() const;
66 
72  [[nodiscard]] std::array<float, 2> GetTrackEmissionPoint() const;
73 
74 #ifdef ENABLE_PRODUCTION_CODE
75  bool Fill(RichRingR *ringPtr, RichRingBR *ringBPtr);
76 
77  // void SetMC(bool isMC) { _isMC = isMC; }
78 #endif
79 
84  void Clear();
85 
90  void Dump() const;
91 
99  [[nodiscard]] double BetaConsistency() const;
100 
109  [[nodiscard]] double BetaConsistencyTof(const TofBaseData &tofData) const;
110 
116  [[nodiscard]] int GetTileIndex() const; //< Radiator tile generating the ring
117 
130  [[nodiscard]] bool RingGeomTest(RingGeom geom = RingGeom::Borders) const;
131 
135  // clang-format off
136  struct RichBaseDataR {
137  RichBetaVariable<float> beta; //< Measured beta of type defined by Rich::BetaType, CIEMAT: Refit and corrected, SIMPLE: Reconstructed velocity using only hits (no charge), REFIT: Beta estimate taking into account the number of photoelectrons for each hit, LIP: Beta with LIP standalone algo
138  RichBetaVariable<float> ebeta; //< Error on Measured beta of type defined by Rich::BetaType
139  bool isNaF = false; //< Ring on NaF radiator (true) or AGL (false)
140  bool isGood = false; //< IsClean (i.e. (Status&2)!=0) && getExpectedPhotoelectrons(false)>1e-6
141  std::array<float, 2> Pos{0.0f, 0.0f}; //< (X,Y) position on the radiator where the ring is generated
142  float Theta{0.0f}; //< Track theta angle on the radiator
143  float Phi{0.0f}; //< Track phi angle on the radiator
144  bool hasBetaLIP = false; //< RICH LIP standalone Reconstruction is available
145  };
146  // clang-format on
147 
148 private:
149  // ugly empty-object optimization trick
150  std::vector<RichBaseDataR> m_beta;
151 
152  ClassDef(RichBaseData, 1)
153 };
154 
163 class RichBase : public OnDemandContainer<RichBase>, public RichBaseData {
164 public:
165  static const std::string BranchName;
166 
168 };
169 
175 class RichPlusData : public TObject {
176 public:
187  // clang-format off
188  short NHitsTot = 0;
189  float NPETotUncorr = 0.0f;
190 
191  short NHitsUsed = 0;
192  float NPEExpUncorr = 0;
193  float NPEExpCorr = 0;
194  float NPEMeasUncorr = 0;
195  float NPEMeasCorr = 0;
196  double Probability = 0.0;
197  short RingPMTs = 0;
198  short RingPMTs2 = 0;
199  short RichPMTs = 0;
200  double ChargeConsistency = 0.0f;
201  float RichCharge = 0.0f;
202  float RichCharge2 = 0.0f;
203 
204  float LIP_ringProb = 0.0f;
205 
206  short NBadClusters = 0;
207  short NSecondaryHits = 0;
208  float NPEHyp1UncorrTot = 0.0f;
209 
210  std::array<short, 2> NHitsHyp1Tot{0, 0};
211  std::array<short, 2> NHitsHyp1OutOfRing{0, 0};
213  // clang-format on
214  };
215 
220  [[nodiscard]] bool IsAvailable() const { return !m_data.empty(); }
221 
227  [[nodiscard]] const RichAdditionalData &GetData() const { return m_data.at(0); }
228 #ifdef ENABLE_PRODUCTION_CODE
229  bool Fill(AMSEventR *evPtr, RichRingR *ringPtr, RichRingBR *ringPtrB, TrTrackR *trackPtr);
230  void FillHyp1Data(RichAdditionalData &data, AMSEventR *evPtr, RichRingR *ringPtr, TrTrackR *trackPtr);
231 
232  void SetMC(bool isMC) { m_isMC = isMC; }
233 #endif
234 
239  void Clear();
240 
245  void Dump() const;
246 
247 private:
248  bool m_isMC = false;
249  std::vector<RichAdditionalData> m_data;
250 
251  ClassDef(RichPlusData, 1)
252 };
253 
262 class RichPlus : public OnDemandContainer<RichPlus>, public RichPlusData {
263 public:
264  static const std::string BranchName;
265 
267 };
268 
269 } // namespace NAIA
270 
271 #endif
NAIA::RichBaseData::RichBaseDataR::Phi
float Phi
Definition: Rich.h:143
NAIA::RichBaseData::RichBaseDataR::ebeta
RichBetaVariable< float > ebeta
Definition: Rich.h:138
NAIA::RichPlus::RichPlus
RichPlus()
Definition: Rich.h:266
NAIA::RichPlusData::GetData
const RichAdditionalData & GetData() const
Get the Rich additional data.
Definition: Rich.h:227
NAIA::RichBaseData::GetBetaError
RichBetaVariable< float > GetBetaError() const
Get the Beta error.
Definition: Rich.cpp:35
NAIA::RichPlusData::Direct
@ Direct
Definition: Rich.h:177
NAIA::RichPlusData::RichAdditionalData::NHitsTot
short NHitsTot
Total number of Rich hits NRichHit()
Definition: Rich.h:188
NAIA::RichBase
Accessor class for base Rich info.
Definition: Rich.h:163
NAIA::RichBaseData::RingGeom
RingGeom
Definition: Rich.h:40
NAIA::RichPlusData::RichAdditionalData::NPEMeasCorr
float NPEMeasCorr
Measured number of photoelectrons (with correction) ringPtr->getPhotoElectrons();.
Definition: Rich.h:195
NAIA::RichBetaVariable
std::map< Rich::BetaType, T > RichBetaVariable
Definition: Rich.h:29
NAIA::RichPlusData::RichAdditionalData::NPEHyp1UncorrTot
float NPEHyp1UncorrTot
Number of photoelectrons associated with hypothesys.
Definition: Rich.h:208
NAIA::RichBaseData::AglTilesEdge
@ AglTilesEdge
Definition: Rich.h:40
NAIA::RichBaseData::BadAglRegions
@ BadAglRegions
Definition: Rich.h:40
NAIA::RichBaseData::BadAglTiles
@ BadAglTiles
Definition: Rich.h:40
NAIA::RichBaseData::Clear
void Clear()
Clear container content.
Definition: Rich.cpp:8
NAIA::RichBaseData::RichBaseDataR::hasBetaLIP
bool hasBetaLIP
Definition: Rich.h:144
NAIA::RichBaseData::Dump
void Dump() const
Dump on screen container content.
Definition: Rich.cpp:9
NAIA::RichPlusData::RichAdditionalData::RichPMTs
short RichPMTs
Total number of RICH fired PMTs excluded thoese traversed by a track.
Definition: Rich.h:199
NAIA::RichBaseData::RichBaseDataR::isGood
bool isGood
Definition: Rich.h:140
NAIA::RichPlusData::RichAdditionalData::LIP_ringProb
float LIP_ringProb
LIP Standalone: Ring Kolmogorov Prob.
Definition: Rich.h:204
NAIA::RichPlusData::Dump
void Dump() const
Dump on screen container content.
Definition: Rich.cpp:147
NAIA
Definition: Event.h:13
NAIA::RichPlusData::RichAdditionalData::NBadClusters
short NBadClusters
Number of bad Rich clusters.
Definition: Rich.h:206
NAIA::RichPlusData::RichAdditionalData::NPEMeasUncorr
float NPEMeasUncorr
Measured number of photoelectrons (no correction)ringPtr->getPhotoElectrons(false);.
Definition: Rich.h:194
NAIA::OnDemandContainer
Mixin class to add "read-on-demand" behavior to an existing container class.
Definition: OnDemandContainer.h:44
NAIA::RichPlus
Accessor class for additional Rich info.
Definition: Rich.h:262
Utils.h
NAIA::RichPlusData::RichAdditionalData::NPEExpCorr
float NPEExpCorr
Expected number of photoelectrons (with correction) ringPtr->getExpectedPhotoElectrons();.
Definition: Rich.h:193
NAIA::RichPlusData::RichAdditionalData::NPETotUncorr
float NPETotUncorr
Total number of photoelectrons (no correction) RichHitR::getCollectedPhotoElectrons()
Definition: Rich.h:189
NAIA::RichPlusData::RichAdditionalData::ChargeConsistency
double ChargeConsistency
PMT charge consistency.
Definition: Rich.h:200
NAIA::RichPlusData::RichAdditionalData::NSecondaryHits
short NSecondaryHits
Number of secondary hits.
Definition: Rich.h:207
NAIA::RichBaseData::RichBaseDataR::isNaF
bool isNaF
Definition: Rich.h:139
NAIA::RichPlusData::RichAdditionalData::RichCharge2
float RichCharge2
Rich Charge ring->NpExp>0?sqrt(ring->NpCol/ring->NpExp):-1;.
Definition: Rich.h:202
NAIA::RichPlusData::m_data
std::vector< RichAdditionalData > m_data
Definition: Rich.h:249
NAIA::RichPlusData::Reflected
@ Reflected
Definition: Rich.h:177
NAIA::RichPlusData::RichAdditionalData::Probability
double Probability
Rich reconstruction Kolmogorov probability.
Definition: Rich.h:196
NAIA::RichPlusData::RichAdditionalData::NHitsHyp1Tot
std::array< short, 2 > NHitsHyp1Tot
Number of hits associated with hypothesys (direct, reflected)
Definition: Rich.h:210
NAIA::RichBaseData
Container class for base Rich info.
Definition: Rich.h:38
NAIA::RichPlusData
Container class for additional Rich info.
Definition: Rich.h:175
NAIA::RichBaseData::BetaConsistency
double BetaConsistency() const
Get the estimator for beta consistency between CIEMAT and LIP reconstructions.
Definition: Rich.cpp:51
NAIA::RichBase::BranchName
static const std::string BranchName
Definition: Rich.h:165
NAIA::RichBaseData::IsNaF
bool IsNaF() const
Returns true if the radiator is NaF; false if it is AGL.
Definition: Rich.cpp:19
NAIA::RichPlusData::RichAdditionalData::NPEExpUncorr
float NPEExpUncorr
Expected number of photoelectrons (no correction) ringPtr->getExpectedPhotoElectrons(false);.
Definition: Rich.h:192
NAIA::RichBaseData::RingGeomTest
bool RingGeomTest(RingGeom geom=RingGeom::Borders) const
Checks if the track impact point on the radiator falls on the on the edge of the radiator (absolute o...
Definition: Rich.cpp:86
NAIA::RichPlusData::Clear
void Clear()
Clear container content.
Definition: Rich.cpp:146
NAIA::RichPlusData::RichAdditionalData::RichCharge
float RichCharge
Rich Charge ringPtr->getCharge2Estimate();.
Definition: Rich.h:201
NAIA::TofBaseData
Container class for base Tof info.
Definition: Tof.h:46
NAIA::RichPlusData::RichAdditionalData::NHitsUsed
short NHitsUsed
Total number of Rich hits used for ring reconstruction RichRingR::getUsedHits()
Definition: Rich.h:191
NAIA::RichBaseData::RichBaseDataR
A struct to hold variables representing a single beta measurement from the RICH.
Definition: Rich.h:136
NAIA::RichPlusData::IsAvailable
bool IsAvailable() const
Check if Rich data is actually available for this event. Use before accessing data
Definition: Rich.h:220
NAIA::RichPlusData::RichAdditionalData::NPEHyp1UncorrOutOfRing
float NPEHyp1UncorrOutOfRing
Number of photoelectrons associated with hypothesys outside of the ring.
Definition: Rich.h:212
Tof.h
Tof container class description.
NAIA::RichPlusData::RichAdditionalData::RingPMTs2
short RingPMTs2
Total number of fired in the ring PMTs ringPtr->getPMTs();.
Definition: Rich.h:198
NAIA::RichBaseData::GetTrackEmissionPoint
std::array< float, 2 > GetTrackEmissionPoint() const
Get the Track emmission point.
Definition: Rich.cpp:43
NAIA::RichPlusData::RichAdditionalData::RingPMTs
short RingPMTs
Total number of fired in the ring PMTs ringPtr->NpColPMT.size();.
Definition: Rich.h:197
NAIA::RichBaseData::HasBetaLIP
bool HasBetaLIP() const
Returns true if Standalone LIP beta measurement is available.
Definition: Rich.cpp:11
NAIA::RichBaseData::GetBeta
RichBetaVariable< float > GetBeta() const
Get the Beta measurements.
Definition: Rich.cpp:27
NAIA::RichBaseData::BetaConsistencyTof
double BetaConsistencyTof(const TofBaseData &tofData) const
Get the estimator for beta consistency between Rich and Tof.
Definition: Rich.cpp:59
NAIA::RichBaseData::GetTileIndex
int GetTileIndex() const
Get the ID of the radiator tile where the ring is generated.
Definition: Rich.cpp:68
NAIA::RichBase::RichBase
RichBase()
Definition: Rich.h:167
NAIA::RichPlusData::m_isMC
bool m_isMC
Definition: Rich.h:248
NAIA::RichPlusData::HitType
HitType
Definition: Rich.h:177
NAIA::RichPlusData::RichAdditionalData::NHitsHyp1OutOfRing
std::array< short, 2 > NHitsHyp1OutOfRing
Number of hits associated with hypothesys outside of the ring (direct, reflected)
Definition: Rich.h:211
NAIA::RichBaseData::RichBaseDataR::Theta
float Theta
Definition: Rich.h:142
NAIA::RichBaseData::Borders
@ Borders
Definition: Rich.h:40
OnDemandContainer.h
OnDemandContainer container class description.
NAIA::RichPlusData::RichAdditionalData
Handy struct for collecting Rich variables.
Definition: Rich.h:186
NAIA::RichPlus::BranchName
static const std::string BranchName
Definition: Rich.h:264
NAIA::RichBaseData::m_beta
std::vector< RichBaseDataR > m_beta
Definition: Rich.h:150
NAIA::RichBaseData::RichBaseDataR::beta
RichBetaVariable< float > beta
Definition: Rich.h:137
NAIA::RichBaseData::RichBaseDataR::Pos
std::array< float, 2 > Pos
Definition: Rich.h:141