ATLAS Offline Software
TruthCategoriesDecorator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include <GaudiKernel/SystemOfUnits.h>
8 #include <CxxUtils/StringUtils.h>
10 #include <StoreGate/ReadHandle.h>
12 #include <TEnv.h>
13 #include <TLorentzVector.h>
14 #include <TString.h>
16 #include <xAODJet/JetContainer.h>
18 #include <xAODTruth/TruthVertex.h>
19 
20 namespace DerivationFramework {
21 
23 
25  ATH_MSG_DEBUG("Initialize ");
26 
27  // FOR xAOD->HEPMC :: xAODtoHepMC tool
28  ATH_CHECK(m_xAODtoHepMCTool.retrieve());
29  ATH_CHECK(m_higgsTruthCatTool.retrieve());
30 
31  ATH_CHECK(m_truthEvtKey.initialize());
33 
34  std::set<std::string> decor_keys{
35  "HTXS_prodMode",
36  "HTXS_errorCode",
37  "HTXS_Stage0_Category",
38  // Stage 1 binning
39  "HTXS_Stage1_Category_pTjet25",
40  "HTXS_Stage1_Category_pTjet30",
41  "HTXS_Stage1_FineIndex_pTjet30",
42  "HTXS_Stage1_FineIndex_pTjet25",
43  // Stage 1.2 binning
44  "HTXS_Stage1_2_Category_pTjet25",
45  "HTXS_Stage1_2_Category_pTjet30",
46  "HTXS_Stage1_2_FineIndex_pTjet30",
47  "HTXS_Stage1_2_FineIndex_pTjet25",
48  // stage 1.2. finer binning
49  "HTXS_Stage1_2_Fine_Category_pTjet25",
50  "HTXS_Stage1_2_Fine_Category_pTjet30",
51  "HTXS_Stage1_2_Fine_FineIndex_pTjet30",
52  "HTXS_Stage1_2_Fine_FineIndex_pTjet25",
53 
54  "HTXS_Njets_pTjet25",
55  "HTXS_Njets_pTjet30",
56  "HTXS_isZ2vvDecay",
57  };
58 
59  if (!m_detailLevel) decor_keys.insert("HTXS_Higgs_pt");
60  // The Higgs and the associated V (last instances prior to decay)
61  if (m_detailLevel > 0) {
62  m_p4_decors.insert(std::make_pair("HTXS_Higgs", FourMomDecoration{m_evtInfoKey, "HTXS_Higgs"}));
63  m_p4_decors.insert(std::make_pair("HTXS_V", FourMomDecoration{m_evtInfoKey, "HTXS_V"}));
64  }
65  // Jets built excluding Higgs decay products
66  if (m_detailLevel > 1) {
67  m_p4_decors.insert(std::make_pair("HTXS_V_jets25", FourMomDecoration{m_evtInfoKey, "HTXS_V_jets25"}));
68  m_p4_decors.insert(std::make_pair("HTXS_V_jets30", FourMomDecoration{m_evtInfoKey, "HTXS_V_jets30"}));
69  }
70  // Everybody might not want this ... but good for validation
71  if (m_detailLevel > 2) {
72  m_p4_decors.insert(std::make_pair("HTXS_Higgs_decay", FourMomDecoration{m_evtInfoKey, "HTXS_Higgs_decay"}));
73  m_p4_decors.insert(std::make_pair("HTXS_V_decay", FourMomDecoration{m_evtInfoKey, "HTXS_V_decay"}));
74  }
75 
76  for (const std::string& key : decor_keys) m_STXSDecors.emplace_back(m_evtInfoKey.key() + "." + key);
77  for (auto& p4_pair : m_p4_decors) {
78  std::vector<EvtInfoDecorKey> keys = p4_pair.second.vect();
79  for (EvtInfoDecorKey key : keys) m_STXSDecors.push_back(key);
80  ATH_CHECK(p4_pair.second.initialize());
81 
82  }
84  ATH_CHECK(m_STXSDecors.initialize());
85  // Open the TEnv configuration file
86  TEnv config{};
87  if (config.ReadFile(PathResolverFindCalibFile(m_configPath).c_str(), EEnvLevel(0))) {
88  ATH_MSG_FATAL("Failed to open TEnv file " << m_configPath);
89  return StatusCode::FAILURE;
90  }
91 
92  for (const std::string prod_mode : {"GGF", "VBF", "WH", "QQ2ZH", "GG2ZH", "TTH", "BBH", "TH", "THQB", "WHT"}) {
93  HTXSSample smp{};
94  if (prod_mode == "GGF")
96  else if (prod_mode == "VBF")
97  smp.prod = HTXS::HiggsProdMode::VBF;
98  else if (prod_mode == "WH")
99  smp.prod = HTXS::HiggsProdMode::WH;
100  else if (prod_mode == "QQ2ZH")
101  smp.prod = HTXS::HiggsProdMode::QQ2ZH;
102  else if (prod_mode == "GG2ZH")
103  smp.prod = HTXS::HiggsProdMode::GG2ZH;
104  else if (prod_mode == "TTH")
105  smp.prod = HTXS::HiggsProdMode::TTH;
106  else if (prod_mode == "BBH")
107  smp.prod = HTXS::HiggsProdMode::BBH;
108  else if (prod_mode == "TH")
109  smp.prod = HTXS::HiggsProdMode::TH;
110  else if (prod_mode == "THQB") {
111  smp.th_type = HTXS::tH_type::THQB;
112  smp.prod = HTXS::HiggsProdMode::TH;
113  } else if (prod_mode == "WHT") {
114  smp.th_type = HTXS::tH_type::TWH;
115  smp.prod = HTXS::HiggsProdMode::TH;
116  }
117  std::vector<std::string> dsid_str = CxxUtils::tokenize(config.GetValue(Form("HTXS.MCsamples.%s", prod_mode.c_str()), ""), " ");
118  for (const std::string& dsid : dsid_str) { smp.dsids.insert(std::atoi(dsid.c_str())); }
119  m_htxs_samples.push_back(std::move(smp));
120  }
121  return StatusCode::SUCCESS;
122  }
123 
124  // Save a TLV as 4 floats
125  StatusCode TruthCategoriesDecorator::decorateFourVec(const EventContext& ctx, const std::string& prefix,
126  const TLorentzVector& p4) const {
127  P4DecorMap::const_iterator itr = m_p4_decors.find(prefix);
128  if (itr == m_p4_decors.end()) {
129  ATH_MSG_FATAL("decorateFourVec() -- Key " << prefix << " is unknown");
130  return StatusCode::FAILURE;
131  }
133  FloatDecorator dec_pt{itr->second.pt, ctx};
134  FloatDecorator dec_eta{itr->second.eta, ctx};
135  FloatDecorator dec_phi{itr->second.phi, ctx};
136  FloatDecorator dec_m{itr->second.m, ctx};
137  const xAOD::EventInfo* eventInfo = dec_pt.cptr();
138  dec_pt(*eventInfo) = p4.Pt() * Gaudi::Units::GeV;
139  dec_eta(*eventInfo) = p4.Eta();
140  dec_phi(*eventInfo) = p4.Phi();
141  dec_m(*eventInfo) = p4.M() * Gaudi::Units::GeV;
142  ATH_MSG_DEBUG("Decorate "<<prefix<<" with pT: "<<p4.Pt()<<" [GeV], eta: "<<p4.Eta()<<", phi: "<<p4.Phi()<<", M: "<<p4.M());
143  return StatusCode::SUCCESS;
144  }
145 
146  // Save a vector of TLVs as vectors of float
147  StatusCode TruthCategoriesDecorator::decorateFourVecs(const EventContext& ctx, const std::string& prefix,
148  const std::vector<TLorentzVector>& p4s) const {
149  P4DecorMap::const_iterator itr = m_p4_decors.find(prefix);
150  if (itr == m_p4_decors.end()) {
151  ATH_MSG_FATAL("decorateFourVecs() -- Key " << prefix << " is unknown");
152  return StatusCode::FAILURE;
153  }
155  FloatDecorator dec_pt{itr->second.pt, ctx};
156  FloatDecorator dec_eta{itr->second.eta, ctx};
157  FloatDecorator dec_phi{itr->second.phi, ctx};
158  FloatDecorator dec_m{itr->second.m, ctx};
159  const xAOD::EventInfo* eventInfo = dec_pt.cptr();
160 
161  std::vector<float>&pt = dec_pt(*eventInfo) ;
162  std::vector<float>&eta = dec_eta(*eventInfo);
163  std::vector<float>&phi = dec_phi(*eventInfo) ;
164  std::vector<float>&mass = dec_m(*eventInfo) ;
165  for (const TLorentzVector& p4 : p4s) {
166  pt.push_back(p4.Pt() * Gaudi::Units::GeV);
167  eta.push_back(p4.Eta());
168  phi.push_back(p4.Phi());
169  mass.push_back(p4.M() * Gaudi::Units::GeV);
170  ATH_MSG_DEBUG("Decorate "<<prefix<<" with pT: "<<p4.Pt()<<" [GeV], eta: "<<p4.Eta()<<", phi: "<<p4.Phi()<<", M: "<<p4.M());
171  }
172  return StatusCode::SUCCESS;
173  }
174 
175  StatusCode TruthCategoriesDecorator::execute(const EventContext& ctx) const {
178  // Retrieve the xAOD event info
180  if (!eventInfo.isValid()) {
181  ATH_MSG_FATAL("Failed to retrieve " << m_evtInfoKey.fullKey());
182  return StatusCode::FAILURE;
183  }
184 
185  int mcChannelNumber = eventInfo->mcChannelNumber();
186  if (!mcChannelNumber) mcChannelNumber = eventInfo->runNumber(); // EVNT input
187 
188  static const IntDecorator dec_prodMode{"HTXS_prodMode"};
189  std::vector<HTXSSample>::const_iterator smp_itr =
190  std::find_if(m_htxs_samples.begin(), m_htxs_samples.end(),
191  [mcChannelNumber](const HTXSSample& smp) { return smp.dsids.count(mcChannelNumber); });
192  if (smp_itr == m_htxs_samples.end()) {
193  dec_prodMode(*eventInfo) = HTXS::HiggsProdMode::UNKNOWN;
194  ATH_MSG_DEBUG("The sample " << mcChannelNumber
195  << " is not a Higgs sample and not of further interest. Decorate the prod mode information only");
196  return StatusCode::SUCCESS;
197  }
198 
199  const HTXS::HiggsProdMode prodMode = smp_itr->prod;
200  const HTXS::tH_type th_type = smp_itr->th_type;
201 
202  // Retrieve the xAOD truth
203  SG::ReadHandle<xAOD::TruthEventContainer> xTruthEventContainer{m_truthEvtKey, ctx};
204  if (!xTruthEventContainer.isValid()) {
205  ATH_MSG_FATAL("Failed to retrieve " << m_truthEvtKey.fullKey());
206  return StatusCode::FAILURE;
207  }
208  // convert xAOD -> HepMC
209  std::vector<HepMC::GenEvent> hepmc_evts = m_xAODtoHepMCTool->getHepMCEvents(xTruthEventContainer.cptr(), eventInfo.cptr());
210 
211  if (hepmc_evts.empty()) {
212  // ANGRY MESSAGE HERE
213  ATH_MSG_FATAL("The HEP MC GenEvent conversion failed");
214  return StatusCode::FAILURE;
215  } else {
216  ATH_MSG_DEBUG("Found "<<hepmc_evts.size()<<" HepMC events.");
217  }
218 
219  // classify event according to simplified template cross section
220  std::unique_ptr<HTXS::HiggsClassification> htxs{m_higgsTruthCatTool->getHiggsTruthCategoryObject(hepmc_evts[0], prodMode)};
221  ATH_MSG_DEBUG("Truth categorization done ");
222  // Decorate the enums
223  static const IntDecorator dec_errorCode{"HTXS_errorCode"};
224  static const IntDecorator dec_stage0Cat{"HTXS_Stage0_Category"};
225 
226  dec_prodMode(*eventInfo) = htxs->prodMode;
227  dec_errorCode(*eventInfo) = htxs->errorCode;
228  dec_stage0Cat(*eventInfo) = htxs->stage0_cat;
229 
230  // Stage-1 binning
231  static const IntDecorator dec_stage1CatPt25{"HTXS_Stage1_Category_pTjet25"};
232  static const IntDecorator dec_stage1CatPt30{"HTXS_Stage1_Category_pTjet30"};
233  static const IntDecorator dec_stage1IdxPt25{"HTXS_Stage1_FineIndex_pTjet25"};
234  static const IntDecorator dec_stage1IdxPt30{"HTXS_Stage1_FineIndex_pTjet30"};
235 
236  dec_stage1CatPt25(*eventInfo) = htxs->stage1_cat_pTjet25GeV;
237  dec_stage1CatPt30(*eventInfo) = htxs->stage1_cat_pTjet30GeV;
239  dec_stage1IdxPt25(*eventInfo) = HTXSstage1_to_HTXSstage1FineIndex(*htxs, th_type, true);
240  dec_stage1IdxPt30(*eventInfo) = HTXSstage1_to_HTXSstage1FineIndex(*htxs, th_type, false);
241 
242  // Stage-1.2 binning
243  static const IntDecorator dec_stage1p2_CatPt25{"HTXS_Stage1_2_Category_pTjet25"};
244  static const IntDecorator dec_stage1p2_CatPt30{"HTXS_Stage1_2_Category_pTjet30"};
245  static const IntDecorator dec_stage1p2_IdxPt25{"HTXS_Stage1_2_FineIndex_pTjet25"};
246  static const IntDecorator dec_stage1p2_IdxPt30{"HTXS_Stage1_2_FineIndex_pTjet30"};
247 
248  dec_stage1p2_CatPt25(*eventInfo) = htxs->stage1_2_cat_pTjet25GeV;
249  dec_stage1p2_CatPt30(*eventInfo) = htxs->stage1_2_cat_pTjet30GeV;
251  dec_stage1p2_IdxPt25(*eventInfo) = HTXSstage1_2_to_HTXSstage1_2_FineIndex(*htxs, th_type, true);
252  dec_stage1p2_IdxPt30(*eventInfo) = HTXSstage1_2_to_HTXSstage1_2_FineIndex(*htxs, th_type, false);
253 
254  // Stage-1.2 finer binning
255  static const IntDecorator dec_stage1p2_Fine_CatPt25{"HTXS_Stage1_2_Fine_Category_pTjet25"};
256  static const IntDecorator dec_stage1p2_Fine_CatPt30{"HTXS_Stage1_2_Fine_Category_pTjet30"};
257  static const IntDecorator dec_stage1p2_Fine_IdxPt25{"HTXS_Stage1_2_Fine_FineIndex_pTjet25"};
258  static const IntDecorator dec_stage1p2_Fine_IdxPt30{"HTXS_Stage1_2_Fine_FineIndex_pTjet30"};
259 
260  dec_stage1p2_Fine_CatPt25(*eventInfo) = htxs->stage1_2_fine_cat_pTjet25GeV;
261  dec_stage1p2_Fine_CatPt30(*eventInfo) = htxs->stage1_2_fine_cat_pTjet30GeV;
262  dec_stage1p2_Fine_IdxPt25(*eventInfo) = HTXSstage1_2_Fine_to_HTXSstage1_2_Fine_FineIndex(*htxs, th_type, true);
263  dec_stage1p2_Fine_IdxPt30(*eventInfo) = HTXSstage1_2_Fine_to_HTXSstage1_2_Fine_FineIndex(*htxs, th_type, false);
264 
265  static const IntDecorator dec_NJets25{"HTXS_Njets_pTjet25"};
266  static const IntDecorator dec_NJets30{"HTXS_Njets_pTjet30"};
267  dec_NJets25(*eventInfo) = htxs->jets25.size();
268  dec_NJets30(*eventInfo) = htxs->jets30.size();
269 
270  static const IntDecorator dec_isZnunu{"HTXS_isZ2vvDecay"};
271  dec_isZnunu(*eventInfo) = htxs->isZ2vvDecay;
272 
273  // At the very least, save the Higgs boson pT
274  if (!m_detailLevel) {
275  static const FloatDecorator dec_higgsPt{"HTXS_Higgs_pt"};
276  dec_higgsPt(*eventInfo) = htxs->higgs.Pt() * Gaudi::Units::GeV;
277  }
278  if (m_detailLevel > 0) {
279  // The Higgs and the associated V (last instances prior to decay)
280  ATH_CHECK(decorateFourVec(ctx, "HTXS_Higgs", htxs->higgs));
281  ATH_CHECK(decorateFourVec(ctx, "HTXS_V", htxs->V));
282  }
283 
284  if (m_detailLevel > 1) {
285  // Jets built excluding Higgs decay products
286  ATH_CHECK(decorateFourVecs(ctx, "HTXS_V_jets25", htxs->jets25));
287  ATH_CHECK(decorateFourVecs(ctx, "HTXS_V_jets30", htxs->jets30));
288  }
289 
290  if (m_detailLevel > 2) {
291  // Everybody might not want this ... but good for validation
292  ATH_CHECK(decorateFourVec(ctx, "HTXS_Higgs_decay", htxs->p4decay_higgs));
293  ATH_CHECK(decorateFourVec(ctx, "HTXS_V_decay", htxs->p4decay_V));
294  }
296  ATH_MSG_DEBUG("production mode: " << dec_prodMode(*eventInfo) << ", errorCode: " << dec_errorCode(*eventInfo) << ", Stage0: " << dec_stage0Cat(*eventInfo)
297  << ", " << dec_stage1CatPt25(*eventInfo) << ", Stage1 -- Jet25 " << dec_stage1CatPt25(*eventInfo) << " Idx " << dec_stage1IdxPt25(*eventInfo)
298  << ", Jet30: " << dec_stage1CatPt30(*eventInfo) << " Idx "<< dec_stage1IdxPt30(*eventInfo) << ", Stage 1.2 -- Jet25: "
299  << dec_stage1p2_CatPt25(*eventInfo) << " Idx: " << dec_stage1p2_IdxPt25(*eventInfo) << " Jet30: " << dec_stage1p2_CatPt30(*eventInfo)
300  << " Idx: " << dec_stage1p2_IdxPt30(*eventInfo) << ", HTXS NJets 25" << dec_NJets25(*eventInfo)
301  << " HTXS NJets 30 " << dec_NJets30(*eventInfo) << " Z->nunu" << dec_isZnunu(*eventInfo));
302 
303  return StatusCode::SUCCESS;
304  }
305 
306 } // namespace DerivationFramework
CP::IntDecorator
SG::AuxElement::Decorator< int > IntDecorator
Definition: PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/Defs.h:30
DerivationFramework::TruthCategoriesDecorator::m_detailLevel
Gaudi::Property< int > m_detailLevel
Definition: TruthCategoriesDecorator.h:57
python.StoreID.UNKNOWN
int UNKNOWN
Definition: StoreID.py:16
SG::WriteDecorHandleKey< xAOD::EventInfo >
DerivationFramework::TruthCategoriesDecorator::m_STXSDecors
SG::WriteDecorHandleKeyArray< xAOD::EventInfo > m_STXSDecors
Definition: TruthCategoriesDecorator.h:67
DerivationFramework::TruthCategoriesDecorator::m_truthEvtKey
SG::ReadHandleKey< xAOD::TruthEventContainer > m_truthEvtKey
Definition: TruthCategoriesDecorator.h:63
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
HTXS::GG2ZH
@ GG2ZH
Definition: HiggsTemplateCrossSectionsDefs.h:29
TruthCategoriesDecorator.h
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
CxxUtils::tokenize
std::vector< std::string > tokenize(const std::string &the_str, std::string_view delimiters)
Splits the string into smaller substrings.
Definition: Control/CxxUtils/Root/StringUtils.cxx:15
HTXS::GGF
@ GGF
Definition: HiggsTemplateCrossSectionsDefs.h:29
TruthParticleContainer.h
StringUtils.h
test_pyathena.pt
pt
Definition: test_pyathena.py:11
DerivationFramework::TruthCategoriesDecorator::m_configPath
Gaudi::Property< std::string > m_configPath
Definition: TruthCategoriesDecorator.h:40
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
HTXS::Stage0::BBH
@ BBH
Definition: HiggsTemplateCrossSectionsDefs.h:46
xAOD::mcChannelNumber
mcChannelNumber
Definition: EventInfo_v1.cxx:197
dqt_zlumi_pandas.mass
mass
Definition: dqt_zlumi_pandas.py:170
CP::FloatDecorator
SG::AuxElement::Decorator< float > FloatDecorator
Definition: PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/Defs.h:22
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
DerivationFramework::TruthCategoriesDecorator::execute
StatusCode execute(const EventContext &ctx) const
Definition: TruthCategoriesDecorator.cxx:175
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
DerivationFramework::TruthCategoriesDecorator::TruthCategoriesDecorator
TruthCategoriesDecorator(const std::string &n, ISvcLocator *p)
Definition: TruthCategoriesDecorator.cxx:22
HTXS::Stage0::VBF
@ VBF
Definition: HiggsTemplateCrossSectionsDefs.h:44
DerivationFramework::TruthCategoriesDecorator::m_evtInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_evtInfoKey
Definition: TruthCategoriesDecorator.h:64
DerivationFramework::TruthCategoriesDecorator::HTXSSample::prod
HTXS::HiggsProdMode prod
Higgs production modes, corresponding to input sample.
Definition: TruthCategoriesDecorator.h:43
DerivationFramework::TruthCategoriesDecorator::m_htxs_samples
std::vector< HTXSSample > m_htxs_samples
Definition: TruthCategoriesDecorator.h:50
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:58
HTXS::TWH
@ TWH
Definition: HiggsTemplateCrossSectionsDefs.h:34
beamspotman.n
n
Definition: beamspotman.py:731
Generate_dsid_ranseed.dsid
dsid
Definition: Generate_dsid_ranseed.py:6
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
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:99
DerivationFramework::TruthCategoriesDecorator::initialize
StatusCode initialize()
Definition: TruthCategoriesDecorator.cxx:24
WriteDecorHandle.h
Handle class for adding a decoration to an object.
DerivationFramework::TruthCategoriesDecorator::m_p4_decors
P4DecorMap m_p4_decors
Definition: TruthCategoriesDecorator.h:89
checkCorrelInHIST.prefix
dictionary prefix
Definition: checkCorrelInHIST.py:391
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DerivationFramework::TruthCategoriesDecorator::HTXSSample
Definition: TruthCategoriesDecorator.h:41
DerivationFramework
THE reconstruction tool.
Definition: ParticleSortingAlg.h:24
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
TruthVertex.h
HTXS::HiggsProdMode
HiggsProdMode
Higgs production modes, corresponding to input sample.
Definition: HiggsTemplateCrossSectionsDefs.h:27
PathResolver.h
DerivationFramework::TruthCategoriesDecorator::m_higgsTruthCatTool
ToolHandle< IHiggsTruthCategoryTool > m_higgsTruthCatTool
Definition: TruthCategoriesDecorator.h:37
DerivationFramework::TruthCategoriesDecorator::m_xAODtoHepMCTool
ToolHandle< IxAODtoHepMCTool > m_xAODtoHepMCTool
Definition: TruthCategoriesDecorator.h:36
HTXS::Stage0::TH
@ TH
Definition: HiggsTemplateCrossSectionsDefs.h:46
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:431
HTXS::THQB
@ THQB
Definition: HiggsTemplateCrossSectionsDefs.h:34
DerivationFramework::TruthCategoriesDecorator::FourMomDecoration
Set of DecorHandleKeys to write the four momenta needed for the HTXS categorization.
Definition: TruthCategoriesDecorator.h:70
DerivationFramework::TruthCategoriesDecorator::decorateFourVec
StatusCode decorateFourVec(const EventContext &ctx, const std::string &prefix, const TLorentzVector &p4) const
Definition: TruthCategoriesDecorator.cxx:125
JetContainer.h
HTXS::tH_type
tH_type
Additional identifier flag for TH production modes.
Definition: HiggsTemplateCrossSectionsDefs.h:34
HTXS::Stage0::TTH
@ TTH
Definition: HiggsTemplateCrossSectionsDefs.h:46
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
ReadHandle.h
Handle class for reading from StoreGate.
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
HTXS::WH
@ WH
Definition: HiggsTemplateCrossSectionsDefs.h:29
HepMCHelpers.h
DerivationFramework::TruthCategoriesDecorator::decorateFourVecs
StatusCode decorateFourVecs(const EventContext &ctx, const std::string &prefix, const std::vector< TLorentzVector > &p4s) const
Definition: TruthCategoriesDecorator.cxx:147
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
HTXS::QQ2ZH
@ QQ2ZH
Definition: HiggsTemplateCrossSectionsDefs.h:29