NAIA
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
Utils.h
Go to the documentation of this file.
1 #ifndef NAIA_UTILS_H
2 #define NAIA_UTILS_H
3 
4 #include <algorithm>
5 #include <array>
6 #include <limits>
7 #include <map>
8 
10 
11 // templated helper functions
12 #include "Containers/Utils.hpp"
13 
14 // bitmask-able enums declaration
15 namespace NAIA {
16 enum class Category;
17 }
19 
20 namespace NAIA {
21 
30 inline std::vector<std::string> TokenizeString(const std::string &input, const char separator) {
31  std::vector<std::string> result;
32 
33  for (auto iter = cbegin(input);; /*nothing here*/) {
34  auto sepIter = std::find(iter, end(input), separator);
35 
36  result.emplace_back(iter, sepIter);
37 
38  if (sepIter == cend(input))
39  break;
40  iter = std::next(sepIter);
41  }
42 
43  return result;
44 }
45 
54 template <class T> using LayerVariable = std::map<unsigned int, T>;
55 
60 enum class Category {
61  None = 0,
62  HasTof = 1 << 0,
63  HasTrack = 1 << 1,
64  HasEcal = 1 << 2,
65  HasTrd = 1 << 3,
66  HasRich = 1 << 4,
67  HasTofStandalone = 1 << 5,
68  HasTrdStandalone = 1 << 6,
69  Charge1_Trk = 1 << 7,
70  Charge2_Trk = 1 << 8,
71  ChargeGT2_Trk = 1 << 9,
72  Charge1_Tof = 1 << 10,
73  Charge2_Tof = 1 << 11,
74  ChargeGT2_Tof = 1 << 12,
75 };
76 
79 namespace TrTrack {
80 // helper categories to handle charge reconstructions
82 constexpr unsigned int numChargeRecos = 3;
85  STD,
86  HL,
87  YJ,
88 };
90 constexpr std::array<ChargeRecoType, numChargeRecos> recoTypes{ChargeRecoType::STD, ChargeRecoType::HL,
92 
93 // helper category for track z positions
95 constexpr unsigned int numFitPositionHeights = 16;
98  Layer1 = 0,
114 };
115 
117 constexpr std::array<FitPositionHeight, numFitPositionHeights> fitPositionHeights = {
124 
129 constexpr std::array<float, numFitPositionHeights> fitPositionHeightZ = {
130  158.920, 53.060, 29.228, 25.212, 1.698, -2.318, -25.212, -29.228,
131  -135.882, 64.425, 61.325, -62.875, -64.425, 0, -142.732, -159.382};
132 
134 static const std::array<std::string, numFitPositionHeights> fitPositionNames{
135  "Layer1", "Layer2", "Layer3", "Layer4", "Layer5", "Layer6", "Layer7", "Layer8",
136  "Layer9", "TofLayer0", "TofLayer1", "TofLayer2", "TofLayer3", "EcalCOG", "EcalTop", "EcalBottom"};
137 
139 constexpr unsigned int numTrLayers = 9;
140 
142 constexpr std::array<FitPositionHeight, numTrLayers> layerPositionHeights = {
146 
147 // helper categories to handle track spans
149 constexpr unsigned int numSpans = 7;
150 enum Span {
151  NoSpan = -1,
159 };
161 constexpr std::array<Span, numSpans> spanTypes{Span::InnerOnly, Span::InnerL1, Span::InnerL9,
165 static const std::array<std::string, numSpans> spanNames{"InnerOnly", "InnerL1", "InnerL9", "FullSpan",
166  "UpperHalfInner", "LowerHalfInner", "InnerNoMS"};
167 
168 // helper categories to handle track fits
170 constexpr unsigned int numFits = 3;
172 enum Fit {
173  NoFit = -1,
177 };
179 constexpr std::array<Fit, numFits> fitTypes{Fit::Choutko, Fit::Kalman, Fit::KalmanElectron};
181 static const std::array<std::string, numFits> fitNames{"Choutko", "Kalman", "KalmanElectron"};
182 
183 // helper categories to handle track geometries
185 constexpr unsigned int numTrGeos = 4;
188 constexpr std::array<TrGeometry, numTrGeos> trGeoTypes{TrGeometry::Default, TrGeometry::InnerOnly, TrGeometry::InnerL1,
191 static const std::array<std::string, numTrGeos> trGeoNames{"Default", "InnerOnly", "InnerL1", "FullSpan"};
192 
193 // helper categories to handle track sides
195 constexpr unsigned int numSides = 2;
197 enum Side { X, Y };
199 constexpr std::array<Side, numSides> sides{Side::X, Side::Y};
201 static const std::array<std::string, numSides> sideNames{"X", "Y"};
202 
203 // helper categories to handle track sides
205 constexpr unsigned int numTrackDistances = 7;
209 constexpr std::array<DistanceFromTrack, numTrackDistances> trackDistances{
213 static const std::array<std::string, numTrackDistances> trackDistanceNames{"OnTrack", "Onemm", "Onecm", "Twocm",
214  "Fivecm", "Tencm", "AllLayer"};
215 
216 } // namespace TrTrack
217 
218 namespace TrdK {
219 
220 // helper categories to handle charge reconstructions
222 constexpr unsigned int numChargeTypes = 3;
228 };
230 constexpr std::array<ChargeType, numChargeTypes> recoTypes{ChargeType::Total, ChargeType::Upper, ChargeType::Lower};
232 static const std::array<std::string, numChargeTypes> recoNames{"Total", "Upper", "Lower"};
233 
234 // helper categories to handle likelihoods
236 constexpr unsigned int numLikelihoodTypes = 3;
240 constexpr std::array<LikelihoodType, numLikelihoodTypes> likelihoodTypes{
243 static const std::array<std::string, numLikelihoodTypes> likelihoodNames{"Electron", "Proton", "Helium"};
244 
245 // helper categories to handle likelihood ratios
247 constexpr unsigned int numLikelihoodRTypes = 3;
250  ep,
251  eHe,
252  pHe,
253 };
255 constexpr std::array<LikelihoodRType, numLikelihoodRTypes> likelihoodRTypes{LikelihoodRType::ep, LikelihoodRType::eHe,
258 static const std::array<std::string, numLikelihoodRTypes> likelihoodRNames{"ep", "eHe", "pHe"};
259 
260 // helper categories to handle ontrack/offtrack variables
262 constexpr unsigned int numQualTypes = 2;
264 enum QualType {
267 };
269 constexpr std::array<QualType, numQualTypes> qualTypes{QualType::OnTrack, QualType::OffTrack};
271 static const std::array<std::string, numQualTypes> qualNames{"OnTrack", "OffTrack"};
272 
273 } // namespace TrdK
274 
275 namespace Ecal {
276 // helper categories to handle energy reconstructions
278 constexpr unsigned int numEnergyRecos = 5;
280 // clang-format off
287 };
288 // clang-format on
289 
291 constexpr std::array<EnergyRecoType, numEnergyRecos> recoTypes{
295 static const std::array<std::string, numEnergyRecos> recoNames{"EnergyD", "EnergyE", "EnergyCorrEneE_E",
296  "EnergyCorrEne2017", "EcalKEle"};
297 
298 // helper categories to handle WeiWei's likelihoods
300 constexpr unsigned int numLikelihoodTypes = 2;
304 constexpr std::array<LikelihoodType, numLikelihoodTypes> likelihoodTypeNames{LikelihoodType::Integral,
306 
307 // helper categories to handle BDT types
309 constexpr unsigned int numBDTTypes = 4;
313 constexpr std::array<BDTType, numBDTTypes> BDTTypes{BDTType::v5std, BDTType::v5ada, BDTType::v7std, BDTType::v7ada};
315 static const std::array<std::string, numBDTTypes> BDTNames{"v5std", "v5ada", "v7std", "v7ada"};
316 
317 } // namespace Ecal
318 
319 namespace Tof {
320 
321 const float tofRefZ = 160.;
322 
323 // helper categories to handle charge reconstructions
325 constexpr unsigned int numChargeTypes = 3;
331 };
333 constexpr std::array<ChargeType, numChargeTypes> recoTypes{ChargeType::Total, ChargeType::Upper, ChargeType::Lower};
335 static const std::array<std::string, numChargeTypes> recoNames{"Total", "Upper", "Lower"};
336 
337 // helper categories to handle beta reconstructions
339 constexpr unsigned int numBetaTypes = 2;
341 enum BetaType {
344 };
346 constexpr std::array<BetaType, numBetaTypes> betaTypes{BetaType::BetaH, BetaType::Evgeni};
348 static const std::array<std::string, numBetaTypes> betaNames{"BetaH", "Evgeni"};
349 
350 // helper categories to handle beta clusters
352 constexpr unsigned int numBetaClusterTypes = 2;
356 constexpr std::array<BetaClusterType, numBetaClusterTypes> betaClusterTypes{BetaClusterType::OnTime,
359 static const std::array<std::string, numBetaClusterTypes> betaClusterTypeNames{"OnTime", "OffTime"};
360 
361 } // namespace Tof
362 
363 namespace MCTruth {
365 constexpr unsigned int numMCHeights = 13;
369 constexpr std::array<MCHeight, numMCHeights> MCHeights{MCHeight::GenerationPoint,
370  MCHeight::L1,
372  MCHeight::L2,
373  MCHeight::L3,
374  MCHeight::L4,
375  MCHeight::L5,
376  MCHeight::L6,
377  MCHeight::L7,
378  MCHeight::L8,
381  MCHeight::L9};
382 
384 constexpr std::array<float, numMCHeights> MCHeightsZ{std::numeric_limits<float>::max(),
385  158.920,
386  64.425,
387  53.060,
388  29.228,
389  25.212,
390  1.698,
391  -2.318,
392  -25.212,
393  -29.228,
394  -62.875,
395  -71.87,
396  -135.882};
397 
398 } // namespace MCTruth
399 
400 namespace Rich {
401 // helper categories to handle beta reconstructions
403 enum RichMeasType { NONE = 0, NaF, Agl };
404 
406 constexpr unsigned int numBetaTypes = 2;
408 enum BetaType { CIEMAT, LIP };
410 constexpr std::array<BetaType, numBetaTypes> betaTypes{BetaType::CIEMAT, BetaType::LIP};
412 static const std::array<std::string, numBetaTypes> betaNames{"CIEMAT", "LIP"};
413 } // namespace Rich
414 
415 } // namespace NAIA
416 
417 #endif
static const std::array< std::string, numQualTypes > qualNames
Definition: Utils.h:271
constexpr std::array< ChargeRecoType, numChargeRecos > recoTypes
Definition: Utils.h:90
constexpr unsigned int numMCHeights
Definition: Utils.h:365
Tof standalone data is available for this event.
LikelihoodRType
Definition: Utils.h:249
This event is classified as charge 2 according to tof (1.5 &lt; Q &lt; 2.5)
static const std::array< std::string, numChargeTypes > recoNames
Definition: Utils.h:232
TrTrack data is available for this event.
Hu Liu reconstruction.
Definition: Utils.h:86
Track constructed with the upper part of the inner tracker (layers 2 to 6)
Definition: Utils.h:156
constexpr unsigned int numTrackDistances
Definition: Utils.h:205
Rich data is available for this event.
static const std::array< std::string, numTrackDistances > trackDistanceNames
Definition: Utils.h:213
static const std::array< std::string, numLikelihoodTypes > likelihoodNames
Definition: Utils.h:243
FitPositionHeight
Definition: Utils.h:97
constexpr std::array< BetaType, numBetaTypes > betaTypes
Definition: Utils.h:346
constexpr unsigned int numTrGeos
Definition: Utils.h:185
const float tofRefZ
Definition: Utils.h:321
Track constructed with the upper part of the inner tracker (layers 3 to 8)
Definition: Utils.h:157
proton/helium likelihood ratio
Definition: Utils.h:252
constexpr std::array< Span, numSpans > spanTypes
Definition: Utils.h:161
constexpr std::array< QualType, numQualTypes > qualTypes
Definition: Utils.h:269
Category
Definition: Utils.h:60
This event is classified as charge &gt;2 according to tof (Q &gt; 2.5)
TRD standalone data is available for this event.
LikelihoodType
Definition: Utils.h:238
constexpr std::array< MCHeight, numMCHeights > MCHeights
Definition: Utils.h:369
constexpr std::array< FitPositionHeight, numTrLayers > layerPositionHeights
Definition: Utils.h:142
constexpr std::array< float, numMCHeights > MCHeightsZ
Definition: Utils.h:384
Ecal energy (W. Xu 3D reconstruction)
Definition: Utils.h:286
static const std::array< std::string, numBetaClusterTypes > betaClusterTypeNames
Definition: Utils.h:359
This event is classified as charge 1 according to tracker (0.5 &lt; Q &lt; 1.5)
electron/helium likelihood ratio
Definition: Utils.h:251
Track constructed with inner tracker + layer 1 hits.
Definition: Utils.h:153
BetaType
Definition: Utils.h:341
constexpr std::array< float, numFitPositionHeights > fitPositionHeightZ
Definition: Utils.h:129
static const std::array< std::string, numTrGeos > trGeoNames
Definition: Utils.h:191
static const std::array< std::string, numSides > sideNames
Definition: Utils.h:201
Charge estimated using the upper half of the TRD.
Definition: Utils.h:226
static const std::array< std::string, numFits > fitNames
Definition: Utils.h:181
constexpr unsigned int numBetaTypes
Definition: Utils.h:339
RichMeasType
Definition: Utils.h:403
constexpr unsigned int numQualTypes
Definition: Utils.h:262
constexpr std::array< LikelihoodRType, numLikelihoodRTypes > likelihoodRTypes
Definition: Utils.h:255
constexpr unsigned int numFits
Definition: Utils.h:170
constexpr unsigned int numFitPositionHeights
Definition: Utils.h:95
std::map< unsigned int, T > LayerVariable
Definition: Utils.h:54
EnergyRecoType
Definition: Utils.h:281
Hits laying off the TRD track (all the rest)
Definition: Utils.h:266
ChargeRecoType
Definition: Utils.h:84
ChargeType
Definition: Utils.h:327
static const std::array< std::string, numLikelihoodRTypes > likelihoodRNames
Definition: Utils.h:258
constexpr std::array< Fit, numFits > fitTypes
Definition: Utils.h:179
constexpr unsigned int numLikelihoodTypes
Definition: Utils.h:236
Ecal data is available for this event.
TRD data is available for this event.
static const std::array< std::string, numBDTTypes > BDTNames
Definition: Utils.h:315
Track constructed with inner tracker + layer9 hits.
Definition: Utils.h:154
constexpr std::array< Side, numSides > sides
Definition: Utils.h:199
GenFit kalman filter track fit.
Definition: Utils.h:175
This event is classified as charge 1 according to tof (0.5 &lt; Q &lt; 1.5)
static const std::array< std::string, numFitPositionHeights > fitPositionNames
Definition: Utils.h:134
Ecal energy (2017 reconstruction)
Definition: Utils.h:285
constexpr unsigned int numChargeRecos
Definition: Utils.h:82
constexpr unsigned int numBDTTypes
Definition: Utils.h:309
Track constructed with all available hits (inner tracker + layer 1 + layer 9)
Definition: Utils.h:155
This event is classified as charge 2 according to tracker (1.5 &lt; Q &lt; 2.5)
IHEP reconstruction.
Definition: Utils.h:342
LikelihoodType
Definition: Utils.h:302
Ecal energy (standard reconstruction)
Definition: Utils.h:283
Total deposited energy in Ecal.
Definition: Utils.h:282
constexpr unsigned int numEnergyRecos
Definition: Utils.h:278
Charge estimated using the whole TRD.
Definition: Utils.h:225
ChargeType
Definition: Utils.h:224
SingleTreeChain::EventItr end(SingleTreeChain &chain)
constexpr std::array< LikelihoodType, numLikelihoodTypes > likelihoodTypeNames
Definition: Utils.h:304
constexpr unsigned int numBetaClusterTypes
Definition: Utils.h:352
constexpr std::array< LikelihoodType, numLikelihoodTypes > likelihoodTypes
Definition: Utils.h:240
#define ENABLE_BITMASK_OPERATORS(x)
Type safe implementation of a bitmask enum.
Definition: bitmask.h:21
constexpr std::array< BetaClusterType, numBetaClusterTypes > betaClusterTypes
Definition: Utils.h:356
std::vector< std::string > TokenizeString(const std::string &input, const char separator)
Utility function that splits a string according to the provided separator.
Definition: Utils.h:30
DistanceFromTrack
Definition: Utils.h:207
constexpr unsigned int numChargeTypes
Definition: Utils.h:222
This event is classified as charge &gt;2 according to tracker (Q &gt; 2.5)
Track constructed without correcting for multiple scattering.
Definition: Utils.h:158
GenFit kalman filter track fit assuming electron mass.
Definition: Utils.h:176
Ecal energy (electron hypothesys, Using different methods to recover anode efficiency, rear leakage, lateral leakage and temperature effects)
Definition: Utils.h:284
constexpr unsigned int numTrLayers
Definition: Utils.h:139
constexpr std::array< DistanceFromTrack, numTrackDistances > trackDistances
Definition: Utils.h:209
BetaClusterType
Definition: Utils.h:354
constexpr std::array< TrGeometry, numTrGeos > trGeoTypes
Definition: Utils.h:188
electron/proton likelihood ratio
Definition: Utils.h:250
static const std::array< std::string, numBetaTypes > betaNames
Definition: Utils.h:348
Yi Jia reconstruction.
Definition: Utils.h:87
Track constructed with only inner tracker hits.
Definition: Utils.h:152
static const std::array< std::string, numSpans > spanNames
Definition: Utils.h:165
constexpr unsigned int numSpans
Definition: Utils.h:149
constexpr unsigned int numLikelihoodRTypes
Definition: Utils.h:247
Standard tracker charge reconstruction.
Definition: Utils.h:85
Tof data is available for this event.
constexpr std::array< FitPositionHeight, numFitPositionHeights > fitPositionHeights
Definition: Utils.h:117
constexpr std::array< BDTType, numBDTTypes > BDTTypes
Definition: Utils.h:313
standard track fit
Definition: Utils.h:174
Charge estimated using the lower half of the TRD.
Definition: Utils.h:227
constexpr unsigned int numSides
Definition: Utils.h:195