ATLAS Offline Software
Loading...
Searching...
No Matches
CalcPartonHistory.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
7
8#ifndef PARTONS_CALCPARTONHISTORY_H
9#define PARTONS_CALCPARTONHISTORY_H
10
11// system include(s):
12#include <vector>
13
14// Framework include(s):
16
17#include "AsgTools/AsgTool.h"
22
23namespace CP {
24using ROOT::Math::PtEtaPhiMVector;
25
27
28 public:
29 explicit CalcPartonHistory(
30 const std::string& name,
31 const std::vector<std::string>& truthCollections = {"TruthTop"});
32 virtual ~CalcPartonHistory() {};
33
37
38 void AddToParticleMap(const xAOD::TruthParticle* particle,
39 const std::string& key);
40 bool ExistsInMap(const std::string& key) const;
41 bool ExistsInKey(const std::string& key,
42 const xAOD::TruthParticle* particle) const;
43 bool Retrievep4(const std::string& key, PtEtaPhiMVector& p4);
44 bool Retrievep4(const std::string& key, PtEtaPhiMVector& p4, const int& idx);
45 bool Retrievep4Gamma(PtEtaPhiMVector& p4, int& parentpdgId);
46 bool RetrievepdgId(const std::string& key, std::vector<int>& pdgIds);
47 bool RetrievepdgId(const std::string& key, int& pdgId);
48 bool RetrievepdgId(const std::string& key, int& pdgId, const int& idx);
49 bool RetrieveParticleInfo(const std::string& prefix,
50 std::vector<const xAOD::TruthParticle*>& particles);
51 bool RetrieveParticleInfo(const std::string& prefix,
52 PtEtaPhiMVector& particle, int& pdgId);
53 bool RetrieveParticleInfo(const std::string& prefix,
54 PtEtaPhiMVector& particle, int& pdgId,
55 const int& idx);
56 bool RetrieveParticleInfo(const std::string& prefix,
57 const std::string& alt_prefix,
58 PtEtaPhiMVector& particle, int& pdgId);
59 bool RetrieveParticleInfo(const std::string& prefix,
60 std::vector<PtEtaPhiMVector>& particles,
61 std::vector<int>& pdgIds);
62
77 void InitializeZDecorators(int nZs = 1, bool extend = false);
78 void InitializeWDecorators(int nWs = 1);
79
80 std::string GetParticleType(const xAOD::TruthParticle* particle);
81
82 void TraceParticle(
83 const xAOD::TruthParticle* particle,
84 std::vector<const xAOD::TruthParticle*>& currentPath,
85 std::vector<std::vector<const xAOD::TruthParticle*>>& allPaths);
86 void TraceParticles(const xAOD::TruthParticleContainer* truthParticles);
87
88 bool handleFSR(const xAOD::TruthParticle* particle, const std::string& newKey,
89 std::string& key);
90 bool handleDecay(const xAOD::TruthParticle* particle, std::string& key,
91 int decayID);
92 void handleSameAsParent(const xAOD::TruthParticle* particle,
93 std::string& key);
94 void handleDefault(const xAOD::TruthParticle* particle,
95 const std::string& newKey, std::string& key);
96
97 void FillParticleMap(
98 std::vector<std::vector<const xAOD::TruthParticle*>>& allPaths);
99
100 // Generic history fillers
101 void FillGenericPartonHistory(const std::string& retrievalstring,
102 const std::string& decorationstring,
103 const int idx);
105 const std::vector<std::string>& retrievalStrings,
106 const std::string& decorationstring, const int idx);
108 const std::vector<std::string>& retrievalStrings,
109 const std::string& decorationstring);
110 void FillGenericVectorPartonHistory(const std::string& retrievalstring,
111 const std::string& decorationstring);
112
113 // Specialised history fillers
114 void FillGammaPartonHistory(const std::string& parent);
115 void FillZPartonHistory(const std::string& parent, int nZs = 1,
116 const std::string& mode = "resonant");
117 void FillZtautauPartonHistory(const std::string& parent, int nZs = 1,
118 const std::string& mode = "resonant");
119 void FillWPartonHistory(const std::string& parent, int nWs = 1,
120 const std::string& mode = "resonant");
123 void FillHiggsPartonHistory(const std::string& mode);
125
126 // Helpers for non-resonant / off-shell reconstruction.
127 void setHiggs(const std::string& fsr);
128 void setW(const std::string& fsr, int nWs);
129 bool getW(const std::string& str_lep, const std::string& str_nu,
130 PtEtaPhiMVector& p1, int& pdgId1, PtEtaPhiMVector& p2, int& pdgId2);
131 void setZ(const std::string& fsr, int nZs);
132 void setZtautau(const std::string& fsr, int nZs);
133 bool getZ(const std::string& str_lep1, const std::string& str_lep2,
134 PtEtaPhiMVector& p1, int& pdgId1, PtEtaPhiMVector& p2, int& pdgId2);
135 bool getZFromTaus(const std::string& fsr, PtEtaPhiMVector& Zdecay1,
136 int& Zdecay1_pdgId, PtEtaPhiMVector& Zdecay2,
137 int& Zdecay2_pdgId, PtEtaPhiMVector& Zdecay1_decay1,
138 int& Zdecay1_decay1_pdgId, PtEtaPhiMVector& Zdecay1_decay2,
139 int& Zdecay1_decay2_pdgId, PtEtaPhiMVector& Zdecay1_decay3,
140 int& Zdecay1_decay3_pdgId, PtEtaPhiMVector& Zdecay2_decay1,
141 int& Zdecay2_decay1_pdgId, PtEtaPhiMVector& Zdecay2_decay2,
142 int& Zdecay2_decay2_pdgId, PtEtaPhiMVector& Zdecay2_decay3,
143 int& Zdecay2_decay3_pdgId);
144
147#ifndef XAOD_STANDALONE
148 using AsgTool::configure;
149#endif
150 void configure(const PartonSchemeConfig& config);
151
152 virtual StatusCode initialize() override;
153 virtual StatusCode execute();
154
155 protected:
156 std::map<std::string, std::vector<const xAOD::TruthParticle*>> m_particleMap;
158
159 const std::vector<std::string> m_truthCollections;
160 std::string
162
163 // this method is used to perform the linking of various TRUTH3 particle
164 // containers for Partons to work
165 virtual StatusCode linkTruthContainers(
167
168 // this is the method that runs the actual parton history reconstruction
169 virtual StatusCode runHistorySaver(
170 const xAOD::TruthParticleContainer* truthParticles,
171 const xAOD::EventInfo* ttbarPartonHistory);
172
173 virtual void initializeDecorators();
174
176 bool m_configured = false;
177
187 const std::vector<std::string>& collections,
188 const std::string& out_contName);
189
199 StatusCode linkBosonCollections();
200
204 const xAOD::TruthParticle* part, const std::string& decorationName);
205
206 private:
213 const std::string& collectionToDecorate,
214 const std::string& collectionToLink, const std::string& nameOfDecoration);
215};
216
217} // namespace CP
218
219#endif
bool getZ(const std::string &str_lep1, const std::string &str_lep2, PtEtaPhiMVector &p1, int &pdgId1, PtEtaPhiMVector &p2, int &pdgId2)
StatusCode buildContainerFromMultipleCollections(const std::vector< std::string > &collections, const std::string &out_contName)
used to build container from multiple collections in DAOD_PHYS we don't have the TruthParticles colle...
CalcPartonHistory(const std::string &name, const std::vector< std::string > &truthCollections={"TruthTop"})
void FillGenericVectorPartonHistory(const std::string &retrievalstring, const std::string &decorationstring)
CalcPartonHistory(CalcPartonHistory &&rhs)=delete
CalcPartonHistory & operator=(const CalcPartonHistory &rhs)=delete
bool ExistsInKey(const std::string &key, const xAOD::TruthParticle *particle) const
void configure(const PartonSchemeConfig &config)
const xAOD::TruthParticle * getTruthParticleLinkedFromDecoration(const xAOD::TruthParticle *part, const std::string &decorationName)
helper method to handle retriveing the truth particle linked in the decoration of another particle
virtual StatusCode runHistorySaver(const xAOD::TruthParticleContainer *truthParticles, const xAOD::EventInfo *ttbarPartonHistory)
void FillParticleMap(std::vector< std::vector< const xAOD::TruthParticle * > > &allPaths)
bool Retrievep4Gamma(PtEtaPhiMVector &p4, int &parentpdgId)
bool RetrieveParticleInfo(const std::string &prefix, std::vector< const xAOD::TruthParticle * > &particles)
const std::vector< std::string > m_truthCollections
void FillHiggsPartonHistory(const std::string &mode)
std::map< std::string, std::vector< const xAOD::TruthParticle * > > m_particleMap
virtual StatusCode linkTruthContainers(const xAOD::TruthParticleContainer *&tp)
void FillWPartonHistory(const std::string &parent, int nWs=1, const std::string &mode="resonant")
std::string GetParticleType(const xAOD::TruthParticle *particle)
bool Retrievep4(const std::string &key, PtEtaPhiMVector &p4)
bool getW(const std::string &str_lep, const std::string &str_nu, PtEtaPhiMVector &p1, int &pdgId1, PtEtaPhiMVector &p2, int &pdgId2)
std::string m_prefix
prefix applied to all decorator and m_particleMap names
CalcPartonHistory(const CalcPartonHistory &rhs)=delete
void FillGammaPartonHistory(const std::string &parent)
void setZ(const std::string &fsr, int nZs)
void setW(const std::string &fsr, int nWs)
bool ExistsInMap(const std::string &key) const
void InitializeZDecorators(int nZs=1, bool extend=false)
void FillZtautauPartonHistory(const std::string &parent, int nZs=1, const std::string &mode="resonant")
bool RetrievepdgId(const std::string &key, std::vector< int > &pdgIds)
bool handleDecay(const xAOD::TruthParticle *particle, std::string &key, int decayID)
bool m_configured
true after configure() has been called
void FillZPartonHistory(const std::string &parent, int nZs=1, const std::string &mode="resonant")
void TraceParticle(const xAOD::TruthParticle *particle, std::vector< const xAOD::TruthParticle * > &currentPath, std::vector< std::vector< const xAOD::TruthParticle * > > &allPaths)
void handleDefault(const xAOD::TruthParticle *particle, const std::string &newKey, std::string &key)
virtual void initializeDecorators()
virtual StatusCode execute()
void TraceParticles(const xAOD::TruthParticleContainer *truthParticles)
StatusCode linkBosonCollections()
currently in DAOD_PHYS TruthTop have links to Ws from the TruthBoson collection, which have no link t...
void FillGenericPartonHistory(const std::string &retrievalstring, const std::string &decorationstring, const int idx)
StatusCode decorateCollectionWithLinksToAnotherCollection(const std::string &collectionToDecorate, const std::string &collectionToLink, const std::string &nameOfDecoration)
helper method currently used in DAOD_PHYS to link particles from a given collection to the same parti...
bool handleFSR(const xAOD::TruthParticle *particle, const std::string &newKey, std::string &key)
void handleSameAsParent(const xAOD::TruthParticle *particle, std::string &key)
void setZtautau(const std::string &fsr, int nZs)
PartonSchemeConfig m_config
scheme configuration set via configure()
bool getZFromTaus(const std::string &fsr, PtEtaPhiMVector &Zdecay1, int &Zdecay1_pdgId, PtEtaPhiMVector &Zdecay2, int &Zdecay2_pdgId, PtEtaPhiMVector &Zdecay1_decay1, int &Zdecay1_decay1_pdgId, PtEtaPhiMVector &Zdecay1_decay2, int &Zdecay1_decay2_pdgId, PtEtaPhiMVector &Zdecay1_decay3, int &Zdecay1_decay3_pdgId, PtEtaPhiMVector &Zdecay2_decay1, int &Zdecay2_decay1_pdgId, PtEtaPhiMVector &Zdecay2_decay2, int &Zdecay2_decay2_pdgId, PtEtaPhiMVector &Zdecay2_decay3, int &Zdecay2_decay3_pdgId)
void AddToParticleMap(const xAOD::TruthParticle *particle, const std::string &key)
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
void setHiggs(const std::string &fsr)
Base class for the dual-use tool implementation classes.
Definition AsgTool.h:47
Select isolated Photons, Electrons and Muons.
EventInfo_v1 EventInfo
Definition of the latest event info version.
TruthParticle_v1 TruthParticle
Typedef to implementation.
TruthParticleContainer_v1 TruthParticleContainer
Declare the latest version of the truth particle container.
Top-level configuration for a named parton history scheme.
Struct to manage and apply decorators to the EventInfo object.