ATLAS Offline Software
Loading...
Searching...
No Matches
CommonEfficiencyTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 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
27// ROOT include(s):
28#include "TFile.h"
29#include "TKey.h"
30
38
39namespace TauAnalysisTools
40{
41
42// forward declaration
44
46 : public virtual ITauEfficiencyCorrectionsTool
47 , public asg::AsgTool
48 , public columnar::ColumnarTool<>
49{
52
53public:
54
55 CommonEfficiencyTool(const std::string& sName);
56
58
59 virtual StatusCode initialize() override;
60
61 // CommonEfficiencyTool pure virtual public functionality
62 //__________________________________________________________________________
63
64 virtual CP::CorrectionCode getEfficiencyScaleFactor(const xAOD::TauJet& tau, double& dEfficiencyScaleFactor,
65 unsigned int iRunNumber = 0 ) override;
66
67 CP::CorrectionCode getEfficiencyScaleFactor( columnar::TauJetId tau, double& dEfficiencyScaleFactor,
68 unsigned int iRunNumber) const;
69
71 unsigned int iRunNumber = 0 ) override;
72
74 virtual bool isAffectedBySystematic( const CP::SystematicVariation& systematic ) const override;
75
77 virtual CP::SystematicSet affectingSystematics() const override;
78
80 virtual CP::SystematicSet recommendedSystematics() const override;
81
84 virtual StatusCode applySystematicVariation ( const CP::SystematicSet& sSystematicSet) override;
85
86 virtual bool isSupportedRunNumber( int /*iRunNumber*/ ) const override
87 {
88 return true;
89 };
90
91protected:
92
93 std::string ConvertProngToString(const int iProngness) const;
94 std::string ConvertDecayModeToString(const int iDecayMode) const;
95
96 typedef std::tuple<TObject*,
97 CP::CorrectionCode (*)(const TObject* oObject,
98 double& dEfficiencyScaleFactor,
99 double dVars[] ) > tTupleObjectFunc;
100 typedef std::map<std::string, tTupleObjectFunc > tSFMAP;
101 // In gcc10 builds, cling gets confused by the type of m_mSF and produces
102 // an ugly warning message. Hide this from cling to suppress that
103 // (substitute another unique_ptr so that the class layout remains the same).
104#ifdef __CLING__
105 std::unique_ptr<int> m_dummy;
106#else
107 std::unique_ptr< tSFMAP > m_mSF;
108#endif
109
110 std::unordered_map < CP::SystematicSet, std::string > m_mSystematicSets;
112 std::map<std::string, int> m_mSystematics;
113 std::map<std::string, std::string> m_mSystematicsHistNames;
114
115 std::function<double(const xAOD::TauJet& xTau)> m_fX;
116 std::function<double(const xAOD::TauJet& xTau)> m_fY;
117
118 void ReadInputs(const TFile& fFile);
119 void addHistogramToSFMap(TKey* kKey, const std::string& sKeyName);
120
121 virtual CP::CorrectionCode getValue(const std::string& sHistName,
123 double& dEfficiencyScaleFactor) const;
124
125 static CP::CorrectionCode getValueTH1(const TObject* oObject,
126 double& dEfficiencyScaleFactor,
127 double dVars[]
128 );
129 static CP::CorrectionCode getValueTH2(const TObject* oObject,
130 double& dEfficiencyScaleFactor,
131 double dVars[]
132 );
133 static CP::CorrectionCode getValueTF1(const TObject* oObject,
134 double& dEfficiencyScaleFactor,
135 double dVars[]
136 );
137
139
140protected:
141
144
145 Gaudi::Property<std::string> m_sInputFilePath{this, "InputFilePath", ""};
146 Gaudi::Property<std::string> m_sVarName{this, "VarName", ""};
147 Gaudi::Property<std::string> m_sWP{this, "WP", ""};
148 Gaudi::Property<bool> m_bSkipTruthMatchCheck{this, "SkipTruthMatchCheck", false};
149 Gaudi::Property<int> m_iJetIDLevel{this, "JetIDLevel", static_cast<int>(JETIDNONE)};
150 Gaudi::Property<int> m_iEleIDLevel{this, "EleIDLevel", static_cast<int>(ELEIDNONE)};
151 Gaudi::Property<bool> m_bUseTauSubstructure{this, "UseTauSubstructure", false};
152 Gaudi::Property<bool> m_doTauTrig{this, "DoTauTrig", false};
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".
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