ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Tracking
TrkAlgorithms
TrkTruthAlgs
src
TrackParticleTruthAlg.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
TrackParticleTruthAlg.h
"
6
7
#include "
TrkTruthData/TrackTruthKey.h
"
8
#include "
xAODCore/AuxStoreAccessorMacros.h
"
9
#include "
GeneratorObjects/McEventCollection.h
"
10
#include "
StoreGate/WriteDecorHandle.h
"
11
#include "
TruthUtils/MagicNumbers.h
"
12
13
14
// -----------------------------------------------------------------------------------------------------
15
StatusCode
TrackParticleTruthAlg::initialize
() {
16
17
ATH_CHECK
(
m_trkKey
.initialize());
18
ATH_CHECK
(
m_particlesLinkKey
.initialize());
19
ATH_CHECK
(
m_particlesTypeKey
.initialize());
20
ATH_CHECK
(
m_particlesOriginKey
.initialize());
21
ATH_CHECK
(
m_particlesClassificationKey
.initialize());
22
ATH_CHECK
(
m_truthParticleLinkVecKey
.initialize());
23
ATH_CHECK
(
m_truthTracksKey
.initialize());
24
ATH_CHECK
(
m_truthClassifier
.retrieve());
25
return
StatusCode::SUCCESS;
26
}
27
28
29
// -----------------------------------------------------------------------------------------------------
30
StatusCode
TrackParticleTruthAlg::execute
(
const
EventContext& ctx)
const
{
31
32
SG::ReadHandle<TrackTruthCollection>
truthTracks{
m_truthTracksKey
, ctx};
33
SG::ReadHandle<xAODTruthParticleLinkVector>
truthParticleLinkVec{
m_truthParticleLinkVecKey
, ctx};
34
SG::WriteDecorHandle<xAOD::TrackParticleContainer,ElementLink<xAOD::TruthParticleContainer>
> particlesLink{
m_particlesLinkKey
, ctx};
35
SG::WriteDecorHandle<xAOD::TrackParticleContainer,int>
particlesType{
m_particlesTypeKey
, ctx};
36
SG::WriteDecorHandle<xAOD::TrackParticleContainer,int>
particlesOrigin{
m_particlesOriginKey
, ctx};
37
SG::WriteDecorHandle<xAOD::TrackParticleContainer, unsigned int>
particlesClassification{
m_particlesClassificationKey
, ctx};
38
39
ATH_CHECK
(particlesLink.isValid());
40
ATH_CHECK
(truthParticleLinkVec.
isValid
());
41
ATH_CHECK
(truthTracks.
isValid
());
42
43
44
const
TrackTruthCollection
truthTrackColl=*truthTracks;
45
const
xAODTruthParticleLinkVector
truthParticleLinks=*truthParticleLinkVec;
46
47
int
partInd=0;
48
for
(
const
xAOD::TrackParticle
* particle : *particlesLink ){
49
50
ATH_MSG_DEBUG
(
"Looking up truth for pt "
<< particle->pt() <<
" eta "
<< particle->eta() <<
" phi "
<< particle->phi());
53
if
( !particle->trackLink().isValid()){
54
if
(!particle->patternRecoInfo()[
xAOD::STACO
]) {
55
ATH_MSG_WARNING
(
"Found TrackParticle with Invalid element link, skipping"
);
56
}
57
//add dummy truth link
58
particlesLink(*particle) =
ElementLink<xAOD::TruthParticleContainer>
();
59
particlesType(*particle) = 0;
60
particlesOrigin(*particle) = 0;
61
particlesClassification(*particle) = 0;
62
continue
;
63
}
64
65
MCTruthPartClassifier::ParticleType
type
=
MCTruthPartClassifier::Unknown
;
66
MCTruthPartClassifier::ParticleOrigin
origin =
MCTruthPartClassifier::NonDefined
;
67
unsigned
int
classification = 0;
68
ElementLink<xAOD::TruthParticleContainer>
link;
69
// look-up associated truth particle
70
71
Trk::TrackTruthKey
key(particle->trackLink());
72
auto
result = truthTrackColl.find(key);
73
74
// if we found a match use it
75
if
( result != truthTrackColl.end() ){
76
ATH_MSG_VERBOSE
(
"Found track Truth: uniqueID "
<<
HepMC::uniqueID
(&(result->second.particleLink())) <<
" evt "
<< result->second.particleLink().eventIndex());
77
link = truthParticleLinks.
find
(result->second.particleLink());
78
79
// if configured also get truth classification
80
81
if
( link.isValid() && !
m_truthClassifier
.empty() ){
82
auto
truthClass =
m_truthClassifier
->particleTruthClassifier(*link);
83
type
= truthClass.first;
84
origin = truthClass.second;
85
classification = std::get<0>(
MCTruthPartClassifier::defOrigOfParticle
(*link));
// See AGENE-2351
86
ATH_MSG_VERBOSE
(
"Got truth type "
<<
static_cast<
int
>
(
type
) <<
" origin "
<<
static_cast<
int
>
(origin) <<
" classification "
<< classification);
87
}
88
}
89
90
if
( link.isValid() ){
91
ATH_MSG_DEBUG
(
"Found matching xAOD Truth: uniqueID "
<<
HepMC::uniqueID
(*link) <<
" pt "
<< (*link)->pt() <<
" eta "
<< (*link)->eta() <<
" phi "
<< (*link)->phi());
92
// set element link
93
link.toPersistent();
94
particlesLink(*particle)=link;
95
96
}
97
else
{
//no truth link, add a dummy
98
particlesLink(*particle)=
ElementLink<xAOD::TruthParticleContainer>
();
99
}
100
101
if
( !
m_truthClassifier
.empty() ){
102
//use index for these since it's the same particle
103
particlesType(partInd)=
static_cast<
int
>
(
type
);
104
particlesOrigin(partInd)=
static_cast<
int
>
(origin);
105
particlesClassification(partInd)=classification;
106
}
107
partInd++;
108
}
109
return
StatusCode::SUCCESS;
110
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition
AthMsgStreamMacros.h:28
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:32
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
AuxStoreAccessorMacros.h
MagicNumbers.h
McEventCollection.h
WriteDecorHandle.h
Handle class for adding a decoration to an object.
TrackParticleTruthAlg.h
TrackTruthKey.h
ElementLink
ElementLink implementation for ROOT usage.
Definition
A/AthLinks/ElementLink.h:40
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition
StoreGate/StoreGate/WriteDecorHandle.h:100
TrackParticleTruthAlg::m_particlesOriginKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_particlesOriginKey
Definition
TrackParticleTruthAlg.h:34
TrackParticleTruthAlg::m_particlesTypeKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_particlesTypeKey
Definition
TrackParticleTruthAlg.h:32
TrackParticleTruthAlg::m_trkKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trkKey
Definition
TrackParticleTruthAlg.h:26
TrackParticleTruthAlg::initialize
virtual StatusCode initialize() override
Definition
TrackParticleTruthAlg.cxx:15
TrackParticleTruthAlg::m_truthClassifier
ToolHandle< IMCTruthClassifier > m_truthClassifier
Definition
TrackParticleTruthAlg.h:45
TrackParticleTruthAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition
TrackParticleTruthAlg.cxx:30
TrackParticleTruthAlg::m_truthTracksKey
SG::ReadHandleKey< TrackTruthCollection > m_truthTracksKey
Definition
TrackParticleTruthAlg.h:42
TrackParticleTruthAlg::m_particlesClassificationKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_particlesClassificationKey
Definition
TrackParticleTruthAlg.h:36
TrackParticleTruthAlg::m_particlesLinkKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_particlesLinkKey
Decorations for input TrackParticleContainer.
Definition
TrackParticleTruthAlg.h:30
TrackParticleTruthAlg::m_truthParticleLinkVecKey
SG::ReadHandleKey< xAODTruthParticleLinkVector > m_truthParticleLinkVecKey
Definition
TrackParticleTruthAlg.h:39
TrackTruthCollection
Definition
TrackTruthCollection.h:21
Trk::TrackTruthKey
Definition
TrackTruthKey.h:22
xAODTruthParticleLinkVector
Definition
xAODTruthParticleLink.h:26
xAODTruthParticleLinkVector::find
ElementLink< xAOD::TruthParticleContainer > find(const HepMcParticleLink &hepMCLink) const
Definition
xAODTruthParticleLink.h:28
HepMC::uniqueID
int uniqueID(const T &p)
Definition
MagicNumbers.h:89
MCTruthPartClassifier::ParticleOrigin
ParticleOrigin
Definition
TruthClasses.h:53
MCTruthPartClassifier::NonDefined
@ NonDefined
Definition
TruthClasses.h:54
MCTruthPartClassifier::ParticleType
ParticleType
Definition
TruthClasses.h:10
MCTruthPartClassifier::Unknown
@ Unknown
Definition
TruthClasses.h:11
MCTruthPartClassifier::defOrigOfParticle
std::tuple< unsigned int, T > defOrigOfParticle(T thePart)
Definition
TruthClassifiers.h:149
xAOD::TrackParticle
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Definition
Event/xAOD/xAODTracking/xAODTracking/TrackParticle.h:13
xAOD::STACO
@ STACO
Tracks produced by STACO.
Definition
TrackingPrimitives.h:100
type
Generated on
for ATLAS Offline Software by
1.17.0