ATLAS Offline Software
InDetTrackTruthOriginDefs.h
Go to the documentation of this file.
1 // -*- c++ -*-
2 /*
3  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
4 */
5 
6 #ifndef INDETTRACKSYSTEMATICSTOOLS_INDETTRACKTRUTHORIGINDEFS_H
7 #define INDETTRACKSYSTEMATICSTOOLS_INDETTRACKTRUTHORIGINDEFS_H
8 
12 namespace InDet {
13 
14  namespace TrkOrigin {
15 
16  enum OriginType {
17  // fake
18  Fake=0,
19  // pileup
21  // secondaries
31  // B/D decays
34  // fragmentation
36  // unknown?
38  };
39 
43  inline bool isFake(int origin) {
44  if (origin & (0x1 << Fake)) return true;
45  return false;
46  }
47 
49  inline bool isPileup(int origin) {
50  if (origin & (0x1 << Pileup)) return true;
51  return false;
52  }
53 
55  inline bool isV0Decay(int origin) {
56  if (origin & (0x1 << KshortDecay)) return true;
57  if (origin & (0x1 << LambdaDecay)) return true;
58  return false;
59  }
60 
62  inline bool isKshortDecay(int origin) {
63  if (origin & (0x1 << KshortDecay)) return true;
64  return false;
65  }
66 
68  inline bool isLambdaDecay(int origin) {
69  if (origin & (0x1 << LambdaDecay)) return true;
70  return false;
71  }
72 
74  inline bool isStrangeMesonDecay(int origin) {
75  if (origin & (0x1 << StrangeMesonDecay)) return true;
76  return false;
77  }
78 
80  inline bool isStrangeBaryonDecay(int origin) {
81  if (origin & (0x1 << StrangeBaryonDecay)) return true;
82  return false;
83  }
84 
86  inline bool isGammaConversion(int origin) {
87  if (origin & (0x1 << GammaConversion)) return true;
88  return false;
89  }
90 
92  inline bool isHadronicInteraction(int origin) {
93  if (origin & (0x1 << HadronicInteraction)) return true;
94  return false;
95  }
96 
98  inline bool isFromTau(int origin) {
99  if (origin & (0x1 << TauDecay)) return true;
100  return false;
101  }
102 
104  inline bool isSecondary(int origin) {
105  static constexpr auto bit=[](int bitpos){return 0x1<<bitpos;};
106  static constexpr int isSecondaryMask=bit(StrangeMesonDecay)|bit(StrangeBaryonDecay)|bit(GammaConversion)|bit(HadronicInteraction)|bit(OtherDecay)|bit(OtherSecondary);
107  return (origin & isSecondaryMask);
108  }
109 
111  inline bool isFromB(int origin) {
112  if (origin & (0x1 << BHadronDecay)) return true;
113  return false;
114  }
115 
117  inline bool isFromD(int origin) {
118  if (origin & (0x1 << DHadronDecay)) return true;
119  return false;
120  }
121 
123  inline bool isFromBNotFromD(int origin) {
124  if (isFromD(origin)) return false;
125  if (origin & (0x1 << BHadronDecay)) return true;
126  return false;
127  }
128 
130  inline bool isFromDNotFromB(int origin) {
131  if (isFromB(origin)) return false;
132  if (origin & (0x1 << DHadronDecay)) return true;
133  return false;
134  }
135 
137  inline bool isFromDfromB(int origin) {
138  if (isFromB(origin) && isFromD(origin)) return true;
139  return false;
140  }
141 
143  inline bool isFragmentation(int origin) {
144  if (origin & (0x1 << Fragmentation)) return true;
145  return false;
146  }
147 
149  inline bool isPrimary(int origin) {
150  if (isFake(origin)) return false;
151  if (isPileup(origin)) return false;
152  if (isSecondary(origin)) return false;
153  if (origin & (0x1 << OtherOrigin)) return false;
154  return true;
155  }
156 
157  } // namespace TrkOrigin
158 
159  namespace ExclusiveOrigin {
161  Pileup = 0,
162  Fake = 1,
163  Primary = 2,
164  FromB = 3,
165  FromBC = 4,
166  FromC = 5,
167  FromTau = 6,
168  OtherSecondary = 7
169  };
170 
171  inline int getExclusiveOrigin(int origin) {
172  /*
173  The input origin is a bitwise flag.
174  Here we use the inclusive origin to build an exclusive origin label as an integer.
175  */
176 
177  if ( InDet::TrkOrigin::isPileup(origin) ) {
179  }
180  else if ( InDet::TrkOrigin::isFake(origin) ) {
182  }
183  else if ( InDet::TrkOrigin::isFromBNotFromD(origin) ) {
185  }
186  else if ( InDet::TrkOrigin::isFromDfromB(origin) ) {
188  }
189  else if ( InDet::TrkOrigin::isFromDNotFromB(origin) ) {
191  }
192  else if ( InDet::TrkOrigin::isFromTau(origin) ) {
194  }
195  else if ( InDet::TrkOrigin::isSecondary(origin) ) {
197  }
198  else if ( InDet::TrkOrigin::isPrimary(origin) ) {
200  }
201 
202  // in _extremely_ rare cases, handle tracks with unknown origin (OtherOrigin)
204  }
205  }
206 
207 } // namespace InDet
208 
209 #endif
InDet::TrkOrigin::StrangeMesonDecay
@ StrangeMesonDecay
Definition: InDetTrackTruthOriginDefs.h:23
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
InDet::TrkOrigin::isFromD
bool isFromD(int origin)
from D decay chain including B-->D
Definition: InDetTrackTruthOriginDefs.h:117
InDet::TrkOrigin::isHadronicInteraction
bool isHadronicInteraction(int origin)
from hadronic interactions
Definition: InDetTrackTruthOriginDefs.h:92
InDet::ExclusiveOrigin::FromC
@ FromC
Definition: InDetTrackTruthOriginDefs.h:166
InDet::TrkOrigin::Pileup
@ Pileup
Definition: InDetTrackTruthOriginDefs.h:20
InDet::TrkOrigin::isStrangeMesonDecay
bool isStrangeMesonDecay(int origin)
from strange meson decay
Definition: InDetTrackTruthOriginDefs.h:74
InDet
Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::TrkOrigin::Fake
@ Fake
Definition: InDetTrackTruthOriginDefs.h:18
InDet::TrkOrigin::isFromDNotFromB
bool isFromDNotFromB(int origin)
from D decay chain excluding B-->D
Definition: InDetTrackTruthOriginDefs.h:130
InDet::TrkOrigin::TauDecay
@ TauDecay
Definition: InDetTrackTruthOriginDefs.h:26
InDet::TrkOrigin::isFromBNotFromD
bool isFromBNotFromD(int origin)
from B decay chain excluding B-->D
Definition: InDetTrackTruthOriginDefs.h:123
InDet::TrkOrigin::KshortDecay
@ KshortDecay
Definition: InDetTrackTruthOriginDefs.h:22
InDet::TrkOrigin::DHadronDecay
@ DHadronDecay
Definition: InDetTrackTruthOriginDefs.h:33
InDet::TrkOrigin::isFromDfromB
bool isFromDfromB(int origin)
from B-->D decay chain
Definition: InDetTrackTruthOriginDefs.h:137
InDet::TrkOrigin::OtherOrigin
@ OtherOrigin
Definition: InDetTrackTruthOriginDefs.h:37
InDet::TrkOrigin::isGammaConversion
bool isGammaConversion(int origin)
from conversions
Definition: InDetTrackTruthOriginDefs.h:86
InDet::ExclusiveOrigin::Primary
@ Primary
Definition: InDetTrackTruthOriginDefs.h:163
InDet::ExclusiveOrigin::OtherSecondary
@ OtherSecondary
Definition: InDetTrackTruthOriginDefs.h:168
InDet::ExclusiveOrigin::Pileup
@ Pileup
Definition: InDetTrackTruthOriginDefs.h:161
InDet::ExclusiveOrigin::FromTau
@ FromTau
Definition: InDetTrackTruthOriginDefs.h:167
InDet::TrkOrigin::BHadronDecay
@ BHadronDecay
Definition: InDetTrackTruthOriginDefs.h:32
InDet::TrkOrigin::StrangeBaryonDecay
@ StrangeBaryonDecay
Definition: InDetTrackTruthOriginDefs.h:25
InDet::TrkOrigin::OriginType
OriginType
Definition: InDetTrackTruthOriginDefs.h:16
InDet::TrkOrigin::isFromB
bool isFromB(int origin)
from B decay chain including B-->D
Definition: InDetTrackTruthOriginDefs.h:111
InDet::TrkOrigin::GammaConversion
@ GammaConversion
Definition: InDetTrackTruthOriginDefs.h:27
InDet::TrkOrigin::isV0Decay
bool isV0Decay(int origin)
from V0
Definition: InDetTrackTruthOriginDefs.h:55
InDet::TrkOrigin::LambdaDecay
@ LambdaDecay
Definition: InDetTrackTruthOriginDefs.h:24
InDet::TrkOrigin::isPrimary
bool isPrimary(int origin)
not fake, not pileup, not secondaries
Definition: InDetTrackTruthOriginDefs.h:149
InDet::TrkOrigin::OtherDecay
@ OtherDecay
Definition: InDetTrackTruthOriginDefs.h:28
InDet::TrkOrigin::isFake
bool isFake(int origin)
Helper functions.
Definition: InDetTrackTruthOriginDefs.h:43
InDet::TrkOrigin::isSecondary
bool isSecondary(int origin)
from long living particle decays or gamma conversions or hadronic interactions and anything else with...
Definition: InDetTrackTruthOriginDefs.h:104
InDet::ExclusiveOrigin::ExclusiveOrigin
ExclusiveOrigin
Definition: InDetTrackTruthOriginDefs.h:160
InDet::TrkOrigin::Fragmentation
@ Fragmentation
Definition: InDetTrackTruthOriginDefs.h:35
InDet::TrkOrigin::isPileup
bool isPileup(int origin)
from pileup
Definition: InDetTrackTruthOriginDefs.h:49
InDet::TrkOrigin::isStrangeBaryonDecay
bool isStrangeBaryonDecay(int origin)
from strange baryon decay
Definition: InDetTrackTruthOriginDefs.h:80
InDet::TrkOrigin::isFragmentation
bool isFragmentation(int origin)
not from B, D, or any secondary
Definition: InDetTrackTruthOriginDefs.h:143
InDet::TrkOrigin::OtherSecondary
@ OtherSecondary
Definition: InDetTrackTruthOriginDefs.h:30
InDet::ExclusiveOrigin::getExclusiveOrigin
int getExclusiveOrigin(int origin)
Definition: InDetTrackTruthOriginDefs.h:171
InDet::TrkOrigin::isLambdaDecay
bool isLambdaDecay(int origin)
from Lambda decay
Definition: InDetTrackTruthOriginDefs.h:68
InDet::ExclusiveOrigin::FromBC
@ FromBC
Definition: InDetTrackTruthOriginDefs.h:165
InDet::ExclusiveOrigin::Fake
@ Fake
Definition: InDetTrackTruthOriginDefs.h:162
InDet::TrkOrigin::HadronicInteraction
@ HadronicInteraction
Definition: InDetTrackTruthOriginDefs.h:29
InDet::TrkOrigin::isKshortDecay
bool isKshortDecay(int origin)
from Kshort decay
Definition: InDetTrackTruthOriginDefs.h:62
InDet::ExclusiveOrigin::FromB
@ FromB
Definition: InDetTrackTruthOriginDefs.h:164
InDet::TrkOrigin::isFromTau
bool isFromTau(int origin)
from tau decay
Definition: InDetTrackTruthOriginDefs.h:98