ATLAS Offline Software
Loading...
Searching...
No Matches
TauEfficiencyCorrectionsTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5// EDM include(s):
8
9// Local include(s):
13
15
16namespace TauAnalysisTools
17{
18
19//______________________________________________________________________________
21 : asg::AsgMetadataTool( sName )
22 , m_bIsData(false)
23 , m_bIsConfigured(false)
24 , m_iRunNumber(0)
25{}
26
27//______________________________________________________________________________
30
31//______________________________________________________________________________
33{
34 ATH_MSG_INFO( "Initializing TauEfficiencyCorrectionsTool" );
35
37
39 ATH_MSG_WARNING("Truth match check will be skipped. This is ONLY FOR TESTING PURPOSE!");
40
41 // check efficiency correction type
43 {
44 ATH_MSG_ERROR("Could not retrieve any EfficiencyCorrectionType");
45 return StatusCode::FAILURE;
46 }
47
48 if(m_sRecommendationTag == "2025-prerec") {
50 } else {
51 ATH_MSG_ERROR("Unknown RecommendationTag " << m_sRecommendationTag);
52 return StatusCode::FAILURE;
53 }
54
55 // Add the affecting systematics to the global registry
57 if (!registry.registerSystematics(*this))
58 {
59 ATH_MSG_ERROR ("Unable to register the systematics");
60 return StatusCode::FAILURE;
61 }
62
64
65 return StatusCode::SUCCESS;
66}
67
69{
70 return StatusCode::SUCCESS;
71}
72
74{
75 if (!m_bIsConfigured)
76 {
77 const xAOD::EventInfo* xEventInfo = nullptr;
78 ATH_CHECK(evtStore()->retrieve(xEventInfo,"EventInfo"));
80 m_bIsConfigured = true;
81 }
82
83 if (!m_firstEvent){
85 m_firstEvent = true;
86
87 }
89 return StatusCode::SUCCESS;
90
91 const xAOD::EventInfo* xEventInfo = nullptr;
92 ATH_CHECK(evtStore()->retrieve(xEventInfo, "EventInfo"));
93
95 {
96 // Reset the number at the beginning of event
97 m_iRunNumber = 0;
98 }
99
100 return StatusCode::SUCCESS;
101}
102
103//______________________________________________________________________________
105{
106 ATH_MSG_DEBUG( "TauEfficiencyCorrectionsTool with name " << name() << " is configured as follows:" );
107 for (auto iEfficiencyCorrectionType : m_vEfficiencyCorrectionTypes) {
108 ATH_MSG_DEBUG( " EfficiencyCorrectionTypes " << iEfficiencyCorrectionType );
109 }
110 ATH_MSG_DEBUG( " InputFilePathRecoHadTau " << m_sInputFilePathRecoHadTau );
111 ATH_MSG_DEBUG( " InputFilePathEleIDHadTau " << m_sInputFilePathEleIDHadTau );
112 ATH_MSG_DEBUG( " InputFilePathEleIDElectron " << m_sInputFilePathEleIDElectron );
113 ATH_MSG_DEBUG( " InputFilePathJetIDHadTau " << m_sInputFilePathJetIDHadTau );
114 ATH_MSG_DEBUG( " InputFilePathDecayModeHadTau " << m_sInputFilePathDecayModeHadTau );
115 ATH_MSG_DEBUG( " InputFilePathTriggerHadTau " << m_sInputFilePathTriggerHadTau );
116 ATH_MSG_DEBUG( " RecommendationTag " << m_sRecommendationTag );
117 ATH_MSG_DEBUG( " TriggerName " << m_sTriggerName );
118 ATH_MSG_DEBUG( " UseTauSubstructure " << m_bUseTauSubstructure );
119 ATH_MSG_DEBUG( " JetIDLevel " << m_iJetIDLevel );
120 ATH_MSG_DEBUG( " EleIDLevel " << m_iEleIDLevel );
121 ATH_MSG_DEBUG( " Campaign " << m_sCampaign );
122 ATH_MSG_DEBUG( " useFastSim " << m_useFastSim);
123}
124
125//______________________________________________________________________________
127 double& eff, unsigned int /*iRunNumber*/)
128{
129 eff = 1.;
130
131 if (m_bIsData && !m_applyToData)
133
136
137 if(!(m_tTool->isSupportedRunNumber(m_iRunNumber)))
139
140 double dToolEff = 1.;
141 CP::CorrectionCode tmpCorrectionCode = m_tTool->getEfficiencyScaleFactor(xTau, dToolEff, m_iRunNumber);
142 if (tmpCorrectionCode != CP::CorrectionCode::Ok)
143 return tmpCorrectionCode;
144
145 eff *= dToolEff;
146
148}
149
150//______________________________________________________________________________
152{
153 if (m_bIsData && !m_applyToData)
155
158
159 CP::CorrectionCode tmpCorrectionCode = m_tTool->applyEfficiencyScaleFactor(xTau, m_iRunNumber);
160 if (tmpCorrectionCode != CP::CorrectionCode::Ok)
161 return tmpCorrectionCode;
162
164}
165
167//______________________________________________________________________________
169{
170 if (m_tTool->isAffectedBySystematic(systematic))
171 return true;
172
173 return false;
174}
175
177//______________________________________________________________________________
179{
180 CP::SystematicSet sAffectingSystematics;
181 sAffectingSystematics.insert(m_tTool->affectingSystematics());
182 return sAffectingSystematics;
183}
184
186//______________________________________________________________________________
188{
189 CP::SystematicSet sRecommendedSystematics;
190 sRecommendedSystematics.insert(m_tTool->recommendedSystematics());
191 return sRecommendedSystematics;
192}
193
194//______________________________________________________________________________
196{
197 ATH_CHECK(m_tTool->applySystematicVariation(sSystematicSet));
198 return StatusCode::SUCCESS;
199}
200
201//=================================PRIVATE-PART=================================
203{
204 std::string sDirectory = "TauAnalysisTools/" + std::string(sSharedFilesVersion) + "/EfficiencyCorrections/";
205 for (auto iEfficiencyCorrectionType : m_vEfficiencyCorrectionTypes){
206
207 if (iEfficiencyCorrectionType == SFJetIDHadTau)
208 {
209 if (m_sInputFilePathJetIDHadTau.empty()) {
210
211 if(m_useGNTau){
212 if(m_sCampaign=="mc23"){
213 m_sInputFilePathJetIDHadTau = m_useFastSim ? sDirectory + "GNTauID_TrueHadTau_Run3_incl_AF3.root" : sDirectory + "GNTauID_TrueHadTau_Run3.root";
214 } else if (m_sCampaign=="mc20"){
215 m_sInputFilePathJetIDHadTau = m_useFastSim ? sDirectory + "GNTauID_TrueHadTau_Run2_incl_AF3.root" : sDirectory + "GNTauID_TrueHadTau_Run2.root";
216 } else {
217 ATH_MSG_ERROR("GNTau ID correction not supported for campaign "<< m_sCampaign);
218 return StatusCode::FAILURE;
219 }
220 } else {
221
222 if(m_sCampaign=="mc23"){
223 m_sInputFilePathJetIDHadTau = m_useFastSim ? sDirectory + "RNNID_TrueHadTau_mc23_v2_incl_AF3.root" : sDirectory + "RNNID_TrueHadTau_mc23_v2.root";
224 } else if (m_sCampaign=="mc20"){
225 m_sInputFilePathJetIDHadTau = m_useFastSim ? sDirectory + "RNNID_TrueHadTau_mc20_v1_incl_AF3.root" : sDirectory + "RNNID_TrueHadTau_mc20_v1.root";
226 }
227 }
228 }
229 m_sVarName = "TauScaleFactorJetIDHadTau";
230
231 std::string sJetIDWP = ConvertJetIDToString(m_iJetIDLevel);
232 if (sJetIDWP.empty()) {
233 ATH_MSG_WARNING("Could not find valid ID working point. Skip ID efficiency corrections.");
234 continue;
235 }
236
237 if (m_tTool.empty()){
238 asg::AsgToolConfig config("TauAnalysisTools::CommonEfficiencyTool/JetIDHadTauTool_tauID_"+sJetIDWP);
239 ATH_CHECK(config.setProperty("InputFilePath", m_sInputFilePathJetIDHadTau));
240 ATH_CHECK(config.setProperty("VarName", m_sVarName));
241 ATH_CHECK(config.setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
242 ATH_CHECK(config.setProperty("WP", sJetIDWP));
243 ATH_CHECK(config.setProperty("ApplyToData", m_applyToData));
244 ATH_CHECK(config.makePrivateTool(m_tTool));
245 }
246 ATH_CHECK(m_tTool.retrieve());
247 }
248 else if (iEfficiencyCorrectionType == SFRecoHadTau)
249 {
250 if (m_sInputFilePathRecoHadTau.empty()) m_sInputFilePathRecoHadTau = sDirectory + "Reco_TrueHadTau_2026_v0.root";
251 m_sVarName = "TauScaleFactorReconstructionHadTau";
252
253 if (m_tTool.empty()){
254 asg::AsgToolConfig config("TauAnalysisTools::CommonEfficiencyTool/RecoHadTauTool");
255 ATH_CHECK(config.setProperty("InputFilePath", m_sInputFilePathRecoHadTau));
256 ATH_CHECK(config.setProperty("VarName", m_sVarName));
257 ATH_CHECK(config.setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
258 ATH_CHECK(config.setProperty("ApplyToData", m_applyToData));
259 ATH_CHECK(config.makePrivateTool(m_tTool));
260 }
261 ATH_CHECK(m_tTool.retrieve());
262 }
263 else if (iEfficiencyCorrectionType == SFEleIDHadTau)
264 {
265 if (m_sInputFilePathEleIDHadTau.empty()) {
266 if( m_iEleIDLevel == static_cast<int>(ELEIDRNNLOOSE)){
267 m_sInputFilePathEleIDHadTau = sDirectory + "EleRNN_TrueHadTau_2026_eRNNLoose.root";
268 } else if( m_iEleIDLevel == static_cast<int>(ELEIDRNNMEDIUM)){
269 m_sInputFilePathEleIDHadTau = sDirectory + "EleRNN_TrueHadTau_2026_eRNNMedium.root";
270 } else {
271 ATH_MSG_ERROR("SFEleIDHadTau correction not supported for EleIDLevel="<<m_iEleIDLevel);
272 return StatusCode::FAILURE;
273 }
274 }
275 m_sVarName = "TauScaleFactorEleIDHadTau";
276 std::string ele_wp = ConvertEleIDToString(m_iEleIDLevel);
277
278 if (m_tTool.empty()){
279 asg::AsgToolConfig config("TauAnalysisTools::CommonEfficiencyTool/EleIDHadTauTool_eRNN_"+ele_wp);
280 ATH_CHECK(config.setProperty("InputFilePath", m_sInputFilePathEleIDHadTau));
281 ATH_CHECK(config.setProperty("VarName", m_sVarName));
282 ATH_CHECK(config.setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
283 ATH_CHECK(config.setProperty("WP", ele_wp));
284 ATH_CHECK(config.setProperty("UseTauSubstructure", false));
285 ATH_CHECK(config.setProperty("ApplyToData", m_applyToData));
286 ATH_CHECK(config.makePrivateTool(m_tTool));
287 }
288 ATH_CHECK(m_tTool.retrieve());
289 }
290 else if (iEfficiencyCorrectionType == SFEleIDElectron)
291 {
292 // the path must be updated once RNN eVeto SFs are available
293 if (m_sInputFilePathEleIDElectron.empty()) {
294 if(m_useFastSim) {
295 ATH_MSG_WARNING("No fast-sim recommendation for tau electron veto, using full sim");
296 }
297
298 if(m_sCampaign=="mc23"){
299 if(m_useGNTau){
300 if( m_iJetIDLevel == static_cast<int>(JETIDGNTAULOOSE)){
301 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_2026_looseGNTauID_1p.root";
302 } else if( m_iJetIDLevel == static_cast<int>(JETIDGNTAUMEDIUM)){
303 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_2026_mediumGNTauID_1p.root";
304 }
305 else {
306 ATH_MSG_ERROR("SFEleIDElectron correction not supported for JetIDLevel="<<m_iJetIDLevel);
307 return StatusCode::FAILURE;
308 }
309 } else {
310 if( m_iJetIDLevel == static_cast<int>(JETIDRNNLOOSE)){
311 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_2022_looseRNNTauID_1p.root";
312 } else if( m_iJetIDLevel == static_cast<int>(JETIDRNNMEDIUM)){
313 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_2022_mediumRNNTauID_1p.root";
314 }
315 else {
316 ATH_MSG_ERROR("SFEleIDElectron correction not supported for JetIDLevel="<<m_iJetIDLevel);
317 return StatusCode::FAILURE;
318 }
319 }
320 } else if(m_sCampaign=="mc20"){
321 if(m_useGNTau){
322 if( m_iJetIDLevel == static_cast<int>(JETIDGNTAULOOSE)){
323 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_Run2_looseGNTauID_1p.root";
324 } else if( m_iJetIDLevel == static_cast<int>(JETIDGNTAUMEDIUM)){
325 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_Run2_mediumGNTauID_1p.root";
326 }
327 else {
328 ATH_MSG_ERROR("SFEleIDElectron correction not supported for JetIDLevel="<<m_iJetIDLevel);
329 return StatusCode::FAILURE;
330 }
331 } else {
332 if( m_iJetIDLevel == static_cast<int>(JETIDRNNLOOSE)){
333 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_Run2_looseRNNTauID_1p.root";
334 } else if( m_iJetIDLevel == static_cast<int>(JETIDRNNMEDIUM)){
335 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_Run2_mediumRNNTauID_1p_v1.root";
336 }
337 else {
338 ATH_MSG_ERROR("SFEleIDElectron correction not supported for JetIDLevel="<<m_iJetIDLevel);
339 return StatusCode::FAILURE;
340 }
341 }
342 }
343 }
344 m_sVarName = "TauScaleFactorEleIDElectron";
345 std::string ele_wp = ConvertEleIDToString(m_iEleIDLevel);
346 std::string sJetIDWP = ConvertJetIDToString(m_iJetIDLevel);
347
348 if (m_tTool.empty()){
349 asg::AsgToolConfig config("TauAnalysisTools::CommonEfficiencyTool/EleIDHadTauTool_eRNN_"+ele_wp);
350 ATH_CHECK(config.setProperty("InputFilePath", m_sInputFilePathEleIDElectron));
351 ATH_CHECK(config.setProperty("VarName", m_sVarName));
352 ATH_CHECK(config.setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
353 ATH_CHECK(config.setProperty("WP", ele_wp));
354 ATH_CHECK(config.setProperty("UseTauSubstructure", false));
355 ATH_CHECK(config.setProperty("ApplyToData", m_applyToData));
356 ATH_CHECK(config.makePrivateTool(m_tTool));
357 }
358 ATH_CHECK(m_tTool.retrieve());
359
360 } else if (iEfficiencyCorrectionType == SFTriggerHadTau){
361
362 if (m_sTriggerName.empty()) {
363 ATH_MSG_ERROR("Property \"Trigger\" was not set, please provide a trigger name.");
364 return StatusCode::FAILURE;
365 }
366 if (m_sInputFilePathTriggerHadTau.empty()) {
367 // Determine the input file name from the given trigger name.
368 if(m_sCampaign=="mc23a"){
369 if (m_sTriggerName.value().find("mediumRNN_tracktwoMVA") != std::string::npos) {
370 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN/Trigger_TrueHadTau_data2022"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
371 }
372 else {
373 ATH_MSG_ERROR("Trigger " << m_sTriggerName << " is not supported for " << m_sCampaign << " campaign. Please fix \"TriggerName\" property. In case of doubt please consult with TauTrigger coordinators");
374 return StatusCode::FAILURE;
375 }
376 } else if(m_sCampaign=="mc23d"){
377 if (m_sTriggerName.value().find("mediumRNN_tracktwoMVA") != std::string::npos) {
378 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN/Trigger_TrueHadTau_data2023"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
379 }
380 else {
381 ATH_MSG_ERROR("Trigger " << m_sTriggerName << " is not supported for " << m_sCampaign << " campaign. Please fix \"TriggerName\" property. In case of doubt please consult with TauTrigger coordinators");
382 return StatusCode::FAILURE;
383 }
384 } else if(m_sCampaign=="mc20"){
385 if (m_sTriggerName.value().find("tracktwoEF") != std::string::npos) {
386 // check explicitly tau160 as the root file for this trigger was renamed
387 if (m_sTriggerName.value().find("tau160") != std::string::npos) {
388 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data2018_comb_HLT_tau160L1TAU100_medium1_tracktwoEF_v1.root";
389 } else {
390 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data2018"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
391 }
392 } else if (m_sTriggerName.value().find("tracktwo") != std::string::npos) {
393 // check explicitly tau160 as the root file for this trigger was renamed
394 if (m_sTriggerName.value().find("tau160") != std::string::npos) {
395 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data161718_comb_HLT_tau160_medium1_tracktwo_v1.root";
396 } else if (m_sTriggerName.value().find("tau125") != std::string::npos) {
397 // fall back to R21 recommendations for tau125 as currently SFs are not available for this trigger
398 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN/Trigger_TrueHadTau_2019-summer_data161718_comb_HLT_tau125_medium1_tracktwo.root";
399 } else if (m_sTriggerName.value().find("tau60") != std::string::npos) {
400 // SFs for tau60 are only for partial period
401 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data1718"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
402 } else {
403 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data161718"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
404 }
405 } else {
406 ATH_MSG_ERROR("Trigger " << m_sTriggerName << " is not supported. Please fix \"TriggerName\" property. If this is correct, then please contact the tau trigger coordinators");
407 return StatusCode::FAILURE;
408 }
409 } else {
410 ATH_MSG_ERROR("SFs are not available for " << m_sCampaign << " campaign. If the config is correct, then please contact the tau trigger coordinators");
411 return StatusCode::FAILURE;
412 }
413 }
414 m_sVarName = "TauScaleFactorTriggerHadTau";
415 std::string sJetIDWP = ConvertTriggerIDToString(m_iJetIDLevel);
416
417 if (m_tTool.empty()){
418 asg::AsgToolConfig config("TauAnalysisTools::CommonEfficiencyTool/TriggerHadTauTool_"+m_sTriggerName+"_tauID_"+sJetIDWP);
419 ATH_CHECK(config.setProperty("InputFilePath", m_sInputFilePathTriggerHadTau));
420 ATH_CHECK(config.setProperty("VarName", m_sVarName));
421 ATH_CHECK(config.setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
422 ATH_CHECK(config.setProperty("WP", sJetIDWP));
423 ATH_CHECK(config.setProperty("DoTauTrig", true));
424 ATH_CHECK(config.setProperty("ApplyToData", m_applyToData));
425 ATH_CHECK(config.makePrivateTool(m_tTool));
426 }
427 ATH_CHECK(m_tTool.retrieve());
428 }
429 else {
430 ATH_MSG_WARNING("unsupported EfficiencyCorrectionsType with enum " << iEfficiencyCorrectionType);
431 }
432 }
433
434 return StatusCode::SUCCESS;
435}
436
437// auto detection of simulation flavour, used to cross check configuration of tool
438//______________________________________________________________________________
440{
441 if (inputMetaStore()->contains<xAOD::FileMetaData>("FileMetaData")) {
442 const xAOD::FileMetaData* fmd = nullptr;
443 ATH_CHECK( inputMetaStore()->retrieve( fmd, "FileMetaData" ) );
444 std::string simType("");
445 bool result = fmd->value( xAOD::FileMetaData::simFlavour , simType );
446 // if no result -> no simFlavor metadata, so must be data
447 if(result) std::transform(simType.begin(), simType.end(), simType.begin(), ::toupper);
448
449 if( simType.find("ATLFAST3") != std::string::npos && !m_useFastSim){
450 ATH_MSG_WARNING("Input file is AF3 sample but you are _not_ using AF3 corrections and uncertainties, you should set \"useFastSim\" to \"true\"");
451 } else if (simType.find("FULLG4")!=std::string::npos && m_useFastSim){
452 ATH_MSG_WARNING("Input file is full simulation but you are using AF3 corrections and uncertainties, you should set \"useFastSim\" to \"false\"");
453 }
454 }
455
456 return StatusCode::SUCCESS;
457}
458
459//______________________________________________________________________________
460std::string TauEfficiencyCorrectionsTool::ConvertJetIDToString(const int iLevel) const
461{
462 switch(iLevel)
463 {
464 case JETIDNONE:
465 return "none";
466 case JETIDRNNVERYLOOSE:
467 ATH_MSG_WARNING("Efficiency corrections for JETIDRNNVERYLOOSE working point are not supported.");
468 return "";
469 case JETIDRNNLOOSE:
470 return "jetrnnsigloose";
471 case JETIDRNNMEDIUM:
472 return "jetrnnsigmedium";
473 case JETIDRNNTIGHT:
474 return "jetrnnsigtight";
476 ATH_MSG_WARNING("Efficiency corrections for JETIDGNTAUVERYLOOSE working point are not supported.");
477 return "";
478 case JETIDGNTAULOOSE:
479 return "jetgntausigloose";
480 case JETIDGNTAUMEDIUM:
481 return "jetgntausigmedium";
482 case JETIDGNTAUTIGHT:
483 return "jetgntausigtight";
484 default:
485 ATH_MSG_WARNING("No valid JetID level passed.");
486 return "";
487 }
488}
489
490std::string TauEfficiencyCorrectionsTool::ConvertEleIDToString(const int iLevel) const
491{
492 switch(iLevel)
493 {
494 case ELEIDRNNTIGHT:
495 return "eleRNNTight";
496 case ELEIDRNNMEDIUM:
497 return "eleRNNMedium";
498 case ELEIDRNNLOOSE:
499 return "eleRNNLoose";
500 default:
501 ATH_MSG_WARNING("No valid EleID level passed.");
502 return "";
503 }
504}
505
506//______________________________________________________________________________
508{
509 switch(iLevel)
510 {
511 case JETIDRNNLOOSE:
512 return "loose";
513 case JETIDRNNMEDIUM:
514 return "medium";
515 case JETIDRNNTIGHT:
516 return "tight";
517 default:
518 ATH_MSG_WARNING("No valid TriggerID level passed.");
519 return "";
520 }
521}
522
523//______________________________________________________________________________
525{
526 std::string sMeasurement = "_comb_";
527
528 if (m_sTriggerSFMeasurement == "Ztautau")
529 sMeasurement = "_Ztt_";
530 else if (m_sTriggerSFMeasurement == "ttbar")
531 sMeasurement = "_ttbar_";
532 else if (m_sTriggerSFMeasurement != "combined")
533 ATH_MSG_WARNING("Trigger scale factor measurement \'" << m_sTriggerSFMeasurement << "\' is not supported. \'combined\' is used instead.");
534
535 return sMeasurement;
536}
537
539{
540 // read the random run rumber from the EventInfo
542 {
543 static const SG::ConstAccessor<unsigned int> acc_rnd("RandomRunNumber");
544 const xAOD::EventInfo* eventInfo = nullptr;
545 if (!evtStore()->contains<xAOD::EventInfo>("EventInfo") || !evtStore()->retrieve(eventInfo, "EventInfo").isSuccess())
546 {
547 ANA_MSG_ERROR("Could not retrieve EventInfo");
548 return StatusCode::FAILURE;
549 }
550
551 if (!acc_rnd.isAvailable(*eventInfo))
552 {
553 ANA_MSG_ERROR("Failed to find the RandomRunNumber decoration. Call the apply() method from the PileupReweightingTool beforehand to get period dependent SFs.");
554 return StatusCode::FAILURE;
555 }
556
557 m_iRunNumber = acc_rnd(*eventInfo);
558
559 ANA_MSG_VERBOSE("Read RandomRunNumber as " << m_iRunNumber);
560 }
561
562 return StatusCode::SUCCESS;
563}
564
565} // namespace TauAnalysisTools
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_WARNING(x,...)
#define ATH_MSG_INFO(x,...)
#define ANA_MSG_ERROR(xmsg,...)
Macro printing error messages.
#define ANA_MSG_VERBOSE(xmsg,...)
Macro printing verbose messages.
#define ANA_CHECK(EXP)
check whether the given expression was successful
#define ANA_CHECK_SET_TYPE(TYPE)
set the type for ANA_CHECK to report failures
static const char *const sSharedFilesVersion
Version of the calibration files.
ServiceHandle< StoreGateSvc > & evtStore()
Return value from object correction CP tools.
@ Ok
The correction was done successfully.
This module implements the central registry for handling systematic uncertainties with CP tools.
static SystematicRegistry & getInstance()
Get the singleton instance of the registry for the curren thread.
Class to wrap a set of SystematicVariations.
void insert(const SystematicVariation &systematic)
description: insert a systematic into the set
Helper class to provide constant type-safe access to aux data.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
virtual StatusCode initialize()
Function initialising the tool.
virtual bool isAffectedBySystematic(const CP::SystematicVariation &systematic) const
returns: whether this tool is affected by the given systematics
virtual void printConfig() const
Print tool configuration.
virtual CP::SystematicSet affectingSystematics() const
returns: the list of all systematics this tool can be affected by
TauEfficiencyCorrectionsTool(const std::string &sName)
Create a proper constructor for Athena.
virtual StatusCode beginInputFile()
Function called when a new input file is opened.
virtual CP::SystematicSet recommendedSystematics() const
returns: the list of all systematics this tool recommends to use
Gaudi::Property< std::vector< int > > m_vecEfficiencyCorrectionTypes
virtual CP::CorrectionCode getEfficiencyScaleFactor(const xAOD::TauJet &xTau, double &eff, unsigned int iRunNumber=0)
Get the tau efficiency scale factor.
StatusCode beginEvent()
Function called when a new events is loaded.
ToolHandle< ITauEfficiencyCorrectionsTool > m_tTool
virtual CP::CorrectionCode applyEfficiencyScaleFactor(const xAOD::TauJet &xTau, unsigned int iRunNumber=0)
Decorate the tau with its efficiency scale factor.
virtual StatusCode applySystematicVariation(const CP::SystematicSet &systConfig)
effects: configure this tool for the given list of systematic variations.
AsgMetadataTool(const std::string &name)
Normal ASG tool constructor with a name.
MetaStorePtr_t inputMetaStore() const
Accessor for the input metadata store.
an object that can create a AsgTool
bool eventType(EventType type) const
Check for one particular bitmask value.
@ IS_SIMULATION
true: simulation, false: data
@ simFlavour
Fast or Full sim [string].
bool value(MetaDataType type, std::string &val) const
Get a pre-defined string value out of the object.
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:116
EventInfo_v1 EventInfo
Definition of the latest event info version.
TauJet_v3 TauJet
Definition of the current "tau version".
Definition TauJet.h:17
FileMetaData_v1 FileMetaData
Declare the latest version of the class.