ATLAS Offline Software
IMCTruthClassifier.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 MCTRUTHCLASSIFIER_IMCTRUTHCLASSIFIER_H
5 #define MCTRUTHCLASSIFIER_IMCTRUTHCLASSIFIER_H
6 
14 #include "AsgTools/IAsgTool.h"
17 #include "xAODTruth/TruthVertex.h"
19 
20 #include <memory>
21 #include <unordered_map>
22 #include <vector>
23 
24 #ifndef GENERATIONBASE
26 #include "xAODEgamma/ElectronFwd.h"
27 #include "xAODEgamma/PhotonFwd.h"
28 #include "xAODJet/Jet.h"
29 #include "xAODMuon/Muon.h"
31 #endif
32 
33 #ifndef XAOD_ANALYSIS
34 #include <AtlasHepMC/GenParticle.h>
35 class HepMcParticleLink;
36 #endif
37 
38 #if !defined(XAOD_ANALYSIS) && !defined(GENERATIONBASE)
40 #endif
41 
42 namespace MCTruthPartClassifier {
43  // Additional information that can be returned by the classifier.
44  // Originally, these were all held in member variables in the classifier,
45  // but that prevents the classifier methods from being made const.
46  // Not all of these are filled by all classifier calls; it would probably
47  // be better to split this up into a hierarchy of structures.
48  class Info
49  {
50  public:
51  Info() : eventContext(Gaudi::Hive::currentContext()) {}
52  Info(const EventContext& ctx) : eventContext(ctx) {}
53 
54  ~Info() = default;
55 
56  const EventContext& eventContext;
57  const xAOD::TruthParticle* genPart = nullptr;
58 
60 
61  const xAOD::TruthParticle* mother = nullptr;
62  const xAOD::TruthParticle* Mother() const { return mother;}
63  inline void setMotherProperties(const xAOD::TruthParticle* from) {
64  mother = from;
65  if (!from) return;
66  }
67  inline void resetMotherProperties() { mother = nullptr; }
68 
69  const xAOD::TruthParticle* PhotonMother() const { return photonMother;}
71 
72 #ifndef GENERATIONBASE /*Disable when no recostruction packages are expected*/
73  float deltaRMatch = -999;
74  float deltaPhi = -999;
75  float probTrkToTruth = 0;
77 
78  std::vector<const xAOD::TruthParticle*> egPartPtr;
79  std::vector<float> egPartdR;
80  std::vector<std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin>> egPartClas;
81 
82  std::vector<const xAOD::TrackParticle*> cnvPhotTrkPtr;
83  std::vector<const xAOD::TruthParticle*> cnvPhotTrkToTruthPart;
84  std::vector<MCTruthPartClassifier::ParticleType> cnvPhotPartType;
85  std::vector<MCTruthPartClassifier::ParticleOrigin> cnvPhotPartOrig;
86 #endif
87  };
88 
89 }
90 
91 class IMCTruthClassifier : virtual public asg::IAsgTool
92 {
94 public:
96  virtual ~IMCTruthClassifier() = default;
97 
98  // Methods for Reco object to Truth association
99 #ifndef GENERATIONBASE
100  // Method for Track to Truth association
102  const xAOD::TrackParticle*,
103  MCTruthPartClassifier::Info* info = nullptr) const = 0;
104 #ifndef XAOD_ANALYSIS
105  // Method for egamma clusters to Truth Particle association
107  const xAOD::CaloCluster*, bool,
108  MCTruthPartClassifier::Info* info = nullptr) const = 0;
109 #endif
110 #endif
111 
112 // Methods for Truth Particle classification
113  virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin>
115 
116 #ifndef XAOD_ANALYSIS /*These can not run in Analysis Base*/
117  virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin>
119 
120  virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin>
122 #endif
123 
124 #ifndef GENERATIONBASE
125  // Methods for Reco Particle classification
126  // Rely on the Reco to Truth association and then the Truth classification
127  virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin>
129 
130  virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin>
132 
133  virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin>
135 
136  virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin>
138 
139  virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin>
141 
142  virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin>
143  particleTruthClassifier(const xAOD::Jet*, bool DR, MCTruthPartClassifier::Info* info = nullptr) const = 0;
144 
145 #endif
146 };
147 
148 #endif // MCTRUTHCLASSIFIER_IMCTRUTHCLASSIFIER_H
grepfile.info
info
Definition: grepfile.py:38
MCTruthPartClassifier::Info::Info
Info()
Definition: IMCTruthClassifier.h:51
IMCTruthClassifier::particleTruthClassifier
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > particleTruthClassifier(const xAOD::CaloCluster *, MCTruthPartClassifier::Info *info=nullptr) const =0
MCTruthPartClassifier::Info::resetMotherProperties
void resetMotherProperties()
Definition: IMCTruthClassifier.h:67
IMCTruthClassifier::particleTruthClassifier
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > particleTruthClassifier(const xAOD::Electron *, MCTruthPartClassifier::Info *info=nullptr) const =0
MCTruthPartClassifier::Info::egPartClas
std::vector< std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > > egPartClas
Definition: IMCTruthClassifier.h:80
Jet.h
IMCTruthClassifier::egammaClusMatch
virtual const xAOD::TruthParticle * egammaClusMatch(const xAOD::CaloCluster *, bool, MCTruthPartClassifier::Info *info=nullptr) const =0
IMCTruthClassifier::particleTruthClassifier
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > particleTruthClassifier(const xAOD::Muon *, MCTruthPartClassifier::Info *info=nullptr) const =0
TruthClassifiers.h
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
IMCTruthClassifier::particleTruthClassifier
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > particleTruthClassifier(const xAOD::Photon *, MCTruthPartClassifier::Info *info=nullptr) const =0
MCTruthPartClassifier::Info::~Info
~Info()=default
MCTruthPartClassifier::Info::cnvPhotTrkToTruthPart
std::vector< const xAOD::TruthParticle * > cnvPhotTrkToTruthPart
Definition: IMCTruthClassifier.h:83
MCTruthPartClassifier::Info::photonMother
const xAOD::TruthParticle * photonMother
Definition: IMCTruthClassifier.h:70
Muon.h
CurrentContext.h
IMCTruthClassifier::particleTruthClassifier
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > particleTruthClassifier(const HepMcParticleLink &theLink, MCTruthPartClassifier::Info *info=nullptr) const =0
asg::IAsgTool
Base class for the dual-use tool interface classes.
Definition: IAsgTool.h:41
PhotonFwd.h
MCTruthPartClassifier::Info::deltaPhi
float deltaPhi
Definition: IMCTruthClassifier.h:74
MCTruthPartClassifier::Info::deltaRMatch
float deltaRMatch
Definition: IMCTruthClassifier.h:73
GenParticle.h
MCTruthPartClassifier::Info::probTrkToTruth
float probTrkToTruth
Definition: IMCTruthClassifier.h:75
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
MCTruthPartClassifier::Info::PhotonMother
const xAOD::TruthParticle * PhotonMother() const
Definition: IMCTruthClassifier.h:69
IMCTruthClassifier::getGenPart
virtual const xAOD::TruthParticle * getGenPart(const xAOD::TrackParticle *, MCTruthPartClassifier::Info *info=nullptr) const =0
MCTruthPartClassifier::Info::particleOutCome
MCTruthPartClassifier::ParticleOutCome particleOutCome
Definition: IMCTruthClassifier.h:59
MCTruthClassifierDefs.h
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:59
MCTruthPartClassifier::Info::Info
Info(const EventContext &ctx)
Definition: IMCTruthClassifier.h:52
CaloClusterFwd.h
MCTruthPartClassifier::Info::setMotherProperties
void setMotherProperties(const xAOD::TruthParticle *from)
Definition: IMCTruthClassifier.h:63
IMCTruthClassifier::particleTruthClassifier
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > particleTruthClassifier(const xAOD::Jet *, bool DR, MCTruthPartClassifier::Info *info=nullptr) const =0
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
IMCTruthClassifier::~IMCTruthClassifier
virtual ~IMCTruthClassifier()=default
Virtual destructor.
ElectronFwd.h
ASG_TOOL_INTERFACE
#define ASG_TOOL_INTERFACE(CLASSNAME)
Definition: AsgToolMacros.h:40
IAsgTool.h
IMCTruthClassifier::particleTruthClassifier
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > particleTruthClassifier(HepMC::ConstGenParticlePtr, MCTruthPartClassifier::Info *info=nullptr) const =0
TruthVertex.h
HepMC::ConstGenParticlePtr
const GenParticle * ConstGenParticlePtr
Definition: GenParticle.h:38
MCTruthPartClassifier::Info::genPart
const xAOD::TruthParticle * genPart
Definition: IMCTruthClassifier.h:57
UnknownOutCome
@ UnknownOutCome
Definition: TruthClasses.h:107
MCTruthPartClassifier::Info::eventContext
const EventContext & eventContext
Definition: IMCTruthClassifier.h:56
MCTruthPartClassifier::Info::egPartdR
std::vector< float > egPartdR
Definition: IMCTruthClassifier.h:79
xAOD::Electron_v1
Definition: Electron_v1.h:34
IMCTruthClassifier
Definition: IMCTruthClassifier.h:92
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
IParticleCaloExtensionTool.h
MCTruthPartClassifier::Info::cnvPhotPartOrig
std::vector< MCTruthPartClassifier::ParticleOrigin > cnvPhotPartOrig
Definition: IMCTruthClassifier.h:85
IMCTruthClassifier::particleTruthClassifier
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > particleTruthClassifier(const xAOD::TruthParticle *, MCTruthPartClassifier::Info *info=nullptr) const =0
xAOD::Photon_v1
Definition: Photon_v1.h:37
MCTruthPartClassifier
Definition: TruthClassifiers.h:12
TrackParticleFwd.h
Gaudi
=============================================================================
Definition: CaloGPUClusterAndCellDataMonitorOptions.h:273
MCTruthPartClassifier::Info::Mother
const xAOD::TruthParticle * Mother() const
Definition: IMCTruthClassifier.h:62
MCTruthPartClassifier::Info::cnvPhotTrkPtr
std::vector< const xAOD::TrackParticle * > cnvPhotTrkPtr
Definition: IMCTruthClassifier.h:82
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
TruthParticle.h
MCTruthPartClassifier::Info::mother
const xAOD::TruthParticle * mother
Definition: IMCTruthClassifier.h:61
MCTruthPartClassifier::Info::cnvPhotPartType
std::vector< MCTruthPartClassifier::ParticleType > cnvPhotPartType
Definition: IMCTruthClassifier.h:84
MCTruthPartClassifier::Info
Definition: IMCTruthClassifier.h:49
ParticleOutCome
ParticleOutCome
Definition: TruthClasses.h:105
MCTruthPartClassifier::Info::egPartPtr
std::vector< const xAOD::TruthParticle * > egPartPtr
Definition: IMCTruthClassifier.h:78
MCTruthPartClassifier::Info::numOfSiHits
uint8_t numOfSiHits
Definition: IMCTruthClassifier.h:76
IMCTruthClassifier::particleTruthClassifier
virtual std::pair< MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin > particleTruthClassifier(const xAOD::TrackParticle *, MCTruthPartClassifier::Info *info=nullptr) const =0