ATLAS Offline Software
Loading...
Searching...
No Matches
DiTauEfficiencyCorrectionsTool.cxx
Go to the documentation of this file.
10
11// EDM include(s):
14
15// Local include(s):
19
21
22using namespace TauAnalysisTools;
23
24namespace ADD_CMODE(TauAnalysisTools)
25{
26
27//______________________________________________________________________________
28DiTauEfficiencyCorrectionsTool::DiTauEfficiencyCorrectionsTool( const std::string& sName )
29 : asg::AsgMetadataTool( sName )
30 , m_bIsData(false)
31 , m_bIsConfigured(false)
32{
33}
34
35//______________________________________________________________________________
36DiTauEfficiencyCorrectionsTool::~DiTauEfficiencyCorrectionsTool()
37{
38}
39
40
41//______________________________________________________________________________
42StatusCode DiTauEfficiencyCorrectionsTool::initialize()
43{
44 // Greet the user:
45 ATH_MSG_INFO( "Initializing DiTauEfficiencyCorrectionsTool" );
46
47 if (m_bSkipTruthMatchCheck)
48 ATH_MSG_WARNING("Truth match check will be skipped. This is ONLY FOR TESTING PURPOSE!");
49
50 if (m_sRecommendationTag == "2017-moriond")
51 ATH_CHECK(initializeTools_2017_moriond());
52 else
53 {
54 ATH_MSG_FATAL("Unknown RecommendationTag: "<<m_sRecommendationTag);
55 return StatusCode::FAILURE;
56 }
57
58 // Add the affecting systematics to the global registry
60 if (!registry.registerSystematics(*this))
61 {
62 ATH_MSG_ERROR ("Unable to register the systematics");
63 return StatusCode::FAILURE;
64 }
65
66 printConfig();
67
68 return StatusCode::SUCCESS;
69}
70
71
72//______________________________________________________________________________
73StatusCode DiTauEfficiencyCorrectionsTool::beginEvent()
74{
75 if (!m_bIsConfigured)
76 {
77 const xAOD::EventInfo* xEventInfo = nullptr;
78 ATH_CHECK(evtStore()->retrieve(xEventInfo,"EventInfo"));
79 m_bIsData = !(xEventInfo->eventType( xAOD::EventInfo::IS_SIMULATION));
80 m_bIsConfigured = true;
81 }
82
83 return StatusCode::SUCCESS;
84}
85
86
87//______________________________________________________________________________
88void DiTauEfficiencyCorrectionsTool::printConfig() const
89{
90 ATH_MSG_DEBUG( "DiTauEfficiencyCorrectionsTool with name " << name() << " is configured as follows:" );
91 for (auto iEfficiencyCorrectionType : m_vEfficiencyCorrectionTypes) {
92 ATH_MSG_DEBUG( " EfficiencyCorrectionTypes " << iEfficiencyCorrectionType );
93 }
94 ATH_MSG_DEBUG( " InputFilePathJetIDHadTau " << m_sInputFilePathJetIDHadTau );
95 ATH_MSG_DEBUG( " VarNameJetIDHadTau " << m_sVarNameJetIDHadTau );
96 ATH_MSG_DEBUG( " RecommendationTag " << m_sRecommendationTag );
97}
98
99//______________________________________________________________________________
100CP::CorrectionCode DiTauEfficiencyCorrectionsTool::getEfficiencyScaleFactor( const xAOD::DiTauJet& xDiTau,
101 double& eff )
102{
103 eff = 1.;
104
105 if (m_bIsData)
107
108 double dToolEff = 1.;
109 CP::CorrectionCode tmpCorrectionCode = m_tTool->getEfficiencyScaleFactor(xDiTau, dToolEff);
110 if (tmpCorrectionCode != CP::CorrectionCode::Ok)
111 return tmpCorrectionCode;
112
113 eff *= dToolEff;
115}
116
117//______________________________________________________________________________
118CP::CorrectionCode DiTauEfficiencyCorrectionsTool::applyEfficiencyScaleFactor( const xAOD::DiTauJet& xDiTau )
119{
120 if (m_bIsData)
122
123 CP::CorrectionCode tmpCorrectionCode = m_tTool->applyEfficiencyScaleFactor(xDiTau);
124 if (tmpCorrectionCode != CP::CorrectionCode::Ok)
125 {
126 return tmpCorrectionCode;
127 }
128
130}
131
133//______________________________________________________________________________
134bool DiTauEfficiencyCorrectionsTool::isAffectedBySystematic( const CP::SystematicVariation& systematic ) const
135{
136 if (m_tTool->isAffectedBySystematic(systematic))
137 return true;
138
139 return false;
140}
141
143//______________________________________________________________________________
144CP::SystematicSet DiTauEfficiencyCorrectionsTool::affectingSystematics() const
145{
146 CP::SystematicSet sAffectingSystematics;
147 sAffectingSystematics.insert(m_tTool->affectingSystematics());
148
149 return sAffectingSystematics;
150}
151
153//______________________________________________________________________________
154CP::SystematicSet DiTauEfficiencyCorrectionsTool::recommendedSystematics() const
155{
156 CP::SystematicSet sRecommendedSystematics;
157 sRecommendedSystematics.insert(m_tTool->recommendedSystematics());
158
159 return sRecommendedSystematics;
160}
161
162//______________________________________________________________________________
163StatusCode DiTauEfficiencyCorrectionsTool::applySystematicVariation ( const CP::SystematicSet& sSystematicSet)
164{
165 if (m_tTool->applySystematicVariation(sSystematicSet) == StatusCode::FAILURE)
166 {
167 ATH_MSG_ERROR( "failing in appying systematic uncertainty.");
168 return StatusCode::FAILURE;
169 }
170
171 return StatusCode::SUCCESS;
172}
173
174//=================================PRIVATE-PART=================================
175
176//______________________________________________________________________________
177StatusCode DiTauEfficiencyCorrectionsTool::initializeTools_2017_moriond()
178{
179 std::string sDirectory = "TauAnalysisTools/" + std::string(sSharedFilesVersion) + "/EfficiencyCorrections/";
180 for (auto iEfficiencyCorrectionType : m_vEfficiencyCorrectionTypes)
181 {
182 if (iEfficiencyCorrectionType == SFJetIDHadTau)
183 {
184 // only set vars if they have been configured by the user
185 if (m_sInputFilePathJetIDHadTau.empty()) {
186 sDirectory = "TauAnalysisTools/00-04-00/EfficiencyCorrections/";
187 m_sInputFilePathJetIDHadTau = sDirectory+"JetID_TrueHadDiTau_2017-fall.root";
188 }
189 if (m_sVarNameJetIDHadTau.empty()) m_sVarNameJetIDHadTau = "DiTauScaleFactorJetIDHadTau";
190
191 std::string wp = ConvertJetIDToString(m_iJetIDLevel);
192
193 if (m_tTool.empty()){
194 asg::AsgToolConfig config("TauAnalysisTools::CommonDiTauEfficiencyTool/JetIDHadTauTool_"+wp);
195 ATH_CHECK(config.setProperty("InputFilePath", m_sInputFilePathJetIDHadTau));
196 ATH_CHECK(config.setProperty("VarName", m_sVarNameJetIDHadTau));
197 ATH_CHECK(config.setProperty("SkipTruthMatchCheck", m_bSkipTruthMatchCheck));
198 ATH_CHECK(config.setProperty("WP", wp));
199 ATH_CHECK(config.makePrivateTool(m_tTool));
200 }
201 ATH_CHECK(m_tTool.retrieve());
202 }
203 else
204 {
205 ATH_MSG_WARNING("unsupported EfficiencyCorrectionsType with enum " << iEfficiencyCorrectionType);
206 }
207 }
208 return StatusCode::SUCCESS;
209}
210
211//______________________________________________________________________________
212std::string DiTauEfficiencyCorrectionsTool::ConvertJetIDToString(const int iLevel) const
213{
214 switch(iLevel)
215 {
216 case JETIDNONE:
217 return "ditaureconstruction";
218 break;
220 return "jetbdtsigveryloose";
221 break;
222 case JETIDBDTLOOSE:
223 return "jetbdtsigloose";
224 break;
225 case JETIDBDTMEDIUM:
226 return "jetbdtsigmedium";
227 break;
228 case JETIDBDTTIGHT:
229 return "jetbdtsigtight";
230 break;
231 default:
232 assert(false && "No valid ID level passed. Breaking up ...");
233 break;
234 }
235 return "";
236}
237
238
239} // namespace ADD_CMODE(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 ATH_MSG_FATAL(x,...)
Efficiency scale factors and uncertainties for ditau jets.
static const char *const sSharedFilesVersion
Version of the calibration files.
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
Base class for dual-use tools that provide file metadata access.
an object that can create a AsgTool
bool eventType(EventType type) const
Check for one particular bitmask value.
@ IS_SIMULATION
true: simulation, false: data
EventInfo_v1 EventInfo
Definition of the latest event info version.
DiTauJet_v1 DiTauJet
Definition of the current version.
Definition DiTauJet.h:17