7 #include <GaudiKernel/SystemOfUnits.h>
13 #include <TLorentzVector.h>
34 std::set<std::string> decor_keys{
37 "HTXS_Stage0_Category",
39 "HTXS_Stage1_Category_pTjet25",
40 "HTXS_Stage1_Category_pTjet30",
41 "HTXS_Stage1_FineIndex_pTjet30",
42 "HTXS_Stage1_FineIndex_pTjet25",
44 "HTXS_Stage1_2_Category_pTjet25",
45 "HTXS_Stage1_2_Category_pTjet30",
46 "HTXS_Stage1_2_FineIndex_pTjet30",
47 "HTXS_Stage1_2_FineIndex_pTjet25",
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",
78 std::vector<EvtInfoDecorKey>
keys = p4_pair.second.vect();
89 return StatusCode::FAILURE;
92 for (
const std::string prod_mode : {
"GGF",
"VBF",
"WH",
"QQ2ZH",
"GG2ZH",
"TTH",
"BBH",
"TH",
"THQB",
"WHT"}) {
94 if (prod_mode ==
"GGF")
96 else if (prod_mode ==
"VBF")
98 else if (prod_mode ==
"WH")
100 else if (prod_mode ==
"QQ2ZH")
102 else if (prod_mode ==
"GG2ZH")
104 else if (prod_mode ==
"TTH")
106 else if (prod_mode ==
"BBH")
108 else if (prod_mode ==
"TH")
110 else if (prod_mode ==
"THQB") {
113 }
else if (prod_mode ==
"WHT") {
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())); }
121 return StatusCode::SUCCESS;
126 const TLorentzVector& p4)
const {
130 return StatusCode::FAILURE;
139 dec_eta(*eventInfo) = p4.Eta();
140 dec_phi(*eventInfo) = p4.Phi();
142 ATH_MSG_DEBUG(
"Decorate "<<
prefix<<
" with pT: "<<p4.Pt()<<
" [GeV], eta: "<<p4.Eta()<<
", phi: "<<p4.Phi()<<
", M: "<<p4.M());
143 return StatusCode::SUCCESS;
148 const std::vector<TLorentzVector>& p4s)
const {
152 return StatusCode::FAILURE;
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) {
167 eta.push_back(p4.Eta());
168 phi.push_back(p4.Phi());
170 ATH_MSG_DEBUG(
"Decorate "<<
prefix<<
" with pT: "<<p4.Pt()<<
" [GeV], eta: "<<p4.Eta()<<
", phi: "<<p4.Phi()<<
", M: "<<p4.M());
172 return StatusCode::SUCCESS;
180 if (!eventInfo.isValid()) {
182 return StatusCode::FAILURE;
188 static const IntDecorator dec_prodMode{
"HTXS_prodMode"};
189 std::vector<HTXSSample>::const_iterator smp_itr =
195 <<
" is not a Higgs sample and not of further interest. Decorate the prod mode information only");
196 return StatusCode::SUCCESS;
204 if (!xTruthEventContainer.isValid()) {
206 return StatusCode::FAILURE;
209 std::vector<HepMC::GenEvent> hepmc_evts =
m_xAODtoHepMCTool->getHepMCEvents(xTruthEventContainer.cptr(), eventInfo.cptr());
211 if (hepmc_evts.empty()) {
214 return StatusCode::FAILURE;
216 ATH_MSG_DEBUG(
"Found "<<hepmc_evts.size()<<
" HepMC events.");
220 std::unique_ptr<HTXS::HiggsClassification> htxs{
m_higgsTruthCatTool->getHiggsTruthCategoryObject(hepmc_evts[0], prodMode)};
223 static const IntDecorator dec_errorCode{
"HTXS_errorCode"};
224 static const IntDecorator dec_stage0Cat{
"HTXS_Stage0_Category"};
226 dec_prodMode(*eventInfo) = htxs->prodMode;
227 dec_errorCode(*eventInfo) = htxs->errorCode;
228 dec_stage0Cat(*eventInfo) = htxs->stage0_cat;
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"};
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);
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"};
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);
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"};
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);
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();
270 static const IntDecorator dec_isZnunu{
"HTXS_isZ2vvDecay"};
271 dec_isZnunu(*eventInfo) = htxs->isZ2vvDecay;
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));
303 return StatusCode::SUCCESS;