ATLAS Offline Software
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 
23  ATH_CHECK(m_truthClassifier.retrieve());
24  return StatusCode::SUCCESS;
25 }
26 
27 
28 // -----------------------------------------------------------------------------------------------------
29 StatusCode 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
57  particlesType(*particle) = 0;
58  particlesOrigin(*particle)= 0;
59  continue;
60  }
61 
62  MCTruthPartClassifier::ParticleType type = MCTruthPartClassifier::Unknown;
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
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 }
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:79
get_generator_info.result
result
Definition: get_generator_info.py:21
Trk::TrackTruthKey
Definition: TrackTruthKey.h:22
AuxStoreAccessorMacros.h
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
xAODTruthParticleLinkVector::find
ElementLink< xAOD::TruthParticleContainer > find(const HepMcParticleLink &hepMCLink) const
Definition: xAODTruthParticleLink.h:28
TrackParticleTruthAlg::m_particlesTypeKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_particlesTypeKey
Definition: TrackParticleTruthAlg.h:31
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
TrackTruthKey.h
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
TrackParticleTruthAlg::m_truthTracksKey
SG::ReadHandleKey< TrackTruthCollection > m_truthTracksKey
Definition: TrackParticleTruthAlg.h:39
TrackParticleTruthAlg::m_particlesLinkKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_particlesLinkKey
Definition: TrackParticleTruthAlg.h:29
TrackParticleTruthAlg::m_particlesOriginKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_particlesOriginKey
Definition: TrackParticleTruthAlg.h:33
NonDefined
@ NonDefined
Definition: TruthClasses.h:52
TrackTruthCollection
Definition: TrackTruthCollection.h:21
TrackParticleTruthAlg::m_trkKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trkKey
Definition: TrackParticleTruthAlg.h:26
McEventCollection.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ParticleOrigin
ParticleOrigin
Definition: TruthClasses.h:51
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:100
TrackParticleTruthAlg::m_truthParticleLinkVecKey
SG::ReadHandleKey< xAODTruthParticleLinkVector > m_truthParticleLinkVecKey
Definition: TrackParticleTruthAlg.h:36
WriteDecorHandle.h
Handle class for adding a decoration to an object.
HepMC::uniqueID
int uniqueID(const T &p)
Definition: MagicNumbers.h:116
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
MagicNumbers.h
TrackParticleTruthAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TrackParticleTruthAlg.cxx:29
SG::WriteDecorHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAODTruthParticleLinkVector
Definition: xAODTruthParticleLink.h:26
TrackParticleTruthAlg.h
xAOD::STACO
@ STACO
Tracks produced by STACO.
Definition: TrackingPrimitives.h:100
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
TrackParticleTruthAlg::m_truthClassifier
ToolHandle< IMCTruthClassifier > m_truthClassifier
Definition: TrackParticleTruthAlg.h:42
TrackParticleTruthAlg::initialize
virtual StatusCode initialize() override
Definition: TrackParticleTruthAlg.cxx:15
ParticleType
ParticleType
Definition: TruthClasses.h:8
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37