42{
43
44class AsgElectronEfficiencyCorrectionTool
final
48{
50 IAsgElectronEfficiencyCorrectionTool)
51
52public:
54 AsgElectronEfficiencyCorrectionTool(const std::string& myname);
56 virtual ~AsgElectronEfficiencyCorrectionTool() override final;
58 virtual StatusCode
initialize() override final;
59
60
61
62
63 virtual StatusCode beginInputFile() override final;
64 virtual StatusCode beginEvent() override final;
65
66
67
68
70 virtual CP::SystematicSet affectingSystematics() const override final;
72 virtual CP::SystematicSet recommendedSystematics() const override final;
74 virtual bool isAffectedBySystematic(
75 const CP::SystematicVariation& systematic) const override final;
77 virtual StatusCode applySystematicVariation(
78 const CP::SystematicSet& systConfig) override final;
79
80
81
82
83 virtual CP::CorrectionCode getEfficiencyScaleFactor(
84 const xAOD::Electron& inputObject,
85 double& efficiencyScaleFactor) const override final;
86 CP::CorrectionCode getEfficiencyScaleFactor(
87 columnar::ElectronId inputObject,
88 double& efficiencyScaleFactor,
89 columnar::EventInfoId info) const;
90
91 virtual CP::CorrectionCode getEfficiencyScaleFactor(
93 const double cluster_eta,
94 const unsigned int runNumber,
95 double& efficiencyScaleFactor) const override final;
96
97 virtual CP::CorrectionCode applyEfficiencyScaleFactor(
98 const xAOD::Electron& inputObject) const override final;
99
100 virtual int getNumberOfToys() const override final
101 {
102 return m_number_of_toys;
103 };
106 {
108 " Available Correlation Models for the ElectronEfficiencyCorrectionTool");
115 };
116
119 {
120 return *m_appliedSystematics;
121 }
122
127
128private:
130
131 int currentSimplifiedUncorrSystRegion(const double cluster_eta,
132 const double et)
const;
133 int currentUncorrSystRegion(
const double cluster_eta,
const double et)
const;
134
137
138
139 StatusCode getFile(
const std::string& recokey,
140 const std::string& idkey,
141 const std::string& isokey,
142 const std::string& trigkey);
143
146
147
148 struct SystConf
149 {
150 float m_total;
151 unsigned m_toy_index;
152 float m_toy_scale;
153 };
154
156 bool m_metadata_retrieved = false;
157
159 std::unique_ptr<Root::TElectronEfficiencyCorrectionTool> m_rootTool = nullptr;
160
162 std::unordered_map<CP::SystematicSet, CP::SystematicSet> m_systFilter;
163
165 CP::SystematicSet m_affectedSys;
166
168 CP::SystematicSet* m_appliedSystematics;
169
170
171 std::string m_correlation_model_name;
172 int m_correlation_model;
173
174
175 std::string m_mapFile;
176
177
178 std::string m_recoKey;
179 std::string m_idKey;
180 std::string m_isoKey;
181 std::string m_trigKey;
182
184 std::vector<std::string> m_corrFileNameList;
185
187 std::string m_resultPrefix;
188
190 std::string m_resultName;
191
192
193 std::string m_sysSubstring;
194
196 std::string m_eventInfoCollectionName;
197
198
199 bool m_useRandomRunNumber;
200 int m_defaultRandomRunNumber;
201
202
204
206 int m_dataTypeOverwrite;
207
208
209 int m_number_of_toys;
210
211
212 int m_seed_toys;
213
214
215 double m_scale_toys;
216
217
218 int m_nCorrSyst;
219 int m_nUncorrSyst;
220 std::vector<std::pair<float, std::vector<float>>> m_pteta_bins;
221
222
223 std::vector<float> m_uncorrSimplfEtaBinsUser;
224 std::vector<float> m_uncorrSimplfEtBinsUser;
225
226
227 TH2F* m_UncorrRegions;
228 int m_nSimpleUncorrSyst;
229
230
231 std::string m_toysBasename;
232 std::vector<CP::SystematicVariation> m_corrVarUp;
233 std::vector<CP::SystematicVariation> m_corrVarDown;
234 std::vector<CP::SystematicVariation> m_uncorrVarUp;
235 std::vector<CP::SystematicVariation> m_uncorrVarDown;
236
237public:
238
239 struct Accessors : public columnar::ColumnarTool<>
240 {
241 Accessors(AsgElectronEfficiencyCorrectionTool& tool) : columnar::ColumnarTool<>(&
tool) {}
242
245
252
257 columnar::ClusterHelpers::EtaBEAccessor<> clusterEtaBEAcc {*this};
258 };
259 std::unique_ptr<Accessors> m_accessors;
260
263
264};
265
266}
#define ATH_MSG_INFO(x,...)
float et(const xAOD::jFexSRJetRoI *j)
::StatusCode StatusCode
StatusCode definition for legacy code.
AccessorTemplate< ClusterDef, CT, ColumnAccessMode::input, CM > ClusterAccessor
ObjectId< ElectronDef > ElectronId
ObjectRange< EventContextDef > EventContextRange
AccessorTemplate< ElectronDef, CT, ColumnAccessMode::output, CM > ElectronDecorator
ObjectRange< ElectronDef > ElectronRange
AccessorTemplate< ElectronDef, CT, ColumnAccessMode::input, CM > ElectronAccessor
ObjectId< EventInfoDef > EventInfoId
AccessorTemplate< EventInfoDef, CT, ColumnAccessMode::input, CM > EventInfoAccessor
TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)
Electron_v1 Electron
Definition of the current "egamma version".