ATLAS Offline Software
Loading...
Searching...
No Matches
HistHandler.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4
5#ifndef MUONEFFICIENCYCORRECTIONS_HISTOHANDLER_H
6#define MUONEFFICIENCYCORRECTIONS_HISTOHANDLER_H
7
8// EDM include(s):
9#include "xAODMuon/Muon.h"
10
11// supported SF histogram types
12#include <TH1D.h>
13#include <TH2D.h>
14#include <TH3D.h>
15#include <TH2Poly.h>
16
19// further ROOT includes
20#include <TFile.h>
21#include <TDirectory.h>
22
27
28// STL includes
29#include <string>
30#include <iostream>
31#include <exception>
32#include <map>
33#include <memory>
34#include <cmath>
35
36namespace CP {
37
39 class AxisHandler;
40
41
49 public:
50
51 inline double GetBinContent(int bin) const{
52 if (!m_H) return DBL_MAX;
53 return m_H->GetBinContent(bin);
54 }
55
56 void SetBinContent(int bin, float val);
57
58 inline double GetBinError(int bin) const{
59 if (!m_H) return DBL_MAX;
60 return m_H->GetBinError(bin);
61 }
62
63 inline TH1* GetHist() const{
64 return m_H.get();
65 }
66
67 void SetBinError(int bin, float val);
68
70 virtual CorrectionCode FindBin(columnar::MuonId muon, int & bin) const = 0;
72 virtual int nBins() const = 0;
74 virtual int nOverFlowBins() const = 0;
76 virtual bool isOverFlowBin(int b) const =0;
78 virtual std::string GetBinName(unsigned int bin) const=0;
79
80 virtual ~HistHandler();
81 protected:
82 HistHandler(columnar::ColumnarTool<>* parent, TH1* Hist);
83 HistHandler(const HistHandler & other) = delete;
85 private:
86 std::unique_ptr<TH1> m_H;
87
88 };
89
90
91
93
94 public:
95
96 HistHandler_TH1(columnar::ColumnarTool<>* parent, TH1* hist);
97 virtual ~HistHandler_TH1();
98
99 int nBins() const override;
100
101 int nOverFlowBins() const override;
102 bool isOverFlowBin(int b) const override;
103
104
105 std::string GetBinName(unsigned int bin) const override;
106 CorrectionCode FindBin(columnar::MuonId muon, int & bin) const override;
107
108 private:
109 std::unique_ptr<AxisHandler> m_x_handler;
110 };
111
113
114 public:
119 HistHandler_TH2(columnar::ColumnarTool<>* parent, TH1* hist);
120 virtual ~HistHandler_TH2();
121
122 int nBins() const override;
123
124 int nOverFlowBins() const override;
125 bool isOverFlowBin(int b) const override;
126
127 std::string GetBinName(unsigned int bin) const override;
128
129 CorrectionCode FindBin(columnar::MuonId muon, int & bin) const override;
130
131 private:
132 std::unique_ptr<AxisHandler> m_x_handler;
133 std::unique_ptr<AxisHandler> m_y_handler;
134 };
135
137
138 public:
142
143 HistHandler_TH3(columnar::ColumnarTool<>* parent, TH1* hist);
144 virtual ~HistHandler_TH3();
145
146 int nBins() const override;
147
148 int nOverFlowBins() const override;
149 bool isOverFlowBin(int b) const override;
150
151
152 std::string GetBinName(unsigned int bin) const override;
153
154 CorrectionCode FindBin(columnar::MuonId muon, int & bin) const override;
155
156 private:
157 std::unique_ptr<AxisHandler> m_x_handler;
158 std::unique_ptr<AxisHandler> m_y_handler;
159 std::unique_ptr<AxisHandler> m_z_handler;
160 };
161
163
164 public:
168 HistHandler_TH2Poly(columnar::ColumnarTool<>* parent, TH2Poly* hist);
169 virtual ~HistHandler_TH2Poly();
170
171 int nOverFlowBins() const override;
172 bool isOverFlowBin(int b) const override;
173
174 int nBins() const override;
175 std::string GetBinName(unsigned int bin) const override;
176 CorrectionCode FindBin(columnar::MuonId muon, int & bin) const override;
177
178 private:
179 TH2Poly* m_h;
180 std::unique_ptr<AxisHandler> m_x_handler;
181 std::unique_ptr<AxisHandler> m_y_handler;
182 };
183
185 public:
186 virtual CorrectionCode GetBinningParameter(columnar::MuonId mu, float & value) const =0;
187 AxisHandler (columnar::ColumnarTool<> * parent) : columnar::ColumnarTool<>(parent) {}
188 virtual ~AxisHandler()= default;
189 };
191 public:
192 static std::unique_ptr<AxisHandler> GetAxisHandler(columnar::ColumnarTool<> * parent, const TAxis* axis);
193 };
194
196 public:
197 CorrectionCode GetBinningParameter(columnar::MuonId mu, float & value) const override;
199 virtual ~PtAxisHandler() = default;
201 };
202
204 public:
205 CorrectionCode GetBinningParameter(columnar::MuonId mu, float & value) const override;
207 virtual ~ChargeAxisHandler() = default;
209 };
210
212 public:
213 CorrectionCode GetBinningParameter(columnar::MuonId mu, float & value) const override;
215 virtual ~EtaAxisHandler() = default;
217 };
219 public:
220 CorrectionCode GetBinningParameter(columnar::MuonId mu, float & value) const override;
222 virtual ~AbsEtaAxisHandler() = default;
224 };
226 public:
227 CorrectionCode GetBinningParameter(columnar::MuonId mu, float & value) const override;
229 virtual ~PhiAxisHandler() = default;
231 };
233 public:
235
236 CorrectionCode GetBinningParameter(columnar::MuonId mu, float & value) const override;
237 virtual ~dRJetAxisHandler() = default;
238
239 //this method must be called only before any object creation, since it sets the static variable s_close_jet_decor, that is used only to initialize the m_acc member variable, and for nothing else; using it after object creation will not change the behaviour of the class
240 static void set_close_jet_decorator(const std::string& decor_name);
241 //this method must be called only before any object creation, since it sets the static variable s_use_2D_sf, that is used only to initialize the m_use_2D_sf member variable, and for nothing else; using it after object creation will not change the behaviour of the class
242 static void set_use_2D_sf(const bool);
243
244 private:
245 //this static variable is safe because it is only used during object creation (to set the value of m_acc) and avoiding it would require a significant rewrite
246 static std::string s_close_jet_decor ATLAS_THREAD_SAFE;
247 //this static variable is safe because it is only used during object creation (to set the value of m_use_2D_sf) and avoiding it would require a significant rewrite
248 static bool s_use_2D_sf ATLAS_THREAD_SAFE;
249
251
252 public:
255 };
257 public:
258 CorrectionCode GetBinningParameter(columnar::MuonId, float &) const override;
260 virtual ~UndefinedAxisHandler() = default;
261 };
262
263} // namespace CP
264#endif
Define macros for attributes used to control the static checker.
AbsEtaAxisHandler(columnar::ColumnarTool<> *parent)
CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const override
virtual ~AbsEtaAxisHandler()=default
columnar::MuonAccessor< float > etaAcc
static std::unique_ptr< AxisHandler > GetAxisHandler(columnar::ColumnarTool<> *parent, const TAxis *axis)
AxisHandler(columnar::ColumnarTool<> *parent)
virtual CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const =0
virtual ~AxisHandler()=default
columnar::MuonAccessor< float > chargeAcc
CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const override
virtual ~ChargeAxisHandler()=default
ChargeAxisHandler(columnar::ColumnarTool<> *parent)
Return value from object correction CP tools.
columnar::MuonAccessor< float > etaAcc
CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const override
EtaAxisHandler(columnar::ColumnarTool<> *parent)
virtual ~EtaAxisHandler()=default
std::unique_ptr< AxisHandler > m_x_handler
bool isOverFlowBin(int b) const override
States whether a bin is overflow or not.
std::string GetBinName(unsigned int bin) const override
Translates the bin number into the borders and return them as name.
CorrectionCode FindBin(columnar::MuonId muon, int &bin) const override
Function that changes from Implementation to implementation.
int nBins() const override
Return the total number of bins in the histogram -> (GetNbins() +2)**n.
int nOverFlowBins() const override
Return the number of overflow bins.
HistHandler_TH1(columnar::ColumnarTool<> *parent, TH1 *hist)
bool isOverFlowBin(int b) const override
States whether a bin is overflow or not.
int nOverFlowBins() const override
Return the number of overflow bins.
std::string GetBinName(unsigned int bin) const override
Translates the bin number into the borders and return them as name.
std::unique_ptr< AxisHandler > m_y_handler
int nBins() const override
Return the total number of bins in the histogram -> (GetNbins() +2)**n.
std::unique_ptr< AxisHandler > m_x_handler
HistHandler_TH2Poly(columnar::ColumnarTool<> *parent, TH2Poly *hist)
The HistHandler_TH2Poly handles the TH2Poly histograms of the scale-factor maps.
CorrectionCode FindBin(columnar::MuonId muon, int &bin) const override
Function that changes from Implementation to implementation.
std::string GetBinName(unsigned int bin) const override
Translates the bin number into the borders and return them as name.
CorrectionCode FindBin(columnar::MuonId muon, int &bin) const override
Function that changes from Implementation to implementation.
HistHandler_TH2(columnar::ColumnarTool<> *parent, TH1 *hist)
The HistHandler TH2 handles 2D histograms which are not TH2Poly, since TH2 inhertis from TH1,...
int nOverFlowBins() const override
Return the number of overflow bins.
int nBins() const override
Return the total number of bins in the histogram -> (GetNbins() +2)**n.
std::unique_ptr< AxisHandler > m_x_handler
std::unique_ptr< AxisHandler > m_y_handler
bool isOverFlowBin(int b) const override
States whether a bin is overflow or not.
bool isOverFlowBin(int b) const override
States whether a bin is overflow or not.
std::unique_ptr< AxisHandler > m_x_handler
CorrectionCode FindBin(columnar::MuonId muon, int &bin) const override
Function that changes from Implementation to implementation.
std::string GetBinName(unsigned int bin) const override
Translates the bin number into the borders and return them as name.
int nOverFlowBins() const override
Return the number of overflow bins.
HistHandler_TH3(columnar::ColumnarTool<> *parent, TH1 *hist)
The HistHandler TH3 handles 3D histograms, since TH3 inhertis from TH1,a TH1* object is parsed avoidi...
int nBins() const override
Return the total number of bins in the histogram -> (GetNbins() +2)**n.
std::unique_ptr< AxisHandler > m_y_handler
std::unique_ptr< AxisHandler > m_z_handler
HistHandler(const HistHandler &other)=delete
TH1 * GetHist() const
Definition HistHandler.h:63
virtual bool isOverFlowBin(int b) const =0
States whether a bin is overflow or not.
virtual CorrectionCode FindBin(columnar::MuonId muon, int &bin) const =0
Function that changes from Implementation to implementation.
std::unique_ptr< TH1 > m_H
Definition HistHandler.h:86
void SetBinError(int bin, float val)
virtual int nOverFlowBins() const =0
Return the number of overflow bins.
virtual ~HistHandler()
virtual std::string GetBinName(unsigned int bin) const =0
Translates the bin number into the borders and return them as name.
double GetBinContent(int bin) const
Definition HistHandler.h:51
double GetBinError(int bin) const
Definition HistHandler.h:58
HistHandler & operator=(const HistHandler &other)=delete
void SetBinContent(int bin, float val)
virtual int nBins() const =0
Return the total number of bins in the histogram -> (GetNbins() +2)**n.
HistHandler(columnar::ColumnarTool<> *parent, TH1 *Hist)
CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const override
PhiAxisHandler(columnar::ColumnarTool<> *parent)
columnar::MuonAccessor< float > phiAcc
virtual ~PhiAxisHandler()=default
virtual ~PtAxisHandler()=default
PtAxisHandler(columnar::ColumnarTool<> *parent)
CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const override
columnar::MuonAccessor< float > ptAcc
virtual ~UndefinedAxisHandler()=default
UndefinedAxisHandler(columnar::ColumnarTool<> *parent)
CorrectionCode GetBinningParameter(columnar::MuonId, float &) const override
CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const override
columnar::MuonAccessor< float > acc_dR_deriv
virtual ~dRJetAxisHandler()=default
static std::string s_close_jet_decor ATLAS_THREAD_SAFE
static void set_use_2D_sf(const bool)
static void set_close_jet_decorator(const std::string &decor_name)
dRJetAxisHandler(columnar::ColumnarTool<> *parent)
columnar::MuonAccessor< float > m_acc
Select isolated Photons, Electrons and Muons.
ObjectId< ContainerId::muon > MuonId
Definition MuonDef.h:25
AccessorTemplate< ContainerId::muon, CT, ColumnAccessMode::input, CM > MuonAccessor
Definition MuonDef.h:27