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 ADD_CMODE(TauAnalysisTools)
39{
40
41// forward declaration
42class TauEfficiencyCorrectionsTool;
43
44class CommonEfficiencyTool
45 : public virtual ITauEfficiencyCorrectionsTool
46 , public asg::AsgTool
47 , public columnar::ColumnarTool<>
48{
50 ASG_TOOL_CLASS( CommonEfficiencyTool, TauAnalysisTools::ITauEfficiencyCorrectionsTool )
51
52public:
53
54 CommonEfficiencyTool(const std::string& sName);
55
56 ~CommonEfficiencyTool();
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
69 virtual CP::CorrectionCode applyEfficiencyScaleFactor(const xAOD::TauJet& xTau,
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;
110 const CP::SystematicSet* m_sSystematicSet;
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
137 void generateSystematicSets();
138
139protected:
140
141 CP::SystematicSet m_sAffectingSystematics;
142 CP::SystematicSet m_sRecommendedSystematics;
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>(TauAnalysisTools::JETIDNONE)};
149 Gaudi::Property<int> m_iEleIDLevel{this, "EleIDLevel", static_cast<int>(TauAnalysisTools::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;
156 bool m_bNoMultiprong;
157
159
160 bool m_bSFIsAvailable;
161 bool m_bSFIsAvailableChecked;
162
163
164public:
165
166 struct Accessors : public columnar::ColumnarTool<>
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.
175 columnar::TruthParticleAccessor<columnar::ObjectColumn> m_truthParticles {*this, "TruthTaus"};
176 columnar::JetAccessor<columnar::ObjectColumn> m_jets {*this, "AntiKt4TruthDressedWZJets"};
177
178 columnar::TauJetAccessor<columnar::ObjectColumn> m_taus {*this, "TauJets"};
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"};
182 columnar::TauJetAccessor<int> m_decayMode{*this,"PanTau_DecayMode"};
183 TauAnalysisTools::TruthParticleTypeAccessor<> m_truthParticleType{*this};
184 columnar::TauJetDecorator<float> m_sfDec{*this,"sfOut"};
185 columnar::TauJetDecorator<char> m_validDec{*this,"validOut"};
186 };
187 std::unique_ptr<Accessors> m_accessors;
188
189 void callSingleEvent (columnar::TauJetRange taus, columnar::EventInfoId event) const;
190 void callEvents (columnar::EventContextRange events) const override;
191
192
193};
194} // namespace ADD_CMODE(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.
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
void initialize()