ATLAS Offline Software
Loading...
Searching...
No Matches
TauEfficiencyCorrectionsTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5// EDM include(s):
8
9// Local include(s):
13
14namespace TauAnalysisTools
15{
16
17//______________________________________________________________________________
19 : asg::AsgMetadataTool( sName )
21 , m_bIsData(false)
22 , m_bIsConfigured(false)
23 , m_iRunNumber(0)
24{}
25
26//______________________________________________________________________________
32
33//______________________________________________________________________________
35{
36 ATH_MSG_INFO( "Initializing TauEfficiencyCorrectionsTool" );
37
39
41 ATH_MSG_WARNING("Truth match check will be skipped. This is ONLY FOR TESTING PURPOSE!");
42
43 // check efficiency correction type
45 {
46 ATH_MSG_ERROR("Could not retrieve any EfficiencyCorrectionType");
47 return StatusCode::FAILURE;
48 }
49
50 if(m_sRecommendationTag == "2025-prerec") {
52 } else {
53 ATH_MSG_ERROR("Unknown RecommendationTag " << m_sRecommendationTag);
54 return StatusCode::FAILURE;
55 }
56
57 // for (auto tCommonEfficiencyTool : m_vCommonEfficiencyTools)
58 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
59 {
60 ATH_CHECK((**it).setProperty("OutputLevel", this->msg().level()));
61 ATH_CHECK((**it).initialize());
62 }
63
64 // Add the affecting systematics to the global registry
66 if (!registry.registerSystematics(*this))
67 {
68 ATH_MSG_ERROR ("Unable to register the systematics");
69 return StatusCode::FAILURE;
70 }
71
73
74 return StatusCode::SUCCESS;
75}
76
78{
79 return StatusCode::SUCCESS;
80}
81
83{
84 if (!m_bIsConfigured)
85 {
86 const xAOD::EventInfo* xEventInfo = nullptr;
87 ATH_CHECK(evtStore()->retrieve(xEventInfo,"EventInfo"));
89 m_bIsConfigured = true;
90 }
91
92 if (!m_firstEvent){
94 m_firstEvent = true;
95
96 }
97 if (m_bIsData)
98 return StatusCode::SUCCESS;
99
100 const xAOD::EventInfo* xEventInfo = nullptr;
101 ATH_CHECK(evtStore()->retrieve(xEventInfo, "EventInfo"));
102
104 {
105 // Reset the number at the beginning of event
106 m_iRunNumber = 0;
107 }
108
109 return StatusCode::SUCCESS;
110}
111
112//______________________________________________________________________________
114{
115 ATH_MSG_DEBUG( "TauEfficiencyCorrectionsTool with name " << name() << " is configured as follows:" );
116 for (auto iEfficiencyCorrectionType : m_vEfficiencyCorrectionTypes) {
117 ATH_MSG_DEBUG( " EfficiencyCorrectionTypes " << iEfficiencyCorrectionType );
118 }
119 ATH_MSG_DEBUG( " InputFilePathRecoHadTau " << m_sInputFilePathRecoHadTau );
120 ATH_MSG_DEBUG( " InputFilePathEleIDHadTau " << m_sInputFilePathEleIDHadTau );
121 ATH_MSG_DEBUG( " InputFilePathEleIDElectron " << m_sInputFilePathEleIDElectron );
122 ATH_MSG_DEBUG( " InputFilePathJetIDHadTau " << m_sInputFilePathJetIDHadTau );
123 ATH_MSG_DEBUG( " InputFilePathDecayModeHadTau " << m_sInputFilePathDecayModeHadTau );
124 ATH_MSG_DEBUG( " InputFilePathTriggerHadTau " << m_sInputFilePathTriggerHadTau );
125 ATH_MSG_DEBUG( " RecommendationTag " << m_sRecommendationTag );
126 ATH_MSG_DEBUG( " TriggerName " << m_sTriggerName );
127 ATH_MSG_DEBUG( " UseTauSubstructure " << m_bUseTauSubstructure );
128 ATH_MSG_DEBUG( " JetIDLevel " << m_iJetIDLevel );
129 ATH_MSG_DEBUG( " EleIDLevel " << m_iEleIDLevel );
130 ATH_MSG_DEBUG( " Campaign " << m_sCampaign );
131 ATH_MSG_DEBUG( " useFastSim " << m_useFastSim);
132}
133
134//______________________________________________________________________________
136 double& eff, unsigned int /*iRunNumber*/)
137{
138 eff = 1.;
139
140 if (m_bIsData)
142
145
146 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
147 {
148 if ( !(**it)->isSupportedRunNumber(m_iRunNumber) )
149 continue;
150 double dToolEff = 1.;
151 CP::CorrectionCode tmpCorrectionCode = (**it)->getEfficiencyScaleFactor(xTau, dToolEff, m_iRunNumber);
152 if (tmpCorrectionCode != CP::CorrectionCode::Ok)
153 return tmpCorrectionCode;
154 eff *= dToolEff;
155 }
157}
158
159//______________________________________________________________________________
161{
162 if (m_bIsData)
164
167
168 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
169 {
170 CP::CorrectionCode tmpCorrectionCode = (**it)->applyEfficiencyScaleFactor(xTau, m_iRunNumber);
171 if (tmpCorrectionCode != CP::CorrectionCode::Ok)
172 return tmpCorrectionCode;
173 }
175}
176
178//______________________________________________________________________________
180{
181 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
182 if ((**it)->isAffectedBySystematic(systematic))
183 return true;
184 return false;
185}
186
188//______________________________________________________________________________
190{
191 CP::SystematicSet sAffectingSystematics;
192 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
193 sAffectingSystematics.insert((**it)->affectingSystematics());
194 return sAffectingSystematics;
195}
196
198//______________________________________________________________________________
200{
201 CP::SystematicSet sRecommendedSystematics;
202 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
203 sRecommendedSystematics.insert((**it)->recommendedSystematics());
204 return sRecommendedSystematics;
205}
206
207//______________________________________________________________________________
209{
210 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
211 if ((**it)->applySystematicVariation(sSystematicSet) == StatusCode::FAILURE)
212 return StatusCode::FAILURE;
213 return StatusCode::SUCCESS;
214}
215
216//=================================PRIVATE-PART=================================
218{
219 std::string sDirectory = "TauAnalysisTools/" + std::string(sSharedFilesVersion) + "/EfficiencyCorrections/";
220 for (auto iEfficiencyCorrectionType : m_vEfficiencyCorrectionTypes){
221
222 if (iEfficiencyCorrectionType == SFJetIDHadTau)
223 {
224 if (m_sInputFilePathJetIDHadTau.empty()) {
225 if(m_useFastSim) {
226 ATH_MSG_WARNING("No fast-sim recommendation for Tau RNN, using full sim");
227 }
228
229 if(m_sCampaign=="mc23"){
230 m_sInputFilePathJetIDHadTau = sDirectory + "RNNID_TrueHadTau_mc23_v2.root";
231 } else if (m_sCampaign=="mc20"){
232 m_sInputFilePathJetIDHadTau = sDirectory + "RNNID_TrueHadTau_mc20_v1.root";
233 }
234 }
235 m_sVarName = "TauScaleFactorJetIDHadTau";
236
237 std::string sJetIDWP = ConvertJetIDToString(m_iJetIDLevel);
238 if (sJetIDWP.empty()) {
239 ATH_MSG_WARNING("Could not find valid ID working point. Skip ID efficiency corrections.");
240 continue;
241 }
242
243 asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>* tTool = new asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>("TauAnalysisTools::CommonEfficiencyTool/JetIDHadTauTool", this);
244 m_vCommonEfficiencyTools.push_back(tTool);
245 ATH_CHECK(tTool->setProperty("InputFilePath", m_sInputFilePathJetIDHadTau));
246 ATH_CHECK(tTool->setProperty("VarName", m_sVarName));
247 ATH_CHECK(tTool->setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
248 ATH_CHECK(tTool->setProperty("WP", sJetIDWP));
249 }
250 else if (iEfficiencyCorrectionType == SFRecoHadTau)
251 {
252 if (m_sInputFilePathRecoHadTau.empty()) m_sInputFilePathRecoHadTau = sDirectory + "Reco_TrueHadTau_2026_v0.root";
253 m_sVarName = "TauScaleFactorReconstructionHadTau";
254
255 asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>* tTool = new asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>("TauAnalysisTools::CommonEfficiencyTool/RecoHadTauTool", this);
256 m_vCommonEfficiencyTools.push_back(tTool);
257 ATH_CHECK(tTool->setProperty("InputFilePath", m_sInputFilePathRecoHadTau));
258 ATH_CHECK(tTool->setProperty("VarName", m_sVarName));
259 ATH_CHECK(tTool->setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
260 }
261 else if (iEfficiencyCorrectionType == SFEleIDHadTau)
262 {
263 if (m_sInputFilePathEleIDHadTau.empty()) {
264 if( m_iEleIDLevel == static_cast<int>(ELEIDRNNLOOSE)){
265 m_sInputFilePathEleIDHadTau = sDirectory + "EleRNN_TrueHadTau_2026_eRNNLoose.root";
266 } else if( m_iEleIDLevel == static_cast<int>(ELEIDRNNMEDIUM)){
267 m_sInputFilePathEleIDHadTau = sDirectory + "EleRNN_TrueHadTau_2026_eRNNMedium.root";
268 } else {
269 ATH_MSG_ERROR("SFEleIDHadTau correction not supported for EleIDLevel="<<m_iEleIDLevel);
270 return StatusCode::FAILURE;
271 }
272 }
273 m_sVarName = "TauScaleFactorEleIDHadTau";
274
275 asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>* tTool = new asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>("TauAnalysisTools::CommonEfficiencyTool/EleIDHadTauTool", this);
276 m_vCommonEfficiencyTools.push_back(tTool);
277 ATH_CHECK(tTool->setProperty("InputFilePath", m_sInputFilePathEleIDHadTau));
278 ATH_CHECK(tTool->setProperty("VarName", m_sVarName));
279 ATH_CHECK(tTool->setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
280 ATH_CHECK(tTool->setProperty("WP", ConvertEleIDToString(m_iEleIDLevel)));
281 ATH_CHECK(tTool->setProperty("UseTauSubstructure", false));
282 }
283 else if (iEfficiencyCorrectionType == SFEleIDElectron)
284 {
285 // the path must be updated once RNN eVeto SFs are available
286 if (m_sInputFilePathEleIDElectron.empty()) {
287 if(m_useFastSim) {
288 ATH_MSG_WARNING("No fast-sim recommendation for tau electron veto, using full sim");
289 }
290
291 if(m_sCampaign=="mc23"){
292 if( m_iJetIDLevel == static_cast<int>(JETIDRNNLOOSE)){
293 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_2022_looseRNNTauID_1p.root";
294 } else if( m_iJetIDLevel == static_cast<int>(JETIDRNNMEDIUM)){
295 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_2022_mediumRNNTauID_1p.root";
296 }
297 else {
298 ATH_MSG_ERROR("SFEleIDElectron correction not supported for JetIDLevel="<<m_iJetIDLevel);
299 return StatusCode::FAILURE;
300 }
301 } else if(m_sCampaign=="mc20"){
302 if( m_iJetIDLevel == static_cast<int>(JETIDRNNLOOSE)){
303 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_Run2_looseRNNTauID_1p.root";
304 } else if( m_iJetIDLevel == static_cast<int>(JETIDRNNMEDIUM)){
305 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_Run2_mediumRNNTauID_1p_v1.root";
306 }
307 else {
308 ATH_MSG_ERROR("SFEleIDElectron correction not supported for JetIDLevel="<<m_iJetIDLevel);
309 return StatusCode::FAILURE;
310 }
311 }
312 }
313 m_sVarName = "TauScaleFactorEleIDElectron";
314
315 asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>* tTool = new asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>("TauAnalysisTools::CommonEfficiencyTool/EleIDElectronTool", this);
316 m_vCommonEfficiencyTools.push_back(tTool);
317 ATH_CHECK(tTool->setProperty("InputFilePath", m_sInputFilePathEleIDElectron));
318 ATH_CHECK(tTool->setProperty("VarName", m_sVarName));
319 ATH_CHECK(tTool->setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
320 ATH_CHECK(tTool->setProperty("WP", ConvertEleIDToString(m_iEleIDLevel)));
321 ATH_CHECK(tTool->setProperty("UseTauSubstructure", false));
322
323 } else if (iEfficiencyCorrectionType == SFTriggerHadTau){
324
325 if (m_sTriggerName.empty()) {
326 ATH_MSG_ERROR("Property \"Trigger\" was not set, please provide a trigger name.");
327 return StatusCode::FAILURE;
328 }
329 if (m_sInputFilePathTriggerHadTau.empty()) {
330 // Determine the input file name from the given trigger name.
331 if(m_sCampaign=="mc23a"){
332 if (m_sTriggerName.value().find("mediumRNN_tracktwoMVA") != std::string::npos) {
333 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN/Trigger_TrueHadTau_data2022"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
334 }
335 else {
336 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");
337 return StatusCode::FAILURE;
338 }
339 } else if(m_sCampaign=="mc23d"){
340 if (m_sTriggerName.value().find("mediumRNN_tracktwoMVA") != std::string::npos) {
341 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN/Trigger_TrueHadTau_data2023"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
342 }
343 else {
344 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");
345 return StatusCode::FAILURE;
346 }
347 } else if(m_sCampaign=="mc20"){
348 if (m_sTriggerName.value().find("tracktwoEF") != std::string::npos) {
349 // check explicitly tau160 as the root file for this trigger was renamed
350 if (m_sTriggerName.value().find("tau160") != std::string::npos) {
351 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data2018_comb_HLT_tau160L1TAU100_medium1_tracktwoEF_v1.root";
352 } else {
353 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data2018"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
354 }
355 } else if (m_sTriggerName.value().find("tracktwo") != std::string::npos) {
356 // check explicitly tau160 as the root file for this trigger was renamed
357 if (m_sTriggerName.value().find("tau160") != std::string::npos) {
358 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data161718_comb_HLT_tau160_medium1_tracktwo_v1.root";
359 } else if (m_sTriggerName.value().find("tau125") != std::string::npos) {
360 // fall back to R21 recommendations for tau125 as currently SFs are not available for this trigger
361 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN/Trigger_TrueHadTau_2019-summer_data161718_comb_HLT_tau125_medium1_tracktwo.root";
362 } else if (m_sTriggerName.value().find("tau60") != std::string::npos) {
363 // SFs for tau60 are only for partial period
364 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data1718"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
365 } else {
366 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data161718"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
367 }
368 } else {
369 ATH_MSG_ERROR("Trigger " << m_sTriggerName << " is not supported. Please fix \"TriggerName\" property. If this is correct, then please contact the tau trigger coordinators");
370 return StatusCode::FAILURE;
371 }
372 } else {
373 ATH_MSG_ERROR("SFs are not available for " << m_sCampaign << " campaign. If the config is correct, then please contact the tau trigger coordinators");
374 return StatusCode::FAILURE;
375 }
376 }
377 m_sVarName = "TauScaleFactorTriggerHadTau";
378
379 asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>* tTool = new asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>("TauAnalysisTools::CommonEfficiencyTool/TriggerHadTauTool", this);
380 m_vCommonEfficiencyTools.push_back(tTool);
381 ATH_CHECK(tTool->setProperty("InputFilePath", m_sInputFilePathTriggerHadTau));
382 ATH_CHECK(tTool->setProperty("VarName", m_sVarName));
383 ATH_CHECK(tTool->setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
384 ATH_CHECK(tTool->setProperty("WP", ConvertTriggerIDToString(m_iJetIDLevel)));
385 ATH_CHECK(tTool->setProperty("DoTauTrig", true));
386 }
387 else {
388 ATH_MSG_WARNING("unsupported EfficiencyCorrectionsType with enum " << iEfficiencyCorrectionType);
389 }
390 }
391
392 return StatusCode::SUCCESS;
393}
394
395// auto detection of simulation flavour, used to cross check configuration of tool
396//______________________________________________________________________________
398{
399 if (inputMetaStore()->contains<xAOD::FileMetaData>("FileMetaData")) {
400 const xAOD::FileMetaData* fmd = nullptr;
401 ATH_CHECK( inputMetaStore()->retrieve( fmd, "FileMetaData" ) );
402 std::string simType("");
403 bool result = fmd->value( xAOD::FileMetaData::simFlavour , simType );
404 // if no result -> no simFlavor metadata, so must be data
405 if(result) std::transform(simType.begin(), simType.end(), simType.begin(), ::toupper);
406
407 if( simType.find("ATLFAST3") != std::string::npos && !m_useFastSim){
408 ATH_MSG_WARNING("Input file is AF3 sample but you are _not_ using AF3 corrections and uncertainties, you should set \"useFastSim\" to \"true\"");
409 } else if (simType.find("FULLG4")!=std::string::npos && m_useFastSim){
410 ATH_MSG_WARNING("Input file is full simulation but you are using AF3 corrections and uncertainties, you should set \"useFastSim\" to \"false\"");
411 }
412 }
413
414 return StatusCode::SUCCESS;
415}
416
417//______________________________________________________________________________
418std::string TauEfficiencyCorrectionsTool::ConvertJetIDToString(const int iLevel) const
419{
420 switch(iLevel)
421 {
422 case JETIDNONE:
423 return "none";
424 case JETIDRNNVERYLOOSE:
425 ATH_MSG_WARNING("Efficiency corrections for JETIDRNNVERYLOOSE working point are not supported.");
426 return "";
427 case JETIDRNNLOOSE:
428 return "jetrnnsigloose";
429 case JETIDRNNMEDIUM:
430 return "jetrnnsigmedium";
431 case JETIDRNNTIGHT:
432 return "jetrnnsigtight";
433 default:
434 ATH_MSG_WARNING("No valid JetID level passed.");
435 return "";
436 }
437}
438
439std::string TauEfficiencyCorrectionsTool::ConvertEleIDToString(const int iLevel) const
440{
441 switch(iLevel)
442 {
443 case ELEIDRNNTIGHT:
444 return "eleRNNTight";
445 case ELEIDRNNMEDIUM:
446 return "eleRNNMedium";
447 case ELEIDRNNLOOSE:
448 return "eleRNNLoose";
449 default:
450 ATH_MSG_WARNING("No valid EleID level passed.");
451 return "";
452 }
453}
454
455//______________________________________________________________________________
457{
458 switch(iLevel)
459 {
460 case JETIDRNNLOOSE:
461 return "loose";
462 case JETIDRNNMEDIUM:
463 return "medium";
464 case JETIDRNNTIGHT:
465 return "tight";
466 default:
467 ATH_MSG_WARNING("No valid TriggerID level passed.");
468 return "";
469 }
470}
471
472//______________________________________________________________________________
474{
475 std::string sMeasurement = "_comb_";
476
477 if (m_sTriggerSFMeasurement == "Ztautau")
478 sMeasurement = "_Ztt_";
479 else if (m_sTriggerSFMeasurement == "ttbar")
480 sMeasurement = "_ttbar_";
481 else if (m_sTriggerSFMeasurement != "combined")
482 ATH_MSG_WARNING("Trigger scale factor measurement \'" << m_sTriggerSFMeasurement << "\' is not supported. \'combined\' is used instead.");
483
484 return sMeasurement;
485}
486
488{
489 // read the random run rumber from the EventInfo
491 {
492 static const SG::ConstAccessor<unsigned int> acc_rnd("RandomRunNumber");
493 const xAOD::EventInfo* eventInfo = nullptr;
494 if (!evtStore()->contains<xAOD::EventInfo>("EventInfo") || !evtStore()->retrieve(eventInfo, "EventInfo").isSuccess())
495 {
496 ANA_MSG_ERROR("Could not retrieve EventInfo");
497 return StatusCode::FAILURE;
498 }
499
500 if (!acc_rnd.isAvailable(*eventInfo))
501 {
502 ANA_MSG_ERROR("Failed to find the RandomRunNumber decoration. Call the apply() method from the PileupReweightingTool beforehand to get period dependent SFs.");
503 return StatusCode::FAILURE;
504 }
505
506 m_iRunNumber = acc_rnd(*eventInfo);
507
508 ANA_MSG_VERBOSE("Read RandomRunNumber as " << m_iRunNumber);
509 }
510
511 return StatusCode::SUCCESS;
512}
513
514} // namespace TauAnalysisTools
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(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.
StatusCode registerSystematics(const IReentrantSystematicsTool &tool)
effects: register all the systematics from the tool
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.
std::vector< asg::AnaToolHandle< ITauEfficiencyCorrectionsTool > * > m_vCommonEfficiencyTools
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.
a modified tool handle that allows its owner to configure new tools from the C++ side
AsgMetadataTool(const std::string &name)
Normal ASG tool constructor with a name.
MetaStorePtr_t inputMetaStore() const
Accessor for the input metadata store.
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:114
EventInfo_v1 EventInfo
Definition of the latest event info version.
TauJet_v3 TauJet
Definition of the current "tau version".
FileMetaData_v1 FileMetaData
Declare the latest version of the class.