ATLAS Offline Software
Loading...
Searching...
No Matches
CommonEfficiencyTool.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

namespace ADD_CMODE (TauAnalysisTools)

Function Documentation

◆ ADD_CMODE()

namespace ADD_CMODE ( TauAnalysisTools )

Create a proper constructor for Athena

returns: whether this tool is affected by the given systematics

returns: the list of all systematics this tool can be affected by

returns: the list of all systematics this tool recommends to use

configure this tool for the given list of systematic variations. any requested systematics that are not affecting this tool will be silently ignored

Definition at line 1 of file CommonEfficiencyTool.h.

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)
#define ASG_TOOL_CLASS(CLASSNAME, INT1)
static Double_t taus
Base class for the dual-use tool implementation classes.
Definition AsgTool.h:47
virtual StatusCode initialize()
Dummy implementation of the initialisation function.
Definition AsgTool.h:133
the base class for all columnar components
::StatusCode StatusCode
StatusCode definition for legacy code.
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