ATLAS Offline Software
Loading...
Searching...
No Matches
egammaLayerRecalibTool.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
6#ifndef EGAMMA_LAYER_RECALIB_TOOL
7#define EGAMMA_LAYER_RECALIB_TOOL
8
19
21
22// TODO: rewrite with 1 modifier <-> 1 class (not 1 modifier <-> 2 classes amount + modifier)
23// TODO: remove all not used cases
24
25#include <string>
26#include <vector>
27#include <memory>
28
29#include "AsgTools/AsgTool.h"
31#include "xAODEgamma/Egamma.h"
35
36#include <TH1.h>
37#include <TH2.h>
38#include <TFormula.h>
42
43
45{
46 float averageInteractionsPerCrossing; // only for pileup correction
47 unsigned int RunNumber; // only for HV presampler correction and accordion energy correction
48 double eta;
49 double phi; // only for HV presampler correction
50 double E0raw;
51 double E1raw;
52 double E2raw;
53 double E3raw;
54 double etaCalo;
55};
56
57
58// TODO: add protections for invalid inputs (histogram overflows)
60{
61 virtual float operator()(const StdCalibrationInputs & input) const = 0;
62 virtual ~GetAmountBase() { };
63};
64
65
66// object adaptor (prefer composition vs inheritance)
68{
69 virtual float operator()(const StdCalibrationInputs & input) const;
70private:
72};
73
75{
76 virtual float operator()(const StdCalibrationInputs & input) const;
77private:
79};
80
82{
84 virtual float operator()(const StdCalibrationInputs & inputs) const;
85private:
87};
88
90{
92 virtual float operator()(const StdCalibrationInputs & inputs) const;
93private:
95};
96
98{
100 virtual float operator()(const StdCalibrationInputs & inputs) const;
101private:
103};
104
106{
108 virtual float operator()(const StdCalibrationInputs & inputs) const;
109private:
111};
112
113
114
116{
117 GetAmountFormula(const TFormula & formula) : m_formula(formula) { };
118 virtual float operator()(const StdCalibrationInputs & input) const;
119protected:
120 TFormula m_formula;
121};
122
123
125{
126 GetAmountHisto1D(const TH1& histo)
127 : m_histo(static_cast<TH1*>(histo.Clone())) {
128 m_histo->SetDirectory(nullptr);
129 };
130 virtual float operator()(const StdCalibrationInputs & input) const;
131protected:
132 std::unique_ptr<TH1> m_histo;
133};
134
135
137{
138 GetAmountHisto1DUp(const TH1& histo) : GetAmountHisto1D(histo) { };
139 virtual float operator()(const StdCalibrationInputs & input) const;
140};
141
142
144{
145 GetAmountHisto1DDown(const TH1& histo) : GetAmountHisto1D(histo) { };
146 virtual float operator()(const StdCalibrationInputs & input) const;
147};
148
149
151{
152 GetAmountHisto1DErrorUp(const TH1& histo) : GetAmountHisto1D(histo) { };
153 virtual float operator()(const StdCalibrationInputs & input) const;
154};
155
156
158{
159 GetAmountHisto1DErrorDown(const TH1& histo) : GetAmountHisto1D(histo) { };
160 virtual float operator()(const StdCalibrationInputs & input) const;
161};
162
164{
165 GetAmountHisto2D(const TH2F& histo) : m_histo(histo) { m_histo.SetDirectory(nullptr); };
166 virtual float operator()(const StdCalibrationInputs & input) const;
167private:
169};
170
171
173{
174 GetAmountHisto2DEtaCaloRunNumber(const TH2F& histo) : m_histo(histo) { m_histo.SetDirectory(0); };
175 virtual float operator()(const StdCalibrationInputs & input) const;
176protected:
178};
179
180
182{
183public:
184 GetAmountFixed(float amount) : m_amount(amount) { }
185 virtual float operator()(const StdCalibrationInputs & input) const;
186private:
187 float m_amount;
188};
189
191{
193
196 virtual ~InputModifier() { };
197private:
198 InputModifier() { }; // privatize default constructor
199 // here we are one based (amount == 1 <=> null scale)
200 virtual void scale_inputs(StdCalibrationInputs&, float amount) const=0;
201 virtual void shift_inputs(StdCalibrationInputs&, float amount) const=0;
203};
204
205
206struct ScaleE0 : public InputModifier
207{
209private:
210 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
211 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
212};
213
214
215struct ScaleE1 : public InputModifier
216{
218private:
219 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
220 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
221};
222
223
224struct ScaleE2 : public InputModifier
225{
227private:
228 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
229 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
230};
231
232
233struct ScaleE3 : public InputModifier
234{
236private:
237 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
238 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
239};
240
241
243{
245private:
246 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
247 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
248};
249
250
252{
254private:
255 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
256 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
257};
258
259
261{
263private:
264 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
265 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
266};
267
268
270{
271public:
272 typedef std::vector<std::pair<InputModifier*, GetAmountBase*> > ModifiersList;
279 egammaLayerRecalibTool(const std::string& name, const std::string& tune, int SaccEnable = 1);
280 egammaLayerRecalibTool(const std::string& tune, int SaccEnable = 1);
282
284
288 static std::pair<std::string, egammaLayerRecalibTool*> create(const std::string& type,
289 const std::string& args);
290
298 void add_scale(InputModifier * modifier, GetAmountBase * amount);
303 void add_scale(const std::string& scale);
307 void clear_corrections();
308
309 void fixForMissingCells(bool fix = true) { m_aodFixMissingCells = fix; }
310 void scaleMC(bool scaleMC = true) { m_scaleMC = scaleMC; }
314
315private:
316
317 static const unsigned int m_Run2Run3runNumberTransition = 400000;
318
319 std::string m_tune;
320 bool m_doPSCorrections = true;
323 const std::string resolve_path(std::string filename) const;
324 static std::string resolve_alias(const std::string& tune) ;
326
328
330 bool m_scaleMC = false;
331};
332
333#endif // EGAMMA_LAYER_RECALIB_TOOL
Return value from object correction CP tools.
Class mimicking the AthMessaging class from the offline software.
Correction for time dependent HV effect in barrel presampler scale in 2012.
Correction for wrong HV EMEC presampler correction for 20.7 processed data (2015,2016)
Correction for pileup induced energy shit as function of mu per layer for 2016 data.
std::vector< std::pair< InputModifier *, GetAmountBase * > > ModifiersList
CP::CorrectionCode applyCorrection(xAOD::Egamma &, const xAOD::EventInfo &event_info) const
void add_scale(InputModifier *modifier, GetAmountBase *amount)
add custom layer scale correction.
void scaleMC(bool scaleMC=true)
const std::string resolve_path(std::string filename) const
static std::string resolve_alias(const std::string &tune)
static const unsigned int m_Run2Run3runNumberTransition
egammaLayerRecalibTool(const std::string &name, const std::string &tune, int SaccEnable=1)
static std::pair< std::string, egammaLayerRecalibTool * > create(const std::string &type, const std::string &args)
helper to create a tool from a string (useful for command line arguments)
void fixForMissingCells(bool fix=true)
CP::CorrectionCode scale_inputs(StdCalibrationInputs &inputs) const
apply layer calibration to the
void clear_corrections()
remove all the scale corrections
std::string base
Definition hcg.cxx:81
EventInfo_v1 EventInfo
Definition of the latest event info version.
Egamma_v1 Egamma
Definition of the current "egamma version".
Definition Egamma.h:17
virtual float operator()(const StdCalibrationInputs &input) const =0
GetAmountFixed(float amount)
virtual float operator()(const StdCalibrationInputs &input) const
GetAmountFormula(const TFormula &formula)
virtual float operator()(const StdCalibrationInputs &input) const
virtual float operator()(const StdCalibrationInputs &input) const
virtual float operator()(const StdCalibrationInputs &input) const
virtual float operator()(const StdCalibrationInputs &input) const
GetAmountHisto1DDown(const TH1 &histo)
virtual float operator()(const StdCalibrationInputs &input) const
GetAmountHisto1DErrorDown(const TH1 &histo)
GetAmountHisto1DErrorUp(const TH1 &histo)
virtual float operator()(const StdCalibrationInputs &input) const
virtual float operator()(const StdCalibrationInputs &input) const
GetAmountHisto1DUp(const TH1 &histo)
std::unique_ptr< TH1 > m_histo
GetAmountHisto1D(const TH1 &histo)
virtual float operator()(const StdCalibrationInputs &input) const
virtual float operator()(const StdCalibrationInputs &input) const
virtual float operator()(const StdCalibrationInputs &input) const
GetAmountHisto2D(const TH2F &histo)
corr_pileupShift * m_tool
virtual float operator()(const StdCalibrationInputs &inputs) const
GetAmountPileupE0(corr_pileupShift *tool)
GetAmountPileupE1(corr_pileupShift *tool)
corr_pileupShift * m_tool
virtual float operator()(const StdCalibrationInputs &inputs) const
GetAmountPileupE2(corr_pileupShift *tool)
virtual float operator()(const StdCalibrationInputs &inputs) const
corr_pileupShift * m_tool
corr_pileupShift * m_tool
GetAmountPileupE3(corr_pileupShift *tool)
virtual float operator()(const StdCalibrationInputs &inputs) const
virtual void shift_inputs(StdCalibrationInputs &, float amount) const =0
CP::CorrectionCode operator()(StdCalibrationInputs &, float amount) const
virtual void scale_inputs(StdCalibrationInputs &, float amount) const =0
InputModifier(NullPoint base)
virtual void scale_inputs(StdCalibrationInputs &, float amount) const
virtual void shift_inputs(StdCalibrationInputs &, float amount) const
ScaleE0(NullPoint base)
virtual void scale_inputs(StdCalibrationInputs &, float amount) const
ScaleE1(NullPoint base)
virtual void shift_inputs(StdCalibrationInputs &, float amount) const
ScaleE1overE2(NullPoint base)
virtual void shift_inputs(StdCalibrationInputs &, float amount) const
virtual void scale_inputs(StdCalibrationInputs &, float amount) const
ScaleE2(NullPoint base)
virtual void scale_inputs(StdCalibrationInputs &, float amount) const
virtual void shift_inputs(StdCalibrationInputs &, float amount) const
ScaleE3(NullPoint base)
virtual void scale_inputs(StdCalibrationInputs &, float amount) const
virtual void shift_inputs(StdCalibrationInputs &, float amount) const
virtual void shift_inputs(StdCalibrationInputs &, float amount) const
virtual void scale_inputs(StdCalibrationInputs &, float amount) const
ScaleEaccordion(NullPoint base)
ScaleEcalorimeter(NullPoint base)
virtual void shift_inputs(StdCalibrationInputs &, float amount) const
virtual void scale_inputs(StdCalibrationInputs &, float amount) const
Name : egammaLayerRecalibTool.h Package : egammaLayerRecalibTool Author : R.