ATLAS Offline Software
Loading...
Searching...
No Matches
egammaLayerRecalibTool.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
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{
192public:
194 virtual ~GetAmountDecoratorBase() { delete m_getter; }
195 virtual float operator()(const StdCalibrationInputs & input) const {
196 return (*m_getter)(input);
197 }
198private:
200};
201
202
204{
206
209 virtual ~InputModifier() { };
210private:
211 InputModifier() { }; // privatize default constructor
212 // here we are one based (amount == 1 <=> null scale)
213 virtual void scale_inputs(StdCalibrationInputs&, float amount) const=0;
214 virtual void shift_inputs(StdCalibrationInputs&, float amount) const=0;
216};
217
218
219struct ScaleE0 : public InputModifier
220{
222private:
223 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
224 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
225};
226
227
228struct ScaleE1 : public InputModifier
229{
231private:
232 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
233 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
234};
235
236
237struct ScaleE2 : public InputModifier
238{
240private:
241 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
242 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
243};
244
245
246struct ScaleE3 : public InputModifier
247{
249private:
250 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
251 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
252};
253
254
256{
258private:
259 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
260 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
261};
262
263
265{
267private:
268 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
269 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
270};
271
272
274{
276private:
277 virtual void scale_inputs(StdCalibrationInputs&, float amount) const;
278 virtual void shift_inputs(StdCalibrationInputs&, float amount) const;
279};
280
281
283{
284public:
285 typedef std::vector<std::pair<InputModifier*, GetAmountBase*> > ModifiersList;
292 egammaLayerRecalibTool(const std::string& name, const std::string& tune, int SaccEnable = 1);
293 egammaLayerRecalibTool(const std::string& tune, int SaccEnable = 1);
295
297
301 static std::pair<std::string, egammaLayerRecalibTool*> create(const std::string& type,
302 const std::string& args);
303
311 void add_scale(InputModifier * modifier, GetAmountBase * amount);
316 void add_scale(const std::string& scale);
320 void clear_corrections();
321
322 void fixForMissingCells(bool fix = true) { m_aodFixMissingCells = fix; }
323 void scaleMC(bool scaleMC = true) { m_scaleMC = scaleMC; }
327
328private:
329
330 static const unsigned int m_Run2Run3runNumberTransition = 400000;
331
332 std::string m_tune;
333 bool m_doPSCorrections = true;
336 const std::string resolve_path(std::string filename) const;
337 static std::string resolve_alias(const std::string& tune) ;
339
341
343 bool m_scaleMC = false;
344};
345
346#endif // EGAMMA_LAYER_RECALIB_TOOL
Return value from object correction CP tools.
GetAmountDecoratorBase(GetAmountBase *getter)
virtual float operator()(const StdCalibrationInputs &input) const
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.