ATLAS Offline Software
DiTauEfficiencyCorrectionsTool.cxx
Go to the documentation of this file.
1 
11 // EDM include(s):
14 
15 // Local include(s):
17 #include "TauAnalysisTools/Enums.h"
19 
20 
21 namespace TauAnalysisTools
22 {
23 
24 //______________________________________________________________________________
26  : asg::AsgMetadataTool( sName )
27  , m_vCommonEfficiencyTools()
28  , m_bIsData(false)
29  , m_bIsConfigured(false)
30 {
31 }
32 
33 //______________________________________________________________________________
35 {
36  for (auto tTool : m_vCommonEfficiencyTools)
37  delete tTool;
38 }
39 
40 
41 //______________________________________________________________________________
43 {
44  // Greet the user:
45  ATH_MSG_INFO( "Initializing DiTauEfficiencyCorrectionsTool" );
46 
48  ATH_MSG_WARNING("Truth match check will be skipped. This is ONLY FOR TESTING PURPOSE!");
49 
50  if (m_sRecommendationTag == "2017-moriond")
52  else
53  {
54  ATH_MSG_FATAL("Unknown RecommendationTag: "<<m_sRecommendationTag);
55  return StatusCode::FAILURE;
56  }
57 
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 
72  printConfig();
73 
74  return StatusCode::SUCCESS;
75 }
76 
77 
78 //______________________________________________________________________________
80 {
81  if (!m_bIsConfigured)
82  {
83  const xAOD::EventInfo* xEventInfo = nullptr;
84  ATH_CHECK(evtStore()->retrieve(xEventInfo,"EventInfo"));
86  m_bIsConfigured = true;
87  }
88 
89  return StatusCode::SUCCESS;
90 }
91 
92 
93 //______________________________________________________________________________
95 {
96  ATH_MSG_DEBUG( "DiTauEfficiencyCorrectionsTool with name " << name() << " is configured as follows:" );
97  for (auto iEfficiencyCorrectionType : m_vEfficiencyCorrectionTypes) {
98  ATH_MSG_DEBUG( " EfficiencyCorrectionTypes " << iEfficiencyCorrectionType );
99  }
100  ATH_MSG_DEBUG( " InputFilePathJetIDHadTau " << m_sInputFilePathJetIDHadTau );
101  ATH_MSG_DEBUG( " VarNameJetIDHadTau " << m_sVarNameJetIDHadTau );
102  ATH_MSG_DEBUG( " RecommendationTag " << m_sRecommendationTag );
103 }
104 
105 //______________________________________________________________________________
107  double& eff )
108 {
109  eff = 1.;
110 
111  if (m_bIsData)
112  return CP::CorrectionCode::Ok;
113 
114  for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
115  {
116  double dToolEff = 1.;
117  CP::CorrectionCode tmpCorrectionCode = (**it)->getEfficiencyScaleFactor(xDiTau, dToolEff);
118  if (tmpCorrectionCode != CP::CorrectionCode::Ok)
119  return tmpCorrectionCode;
120  eff *= dToolEff;
121  }
122  return CP::CorrectionCode::Ok;
123 }
124 
125 //______________________________________________________________________________
127 {
128  if (m_bIsData)
129  return CP::CorrectionCode::Ok;
130 
131  for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
132  {
133  CP::CorrectionCode tmpCorrectionCode = (**it)->applyEfficiencyScaleFactor(xDiTau);
134  if (tmpCorrectionCode != CP::CorrectionCode::Ok)
135  {
136  return tmpCorrectionCode;
137  }
138  }
139  return CP::CorrectionCode::Ok;
140 }
141 
143 //______________________________________________________________________________
145 {
146  for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
147  if ((**it)->isAffectedBySystematic(systematic))
148  return true;
149  return false;
150 }
151 
153 //______________________________________________________________________________
155 {
156  CP::SystematicSet sAffectingSystematics;
157  for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
158  sAffectingSystematics.insert((**it)->affectingSystematics());
159  return sAffectingSystematics;
160 }
161 
163 //______________________________________________________________________________
165 {
166  CP::SystematicSet sRecommendedSystematics;
167  for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
168  {
169  sRecommendedSystematics.insert((**it)->recommendedSystematics());
170  }
171  return sRecommendedSystematics;
172 }
173 
174 //______________________________________________________________________________
176 {
177  for (auto it = m_vCommonEfficiencyTools.begin(); it != m_vCommonEfficiencyTools.end(); it++)
178  if ((**it)->applySystematicVariation(sSystematicSet) == StatusCode::FAILURE)
179  {
180  return StatusCode::FAILURE;
181  }
182  return StatusCode::SUCCESS;
183 }
184 
185 //=================================PRIVATE-PART=================================
186 
187 //______________________________________________________________________________
189 {
190  std::string sDirectory = "TauAnalysisTools/" + std::string(sSharedFilesVersion) + "/EfficiencyCorrections/";
191  for (auto iEfficiencyCorrectionType : m_vEfficiencyCorrectionTypes)
192  {
193  if (iEfficiencyCorrectionType == SFJetIDHadTau)
194  {
195  // only set vars if they have been configured by the user
196  if (m_sInputFilePathJetIDHadTau.empty()) {
197  sDirectory = "TauAnalysisTools/00-04-00/EfficiencyCorrections/";
198  m_sInputFilePathJetIDHadTau = sDirectory+"JetID_TrueHadDiTau_2017-fall.root";
199  }
200  if (m_sVarNameJetIDHadTau.empty()) m_sVarNameJetIDHadTau = "DiTauScaleFactorJetIDHadTau";
201 
203  m_vCommonEfficiencyTools.push_back(tTool);
205  ATH_CHECK(tTool->setProperty("InputFilePath", m_sInputFilePathJetIDHadTau));
206  ATH_CHECK(tTool->setProperty("VarName", m_sVarNameJetIDHadTau));
207  ATH_CHECK(tTool->setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
209  }
210  else
211  {
212  ATH_MSG_WARNING("unsupported EfficiencyCorrectionsType with enum " << iEfficiencyCorrectionType);
213  }
214  }
215  return StatusCode::SUCCESS;
216 }
217 
218 //______________________________________________________________________________
219 std::string DiTauEfficiencyCorrectionsTool::ConvertJetIDToString(const int iLevel) const
220 {
221  switch(iLevel)
222  {
223  case JETIDNONE:
224  return "ditaureconstruction";
225  break;
226  case JETIDBDTVERYLOOSE:
227  return "jetbdtsigveryloose";
228  break;
229  case JETIDBDTLOOSE:
230  return "jetbdtsigloose";
231  break;
232  case JETIDBDTMEDIUM:
233  return "jetbdtsigmedium";
234  break;
235  case JETIDBDTTIGHT:
236  return "jetbdtsigtight";
237  break;
238  default:
239  assert(false && "No valid ID level passed. Breaking up ...");
240  break;
241  }
242  return "";
243 }
244 
245 
246 } // namespace TauAnalysisTools
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
python.Dso.registry
registry
Definition: Control/AthenaServices/python/Dso.py:158
TauAnalysisTools::JETIDBDTLOOSE
@ JETIDBDTLOOSE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:16
DiTauEfficiencyCorrectionsTool.h
Efficiency scale factors and uncertainties for ditau jets.
TauAnalysisTools
Definition: TruthCollectionMakerTau.h:16
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::m_vEfficiencyCorrectionTypes
Gaudi::Property< std::vector< int > > m_vEfficiencyCorrectionTypes
Definition: DiTauEfficiencyCorrectionsTool.h:113
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
asg::AnaToolHandle
a modified tool handle that allows its owner to configure new tools from the C++ side
Definition: AnaToolHandle.h:34
TauAnalysisTools::CommonDiTauEfficiencyTool
Definition: CommonDiTauEfficiencyTool.h:41
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::beginEvent
StatusCode beginEvent()
Function called when a new events is loaded.
Definition: DiTauEfficiencyCorrectionsTool.cxx:79
Enums.h
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TauAnalysisTools::JETIDBDTMEDIUM
@ JETIDBDTMEDIUM
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:17
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::DiTauEfficiencyCorrectionsTool
DiTauEfficiencyCorrectionsTool(const std::string &sName)
Create a proper constructor for Athena.
Definition: DiTauEfficiencyCorrectionsTool.cxx:25
skel.it
it
Definition: skel.GENtoEVGEN.py:407
asg
Definition: DataHandleTestTool.h:28
CP::SystematicSet
Class to wrap a set of SystematicVariations.
Definition: SystematicSet.h:31
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::m_bIsConfigured
bool m_bIsConfigured
Definition: DiTauEfficiencyCorrectionsTool.h:117
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::applySystematicVariation
virtual StatusCode applySystematicVariation(const CP::SystematicSet &systConfig)
apply systematic variations
Definition: DiTauEfficiencyCorrectionsTool.cxx:175
CP::SystematicVariation
Definition: SystematicVariation.h:47
ASG_MAKE_ANA_TOOL
#define ASG_MAKE_ANA_TOOL(handle, type)
create the tool in the given tool handle
Definition: AnaToolHandle.h:690
TauAnalysisTools::JETIDNONE
@ JETIDNONE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:14
asg::AnaToolHandle::setProperty
StatusCode setProperty(const std::string &property, const T2 &value)
set the given property of the tool.
xAOD::EventInfo_v1::IS_SIMULATION
@ IS_SIMULATION
true: simulation, false: data
Definition: EventInfo_v1.h:151
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::~DiTauEfficiencyCorrectionsTool
~DiTauEfficiencyCorrectionsTool()
Definition: DiTauEfficiencyCorrectionsTool.cxx:34
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::m_sRecommendationTag
Gaudi::Property< std::string > m_sRecommendationTag
Definition: DiTauEfficiencyCorrectionsTool.h:110
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::printConfig
virtual void printConfig() const
Print tool configuration.
Definition: DiTauEfficiencyCorrectionsTool.cxx:94
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::m_iJetIDLevel
Gaudi::Property< int > m_iJetIDLevel
Definition: DiTauEfficiencyCorrectionsTool.h:111
SharedFilesVersion.h
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::m_sVarNameJetIDHadTau
Gaudi::Property< std::string > m_sVarNameJetIDHadTau
Definition: DiTauEfficiencyCorrectionsTool.h:109
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::affectingSystematics
virtual CP::SystematicSet affectingSystematics() const
returns: the list of all systematics this tool can be affected by
Definition: DiTauEfficiencyCorrectionsTool.cxx:154
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TauAnalysisTools::JETIDBDTTIGHT
@ JETIDBDTTIGHT
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:18
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::ConvertJetIDToString
std::string ConvertJetIDToString(const int iLevel) const
Definition: DiTauEfficiencyCorrectionsTool.cxx:219
SystematicRegistry.h
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
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::m_bSkipTruthMatchCheck
Gaudi::Property< bool > m_bSkipTruthMatchCheck
Definition: DiTauEfficiencyCorrectionsTool.h:112
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::applyEfficiencyScaleFactor
virtual CP::CorrectionCode applyEfficiencyScaleFactor(const xAOD::DiTauJet &xDiTau)
decorate the ditau jet with eff scale factor
Definition: DiTauEfficiencyCorrectionsTool.cxx:126
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::recommendedSystematics
virtual CP::SystematicSet recommendedSystematics() const
returns: the list of all systematics this tool recommends to use
Definition: DiTauEfficiencyCorrectionsTool.cxx:164
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::getEfficiencyScaleFactor
virtual CP::CorrectionCode getEfficiencyScaleFactor(const xAOD::DiTauJet &xDiTau, double &eff)
Get the ditau Efficiency Scale Factor as a return value.
Definition: DiTauEfficiencyCorrectionsTool.cxx:106
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::m_bIsData
bool m_bIsData
Definition: DiTauEfficiencyCorrectionsTool.h:116
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::initialize
virtual StatusCode initialize()
Function initialising the tool.
Definition: DiTauEfficiencyCorrectionsTool.cxx:42
CP::SystematicSet::insert
void insert(const SystematicVariation &systematic)
description: insert a systematic into the set
Definition: SystematicSet.cxx:88
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
TauAnalysisTools::SFJetIDHadTau
@ SFJetIDHadTau
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:72
EventInfo.h
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
CP::CorrectionCode::Ok
@ Ok
The correction was done successfully.
Definition: CorrectionCode.h:38
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
CP::SystematicRegistry
This module implements the central registry for handling systematic uncertainties with CP tools.
Definition: SystematicRegistry.h:25
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::isAffectedBySystematic
virtual bool isAffectedBySystematic(const CP::SystematicVariation &systematic) const
returns whether this tool is affected by the given systematic
Definition: DiTauEfficiencyCorrectionsTool.cxx:144
CP::CorrectionCode
Return value from object correction CP tools.
Definition: CorrectionCode.h:31
xAOD::DiTauJet_v1
Definition: DiTauJet_v1.h:31
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::initializeTools_2017_moriond
StatusCode initializeTools_2017_moriond()
Initialize Moriond 2017 recommendations.
Definition: DiTauEfficiencyCorrectionsTool.cxx:188
dqt_zlumi_alleff_HIST.eff
int eff
Definition: dqt_zlumi_alleff_HIST.py:113
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::m_sInputFilePathJetIDHadTau
Gaudi::Property< std::string > m_sInputFilePathJetIDHadTau
Definition: DiTauEfficiencyCorrectionsTool.h:108
TauAnalysisTools::JETIDBDTVERYLOOSE
@ JETIDBDTVERYLOOSE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:15
TauAnalysisTools::DiTauEfficiencyCorrectionsTool::m_vCommonEfficiencyTools
std::vector< asg::AnaToolHandle< IDiTauEfficiencyCorrectionsTool > * > m_vCommonEfficiencyTools
Definition: DiTauEfficiencyCorrectionsTool.h:115
xAOD::EventInfo_v1::eventType
bool eventType(EventType type) const
Check for one particular bitmask value.
CP::SystematicRegistry::getInstance
static SystematicRegistry & getInstance()
Get the singleton instance of the registry for the curren thread.
Definition: SystematicRegistry.cxx:25