Belle II Software  release-05-02-19
MuidElementNumbers.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2020 Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Giacomo De Pietro *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 /* KLM headers. */
14 #include <klm/dataobjects/bklm/BKLMElementNumbers.h>
15 #include <klm/dataobjects/eklm/EKLMElementNumbers.h>
16 #include <klm/dataobjects/KLMElementNumbers.h>
17 
18 /* C++ headers. */
19 #include <vector>
20 
21 namespace Belle2 {
30  class MuidElementNumbers {
31 
32  public:
33 
37  enum Outcome {
38  c_NotReached = 0,
39  c_StopInBarrel = 1,
40  c_StopInForwardEndcap = 2,
41  c_ExitBarrel = 3,
42  c_ExitForwardEndcap = 4,
43  c_StopInBackwardEndcap = 5,
44  c_ExitBackwardEndcap = 6,
45  c_CrossBarrelStopInForwardMin = 7,
46  c_CrossBarrelStopInForwardMax = 21,
47  c_CrossBarrelStopInBackwardMin = 22,
48  c_CrossBarrelStopInBackwardMax = 36,
49  c_CrossBarrelExitForwardMin = 37,
50  c_CrossBarrelExitForwardMax = 51,
51  c_CrossBarrelExitBackwardMin = 52,
52  c_CrossBarrelExitBackwardMax = 66
53  };
54 
58  enum DetectorsCrossed {
59  c_Both = 0,
60  c_OnlyBarrel = KLMElementNumbers::c_BKLM,
61  c_OnlyEndcap = KLMElementNumbers::c_EKLM,
62  };
63 
67  enum Hypothesis {
68  c_NotValid = -1,
69  c_Positron = 0,
70  c_Electron = 1,
71  c_Deuteron = 2,
72  c_AntiDeuteron = 3,
73  c_Proton = 4,
74  c_AntiProton = 5,
75  c_PionPlus = 6,
76  c_PionMinus = 7,
77  c_KaonPlus = 8,
78  c_KaonMinus = 9,
79  c_MuonPlus = 10,
80  c_MuonMinus = 11,
81  };
82 
86  enum IdentifierBits {
88  c_OutcomeBit = 7,
90  c_LastLayerBit = 4,
92  c_DetectorBit = 2,
95  };
96 
101 
106 
112  static bool checkExtrapolationOutcome(unsigned int outcome, int lastLayer);
113 
121  static unsigned int calculateExtrapolationOutcome(bool isForward, bool escaped, int lastBarrelLayer, int lastEndcapLayer);
122 
127  static Hypothesis calculateHypothesisFromPDG(int pdg);
128 
132  static constexpr int getMaximalBarrelLayer()
133  {
134  return m_MaximalBarrelLayer;
135  }
136 
140  static constexpr int getMaximalEndcapForwardLayer()
141  {
143  }
144 
148  static constexpr int getMaximalEndcapBackwardLayer()
149  {
151  }
152 
156  static constexpr int getMaximalOutcome()
157  {
158  return m_MaximalOutcome;
159  }
160 
164  static constexpr int getMaximalDetector()
165  {
166  return m_MaximalDetector;
167  }
168 
172  static constexpr int getMaximalHalfNdof()
173  {
174  return m_MaximalHalfNDof;
175  }
176 
180  static constexpr int getSizeReducedChiSquared()
181  {
183  }
184 
188  static constexpr double getMaximalReducedChiSquared()
189  {
191  }
192 
198  static std::vector<int> getPDGVector(int charge);
199 
204  static std::vector<int> getPDGVector();
205 
215  static int getLongitudinalID(int hypothesis, int outcome, int lastLayer);
216 
226  static int getTransverseID(int hypothesis, int detector, int degreesOfFreedom);
227 
228  protected:
229 
232 
235 
238 
240  static constexpr int m_MaximalOutcome = c_CrossBarrelExitBackwardMax;
241 
243  static constexpr int m_MaximalDetector = c_OnlyEndcap;
244 
246  static constexpr int m_MaximalHalfNDof = 18;
247 
249  static constexpr int m_SizeReducedChiSquared = 100;
250 
252  static constexpr double m_MaximalReducedChiSquared = 10.;
253 
254  };
255 
257 }
Belle2::MuidElementNumbers::getMaximalOutcome
static constexpr int getMaximalOutcome()
Get maximal value of the track extrapolation outcome.
Definition: MuidElementNumbers.h:164
Belle2::MuidElementNumbers::getMaximalHalfNdof
static constexpr int getMaximalHalfNdof()
Get maximal value of NDof/2 (for transverse scattering).
Definition: MuidElementNumbers.h:180
Belle2::MuidElementNumbers::m_MaximalOutcome
static constexpr int m_MaximalOutcome
Maximal value of the outcome extrapolation.
Definition: MuidElementNumbers.h:248
Belle2::MuidElementNumbers::IdentifierBits
IdentifierBits
Bits used for unique identifiers in getLongitudinalID() and in getTransverseID().
Definition: MuidElementNumbers.h:94
Belle2::MuidElementNumbers::getLongitudinalID
static int getLongitudinalID(int hypothesis, int outcome, int lastLayer)
Get the unique longitudinal identifier for given hypothesis, outcome and last layer crossed.
Definition: MuidElementNumbers.cc:176
Belle2::MuidElementNumbers::c_DegreesOfFreedomBit
@ c_DegreesOfFreedomBit
Number of bits occupied by degreesOfFreedom in getTransverseID().
Definition: MuidElementNumbers.h:102
Belle2::MuidElementNumbers::c_OutcomeBit
@ c_OutcomeBit
Number of bits occupied by outcome in getLongitudinalID().
Definition: MuidElementNumbers.h:96
Belle2::MuidElementNumbers::m_MaximalDetector
static constexpr int m_MaximalDetector
Maximal value of the detector selector (for transverse scattering).
Definition: MuidElementNumbers.h:251
Belle2::MuidElementNumbers::Hypothesis
Hypothesis
Hypothesis number.
Definition: MuidElementNumbers.h:75
Belle2::MuidElementNumbers::checkExtrapolationOutcome
static bool checkExtrapolationOutcome(unsigned int outcome, int lastLayer)
Check the track extrapolation outcome.
Definition: MuidElementNumbers.cc:27
Belle2::KLMElementNumbers::c_EKLM
@ c_EKLM
EKLM.
Definition: KLMElementNumbers.h:50
Belle2::MuidElementNumbers::calculateExtrapolationOutcome
static unsigned int calculateExtrapolationOutcome(bool isForward, bool escaped, int lastBarrelLayer, int lastEndcapLayer)
Calculate the track extrapolation outcome.
Definition: MuidElementNumbers.cc:79
Belle2::MuidElementNumbers::m_MaximalEndcapForwardLayer
static constexpr int m_MaximalEndcapForwardLayer
Maximal endcap-forward layer number (0-based).
Definition: MuidElementNumbers.h:242
Belle2::MuidElementNumbers::getMaximalBarrelLayer
static constexpr int getMaximalBarrelLayer()
Get maximal barrel layer number (0-based).
Definition: MuidElementNumbers.h:140
Belle2::EKLMElementNumbers::getMaximalLayerNumber
static constexpr int getMaximalLayerNumber()
Get maximal layer number.
Definition: EKLMElementNumbers.h:291
Belle2::MuidElementNumbers::DetectorsCrossed
DetectorsCrossed
Labels for detectors crossed.
Definition: MuidElementNumbers.h:66
Belle2::MuidElementNumbers::c_DetectorBit
@ c_DetectorBit
Number of bits occupied by detector in getTransverseID().
Definition: MuidElementNumbers.h:100
Belle2::MuidElementNumbers::c_LastLayerBit
@ c_LastLayerBit
Number of bits occupied by lastLayer in getLongitudinalID().
Definition: MuidElementNumbers.h:98
Belle2::BKLMElementNumbers::getMaximalLayerNumber
static constexpr int getMaximalLayerNumber()
Get maximal layer number (1-based).
Definition: BKLMElementNumbers.h:251
Belle2::MuidElementNumbers::calculateHypothesisFromPDG
static Hypothesis calculateHypothesisFromPDG(int pdg)
Calculate hypothesis number from PDG code.
Definition: MuidElementNumbers.cc:123
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::MuidElementNumbers::Outcome
Outcome
Outcome of the track extrapolation.
Definition: MuidElementNumbers.h:45
Belle2::MuidElementNumbers::getSizeReducedChiSquared
static constexpr int getSizeReducedChiSquared()
Get size of array with reduced chi-squared values (for transverse scattering).
Definition: MuidElementNumbers.h:188
Belle2::MuidElementNumbers::m_SizeReducedChiSquared
static constexpr int m_SizeReducedChiSquared
Size of array with reduced chi-squared values (for transverse scattering).
Definition: MuidElementNumbers.h:257
Belle2::MuidElementNumbers::getPDGVector
static std::vector< int > getPDGVector()
Get a vector with all the hypothesis PDG codes used for Muid.
Definition: MuidElementNumbers.cc:167
Belle2::MuidElementNumbers::m_MaximalBarrelLayer
static constexpr int m_MaximalBarrelLayer
Maximal barrel layer number (0-based).
Definition: MuidElementNumbers.h:239
Belle2::MuidElementNumbers::getMaximalEndcapForwardLayer
static constexpr int getMaximalEndcapForwardLayer()
Get maximal endcap-forward layer number (0-based).
Definition: MuidElementNumbers.h:148
Belle2::KLMElementNumbers::c_BKLM
@ c_BKLM
BKLM.
Definition: KLMElementNumbers.h:47
Belle2::MuidElementNumbers::m_MaximalReducedChiSquared
static constexpr double m_MaximalReducedChiSquared
Maximal value of reduced chi-squared (for transverse scattering).
Definition: MuidElementNumbers.h:260
Belle2::MuidElementNumbers::getMaximalEndcapBackwardLayer
static constexpr int getMaximalEndcapBackwardLayer()
Get maximal endcap-forward layer number (0-based).
Definition: MuidElementNumbers.h:156
Belle2::MuidElementNumbers::m_MaximalEndcapBackwardLayer
static constexpr int m_MaximalEndcapBackwardLayer
Maximal endcap-backward layer number (0-based).
Definition: MuidElementNumbers.h:245
Belle2::MuidElementNumbers::getMaximalDetector
static constexpr int getMaximalDetector()
Get maximal value of the detector selector (for transverse scattering).
Definition: MuidElementNumbers.h:172
Belle2::MuidElementNumbers::m_MaximalHalfNDof
static constexpr int m_MaximalHalfNDof
Maximal value of NDof/2 (for transverse scattering).
Definition: MuidElementNumbers.h:254
Belle2::MuidElementNumbers::getMaximalReducedChiSquared
static constexpr double getMaximalReducedChiSquared()
Get maximal value of reduced chi-squared (for transverse scattering).
Definition: MuidElementNumbers.h:196
Belle2::MuidElementNumbers::~MuidElementNumbers
~MuidElementNumbers()
Destructor.
Definition: MuidElementNumbers.cc:23
Belle2::MuidElementNumbers::getTransverseID
static int getTransverseID(int hypothesis, int detector, int degreesOfFreedom)
Get the unique transverse identifier for given hypothesis, detector and degrees of freedom.
Definition: MuidElementNumbers.cc:184
Belle2::MuidElementNumbers::MuidElementNumbers
MuidElementNumbers()
Constructor.
Definition: MuidElementNumbers.cc:19