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 const xAOD::EventInfo* xEventInfo = nullptr;
80 ATH_CHECK(evtStore()->retrieve(xEventInfo, "EventInfo"));
81
82 return StatusCode::SUCCESS;
83}
84
86{
87 if (!m_bIsConfigured)
88 {
89 const xAOD::EventInfo* xEventInfo = nullptr;
90 ATH_CHECK(evtStore()->retrieve(xEventInfo,"EventInfo"));
92 m_bIsConfigured = true;
93 }
94
95 if (!m_firstEvent){
97 m_firstEvent = true;
98
99 }
100 if (m_bIsData)
101 return StatusCode::SUCCESS;
102
103 const xAOD::EventInfo* xEventInfo = nullptr;
104 ATH_CHECK(evtStore()->retrieve(xEventInfo, "EventInfo"));
105
107 {
108 // Reset the number at the beginning of event
109 m_iRunNumber = 0;
110 }
111
112 return StatusCode::SUCCESS;
113}
114
115//______________________________________________________________________________
117{
118 ATH_MSG_DEBUG( "TauEfficiencyCorrectionsTool with name " << name() << " is configured as follows:" );
119 for (auto iEfficiencyCorrectionType : m_vEfficiencyCorrectionTypes) {
120 ATH_MSG_DEBUG( " EfficiencyCorrectionTypes " << iEfficiencyCorrectionType );
121 }
122 ATH_MSG_DEBUG( " InputFilePathRecoHadTau " << m_sInputFilePathRecoHadTau );
123 ATH_MSG_DEBUG( " InputFilePathEleIDHadTau " << m_sInputFilePathEleIDHadTau );
124 ATH_MSG_DEBUG( " InputFilePathEleIDElectron " << m_sInputFilePathEleIDElectron );
125 ATH_MSG_DEBUG( " InputFilePathJetIDHadTau " << m_sInputFilePathJetIDHadTau );
126 ATH_MSG_DEBUG( " InputFilePathDecayModeHadTau " << m_sInputFilePathDecayModeHadTau );
127 ATH_MSG_DEBUG( " InputFilePathTriggerHadTau " << m_sInputFilePathTriggerHadTau );
128 ATH_MSG_DEBUG( " RecommendationTag " << m_sRecommendationTag );
129 ATH_MSG_DEBUG( " TriggerName " << m_sTriggerName );
130 ATH_MSG_DEBUG( " UseTauSubstructure " << m_bUseTauSubstructure );
131 ATH_MSG_DEBUG( " JetIDLevel " << m_iJetIDLevel );
132 ATH_MSG_DEBUG( " EleIDLevel " << m_iEleIDLevel );
133 ATH_MSG_DEBUG( " Campaign " << m_sCampaign );
134 ATH_MSG_DEBUG( " useFastSim " << m_useFastSim);
135}
136
137//______________________________________________________________________________
139 double& eff, unsigned int /*iRunNumber*/)
140{
141 eff = 1.;
142
143 if (m_bIsData)
145
148
149 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
150 {
151 if ( !(**it)->isSupportedRunNumber(m_iRunNumber) )
152 continue;
153 double dToolEff = 1.;
154 CP::CorrectionCode tmpCorrectionCode = (**it)->getEfficiencyScaleFactor(xTau, dToolEff, m_iRunNumber);
155 if (tmpCorrectionCode != CP::CorrectionCode::Ok)
156 return tmpCorrectionCode;
157 eff *= dToolEff;
158 }
160}
161
162//______________________________________________________________________________
164{
165 if (m_bIsData)
167
170
171 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
172 {
173 CP::CorrectionCode tmpCorrectionCode = (**it)->applyEfficiencyScaleFactor(xTau, m_iRunNumber);
174 if (tmpCorrectionCode != CP::CorrectionCode::Ok)
175 return tmpCorrectionCode;
176 }
178}
179
181//______________________________________________________________________________
183{
184 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
185 if ((**it)->isAffectedBySystematic(systematic))
186 return true;
187 return false;
188}
189
191//______________________________________________________________________________
193{
194 CP::SystematicSet sAffectingSystematics;
195 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
196 sAffectingSystematics.insert((**it)->affectingSystematics());
197 return sAffectingSystematics;
198}
199
201//______________________________________________________________________________
203{
204 CP::SystematicSet sRecommendedSystematics;
205 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
206 sRecommendedSystematics.insert((**it)->recommendedSystematics());
207 return sRecommendedSystematics;
208}
209
210//______________________________________________________________________________
212{
213 for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
214 if ((**it)->applySystematicVariation(sSystematicSet) == StatusCode::FAILURE)
215 return StatusCode::FAILURE;
216 return StatusCode::SUCCESS;
217}
218
219//=================================PRIVATE-PART=================================
221{
222 std::string sDirectory = "TauAnalysisTools/" + std::string(sSharedFilesVersion) + "/EfficiencyCorrections/";
223 for (auto iEfficiencyCorrectionType : m_vEfficiencyCorrectionTypes){
224
225 if (iEfficiencyCorrectionType == SFJetIDHadTau)
226 {
227 if (m_sInputFilePathJetIDHadTau.empty()) {
228 if(m_useFastSim) {
229 ATH_MSG_WARNING("No fast-sim recommendation for Tau RNN, using full sim");
230 }
231
232 if(m_sCampaign=="mc23"){
233 m_sInputFilePathJetIDHadTau = sDirectory + "RNNID_TrueHadTau_mc23_v2.root";
234 } else if (m_sCampaign=="mc20"){
235 m_sInputFilePathJetIDHadTau = sDirectory + "RNNID_TrueHadTau_mc20_v1.root";
236 }
237 }
238 m_sVarName = "TauScaleFactorJetIDHadTau";
239
240 std::string sJetIDWP = ConvertJetIDToString(m_iJetIDLevel);
241 if (sJetIDWP.empty()) {
242 ATH_MSG_WARNING("Could not find valid ID working point. Skip ID efficiency corrections.");
243 continue;
244 }
245
246 asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>* tTool = new asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>("TauAnalysisTools::CommonEfficiencyTool/JetIDHadTauTool", this);
247 m_vCommonEfficiencyTools.push_back(tTool);
248 ATH_CHECK(tTool->setProperty("InputFilePath", m_sInputFilePathJetIDHadTau));
249 ATH_CHECK(tTool->setProperty("VarName", m_sVarName));
250 ATH_CHECK(tTool->setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
251 ATH_CHECK(tTool->setProperty("WP", sJetIDWP));
252 }
253 else if (iEfficiencyCorrectionType == SFRecoHadTau)
254 {
255 if (m_sInputFilePathRecoHadTau.empty()) m_sInputFilePathRecoHadTau = sDirectory + "Reco_TrueHadTau_2026_v0.root";
256 m_sVarName = "TauScaleFactorReconstructionHadTau";
257
258 asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>* tTool = new asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>("TauAnalysisTools::CommonEfficiencyTool/RecoHadTauTool", this);
259 m_vCommonEfficiencyTools.push_back(tTool);
260 ATH_CHECK(tTool->setProperty("InputFilePath", m_sInputFilePathRecoHadTau));
261 ATH_CHECK(tTool->setProperty("VarName", m_sVarName));
262 ATH_CHECK(tTool->setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
263 }
264 else if (iEfficiencyCorrectionType == SFEleIDHadTau)
265 {
266 if (m_sInputFilePathEleIDHadTau.empty()) {
267 if( m_iEleIDLevel == static_cast<int>(ELEIDRNNLOOSE)){
268 m_sInputFilePathEleIDHadTau = sDirectory + "EleRNN_TrueHadTau_2026_eRNNLoose.root";
269 } else if( m_iEleIDLevel == static_cast<int>(ELEIDRNNMEDIUM)){
270 m_sInputFilePathEleIDHadTau = sDirectory + "EleRNN_TrueHadTau_2026_eRNNMedium.root";
271 } else {
272 ATH_MSG_ERROR("SFEleIDHadTau correction not supported for EleIDLevel="<<m_iEleIDLevel);
273 return StatusCode::FAILURE;
274 }
275 }
276 m_sVarName = "TauScaleFactorEleIDHadTau";
277
278 asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>* tTool = new asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>("TauAnalysisTools::CommonEfficiencyTool/EleIDHadTauTool", this);
279 m_vCommonEfficiencyTools.push_back(tTool);
280 ATH_CHECK(tTool->setProperty("InputFilePath", m_sInputFilePathEleIDHadTau));
281 ATH_CHECK(tTool->setProperty("VarName", m_sVarName));
282 ATH_CHECK(tTool->setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
283 ATH_CHECK(tTool->setProperty("WP", ConvertEleIDToString(m_iEleIDLevel)));
284 ATH_CHECK(tTool->setProperty("UseTauSubstructure", false));
285 }
286 else if (iEfficiencyCorrectionType == SFEleIDElectron)
287 {
288 // the path must be updated once RNN eVeto SFs are available
289 if (m_sInputFilePathEleIDElectron.empty()) {
290 if(m_useFastSim) {
291 ATH_MSG_WARNING("No fast-sim recommendation for tau electron veto, using full sim");
292 }
293
294 if(m_sCampaign=="mc23"){
295 if( m_iJetIDLevel == static_cast<int>(JETIDRNNLOOSE)){
296 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_2022_looseRNNTauID_1p.root";
297 } else if( m_iJetIDLevel == static_cast<int>(JETIDRNNMEDIUM)){
298 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_2022_mediumRNNTauID_1p.root";
299 }
300 else {
301 ATH_MSG_ERROR("SFEleIDElectron correction not supported for JetIDLevel="<<m_iJetIDLevel);
302 return StatusCode::FAILURE;
303 }
304 } else if(m_sCampaign=="mc20"){
305 if( m_iJetIDLevel == static_cast<int>(JETIDRNNLOOSE)){
306 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_Run2_looseRNNTauID_1p.root";
307 } else if( m_iJetIDLevel == static_cast<int>(JETIDRNNMEDIUM)){
308 m_sInputFilePathEleIDElectron = sDirectory + "EleRNN_TrueElectron_Run2_mediumRNNTauID_1p_v1.root";
309 }
310 else {
311 ATH_MSG_ERROR("SFEleIDElectron correction not supported for JetIDLevel="<<m_iJetIDLevel);
312 return StatusCode::FAILURE;
313 }
314 }
315 }
316 m_sVarName = "TauScaleFactorEleIDElectron";
317
318 asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>* tTool = new asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>("TauAnalysisTools::CommonEfficiencyTool/EleIDElectronTool", this);
319 m_vCommonEfficiencyTools.push_back(tTool);
320 ATH_CHECK(tTool->setProperty("InputFilePath", m_sInputFilePathEleIDElectron));
321 ATH_CHECK(tTool->setProperty("VarName", m_sVarName));
322 ATH_CHECK(tTool->setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
323 ATH_CHECK(tTool->setProperty("WP", ConvertEleIDToString(m_iEleIDLevel)));
324 ATH_CHECK(tTool->setProperty("UseTauSubstructure", false));
325
326 } else if (iEfficiencyCorrectionType == SFTriggerHadTau){
327
328 if (m_sTriggerName.empty()) {
329 ATH_MSG_ERROR("Property \"Trigger\" was not set, please provide a trigger name.");
330 return StatusCode::FAILURE;
331 }
332 if (m_sInputFilePathTriggerHadTau.empty()) {
333 // Determine the input file name from the given trigger name.
334 if(m_sCampaign=="mc23a"){
335 if (m_sTriggerName.value().find("mediumRNN_tracktwoMVA") != std::string::npos) {
336 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN/Trigger_TrueHadTau_data2022"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
337 }
338 else {
339 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");
340 return StatusCode::FAILURE;
341 }
342 } else if(m_sCampaign=="mc23d"){
343 if (m_sTriggerName.value().find("mediumRNN_tracktwoMVA") != std::string::npos) {
344 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN/Trigger_TrueHadTau_data2023"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
345 }
346 else {
347 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");
348 return StatusCode::FAILURE;
349 }
350 } else if(m_sCampaign=="mc20"){
351 if (m_sTriggerName.value().find("tracktwoEF") != std::string::npos) {
352 // check explicitly tau160 as the root file for this trigger was renamed
353 if (m_sTriggerName.value().find("tau160") != std::string::npos) {
354 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data2018_comb_HLT_tau160L1TAU100_medium1_tracktwoEF_v1.root";
355 } else {
356 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data2018"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
357 }
358 } else if (m_sTriggerName.value().find("tracktwo") != std::string::npos) {
359 // check explicitly tau160 as the root file for this trigger was renamed
360 if (m_sTriggerName.value().find("tau160") != std::string::npos) {
361 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data161718_comb_HLT_tau160_medium1_tracktwo_v1.root";
362 } else if (m_sTriggerName.value().find("tau125") != std::string::npos) {
363 // fall back to R21 recommendations for tau125 as currently SFs are not available for this trigger
364 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN/Trigger_TrueHadTau_2019-summer_data161718_comb_HLT_tau125_medium1_tracktwo.root";
365 } else if (m_sTriggerName.value().find("tau60") != std::string::npos) {
366 // SFs for tau60 are only for partial period
367 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data1718"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
368 } else {
369 m_sInputFilePathTriggerHadTau = sDirectory+"Trigger/RNN_R22/Trigger_TrueHadTau_data161718"+GetTriggerSFMeasurementString()+m_sTriggerName+".root";
370 }
371 } else {
372 ATH_MSG_ERROR("Trigger " << m_sTriggerName << " is not supported. Please fix \"TriggerName\" property. If this is correct, then please contact the tau trigger coordinators");
373 return StatusCode::FAILURE;
374 }
375 } else {
376 ATH_MSG_ERROR("SFs are not available for " << m_sCampaign << " campaign. If the config is correct, then please contact the tau trigger coordinators");
377 return StatusCode::FAILURE;
378 }
379 }
380 m_sVarName = "TauScaleFactorTriggerHadTau";
381
382 asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>* tTool = new asg::AnaToolHandle<ITauEfficiencyCorrectionsTool>("TauAnalysisTools::CommonEfficiencyTool/TriggerHadTauTool", this);
383 m_vCommonEfficiencyTools.push_back(tTool);
384 ATH_CHECK(tTool->setProperty("InputFilePath", m_sInputFilePathTriggerHadTau));
385 ATH_CHECK(tTool->setProperty("VarName", m_sVarName));
386 ATH_CHECK(tTool->setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
387 ATH_CHECK(tTool->setProperty("WP", ConvertTriggerIDToString(m_iJetIDLevel)));
388 ATH_CHECK(tTool->setProperty("DoTauTrig", true));
389 }
390 else {
391 ATH_MSG_WARNING("unsupported EfficiencyCorrectionsType with enum " << iEfficiencyCorrectionType);
392 }
393 }
394
395 return StatusCode::SUCCESS;
396}
397
398// auto detection of simulation flavour, used to cross check configuration of tool
399//______________________________________________________________________________
401{
402 if (inputMetaStore()->contains<xAOD::FileMetaData>("FileMetaData")) {
403 const xAOD::FileMetaData* fmd = nullptr;
404 ATH_CHECK( inputMetaStore()->retrieve( fmd, "FileMetaData" ) );
405 std::string simType("");
406 bool result = fmd->value( xAOD::FileMetaData::simFlavour , simType );
407 // if no result -> no simFlavor metadata, so must be data
408 if(result) std::transform(simType.begin(), simType.end(), simType.begin(), ::toupper);
409
410 if( simType.find("ATLFAST3") != std::string::npos && !m_useFastSim){
411 ATH_MSG_WARNING("Input file is AF3 sample but you are _not_ using AF3 corrections and uncertainties, you should set \"useFastSim\" to \"true\"");
412 } else if (simType.find("FULLG4")!=std::string::npos && m_useFastSim){
413 ATH_MSG_WARNING("Input file is full simulation but you are using AF3 corrections and uncertainties, you should set \"useFastSim\" to \"false\"");
414 }
415 }
416
417 return StatusCode::SUCCESS;
418}
419
420//______________________________________________________________________________
421std::string TauEfficiencyCorrectionsTool::ConvertJetIDToString(const int iLevel) const
422{
423 switch(iLevel)
424 {
425 case JETIDNONE:
426 return "none";
427 case JETIDRNNVERYLOOSE:
428 ATH_MSG_WARNING("Efficiency corrections for JETIDRNNVERYLOOSE working point are not supported.");
429 return "";
430 case JETIDRNNLOOSE:
431 return "jetrnnsigloose";
432 case JETIDRNNMEDIUM:
433 return "jetrnnsigmedium";
434 case JETIDRNNTIGHT:
435 return "jetrnnsigtight";
436 default:
437 ATH_MSG_WARNING("No valid JetID level passed.");
438 return "";
439 }
440}
441
442std::string TauEfficiencyCorrectionsTool::ConvertEleIDToString(const int iLevel) const
443{
444 switch(iLevel)
445 {
446 case ELEIDRNNTIGHT:
447 return "eleRNNTight";
448 case ELEIDRNNMEDIUM:
449 return "eleRNNMedium";
450 case ELEIDRNNLOOSE:
451 return "eleRNNLoose";
452 default:
453 ATH_MSG_WARNING("No valid EleID level passed.");
454 return "";
455 }
456}
457
458//______________________________________________________________________________
460{
461 switch(iLevel)
462 {
463 case JETIDRNNLOOSE:
464 return "loose";
465 case JETIDRNNMEDIUM:
466 return "medium";
467 case JETIDRNNTIGHT:
468 return "tight";
469 default:
470 ATH_MSG_WARNING("No valid TriggerID level passed.");
471 return "";
472 }
473}
474
475//______________________________________________________________________________
477{
478 std::string sMeasurement = "_comb_";
479
480 if (m_sTriggerSFMeasurement == "Ztautau")
481 sMeasurement = "_Ztt_";
482 else if (m_sTriggerSFMeasurement == "ttbar")
483 sMeasurement = "_ttbar_";
484 else if (m_sTriggerSFMeasurement != "combined")
485 ATH_MSG_WARNING("Trigger scale factor measurement \'" << m_sTriggerSFMeasurement << "\' is not supported. \'combined\' is used instead.");
486
487 return sMeasurement;
488}
489
491{
492 // read the random run rumber from the EventInfo
494 {
495 static const SG::ConstAccessor<unsigned int> acc_rnd("RandomRunNumber");
496 const xAOD::EventInfo* eventInfo = nullptr;
497 if (!evtStore()->contains<xAOD::EventInfo>("EventInfo") || !evtStore()->retrieve(eventInfo, "EventInfo").isSuccess())
498 {
499 ANA_MSG_ERROR("Could not retrieve EventInfo");
500 return StatusCode::FAILURE;
501 }
502
503 if (!acc_rnd.isAvailable(*eventInfo))
504 {
505 ANA_MSG_ERROR("Failed to find the RandomRunNumber decoration. Call the apply() method from the PileupReweightingTool beforehand to get period dependent SFs.");
506 return StatusCode::FAILURE;
507 }
508
509 m_iRunNumber = acc_rnd(*eventInfo);
510
511 ANA_MSG_VERBOSE("Read RandomRunNumber as " << m_iRunNumber);
512 }
513
514 return StatusCode::SUCCESS;
515}
516
517} // 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.