ATLAS Offline Software
Loading...
Searching...
No Matches
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
13namespace InDet {
14 namespace ExclusiveOrigin {
15 enum ExclusiveOrigin : int {
16 Pileup = 0,
17 Fake = 1,
19 FromB = 3,
20 FromBC = 4,
21 FromC = 5,
24 };
25 } // namespace ExclusiveOrigin
26
27 namespace TrkOrigin {
28
52
54
56 inline bool isFake(int origin) {
57 if (origin & (0x1 << Fake)) return true;
58 return false;
59 }
60
62 inline bool isPileup(int origin) {
63 if (origin & (0x1 << Pileup)) return true;
64 return false;
65 }
66
68 inline bool isV0Decay(int origin) {
69 if (origin & (0x1 << KshortDecay)) return true;
70 if (origin & (0x1 << LambdaDecay)) return true;
71 return false;
72 }
73
75 inline bool isKshortDecay(int origin) {
76 if (origin & (0x1 << KshortDecay)) return true;
77 return false;
78 }
79
81 inline bool isLambdaDecay(int origin) {
82 if (origin & (0x1 << LambdaDecay)) return true;
83 return false;
84 }
85
87 inline bool isStrangeMesonDecay(int origin) {
88 if (origin & (0x1 << StrangeMesonDecay)) return true;
89 return false;
90 }
91
93 inline bool isStrangeBaryonDecay(int origin) {
94 if (origin & (0x1 << StrangeBaryonDecay)) return true;
95 return false;
96 }
97
99 inline bool isGammaConversion(int origin) {
100 if (origin & (0x1 << GammaConversion)) return true;
101 return false;
102 }
103
105 inline bool isHadronicInteraction(int origin) {
106 if (origin & (0x1 << HadronicInteraction)) return true;
107 return false;
108 }
109
111 inline bool isFromTau(int origin) {
112 if (origin & (0x1 << TauDecay)) return true;
113 return false;
114 }
115
117 inline bool isSecondary(int origin) {
118 static constexpr auto bit=[](int bitpos){return 0x1<<bitpos;};
119 static constexpr int isSecondaryMask=bit(StrangeMesonDecay)|bit(StrangeBaryonDecay)|bit(GammaConversion)|bit(HadronicInteraction)|bit(OtherDecay)|bit(OtherSecondary);
120 return (origin & isSecondaryMask);
121 }
122
124 inline bool isFromB(int origin) {
125 if (origin & (0x1 << BHadronDecay)) return true;
126 return false;
127 }
128
130 inline bool isFromD(int origin) {
131 if (origin & (0x1 << DHadronDecay)) return true;
132 return false;
133 }
134
136 inline bool isFromBNotFromD(int origin) {
137 if (isFromD(origin)) return false;
138 if (origin & (0x1 << BHadronDecay)) return true;
139 return false;
140 }
141
143 inline bool isFromDNotFromB(int origin) {
144 if (isFromB(origin)) return false;
145 if (origin & (0x1 << DHadronDecay)) return true;
146 return false;
147 }
148
150 inline bool isFromDfromB(int origin) {
151 if (isFromB(origin) && isFromD(origin)) return true;
152 return false;
153 }
154
156 inline bool isFragmentation(int origin) {
157 if (origin & (0x1 << Fragmentation)) return true;
158 return false;
159 }
160
162 inline bool isPrimary(int origin) {
163 if (isFake(origin)) return false;
164 if (isPileup(origin)) return false;
165 if (isSecondary(origin)) return false;
166 if (origin & (0x1 << OtherOrigin)) return false;
167 return true;
168 }
169
170 inline int getTrkOrigin(int exclusiveOrigin) {
171 /*
172 input is exclusive origin enum value
173 Here we convert from exclusive origin (used by ftag) to trk origin (bitmask used by track truth tools)
174 */
175 switch (exclusiveOrigin) {
177 return (0x1 << Pileup);
179 return (0x1 << Fake);
181 return (0x1 << BHadronDecay);
183 return (0x1 << BHadronDecay) | (0x1 << DHadronDecay);
185 return (0x1 << DHadronDecay);
187 return (0x1 << TauDecay);
189 return (0x1 << StrangeMesonDecay) | (0x1 << StrangeBaryonDecay) | (0x1 << GammaConversion) | (0x1 << HadronicInteraction) | (0x1 << OtherDecay) | (0x1 << OtherSecondary);
191 return 0; // primary tracks have no bits set
192 default:
193 return (0x1 << OtherOrigin);
194 }
195 }
196 } // namespace TrkOrigin
197
198 namespace ExclusiveOrigin {
199 inline int getExclusiveOrigin(int origin) {
200 /*
201 The input origin is a bitwise flag.
202 Here we use the inclusive origin to build an exclusive origin label as an integer.
203 */
204
205 if ( InDet::TrkOrigin::isPileup(origin) ) {
207 }
208 else if ( InDet::TrkOrigin::isFake(origin) ) {
210 }
211 else if ( InDet::TrkOrigin::isFromBNotFromD(origin) ) {
213 }
214 else if ( InDet::TrkOrigin::isFromDfromB(origin) ) {
216 }
217 else if ( InDet::TrkOrigin::isFromDNotFromB(origin) ) {
219 }
220 else if ( InDet::TrkOrigin::isFromTau(origin) ) {
222 }
223 else if ( InDet::TrkOrigin::isSecondary(origin) ) {
225 }
226 else if ( InDet::TrkOrigin::isPrimary(origin) ) {
228 }
229
230 // in _extremely_ rare cases, handle tracks with unknown origin (OtherOrigin)
232 }
233 }
234
235} // namespace InDet
236
237#endif
bool isPileup(int origin)
from pileup
bool isFromBNotFromD(int origin)
from B decay chain excluding B-->D
bool isFromTau(int origin)
from tau decay
bool isHadronicInteraction(int origin)
from hadronic interactions
bool isSecondary(int origin)
from long living particle decays or gamma conversions or hadronic interactions and anything else with...
bool isPrimary(int origin)
not fake, not pileup, not secondaries
bool isFromB(int origin)
from B decay chain including B-->D
bool isGammaConversion(int origin)
from conversions
bool isStrangeMesonDecay(int origin)
from strange meson decay
bool isV0Decay(int origin)
from V0
bool isFromDNotFromB(int origin)
from D decay chain excluding B-->D
bool isFromD(int origin)
from D decay chain including B-->D
bool isStrangeBaryonDecay(int origin)
from strange baryon decay
bool isFragmentation(int origin)
not from B, D, or any secondary
bool isKshortDecay(int origin)
from Kshort decay
bool isFake(int origin)
Helper functions.
int getTrkOrigin(int exclusiveOrigin)
bool isFromDfromB(int origin)
from B-->D decay chain
bool isLambdaDecay(int origin)
from Lambda decay
Primary Vertex Finder.