5#ifndef MUONEFFICIENCYCORRECTIONS_HISTOHANDLER_H
6#define MUONEFFICIENCYCORRECTIONS_HISTOHANDLER_H
21#include <TDirectory.h>
36namespace ADD_CMODE(CP) {
51 inline double GetBinContent(
int bin)
const{
52 if (!m_H)
return DBL_MAX;
53 return m_H->GetBinContent(
bin);
56 void SetBinContent(
int bin,
float val);
58 inline double GetBinError(
int bin)
const{
59 if (!m_H)
return DBL_MAX;
60 return m_H->GetBinError(
bin);
63 inline TH1* GetHist()
const{
67 void SetBinError(
int bin,
float val);
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;
80 virtual ~HistHandler();
82 HistHandler(columnar::ColumnarTool<>* parent, TH1* Hist);
83 HistHandler(
const HistHandler & other) =
delete;
84 HistHandler&
operator =(
const HistHandler & other) =
delete;
86 std::unique_ptr<TH1> m_H;
92 class HistHandler_TH1:
public HistHandler {
96 HistHandler_TH1(columnar::ColumnarTool<>* parent, TH1* hist);
97 virtual ~HistHandler_TH1();
99 int nBins()
const override;
101 int nOverFlowBins()
const override;
102 bool isOverFlowBin(
int b)
const override;
105 std::string GetBinName(
unsigned int bin)
const override;
109 std::unique_ptr<AxisHandler> m_x_handler;
112 class HistHandler_TH2:
public HistHandler {
119 HistHandler_TH2(columnar::ColumnarTool<>* parent, TH1* hist);
120 virtual ~HistHandler_TH2();
122 int nBins()
const override;
124 int nOverFlowBins()
const override;
125 bool isOverFlowBin(
int b)
const override;
127 std::string GetBinName(
unsigned int bin)
const override;
132 std::unique_ptr<AxisHandler> m_x_handler;
133 std::unique_ptr<AxisHandler> m_y_handler;
136 class HistHandler_TH3:
public HistHandler {
143 HistHandler_TH3(columnar::ColumnarTool<>* parent, TH1* hist);
144 virtual ~HistHandler_TH3();
146 int nBins()
const override;
148 int nOverFlowBins()
const override;
149 bool isOverFlowBin(
int b)
const override;
152 std::string GetBinName(
unsigned int bin)
const override;
157 std::unique_ptr<AxisHandler> m_x_handler;
158 std::unique_ptr<AxisHandler> m_y_handler;
159 std::unique_ptr<AxisHandler> m_z_handler;
162 class HistHandler_TH2Poly:
public HistHandler {
168 HistHandler_TH2Poly(columnar::ColumnarTool<>* parent, TH2Poly* hist);
169 virtual ~HistHandler_TH2Poly();
171 int nOverFlowBins()
const override;
172 bool isOverFlowBin(
int b)
const override;
174 int nBins()
const override;
175 std::string GetBinName(
unsigned int bin)
const override;
180 std::unique_ptr<AxisHandler> m_x_handler;
181 std::unique_ptr<AxisHandler> m_y_handler;
184 class AxisHandler :
public columnar::ColumnarTool<> {
186 virtual CP::CorrectionCode GetBinningParameter(
columnar::MuonId mu,
float & value)
const =0;
187 AxisHandler (columnar::ColumnarTool<> * parent) : columnar::ColumnarTool<>(
parent) {}
188 virtual ~AxisHandler()=
default;
190 class AxisHandlerProvider {
192 static std::unique_ptr<AxisHandler> GetAxisHandler(columnar::ColumnarTool<> * parent,
const TAxis* axis);
195 class PtAxisHandler:
public AxisHandler {
197 CP::CorrectionCode GetBinningParameter(
columnar::MuonId mu,
float & value)
const override;
198 PtAxisHandler (columnar::ColumnarTool<> * parent) : AxisHandler(
parent) {}
199 virtual ~PtAxisHandler() =
default;
203 class ChargeAxisHandler:
public AxisHandler {
205 CP::CorrectionCode GetBinningParameter(
columnar::MuonId mu,
float & value)
const override;
206 ChargeAxisHandler (columnar::ColumnarTool<> * parent) : AxisHandler(
parent) {}
207 virtual ~ChargeAxisHandler() =
default;
211 class EtaAxisHandler:
public AxisHandler {
213 CP::CorrectionCode GetBinningParameter(
columnar::MuonId mu,
float & value)
const override;
214 EtaAxisHandler (columnar::ColumnarTool<> * parent) : AxisHandler(
parent) {}
215 virtual ~EtaAxisHandler() =
default;
218 class AbsEtaAxisHandler:
public AxisHandler {
220 CP::CorrectionCode GetBinningParameter(
columnar::MuonId mu,
float & value)
const override;
221 AbsEtaAxisHandler (columnar::ColumnarTool<> * parent) : AxisHandler(
parent) {}
222 virtual ~AbsEtaAxisHandler() =
default;
225 class PhiAxisHandler:
public AxisHandler {
227 CP::CorrectionCode GetBinningParameter(
columnar::MuonId mu,
float & value)
const override;
228 PhiAxisHandler (columnar::ColumnarTool<> * parent) : AxisHandler(
parent) {}
229 virtual ~PhiAxisHandler() =
default;
232 class dRJetAxisHandler:
public AxisHandler {
234 dRJetAxisHandler(columnar::ColumnarTool<> * parent);
236 CP::CorrectionCode GetBinningParameter(
columnar::MuonId mu,
float & value)
const override;
237 virtual ~dRJetAxisHandler() =
default;
240 static void set_close_jet_decorator(
const std::string& decor_name);
242 static void set_use_2D_sf(
const bool);
256 class UndefinedAxisHandler:
public AxisHandler {
258 CP::CorrectionCode GetBinningParameter(
columnar::MuonId,
float &)
const override;
259 UndefinedAxisHandler (columnar::ColumnarTool<> * parent) : AxisHandler(
parent) {}
260 virtual ~UndefinedAxisHandler() =
default;
ElementLink & operator=(const ElementLink &)=default
Define macros for attributes used to control the static checker.
#define ATLAS_THREAD_SAFE
Int_t FindBin(const TAxis *axis, const double x)
ObjectId< MuonDef > MuonId
AccessorTemplate< MuonDef, CT, ColumnAccessMode::input, CM > MuonAccessor