ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Generators
GeneratorFilters
src
Common.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
#include "
GeneratorFilters/Common.h
"
5
#include "
TruthUtils/TruthClassifiers.h
"
6
namespace
Common
{
7
bool
prompt
(
const
xAOD::TruthParticle
* part,ToolHandle<IMCTruthClassifier>& classif ) {
8
MCTruthPartClassifier::ParticleOrigin
orig = classif->particleTruthClassifier( part ).second;
9
10
switch
(orig) {
11
case
MCTruthPartClassifier::NonDefined
:
12
case
MCTruthPartClassifier::PhotonConv
:
13
case
MCTruthPartClassifier::DalitzDec
:
14
case
MCTruthPartClassifier::ElMagProc
:
15
case
MCTruthPartClassifier::Mu
:
16
case
MCTruthPartClassifier::LightMeson
:
17
case
MCTruthPartClassifier::StrangeMeson
:
18
case
MCTruthPartClassifier::CharmedMeson
:
19
case
MCTruthPartClassifier::BottomMeson
:
20
case
MCTruthPartClassifier::CCbarMeson
:
21
case
MCTruthPartClassifier::JPsi
:
22
case
MCTruthPartClassifier::BBbarMeson
:
23
case
MCTruthPartClassifier::LightBaryon
:
24
case
MCTruthPartClassifier::StrangeBaryon
:
25
case
MCTruthPartClassifier::CharmedBaryon
:
26
case
MCTruthPartClassifier::BottomBaryon
:
27
case
MCTruthPartClassifier::PionDecay
:
28
case
MCTruthPartClassifier::KaonDecay
:
29
return
false
;
30
default
:
31
break
;
32
}
33
return
true
;
34
}
35
36
37
static
bool
fromWZ
(
const
HepMC::ConstGenParticlePtr
& part )
38
{
39
// Loop through parents
40
// Hit a hadron -> return false
41
// Hit a parton -> return true
42
// This catch is important - we *cannot* look explicitly for the W or Z, because some
43
// generators do not include the W or Z in the truth record (like Sherpa)
44
// This code, like the code before it, really assumes one incoming particle per vertex...
45
if
(!part->production_vertex())
return
false
;
46
for
(
const
auto
& iter: part->production_vertex()->particles_in()){
47
int
parent_pdgid = iter->pdg_id();
48
if
(
MC::isW
(parent_pdgid) ||
MC::isZ
(parent_pdgid) )
return
true
;
49
if
(
MC::isHadron
( parent_pdgid ) )
return
false
;
50
if
(
MC::isQuark
( parent_pdgid ) )
return
true
;
51
if
( parent_pdgid == part->pdg_id() )
return
fromWZ
( iter );
52
}
53
return
false
;
54
}
55
56
static
bool
fromTau
(
const
HepMC::ConstGenParticlePtr
& part )
57
{
58
// Loop through parents
59
// Find a tau -> return true
60
// Find a hadron or parton -> return false
61
// This code, like the code before it, really assumes one incoming particle per vertex...
62
if
(!part->production_vertex())
return
false
;
63
for
(
const
auto
& iter: part->production_vertex()->particles_in()){
64
int
parent_pdgid = iter->pdg_id();
65
if
(
MC::isTau
( parent_pdgid ) )
return
true
;
66
if
(
MC::isHadron
( parent_pdgid ) ||
MC::isQuark
( parent_pdgid ) )
return
false
;
67
if
( parent_pdgid == part->pdg_id() )
return
fromTau
( iter );
68
}
69
return
false
;
70
}
71
72
bool
fromWZorTau
(
const
HepMC::ConstGenParticlePtr
& part ) {
return
fromWZ
(part)||
fromTau
(part); }
73
74
75
void
classify
(ToolHandle<IMCTruthClassifier>& classif,
76
const
xAOD::TruthParticle
* theParticle,
77
unsigned
int
& particleOutCome,
78
unsigned
int
& result,
79
int
& hadron_pdg,
80
unsigned
int
&
particleType
,
81
unsigned
int
& particleOrigin )
82
{
83
std::tie(
particleType
, particleOrigin, std::ignore, particleOutCome) = classif->particleTruthClassifier_full(theParticle);
84
auto
tpl =
MCTruthPartClassifier::defOrigOfParticle
(theParticle);
85
result = (
unsigned
int)std::get<0>(tpl);
86
hadron_pdg = std::get<1>(tpl)?std::get<1>(tpl)->pdg_id():0;
87
}
88
}
Common.h
TruthClassifiers.h
particleType
Definition
particleType.h:29
Common
Definition
Common.h:9
Common::fromTau
static bool fromTau(const HepMC::ConstGenParticlePtr &part)
Definition
Common.cxx:56
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:75
Common::fromWZorTau
bool fromWZorTau(const HepMC::ConstGenParticlePtr &part)
Definition
Common.cxx:72
Common::prompt
bool prompt(const xAOD::TruthParticle *part, ToolHandle< IMCTruthClassifier > &m_classif)
Definition
Common.cxx:7
Common::fromWZ
static bool fromWZ(const HepMC::ConstGenParticlePtr &part)
Definition
Common.cxx:37
HepMC::ConstGenParticlePtr
HepMC3::ConstGenParticlePtr ConstGenParticlePtr
Definition
GenParticle.h:20
MCTruthPartClassifier::ParticleOrigin
ParticleOrigin
Definition
TruthClasses.h:53
MCTruthPartClassifier::BottomMeson
@ BottomMeson
Definition
TruthClasses.h:84
MCTruthPartClassifier::ElMagProc
@ ElMagProc
Definition
TruthClasses.h:63
MCTruthPartClassifier::LightBaryon
@ LightBaryon
Definition
TruthClasses.h:88
MCTruthPartClassifier::JPsi
@ JPsi
Definition
TruthClasses.h:86
MCTruthPartClassifier::BBbarMeson
@ BBbarMeson
Definition
TruthClasses.h:87
MCTruthPartClassifier::StrangeMeson
@ StrangeMeson
Definition
TruthClasses.h:82
MCTruthPartClassifier::CharmedBaryon
@ CharmedBaryon
Definition
TruthClasses.h:90
MCTruthPartClassifier::StrangeBaryon
@ StrangeBaryon
Definition
TruthClasses.h:89
MCTruthPartClassifier::LightMeson
@ LightMeson
Definition
TruthClasses.h:81
MCTruthPartClassifier::BottomBaryon
@ BottomBaryon
Definition
TruthClasses.h:91
MCTruthPartClassifier::PhotonConv
@ PhotonConv
Definition
TruthClasses.h:61
MCTruthPartClassifier::KaonDecay
@ KaonDecay
Definition
TruthClasses.h:93
MCTruthPartClassifier::Mu
@ Mu
Definition
TruthClasses.h:64
MCTruthPartClassifier::NonDefined
@ NonDefined
Definition
TruthClasses.h:54
MCTruthPartClassifier::CharmedMeson
@ CharmedMeson
Definition
TruthClasses.h:83
MCTruthPartClassifier::CCbarMeson
@ CCbarMeson
Definition
TruthClasses.h:85
MCTruthPartClassifier::DalitzDec
@ DalitzDec
Definition
TruthClasses.h:62
MCTruthPartClassifier::PionDecay
@ PionDecay
Definition
TruthClasses.h:92
MCTruthPartClassifier::defOrigOfParticle
std::tuple< unsigned int, T > defOrigOfParticle(T thePart)
Definition
TruthClassifiers.h:149
MC::isZ
bool isZ(const T &p)
Definition
HepMCHelpers.h:386
MC::isW
bool isW(const T &p)
Definition
HepMCHelpers.h:389
MC::isQuark
bool isQuark(const T &p)
PDG rule 2: Quarks and leptons are numbered consecutively starting from 1 and 11 respectively; to do ...
Definition
HepMCHelpers.h:174
MC::isHadron
bool isHadron(const T &p)
Definition
HepMCHelpers.h:358
MC::isTau
bool isTau(const T &p)
Definition
HepMCHelpers.h:215
xAOD::TruthParticle
TruthParticle_v1 TruthParticle
Typedef to implementation.
Definition
Event/xAOD/xAODTruth/xAODTruth/TruthParticle.h:15
Generated on
for ATLAS Offline Software by
1.17.0