ATLAS Offline Software
BuildTruthTaus.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef TAUANALYSISTOOLS_BUILDTRUTHTAUS_H
6 #define TAUANALYSISTOOLS_BUILDTRUTHTAUS_H
7 
8 /*
9  author: Dirk Duschinger
10  documentation: https://gitlab.cern.ch/atlas/athena/-/blob/main/PhysicsAnalysis/TauID/TauAnalysisTools/doc/README-TauTruthMatchingTool.rst
11 */
12 
13 // Framework include(s):
15 #include "AsgTools/AnaToolHandle.h"
21 // dummy EventContext for AnalysisBase
23 
24 // Core include(s):
26 
27 // EDM include(s):
28 #include "xAODJet/JetContainer.h"
29 
30 // Local include(s):
32 
33 namespace TauAnalysisTools
34 {
35 
37  : public virtual TauAnalysisTools::IBuildTruthTaus
38  , public asg::AsgMetadataTool
39 {
43 
44 public:
45 
46  struct TruthTausEvent
47  : public ITruthTausEvent
48  {
49  const xAOD::TruthParticleContainer* m_xTruthTauContainerConst = nullptr;
50  const xAOD::TruthParticleContainer* m_xTruthMuonContainerConst = nullptr;
51  const xAOD::TruthParticleContainer* m_xTruthElectronContainerConst = nullptr;
52  const xAOD::JetContainer* m_xTruthJetContainerConst = nullptr;
53  xAOD::TruthParticleContainer* m_xTruthTauContainer = nullptr;
54  xAOD::TruthParticleAuxContainer* m_xTruthTauAuxContainer = nullptr;
55  const xAOD::TruthParticleContainer* m_xTruthParticleContainer = nullptr;
56  };
57 
58  BuildTruthTaus( const std::string& name );
59 
60  virtual ~BuildTruthTaus() = default;
61 
62  // initialize the tool
63  virtual StatusCode initialize() override;
64 
65  virtual void setTruthMatchingMode() override {
66  m_truthMatchingMode = true;
67  };
68 
69  virtual StatusCode retrieveTruthTaus() override;
70  virtual StatusCode retrieveTruthTaus(ITruthTausEvent& truthTausEvent) const override;
71 
72 
73 protected:
74  StatusCode retrieveTruthTaus(TruthTausEvent& truthTausEvent) const;
75 
76 
77 private:
78 
79  struct TauTruthInfo
80  {
81  size_t m_iNChargedPions = 0;
82  size_t m_iNNeutralPions = 0;
83  size_t m_iNChargedOthers = 0;
84  size_t m_iNNeutralOthers = 0;
86  std::vector<int> m_vDecayMode;
87  // default false, if there is a hadron in decay products, it is switched to true
88  bool m_bIsHadronicTau = false;
89 
90  // truth visible kinematic variables
91  TLorentzVector m_vTruthVisTLV;
92  TLorentzVector m_vTruthVisTLVCharged;
93  TLorentzVector m_vTruthVisTLVNeutral;
94 
95  // truth vertices
96  TVector3 m_vDecayVertex;
97  TVector3 m_vProdVertex;
98 
99  };
100 
101 
102  StatusCode buildTruthTausFromTruthParticles(TruthTausEvent& truthTausEvent, const EventContext& ctx) const;
103  StatusCode examineTruthTau(const xAOD::TruthParticle& xTruthParticle) const;
105  TauTruthInfo& truthInfo) const;
106  void printDecay(const xAOD::TruthParticle& xTruthParticle, int depth = 0) const;
107 
108 protected:
109 
110  TruthTausEvent m_truthTausEvent;
111 
112  // temporary, drop at the first occasion
114 
115 private:
116 
117  // properties
118  Gaudi::Property<bool> m_bWriteInvisibleFourMomentum{ this, "WriteInvisibleFourMomentum", false};
119  Gaudi::Property<bool> m_bWriteVisibleChargedFourMomentum{ this, "WriteVisibleChargedFourMomentum", false};
120  Gaudi::Property<bool> m_bWriteVisibleNeutralFourMomentum{ this, "WriteVisibleNeutralFourMomentum", false};
121  Gaudi::Property<bool> m_bWriteDecayModeVector{ this, "WriteDecayModeVector", true};
122  Gaudi::Property<bool> m_bWriteVertices{ this, "WriteVertices", true};
123 
124  // input containers
125  SG::ReadHandleKey<xAOD::TruthParticleContainer> m_truthTauInputContainer { this, "TruthTauContainerName", "TruthTaus", "Truth tau input container name (truth matching mode)" };
126  SG::ReadHandleKey<xAOD::TruthParticleContainer> m_truthParticleContainer { this, "TruthParticleContainerName", "TruthParticles", "Truth particles input container name" };
127  SG::ReadHandleKey<xAOD::TruthParticleContainer> m_truthElectronContainer { this, "TruthElectronContainerName", "TruthElectrons", "Truth electrons input container name" };
128  SG::ReadHandleKey<xAOD::TruthParticleContainer> m_truthMuonContainer { this, "TruthMuonContainerName", "TruthMuons", "Truth muons input container name" };
129  SG::ReadHandleKey<xAOD::JetContainer> m_truthJetContainer { this, "TruthJetContainerName", "AntiKt4TruthDressedWZJets", "Truth jets input container name" };
130  // output container
131  SG::WriteHandleKey<xAOD::TruthParticleContainer> m_truthTauOutputContainer { this, "NewTruthTauContainerName", "TruthTaus", "Truth tau output container name" };
132 
133  // decorations to be read from TruthParticles and copied onto TruthTaus
134  SG::ReadDecorHandleKey<xAOD::TruthParticleContainer> m_originReadDecorKey {this, "inputClassifierParticleOrigin", "TruthParticles.classifierParticleOrigin", "Particle origin"};
135  SG::ReadDecorHandleKey<xAOD::TruthParticleContainer> m_typeReadDecorKey {this, "inputClassifierParticleType", "TruthParticles.classifierParticleType", "Particle type"};
136  SG::ReadDecorHandleKey<xAOD::TruthParticleContainer> m_outcomeReadDecorKey {this, "inputClassifierParticleOutCome", "TruthParticles.classifierParticleOutCome", "Particle outcome"};
137  SG::ReadDecorHandleKey<xAOD::TruthParticleContainer> m_classificationReadDecorKey {this, "inputClassification", "TruthParticles.Classification", "Classification code"};
138 
139  SG::WriteDecorHandleKey<xAOD::TruthParticleContainer> m_linkDecoratorKey {this, "originalTruthParticle", "TruthTaus.originalTruthParticle", "Name of the decoration linking to the original truth particle"};
140  SG::WriteDecorHandleKey<xAOD::TruthParticleContainer> m_originDecoratorKey {this, "classifierParticleOrigin", "TruthTaus.classifierParticleOrigin", "Name of the decoration which records the particle origin"};
141  SG::WriteDecorHandleKey<xAOD::TruthParticleContainer> m_typeDecoratorKey {this, "classifierParticleType", "TruthTaus.classifierParticleType", "Name of the decoration which records the particle type"};
142  SG::WriteDecorHandleKey<xAOD::TruthParticleContainer> m_outcomeDecoratorKey {this, "classifierParticleOutCome", "TruthTaus.classifierParticleOutCome", "Name of the decoration which records the particle outcome"};
143  SG::WriteDecorHandleKey<xAOD::TruthParticleContainer> m_classificationDecoratorKey {this, "Classification", "TruthTaus.Classification", "Name of the decoration which records the particle classification"};
144 
145  bool m_truthMatchingMode = false;
146 
147 }; // class BuildTruthTaus
148 
149 }
150 #endif // TAUANALYSISTOOLS_BUILDTRUTHTAUS_H
TauAnalysisTools::BuildTruthTaus::examineTruthTau
StatusCode examineTruthTau(const xAOD::TruthParticle &xTruthParticle) const
Definition: BuildTruthTaus.cxx:206
TauAnalysisTools::BuildTruthTaus::m_bWriteInvisibleFourMomentum
Gaudi::Property< bool > m_bWriteInvisibleFourMomentum
Definition: BuildTruthTaus.h:118
TauAnalysisTools::BuildTruthTaus::TauTruthInfo::m_iNChargedOthers
size_t m_iNChargedOthers
Definition: BuildTruthTaus.h:83
SG::WriteDecorHandleKey< xAOD::TruthParticleContainer >
TauAnalysisTools
Definition: TruthCollectionMakerTau.h:16
TauAnalysisTools::BuildTruthTaus::TauTruthInfo::m_vTruthVisTLV
TLorentzVector m_vTruthVisTLV
Definition: BuildTruthTaus.h:91
PropertyWrapper.h
egammaParameters::depth
@ depth
pointing depth of the shower as calculated in egammaqgcld
Definition: egammaParamDefs.h:276
TauAnalysisTools::BuildTruthTaus::m_truthElectronContainer
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthElectronContainer
Definition: BuildTruthTaus.h:127
TauAnalysisTools::BuildTruthTaus::m_bWriteVertices
Gaudi::Property< bool > m_bWriteVertices
Definition: BuildTruthTaus.h:122
TauAnalysisTools::BuildTruthTaus::TauTruthInfo
Definition: BuildTruthTaus.h:80
TauAnalysisTools::BuildTruthTaus::TauTruthInfo::m_vDecayVertex
TVector3 m_vDecayVertex
Definition: BuildTruthTaus.h:96
TauAnalysisTools::BuildTruthTaus::printDecay
void printDecay(const xAOD::TruthParticle &xTruthParticle, int depth=0) const
Definition: BuildTruthTaus.cxx:426
TauAnalysisTools::BuildTruthTaus::setTruthMatchingMode
virtual void setTruthMatchingMode() override
Definition: BuildTruthTaus.h:65
TauAnalysisTools::IBuildTruthTaus::ITruthTausEvent
Declare the interface that the class provides.
Definition: IBuildTruthTaus.h:35
CurrentContext.h
TauAnalysisTools::BuildTruthTaus::TauTruthInfo::m_iNNeutralPions
size_t m_iNNeutralPions
Definition: BuildTruthTaus.h:82
TauAnalysisTools::BuildTruthTaus::TauTruthInfo::m_bIsHadronicTau
bool m_bIsHadronicTau
Definition: BuildTruthTaus.h:88
TauAnalysisTools::BuildTruthTaus::retrieveTruthTaus
virtual StatusCode retrieveTruthTaus() override
Definition: BuildTruthTaus.cxx:83
TauAnalysisTools::BuildTruthTaus::TauTruthInfo::m_vDecayMode
std::vector< int > m_vDecayMode
Definition: BuildTruthTaus.h:86
TauAnalysisTools::BuildTruthTaus::TauTruthInfo::m_vTruthVisTLVCharged
TLorentzVector m_vTruthVisTLVCharged
Definition: BuildTruthTaus.h:92
TauAnalysisTools::BuildTruthTaus::m_truthTauOutputContainer
SG::WriteHandleKey< xAOD::TruthParticleContainer > m_truthTauOutputContainer
Definition: BuildTruthTaus.h:131
TauAnalysisTools::BuildTruthTaus::m_typeDecoratorKey
SG::WriteDecorHandleKey< xAOD::TruthParticleContainer > m_typeDecoratorKey
Definition: BuildTruthTaus.h:141
TauAnalysisTools::BuildTruthTaus::m_truthMatchingMode
bool m_truthMatchingMode
Definition: BuildTruthTaus.h:145
TauAnalysisTools::BuildTruthTaus::m_bWriteDecayModeVector
Gaudi::Property< bool > m_bWriteDecayModeVector
Definition: BuildTruthTaus.h:121
TauAnalysisTools::BuildTruthTaus::m_bWriteVisibleChargedFourMomentum
Gaudi::Property< bool > m_bWriteVisibleChargedFourMomentum
Definition: BuildTruthTaus.h:119
SG::ReadHandleKey< xAOD::TruthParticleContainer >
TauAnalysisTools::BuildTruthTaus::m_typeReadDecorKey
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_typeReadDecorKey
Definition: BuildTruthTaus.h:135
TauAnalysisTools::BuildTruthTaus::m_classificationReadDecorKey
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_classificationReadDecorKey
Definition: BuildTruthTaus.h:137
TauAnalysisTools::BuildTruthTaus::initialize
virtual StatusCode initialize() override
Definition: BuildTruthTaus.cxx:32
ReadDecorHandleKey.h
Property holding a SG store/key/clid/attr name from which a ReadDecorHandle is made.
TauAnalysisTools::BuildTruthTaus
Definition: BuildTruthTaus.h:39
TauAnalysisTools::BuildTruthTaus::m_linkDecoratorKey
SG::WriteDecorHandleKey< xAOD::TruthParticleContainer > m_linkDecoratorKey
Definition: BuildTruthTaus.h:139
TauAnalysisTools::BuildTruthTaus::TauTruthInfo::m_vProdVertex
TVector3 m_vProdVertex
Definition: BuildTruthTaus.h:97
TauAnalysisTools::BuildTruthTaus::buildTruthTausFromTruthParticles
StatusCode buildTruthTausFromTruthParticles(TruthTausEvent &truthTausEvent, const EventContext &ctx) const
Definition: BuildTruthTaus.cxx:162
SG::WriteHandleKey< xAOD::TruthParticleContainer >
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TauAnalysisTools::BuildTruthTaus::m_bTruthTauAvailable
bool m_bTruthTauAvailable
Definition: BuildTruthTaus.h:113
ReadHandleKey.h
Property holding a SG store/key/clid from which a ReadHandle is made.
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
WriteHandleKey.h
Property holding a SG store/key/clid from which a WriteHandle is made.
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
TauAnalysisTools::BuildTruthTaus::TauTruthInfo::m_iNChargedPions
size_t m_iNChargedPions
Definition: BuildTruthTaus.h:81
AnaToolHandle.h
TauAnalysisTools::BuildTruthTaus::m_originReadDecorKey
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_originReadDecorKey
Definition: BuildTruthTaus.h:134
xAOD::TruthParticleAuxContainer_v2
Auxiliary store for the truth particles.
Definition: TruthParticleAuxContainer_v2.h:26
IBuildTruthTaus.h
TauAnalysisTools::BuildTruthTaus::m_truthTausEvent
TruthTausEvent m_truthTausEvent
Definition: BuildTruthTaus.h:110
TauAnalysisTools::BuildTruthTaus::m_outcomeReadDecorKey
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_outcomeReadDecorKey
Definition: BuildTruthTaus.h:136
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
TauAnalysisTools::BuildTruthTaus::m_truthTauInputContainer
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthTauInputContainer
Definition: BuildTruthTaus.h:125
TauAnalysisTools::BuildTruthTaus::TauTruthInfo::m_vTruthVisTLVNeutral
TLorentzVector m_vTruthVisTLVNeutral
Definition: BuildTruthTaus.h:93
WriteDecorHandleKey.h
TauAnalysisTools::BuildTruthTaus::m_classificationDecoratorKey
SG::WriteDecorHandleKey< xAOD::TruthParticleContainer > m_classificationDecoratorKey
Definition: BuildTruthTaus.h:143
TauAnalysisTools::BuildTruthTaus::m_truthJetContainer
SG::ReadHandleKey< xAOD::JetContainer > m_truthJetContainer
Definition: BuildTruthTaus.h:129
JetContainer.h
TauAnalysisTools::BuildTruthTaus::m_truthMuonContainer
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthMuonContainer
Definition: BuildTruthTaus.h:128
asg::AsgMetadataTool
Base class for dual-use tools that provide file metadata access.
Definition: AsgMetadataTool.h:48
ASG_TOOL_CLASS
#define ASG_TOOL_CLASS(CLASSNAME, INT1)
Definition: AsgToolMacros.h:68
AsgMetadataTool.h
TauAnalysisTools::IBuildTruthTaus
Definition: IBuildTruthTaus.h:28
TauAnalysisTools::BuildTruthTaus::m_outcomeDecoratorKey
SG::WriteDecorHandleKey< xAOD::TruthParticleContainer > m_outcomeDecoratorKey
Definition: BuildTruthTaus.h:142
TauAnalysisTools::BuildTruthTaus::m_bWriteVisibleNeutralFourMomentum
Gaudi::Property< bool > m_bWriteVisibleNeutralFourMomentum
Definition: BuildTruthTaus.h:120
TauAnalysisTools::BuildTruthTaus::TauTruthInfo::m_iNNeutralOthers
size_t m_iNNeutralOthers
Definition: BuildTruthTaus.h:84
TauAnalysisTools::BuildTruthTaus::TauTruthInfo::m_iNChargedDaughters
size_t m_iNChargedDaughters
Definition: BuildTruthTaus.h:85
TauAnalysisTools::BuildTruthTaus::m_truthParticleContainer
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthParticleContainer
Definition: BuildTruthTaus.h:126
TauAnalysisTools::BuildTruthTaus::m_originDecoratorKey
SG::WriteDecorHandleKey< xAOD::TruthParticleContainer > m_originDecoratorKey
Definition: BuildTruthTaus.h:140
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer >
TauAnalysisTools::BuildTruthTaus::examineTruthTauDecay
StatusCode examineTruthTauDecay(const xAOD::TruthParticle &xTruthParticle, TauTruthInfo &truthInfo) const
Definition: BuildTruthTaus.cxx:339
HepMCHelpers.h
TauAnalysisTools::BuildTruthTaus::~BuildTruthTaus
virtual ~BuildTruthTaus()=default