ATLAS Offline Software
TruthClassifiers.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 #ifndef TRUTHUTILS_TRUTHCLASSIFIERS_H
5 #define TRUTHUTILS_TRUTHCLASSIFIERS_H
8 #include <utility>
9 #include <bitset>
10 #include <vector>
11 #include <string>
14 
15 inline ParticleOrigin convHadronTypeToOrig(ParticleType pType, int motherPDG)
16 {
17  if (pType == CCbarMesonPart && abs(motherPDG) == MC::JPSI) return JPsi;
18  if (pType == BBbarMesonPart) return BBbarMeson;
19  if (pType == BottomMesonPart) return BottomMeson;
20  if (pType == BottomBaryonPart) return BottomBaryon;
21  if (pType == CCbarMesonPart) return CCbarMeson;
22  if (pType == CharmedMesonPart) return CharmedMeson;
23  if (pType == CharmedBaryonPart) return CharmedBaryon;
24  if (pType == StrangeBaryonPart) return StrangeBaryon;
25  if (pType == StrangeMesonPart) return StrangeMeson;
26  if (pType == LightBaryonPart) return LightBaryon;
27  if (pType == LightMesonPart) return LightMeson;
28  return NonDefined;
29 }
30 
31 inline ParticleOrigin defHadronType(int pdg) {
32  if (abs(pdg) == MC::JPSI) return JPsi;
33  if (MC::isBBbarMeson(pdg)) return BBbarMeson;
34  if (MC::isCCbarMeson(pdg)) return CCbarMeson;
35  if (MC::isBottomMeson(pdg)) return BottomMeson;
36  if (MC::isCharmMeson(pdg)) return CharmedMeson;
37  if (MC::isBottomBaryon(pdg)) return BottomBaryon;
38  if (MC::isCharmBaryon(pdg)) return CharmedBaryon;
39  if (MC::isStrangeBaryon(pdg)) return StrangeBaryon;
40  if (MC::isLightBaryon(pdg)) return LightBaryon;
41  if (MC::isStrangeMeson(pdg)) return StrangeMeson;
42  if (MC::isLightMeson(pdg)) return LightMeson;
43  return NonDefined;
44 }
45 
46 inline ParticleType defTypeOfHadron(int pdg) {
47  if (MC::isBBbarMeson(pdg)) return BBbarMesonPart;
48  if (MC::isCCbarMeson(pdg)) return CCbarMesonPart;
49  if (MC::isBottomMeson(pdg)) return BottomMesonPart;
50  if (MC::isCharmMeson(pdg)) return CharmedMesonPart;
51  if (MC::isBottomBaryon(pdg)) return BottomBaryonPart;
52  if (MC::isCharmBaryon(pdg)) return CharmedBaryonPart;
53  if (MC::isStrangeBaryon(pdg)) return StrangeBaryonPart;
54  if (MC::isLightBaryon(pdg)) return LightBaryonPart;
55  if (MC::isStrangeMeson(pdg)) return StrangeMesonPart;
56  if (MC::isLightMeson(pdg)) return LightMesonPart;
57  return Unknown;
58 }
59 
60 
62 
63  if (EleOrig == NonDefined)
64  return UnknownElectron;
65 
66  if (EleOrig == WBoson || EleOrig == ZBoson || EleOrig == top || EleOrig == SingleElec || EleOrig == Higgs ||
67  EleOrig == HiggsMSSM || EleOrig == HeavyBoson || EleOrig == WBosonLRSM || EleOrig == NuREle || EleOrig == NuRMu ||
68  EleOrig == NuRTau || EleOrig == LQ || EleOrig == SUSY || EleOrig == DiBoson || EleOrig == ZorHeavyBoson ||
69  EleOrig == OtherBSM || EleOrig == MultiBoson || isPrompt) {
70  return IsoElectron;
71  }
72  if (EleOrig == JPsi || EleOrig == BottomMeson || EleOrig == CharmedMeson || EleOrig == BottomBaryon ||
73  EleOrig == CharmedBaryon || EleOrig == TauLep || EleOrig == Mu || EleOrig == QuarkWeakDec) {
74  return NonIsoElectron;
75  }
76  return BkgElectron;
77 }
78 
79 
81 
82  if (MuOrig == NonDefined) return UnknownMuon;
83 
84  if (MuOrig == WBoson || MuOrig == ZBoson || MuOrig == top || MuOrig == SingleMuon || MuOrig == Higgs ||
85  MuOrig == HiggsMSSM || MuOrig == HeavyBoson || MuOrig == WBosonLRSM || MuOrig == NuREle || MuOrig == NuRMu ||
86  MuOrig == NuRTau || MuOrig == LQ || MuOrig == SUSY || MuOrig == DiBoson || MuOrig == ZorHeavyBoson ||
87  MuOrig == OtherBSM || MuOrig == MultiBoson || isPrompt) {
88  return IsoMuon;
89  }
90  if (MuOrig == JPsi || MuOrig == BottomMeson || MuOrig == CharmedMeson || MuOrig == BottomBaryon ||
91  MuOrig == CharmedBaryon || MuOrig == TauLep || MuOrig == QuarkWeakDec) {
92  return NonIsoMuon;
93  }
94  // if (MuOrig == Pion || MuOrig == Kaon ) return DecayMuon;
95  return BkgMuon;
96 }
97 
99  if (TauOrig == NonDefined) return UnknownTau;
100 
101  if (TauOrig == WBoson || TauOrig == ZBoson || TauOrig == top || TauOrig == SingleMuon || TauOrig == Higgs ||
102  TauOrig == HiggsMSSM || TauOrig == HeavyBoson || TauOrig == WBosonLRSM || TauOrig == NuREle || TauOrig == NuRMu ||
103  TauOrig == NuRTau || TauOrig == SUSY || TauOrig == DiBoson || TauOrig == ZorHeavyBoson || TauOrig == OtherBSM ||
104  TauOrig == MultiBoson)
105  return IsoTau;
106 
107  if (TauOrig == JPsi || TauOrig == BottomMeson || TauOrig == CharmedMeson || TauOrig == BottomBaryon ||
108  TauOrig == CharmedBaryon || TauOrig == QuarkWeakDec)
109  return NonIsoTau;
110 
111  return BkgTau;
112 }
113 
114 
116 {
117  if (PhotOrig == NonDefined) return UnknownPhoton;
118 
119  if (PhotOrig == WBoson || PhotOrig == ZBoson || PhotOrig == SinglePhot || PhotOrig == Higgs ||
120  PhotOrig == HiggsMSSM || PhotOrig == HeavyBoson || PhotOrig == PromptPhot || PhotOrig == SUSY ||
121  PhotOrig == OtherBSM)
122  return IsoPhoton;
123 
124  if (PhotOrig == ISRPhot || PhotOrig == FSRPhot || PhotOrig == TauLep || PhotOrig == Mu || PhotOrig == NuREle ||
125  PhotOrig == NuRMu || PhotOrig == NuRTau)
126  return NonIsoPhoton;
127 
128  return BkgPhoton;
129 }
130 
131 template <class T> ParticleOrigin defJetOrig(const T& allJetMothers) {
132  ParticleOrigin partOrig = NonDefined;
133  for (const auto& it: allJetMothers) {
134  int pdg = abs(it->pdg_id());
135  if (MC::isTop(pdg)) partOrig = top;
136  if (MC::isZ(pdg)) partOrig = ZBoson;
137  if (MC::isW(pdg) && !(partOrig == top)) partOrig = WBoson;
138  if ((MC::isQuark(pdg) || MC::isGluon(pdg)) && partOrig != top && partOrig != ZBoson && partOrig != WBoson) partOrig = QCD;
139  if (MC::isHiggs(pdg)) return Higgs;
140  if (pdg == 35 || pdg == 36 || pdg == 37) return HiggsMSSM;
141  if (pdg == 32 || pdg == 33 || pdg == 34) return HeavyBoson;
142  if (pdg == 42) return LQ;
143  if (MC::isSUSY(pdg)) return SUSY;
144  if (MC::isBSM(pdg)) return OtherBSM;
145  }
146  return partOrig;
147 }
148  enum MCTC_bits : unsigned int { HadTau=0, Tau, hadron, frombsm, uncat, isbsm, isgeant, stable, totalBits };
149 
150 template <class T>
151 std::tuple<unsigned int, T> defOrigOfParticle(T thePart) {
152 
153  T parent_hadron_ptr = nullptr;
154 
155  bool uncat = 0, fromHad = 0, fromTau = 0;
156  bool isPhysical = MC::isPhysical(thePart);
157  bool isGeant = HepMC::is_simulation_particle(thePart);
158  bool isBSM = MC::isBSM(thePart);
159  bool fromBSM = isBSM; // just to initialise
160 
161  auto prodVtx = thePart->production_vertex();
162  if (isPhysical && prodVtx && !isGeant) {
163  fromHad = MC::isFromHadron(thePart, parent_hadron_ptr, fromTau, fromBSM);
164  }
165  else uncat = 1;
166 
167  std::bitset<MCTC_bits::totalBits> classifier;
168  classifier[MCTC_bits::stable] = isPhysical;
169  classifier[MCTC_bits::isgeant] = isGeant;
170  classifier[MCTC_bits::isbsm] = isBSM;
171  classifier[MCTC_bits::uncat] = uncat;
172  classifier[MCTC_bits::frombsm] = fromBSM;
173  classifier[MCTC_bits::hadron] = fromHad;
174  classifier[MCTC_bits::Tau] = fromTau;
175  classifier[MCTC_bits::HadTau] = fromHad && fromTau;
176  unsigned int outputvalue = static_cast<unsigned int>(classifier.to_ulong());
177 
178  return std::make_tuple(outputvalue,parent_hadron_ptr);
179 }
180  inline int isPrompt(const unsigned int classify, bool allow_prompt_tau_decays = true) {
181  std::bitset<MCTC_bits::totalBits> res(classify);
182  if (res.test(MCTC_bits::uncat)) return -1;
183  bool fromPromptTau = res.test(MCTC_bits::Tau) && !res.test(MCTC_bits::HadTau);
184  if (fromPromptTau) return int(allow_prompt_tau_decays);
185  return !res.test(MCTC_bits::hadron);
186  }
187 
188 template <class T>
190  ParticleOutCome PartOutCome = UnknownOutCome;
191  auto EndVert = MC::findSimulatedEndVertex(thePart);
192  if (EndVert == nullptr) return NonInteract;
193 
194  int ElecOutNumOfNucFr(0);
195  int ElecOutNumOfElec(0);
196  int NumOfHadr(0);
197  auto outgoing = EndVert->particles_out();
198  int NumOfElecDaug = outgoing.size();
199  for (const auto& p: outgoing) {
200  if (!p) continue;
201  int EndDaugType = p->pdg_id();
202  if (MC::isElectron(EndDaugType)) ElecOutNumOfElec++;
203  if (MC::isHadron(p) && !MC::isBeam(p)) NumOfHadr++;
204  if (EndDaugType > 1000000000 || EndDaugType == 0 || abs(EndDaugType) == 2212 || abs(EndDaugType) == 2112) ElecOutNumOfNucFr++;
205  }
206 
207  if (ElecOutNumOfNucFr != 0 || NumOfHadr != 0) PartOutCome = NuclInteraction;
208  if (ElecOutNumOfElec == 1 && NumOfElecDaug == 1) PartOutCome = ElectrMagInter;
209 
210  return PartOutCome;
211 }
212 template <class T>
214  ParticleOutCome PartOutCome = UnknownOutCome;
215  auto EndVert = MC::findSimulatedEndVertex(thePart);
216  if (EndVert == nullptr) return NonInteract;
217  int MuOutNumOfNucFr(0);
218  int NumOfHadr(0);
219  int NumOfEleNeutr(0);
220  int NumOfMuonNeutr(0);
221  int NumOfElec(0);
222  auto outgoing = EndVert->particles_out();
223  int NumOfMuDaug = outgoing.size();
224  for (const auto& p: outgoing) {
225  if (!p) continue;
226  int EndDaugType = p->pdg_id();
227  if (MC::isElectron(EndDaugType)) NumOfElec++;
228  if (abs(EndDaugType) == 12) NumOfEleNeutr++;
229  if (abs(EndDaugType) == 14) NumOfMuonNeutr++;
230  if (MC::isHadron(p) && !MC::isBeam(p)) NumOfHadr++;
231  if (EndDaugType > 1000000000 || EndDaugType == 0 || abs(EndDaugType) == 2212 || abs(EndDaugType) == 2112) MuOutNumOfNucFr++;
232  }
233 
234  if (MuOutNumOfNucFr != 0 || NumOfHadr != 0) PartOutCome = NuclInteraction;
235  if (NumOfMuDaug == 3 && NumOfElec == 1 && NumOfEleNeutr == 1 && NumOfMuonNeutr == 1) PartOutCome = DecaytoElectron;
236 
237  return PartOutCome;
238 }
239 template <class T>
241  ParticleOutCome PartOutCome = UnknownOutCome;
242  auto EndVert = MC::findSimulatedEndVertex(thePart);
243  if (EndVert == nullptr) return NonInteract;
244  int NumOfTauDaug = EndVert->nOutgoingParticles();
245  auto tauFinalStatePart = MC::findFinalStateParticles(EndVert);
246  auto PD = DecayProducts(tauFinalStatePart);
247  int NumOfElec = PD.apd(11);
248  int NumOfMuon = PD.apd(13);
249  int NumOfElecNeut = PD.apd(12);
250  int NumOfMuonNeut = PD.apd(14);
251  int NumOfPhot = PD.apd(22);
252  int NumOfPi = PD.apd(211);
253  int NumOfKaon = PD.apd(321);
254  int NumOfNucFr = PD.apd(0) + PD.apd(1000000000, std::numeric_limits<int>::max());
255 
256  if (NumOfNucFr != 0) PartOutCome = NuclInteraction;
257  if ((NumOfTauDaug == 3 && NumOfElec == 1 && NumOfElecNeut == 1) || (NumOfTauDaug == (3 + NumOfPhot) && NumOfElecNeut == 1)) PartOutCome = DecaytoElectron;
258  if ((NumOfTauDaug == 3 && NumOfMuon == 1 && NumOfMuonNeut == 1) || (NumOfTauDaug == (3 + NumOfPhot) && NumOfMuonNeut == 1)) PartOutCome = DecaytoMuon;
259 
260  if (NumOfPi == 1 || NumOfKaon == 1) PartOutCome = OneProng;
261  if (NumOfPi + NumOfKaon == 3) PartOutCome = ThreeProng;
262  if (NumOfPi + NumOfKaon == 5) PartOutCome = FiveProng;
263 
264 
265  return PartOutCome;
266 }
267 template <class T>
269  ParticleOutCome PartOutCome = UnknownOutCome;
270  auto EndVert = MC::findSimulatedEndVertex(thePart);
271  if (EndVert == nullptr) return UnConverted;
272 
273  int PhtOutNumOfNucFr(0);
274  int PhtOutNumOfEl(0);
275  int PhtOutNumOfPos(0);
276  int PhtOutNumOfHadr(0);
277 
278  auto outgoing = EndVert->particles_out();
279  int NumOfPhtDaug = outgoing.size();
280  for (const auto& p: outgoing) {
281  if (!p) continue;
282  int EndDaugType = p->pdg_id();
283  if (EndDaugType > 1000000000 || EndDaugType == 0 || abs(EndDaugType) == 2212 || abs(EndDaugType) == 2112) PhtOutNumOfNucFr++;
284  if (EndDaugType == 11) PhtOutNumOfEl++;
285  if (EndDaugType == -11) PhtOutNumOfPos++;
286  if (MC::isHadron(p)&& !MC::isBeam(p) ) PhtOutNumOfHadr++;
287  }
288 
289  if (PhtOutNumOfEl == 1 && PhtOutNumOfPos == 1 && NumOfPhtDaug == 2) PartOutCome = Converted;
290  if ((NumOfPhtDaug > 1 && PhtOutNumOfNucFr != 0) || PhtOutNumOfHadr > 0) PartOutCome = NuclInteraction;
291 
292  return PartOutCome;
293 }
294 
295 
296 
297 }
298 #endif
MC::isFromHadron
bool isFromHadron(T p, T hadron, bool &fromTau, bool &fromBSM)
Function to classify the particle.
Definition: HepMCHelpers.h:194
isStrangeMeson
bool isStrangeMeson(const T &p)
Definition: AtlasPID.h:685
NuRMu
@ NuRMu
Definition: TruthClasses.h:73
IsoPhoton
@ IsoPhoton
Definition: TruthClasses.h:23
isBottomMeson
bool isBottomMeson(const T &p)
Definition: AtlasPID.h:687
MCTruthPartClassifier::defOutComeOfMuon
ParticleOutCome defOutComeOfMuon(T thePart)
Definition: TruthClassifiers.h:213
LightBaryonPart
@ LightBaryonPart
Definition: TruthClasses.h:40
MCTruthPartClassifier::defTypeOfPhoton
ParticleType defTypeOfPhoton(ParticleOrigin PhotOrig)
Definition: TruthClassifiers.h:115
MCTruthPartClassifier::frombsm
@ frombsm
Definition: TruthClassifiers.h:148
TauLep
@ TauLep
Definition: TruthClasses.h:63
StrangeMeson
@ StrangeMeson
Definition: TruthClasses.h:80
NuREle
@ NuREle
Definition: TruthClasses.h:72
MCTruthPartClassifier::hadron
@ hadron
Definition: TruthClassifiers.h:148
Mu
@ Mu
Definition: TruthClasses.h:62
isBottomBaryon
bool isBottomBaryon(const T &p)
Definition: AtlasPID.h:703
BBbarMeson
@ BBbarMeson
Definition: TruthClasses.h:85
BottomMeson
@ BottomMeson
Definition: TruthClasses.h:82
WBosonLRSM
@ WBosonLRSM
Definition: TruthClasses.h:71
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
NonIsoPhoton
@ NonIsoPhoton
Definition: TruthClasses.h:24
isBSM
bool isBSM(const T &p)
APID: graviton and all Higgs extensions are BSM.
Definition: AtlasPID.h:591
Common::classify
void classify(ToolHandle< IMCTruthClassifier > &m_classif, const xAOD::TruthParticle *theParticle, unsigned int &particleOutCome, unsigned int &result, int &hadron_pdg, unsigned int &particleType, unsigned int &particleOrigin)
Definition: Common.cxx:96
MCTruthPartClassifier::defOutComeOfTau
ParticleOutCome defOutComeOfTau(T thePart)
Definition: TruthClassifiers.h:240
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
MCTruthPartClassifier::uncat
@ uncat
Definition: TruthClassifiers.h:148
MCTruthPartClassifier::isgeant
@ isgeant
Definition: TruthClassifiers.h:148
isCharmMeson
bool isCharmMeson(const T &p)
Definition: AtlasPID.h:686
skel.it
it
Definition: skel.GENtoEVGEN.py:396
ThreeProng
@ ThreeProng
Definition: TruthClasses.h:116
IsoElectron
@ IsoElectron
Definition: TruthClasses.h:11
SingleElec
@ SingleElec
Definition: TruthClasses.h:54
BkgPhoton
@ BkgPhoton
Definition: TruthClasses.h:25
Converted
@ Converted
Definition: TruthClasses.h:109
CharmedMesonPart
@ CharmedMesonPart
Definition: TruthClasses.h:36
ISRPhot
@ ISRPhot
Definition: TruthClasses.h:95
PromptPhot
@ PromptPhot
Definition: TruthClasses.h:93
MCTruthPartClassifier::defTypeOfElectron
ParticleType defTypeOfElectron(ParticleOrigin EleOrig, bool isPrompt)
Definition: TruthClassifiers.h:61
BottomMesonPart
@ BottomMesonPart
Definition: TruthClasses.h:34
MCTruthPartClassifier::defOrigOfParticle
std::tuple< unsigned int, T > defOrigOfParticle(T thePart)
Definition: TruthClassifiers.h:151
NuRTau
@ NuRTau
Definition: TruthClasses.h:74
UnknownMuon
@ UnknownMuon
Definition: TruthClasses.h:14
ZBoson
@ ZBoson
Definition: TruthClasses.h:67
isLightBaryon
bool isLightBaryon(const T &p)
Definition: AtlasPID.h:699
UnknownTau
@ UnknownTau
Definition: TruthClasses.h:18
StrangeMesonPart
@ StrangeMesonPart
Definition: TruthClasses.h:41
SUSY
Definition: SUSYCrossSection.h:24
TruthClasses.h
BkgMuon
@ BkgMuon
Definition: TruthClasses.h:17
isLightMeson
bool isLightMeson(const T &p)
Definition: AtlasPID.h:683
WBoson
@ WBoson
Definition: TruthClasses.h:66
isGluon
bool isGluon(const T &p)
Definition: AtlasPID.h:322
FSRPhot
@ FSRPhot
Definition: TruthClasses.h:96
isHiggs
bool isHiggs(const T &p)
APID: HIGGS boson is only one particle.
Definition: AtlasPID.h:335
MCTruthPartClassifier::Tau
@ Tau
Definition: TruthClassifiers.h:148
BBbarMesonPart
@ BBbarMesonPart
Definition: TruthClasses.h:33
MCTruthPartClassifier::defTypeOfMuon
ParticleType defTypeOfMuon(ParticleOrigin MuOrig, bool isPrompt)
Definition: TruthClassifiers.h:80
CCbarMeson
@ CCbarMeson
Definition: TruthClasses.h:83
NonDefined
@ NonDefined
Definition: TruthClasses.h:52
HiggsMSSM
@ HiggsMSSM
Definition: TruthClasses.h:69
MC::isPhysical
bool isPhysical(const T &p)
Identify if the particle is physical, i.e. is stable or decayed.
Definition: HepMCHelpers.h:51
CCbarMesonPart
@ CCbarMesonPart
Definition: TruthClasses.h:35
MCTruthPartClassifier::totalBits
@ totalBits
Definition: TruthClassifiers.h:148
isQuark
bool isQuark(const T &p)
PDG rule 2: Quarks and leptons are numbered consecutively starting from 1 and 11 respectively; to dot...
Definition: AtlasPID.h:134
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
CharmedBaryon
@ CharmedBaryon
Definition: TruthClasses.h:88
isCCbarMeson
bool isCCbarMeson(const T &p)
Definition: AtlasPID.h:690
QCD
@ QCD
Definition: TruthClasses.h:102
MC::findFinalStateParticles
auto findFinalStateParticles(V theVert) -> decltype(theVert->particles_out())
Function to find the stable particle descendants of the given vertex..
Definition: HepMCHelpers.h:247
HepMC::is_simulation_particle
bool is_simulation_particle(const T &p)
Method to establish if a particle (or barcode) was created during the simulation (TODO update to be s...
Definition: MagicNumbers.h:355
BkgTau
@ BkgTau
Definition: TruthClasses.h:21
NonIsoTau
@ NonIsoTau
Definition: TruthClasses.h:20
UnknownElectron
@ UnknownElectron
Definition: TruthClasses.h:10
ParticleOrigin
ParticleOrigin
Definition: TruthClasses.h:51
xAOD::EgammaHelpers::isElectron
bool isElectron(const xAOD::Egamma *eg)
is the object an electron (not Fwd)
Definition: EgammaxAODHelpers.cxx:12
MultiBoson
@ MultiBoson
Definition: TruthClasses.h:101
isZ
bool isZ(const T &p)
Definition: AtlasPID.h:328
StrangeBaryon
@ StrangeBaryon
Definition: TruthClasses.h:87
LightMeson
@ LightMeson
Definition: TruthClasses.h:79
isCharmBaryon
bool isCharmBaryon(const T &p)
Definition: AtlasPID.h:702
UnConverted
@ UnConverted
Definition: TruthClasses.h:108
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:14
MCTruthPartClassifier::isbsm
@ isbsm
Definition: TruthClassifiers.h:148
DiBoson
@ DiBoson
Definition: TruthClasses.h:99
isBBbarMeson
bool isBBbarMeson(const T &p)
Definition: AtlasPID.h:694
IsoTau
@ IsoTau
Definition: TruthClasses.h:19
LQ
@ LQ
Definition: TruthClasses.h:75
MCTruthPartClassifier::stable
@ stable
Definition: TruthClassifiers.h:148
LightMesonPart
@ LightMesonPart
Definition: TruthClasses.h:42
PD
Definition: AthenaSummarySvc.cxx:46
JPsi
@ JPsi
Definition: TruthClasses.h:84
DecaytoElectron
@ DecaytoElectron
Definition: TruthClasses.h:113
CharmedMeson
@ CharmedMeson
Definition: TruthClasses.h:81
IsoMuon
@ IsoMuon
Definition: TruthClasses.h:15
StrangeBaryonPart
@ StrangeBaryonPart
Definition: TruthClasses.h:39
NonIsoMuon
@ NonIsoMuon
Definition: TruthClasses.h:16
OneProng
@ OneProng
Definition: TruthClasses.h:115
CharmedBaryonPart
@ CharmedBaryonPart
Definition: TruthClasses.h:38
MCTruthPartClassifier::defTypeOfHadron
ParticleType defTypeOfHadron(int pdg)
Definition: TruthClassifiers.h:46
isSUSY
bool isSUSY(const T &p)
PDG rule 11d Fundamental supersymmetric particles are identified by adding a nonzero n to the particl...
Definition: AtlasPID.h:388
MCTruthPartClassifier::MCTC_bits
MCTC_bits
Definition: TruthClassifiers.h:148
SinglePhot
@ SinglePhot
Definition: TruthClasses.h:56
MCTruthPartClassifier::defOutComeOfElectron
ParticleOutCome defOutComeOfElectron(T thePart)
Definition: TruthClassifiers.h:189
BottomBaryonPart
@ BottomBaryonPart
Definition: TruthClasses.h:37
UnknownOutCome
@ UnknownOutCome
Definition: TruthClasses.h:107
SUSY
@ SUSY
Definition: TruthClasses.h:77
HeavyBoson
@ HeavyBoson
Definition: TruthClasses.h:70
isHadron
bool isHadron(const T &p)
Definition: AtlasPID.h:300
NuclInteraction
@ NuclInteraction
Definition: TruthClasses.h:111
BottomBaryon
@ BottomBaryon
Definition: TruthClasses.h:89
LightBaryon
@ LightBaryon
Definition: TruthClasses.h:86
NonInteract
@ NonInteract
Definition: TruthClasses.h:110
QuarkWeakDec
@ QuarkWeakDec
Definition: TruthClasses.h:65
MCTruthPartClassifier::defHadronType
ParticleOrigin defHadronType(int pdg)
Definition: TruthClassifiers.h:31
isW
bool isW(const T &p)
Definition: AtlasPID.h:331
isTop
bool isTop(const T &p)
Definition: AtlasPID.h:151
MCTruthPartClassifier::isPrompt
int isPrompt(const unsigned int classify, bool allow_prompt_tau_decays=true)
Definition: TruthClassifiers.h:180
MCTruthPartClassifier
Definition: TruthClassifiers.h:12
ElectrMagInter
@ ElectrMagInter
Definition: TruthClasses.h:112
MC::isBeam
bool isBeam(const T &p)
Identify if the particle is beam particle.
Definition: HepMCHelpers.h:39
MCTruthPartClassifier::convHadronTypeToOrig
ParticleOrigin convHadronTypeToOrig(ParticleType pType, int motherPDG)
Definition: TruthClassifiers.h:15
Higgs
@ Higgs
Definition: TruthClasses.h:68
MCTruthPartClassifier::defJetOrig
ParticleOrigin defJetOrig(const T &allJetMothers)
Definition: TruthClassifiers.h:131
DecayProducts.h
SingleMuon
@ SingleMuon
Definition: TruthClasses.h:55
MCTruthPartClassifier::defTypeOfTau
ParticleType defTypeOfTau(ParticleOrigin TauOrig)
Definition: TruthClassifiers.h:98
isStrangeBaryon
bool isStrangeBaryon(const T &p)
Definition: AtlasPID.h:701
OtherBSM
@ OtherBSM
Definition: TruthClasses.h:78
top
@ top
Definition: TruthClasses.h:64
MCTruthPartClassifier::defOutComeOfPhoton
ParticleOutCome defOutComeOfPhoton(T thePart)
Definition: TruthClassifiers.h:268
FiveProng
@ FiveProng
Definition: TruthClasses.h:117
DecaytoMuon
@ DecaytoMuon
Definition: TruthClasses.h:114
ParticleType
ParticleType
Definition: TruthClasses.h:8
MCTruthPartClassifier::HadTau
@ HadTau
Definition: TruthClassifiers.h:148
NonIsoElectron
@ NonIsoElectron
Definition: TruthClasses.h:12
BkgElectron
@ BkgElectron
Definition: TruthClasses.h:13
ParticleOutCome
ParticleOutCome
Definition: TruthClasses.h:105
HepMCHelpers.h
ZorHeavyBoson
@ ZorHeavyBoson
Definition: TruthClasses.h:100
UnknownPhoton
@ UnknownPhoton
Definition: TruthClasses.h:22
MC::findSimulatedEndVertex
auto findSimulatedEndVertex(T thePart) -> decltype(thePart->end_vertex())
Function to find the end vertex of a particle.
Definition: HepMCHelpers.h:219