ATLAS Offline Software
Loading...
Searching...
No Matches
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
6
12
13
14// -----------------------------------------------------------------------------------------------------
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());
22 ATH_CHECK(m_truthTracksKey.initialize());
23 ATH_CHECK(m_truthClassifier.retrieve());
24 return StatusCode::SUCCESS;
25}
26
27
28// -----------------------------------------------------------------------------------------------------
29StatusCode TrackParticleTruthAlg::execute(const EventContext& ctx) const {
30
36
37 ATH_CHECK(particlesLink.isValid());
38 ATH_CHECK(truthParticleLinkVec.isValid());
39 ATH_CHECK(truthTracks.isValid());
40
41
42 const TrackTruthCollection truthTrackColl=*truthTracks;
43 const xAODTruthParticleLinkVector truthParticleLinks=*truthParticleLinkVec;
44
45 int partInd=0;
46 for( const xAOD::TrackParticle* particle : *particlesLink ){
47
48 ATH_MSG_DEBUG("Looking up truth for pt " << particle->pt() << " eta " << particle->eta() << " phi " << particle->phi());
51 if( !particle->trackLink().isValid()){
52 if (!particle->patternRecoInfo()[xAOD::STACO]) {
53 ATH_MSG_WARNING("Found TrackParticle with Invalid element link, skipping");
54 }
55 //add dummy truth link
56 particlesLink(*particle)=ElementLink<xAOD::TruthParticleContainer>();
57 particlesType(*particle) = 0;
58 particlesOrigin(*particle)= 0;
59 continue;
60 }
61
65 // look-up associated truth particle
66
67 Trk::TrackTruthKey key(particle->trackLink());
68 auto result = truthTrackColl.find(key);
69
70 // if we found a match use it
71 if( result != truthTrackColl.end() ){
72 ATH_MSG_VERBOSE("Found track Truth: uniqueID " << HepMC::uniqueID(&(result->second.particleLink())) << " evt " << result->second.particleLink().eventIndex());
73 link = truthParticleLinks.find(result->second.particleLink());
74
75 // if configured also get truth classification
76
77 if( link.isValid()&& !m_truthClassifier.empty() ){
78 auto truthClass = m_truthClassifier->particleTruthClassifier(*link);
79 type = truthClass.first;
80 origin = truthClass.second;
81 ATH_MSG_VERBOSE("Got truth type " << static_cast<int>(type) << " origin " << static_cast<int>(origin));
82 }
83 }
84
85 if( link.isValid() ){
86 ATH_MSG_DEBUG("Found matching xAOD Truth: uniqueID " << HepMC::uniqueID(*link) << " pt " << (*link)->pt() << " eta " << (*link)->eta() << " phi " << (*link)->phi());
87 // set element link
88 link.toPersistent();
89 particlesLink(*particle)=link;
90
91 }
92 else{ //no truth link, add a dummy
93 particlesLink(*particle)=ElementLink<xAOD::TruthParticleContainer>();
94 }
95
96 if( !m_truthClassifier.empty() ){
97 //use index for these since it's the same particle
98 particlesType(partInd)=static_cast<int>(type);
99 particlesOrigin(partInd)=static_cast<int>(origin);
100 }
101 partInd++;
102 }
103 return StatusCode::SUCCESS;
104}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Handle class for adding a decoration to an object.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
Handle class for adding a decoration to an object.
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_particlesOriginKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_particlesTypeKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trkKey
virtual StatusCode initialize() override
ToolHandle< IMCTruthClassifier > m_truthClassifier
virtual StatusCode execute(const EventContext &ctx) const override
SG::ReadHandleKey< TrackTruthCollection > m_truthTracksKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_particlesLinkKey
SG::ReadHandleKey< xAODTruthParticleLinkVector > m_truthParticleLinkVecKey
ElementLink< xAOD::TruthParticleContainer > find(const HepMcParticleLink &hepMCLink) const
int uniqueID(const T &p)
TrackParticle_v1 TrackParticle
Reference the current persistent version:
@ STACO
Tracks produced by STACO.