ATLAS Offline Software
Loading...
Searching...
No Matches
CommonEfficiencyTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TAUANALYSISTOOLS_COMMONEFFICIENCYTOOL_H
6#define TAUANALYSISTOOLS_COMMONEFFICIENCYTOOL_H
7
8/*
9 author: Dirk Duschinger
10 mail: dirk.duschinger@cern.ch
11*/
12
13// Framework include(s):
14#include "AsgTools/AsgTool.h"
16
17// EDM include(s):
18#include "xAODTau/TauJet.h"
21
22// Local include(s):
26
34
35class TFile;
36class TKey;
37
38namespace TauAnalysisTools
39{
40
41// forward declaration
43
45 : public virtual ITauEfficiencyCorrectionsTool
46 , public asg::AsgTool
47 , public columnar::ColumnarTool<>
48{
51
52public:
53
54 CommonEfficiencyTool(const std::string& sName);
55
57
58 virtual StatusCode initialize() override;
59
60 // CommonEfficiencyTool pure virtual public functionality
61 //__________________________________________________________________________
62
63 virtual CP::CorrectionCode getEfficiencyScaleFactor(const xAOD::TauJet& tau, double& dEfficiencyScaleFactor,
64 unsigned int iRunNumber = 0 ) override;
65
66 CP::CorrectionCode getEfficiencyScaleFactor( columnar::TauJetId tau, double& dEfficiencyScaleFactor,
67 unsigned int iRunNumber) const;
68
70 unsigned int iRunNumber = 0 ) override;
71
73 virtual bool isAffectedBySystematic( const CP::SystematicVariation& systematic ) const override;
74
76 virtual CP::SystematicSet affectingSystematics() const override;
77
79 virtual CP::SystematicSet recommendedSystematics() const override;
80
83 virtual StatusCode applySystematicVariation ( const CP::SystematicSet& sSystematicSet) override;
84
85 virtual bool isSupportedRunNumber( int /*iRunNumber*/ ) const override
86 {
87 return true;
88 };
89
90protected:
91
92 std::string ConvertProngToString(const int iProngness) const;
93 std::string ConvertDecayModeToString(const int iDecayMode) const;
94
95 typedef std::tuple<TObject*,
96 CP::CorrectionCode (*)(const TObject* oObject,
97 double& dEfficiencyScaleFactor,
98 double dVars[] ) > tTupleObjectFunc;
99 typedef std::map<std::string, tTupleObjectFunc > tSFMAP;
100 // In gcc10 builds, cling gets confused by the type of m_mSF and produces
101 // an ugly warning message. Hide this from cling to suppress that
102 // (substitute another unique_ptr so that the class layout remains the same).
103#ifdef __CLING__
104 std::unique_ptr<int> m_dummy;
105#else
106 std::unique_ptr< tSFMAP > m_mSF;
107#endif
108
109 std::unordered_map < CP::SystematicSet, std::string > m_mSystematicSets;
111 std::map<std::string, int> m_mSystematics;
112 std::map<std::string, std::string> m_mSystematicsHistNames;
113
114 std::function<double(const xAOD::TauJet& xTau)> m_fX;
115 std::function<double(const xAOD::TauJet& xTau)> m_fY;
116
117 void ReadInputs(const TFile& fFile);
118 void addHistogramToSFMap(TKey* kKey, const std::string& sKeyName);
119
120 virtual CP::CorrectionCode getValue(const std::string& sHistName,
122 double& dEfficiencyScaleFactor) const;
123
124 static CP::CorrectionCode getValueTH1(const TObject* oObject,
125 double& dEfficiencyScaleFactor,
126 double dVars[]
127 );
128 static CP::CorrectionCode getValueTH2(const TObject* oObject,
129 double& dEfficiencyScaleFactor,
130 double dVars[]
131 );
132 static CP::CorrectionCode getValueTF1(const TObject* oObject,
133 double& dEfficiencyScaleFactor,
134 double dVars[]
135 );
136
138
139protected:
140
143
144 Gaudi::Property<std::string> m_sInputFilePath{this, "InputFilePath", ""};
145 Gaudi::Property<std::string> m_sVarName{this, "VarName", ""};
146 Gaudi::Property<std::string> m_sWP{this, "WP", ""};
147 Gaudi::Property<bool> m_bSkipTruthMatchCheck{this, "SkipTruthMatchCheck", false};
148 Gaudi::Property<int> m_iJetIDLevel{this, "JetIDLevel", static_cast<int>(JETIDNONE)};
149 Gaudi::Property<int> m_iEleIDLevel{this, "EleIDLevel", static_cast<int>(ELEIDNONE)};
150 Gaudi::Property<bool> m_bUseTauSubstructure{this, "UseTauSubstructure", false};
151 Gaudi::Property<bool> m_doTauTrig{this, "DoTauTrig", false};
152 Gaudi::Property<bool> m_applyToData{this, "ApplyToData", false}; // for experts only
153
154 std::string m_sInputFileName;
155 std::string m_sSFHistName;
157
159
162
163
164public:
165
167 {
168 Accessors(CommonEfficiencyTool& tool) : columnar::ColumnarTool<>(&tool) {}
169
170 columnar::EventInfoAccessor<columnar::ObjectColumn> m_eventInfo {*this, "EventInfo", {.addMTDependency=true}};
172
173 // Associated truth particles and jets. These are picked up by truth
174 // links on the tau itself.
176 columnar::JetAccessor<columnar::ObjectColumn> m_jets {*this, "AntiKt4TruthDressedWZJets"};
177
179 //columnar::TauJetAccessor<int> m_nTracks{*this, "nChargedTracks", {.isOptional=true}}; to be used when 'nChargedTracks' will be in physlite
180 //columnar::TauJetAccessor<float> m_eta{*this,"eta"};
181 //columnar::TauJetAccessor<float> m_pt{*this,"pt"};
186 };
187 std::unique_ptr<Accessors> m_accessors;
188
190 void callEvents (columnar::EventContextRange events) const override;
191
192
193};
194} // namespace TauAnalysisTools
195
196#endif // TAUANALYSISTOOLS_COMMONEFFICIENCYTOOL_H
#define ASG_TOOL_CLASS(CLASSNAME, INT1)
static Double_t taus
Return value from object correction CP tools.
Class to wrap a set of SystematicVariations.
virtual CP::SystematicSet affectingSystematics() const override
returns: the list of all systematics this tool can be affected by
std::string ConvertDecayModeToString(const int iDecayMode) const
std::function< double(const xAOD::TauJet &xTau)> m_fY
CommonEfficiencyTool(const std::string &sName)
Create a proper constructor for Athena.
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
virtual bool isAffectedBySystematic(const CP::SystematicVariation &systematic) const override
returns: whether this tool is affected by the given systematics
void callEvents(columnar::EventContextRange events) const override
virtual bool isSupportedRunNumber(int) const override
check if run number is supported in recommendations
std::map< std::string, tTupleObjectFunc > tSFMAP
virtual CP::CorrectionCode getEfficiencyScaleFactor(const xAOD::TauJet &tau, double &dEfficiencyScaleFactor, unsigned int iRunNumber=0) override
Declare the interface that the class provides.
Gaudi::Property< std::string > m_sInputFilePath
virtual CP::CorrectionCode applyEfficiencyScaleFactor(const xAOD::TauJet &xTau, unsigned int iRunNumber=0) override
Decorate the tau with its efficiency.
virtual StatusCode applySystematicVariation(const CP::SystematicSet &sSystematicSet) override
configure this tool for the given list of systematic variations.
void callSingleEvent(columnar::TauJetRange taus, columnar::EventInfoId event) const
static CP::CorrectionCode getValueTH1(const TObject *oObject, double &dEfficiencyScaleFactor, double dVars[])
std::tuple< TObject *, CP::CorrectionCode(*)(const TObject *oObject, double &dEfficiencyScaleFactor, double dVars[]) > tTupleObjectFunc
std::unordered_map< CP::SystematicSet, std::string > m_mSystematicSets
void addHistogramToSFMap(TKey *kKey, const std::string &sKeyName)
static CP::CorrectionCode getValueTH2(const TObject *oObject, double &dEfficiencyScaleFactor, double dVars[])
virtual CP::SystematicSet recommendedSystematics() const override
returns: the list of all systematics this tool recommends to use
std::map< std::string, std::string > m_mSystematicsHistNames
std::function< double(const xAOD::TauJet &xTau)> m_fX
Gaudi::Property< std::string > m_sVarName
std::map< std::string, int > m_mSystematics
static CP::CorrectionCode getValueTF1(const TObject *oObject, double &dEfficiencyScaleFactor, double dVars[])
virtual CP::CorrectionCode getValue(const std::string &sHistName, columnar::TauJetId tau, double &dEfficiencyScaleFactor) const
std::string ConvertProngToString(const int iProngness) const
accessor for the truth particle type of a tau
Base class for the dual-use tool implementation classes.
Definition AsgTool.h:47
the base class for all columnar components
AccessorTemplate< TauJetDef, CT, ColumnAccessMode::output, CM > TauJetDecorator
Definition TauJetDef.h:25
ObjectRange< TauJetDef > TauJetRange
Definition TauJetDef.h:21
ObjectRange< EventContextDef > EventContextRange
AccessorTemplate< JetDef, CT, ColumnAccessMode::input, CM > JetAccessor
Definition JetDef.h:25
ObjectId< TauJetDef > TauJetId
Definition TauJetDef.h:22
AccessorTemplate< TruthParticleDef, CT, ColumnAccessMode::input, CM > TruthParticleAccessor
ObjectId< EventInfoDef > EventInfoId
AccessorTemplate< TauJetDef, CT, ColumnAccessMode::input, CM > TauJetAccessor
Definition TauJetDef.h:24
AccessorTemplate< EventInfoDef, CT, ColumnAccessMode::input, CM > EventInfoAccessor
TauJet_v3 TauJet
Definition of the current "tau version".
Definition TauJet.h:17
columnar::EventInfoAccessor< uint32_t > randomrunnumber
columnar::TruthParticleAccessor< columnar::ObjectColumn > m_truthParticles
columnar::TauJetAccessor< columnar::ObjectColumn > m_taus
columnar::EventInfoAccessor< columnar::ObjectColumn > m_eventInfo
columnar::JetAccessor< columnar::ObjectColumn > m_jets