21 if (axisptr !=
nullptr) {
22 std::string axis = axisptr->GetTitle();
24 size_t Abs1 = axis.find(
"|");
26 if (Abs1 != std::string::npos) Abs2 = axis.find(
"|", Abs1 + 1);
27 bool AbsAxis = (Abs2 != std::string::npos) && (Abs2 != 0);
28 if (axis.find(
"pt") != std::string::npos || axis.find(
"pT") != std::string::npos || axis.find(
"p_{T}") != std::string::npos) {
29 return std::make_unique<PtAxisHandler>(parent);
30 }
else if (axis.find(
"phi") != std::string::npos) {
31 return std::make_unique<PhiAxisHandler>(parent);
32 }
else if (axis.find(
"q") != std::string::npos || axis.find(
"charge") != std::string::npos) {
33 return std::make_unique<ChargeAxisHandler>(parent);
34 }
else if (axis.find(
"eta") != std::string::npos) {
35 if (AbsAxis)
return std::make_unique<AbsEtaAxisHandler>(parent);
36 return std::make_unique<EtaAxisHandler>(parent);
37 }
else if (axis.find(
"dRJet") != std::string::npos || axis.find(
"#DeltaR (jet, #mu)") != std::string::npos) {
38 return std::make_unique<dRJetAxisHandler>(parent);
41 Error(
"AxisHandlerProvider",
"Can not interpret axis title '%s'", axis.c_str());
43 Error(
"AxisHandlerProvider",
"nullptr pointer passed");
45 return std::make_unique<UndefinedAxisHandler>(parent);
50 value =
ptAcc(mu) / 1000.;
62 value = std::abs(
etaAcc(mu));
70 s_close_jet_decor = decor_name;
78 std::string dRJetAxisHandler::s_close_jet_decor =
"dRJet";
79 bool dRJetAxisHandler::s_use_2D_sf =
false;
83 m_acc(*this,s_close_jet_decor){}
87 static std::atomic<unsigned int> warned = {0};
92 }
else if(
m_acc.isAvailable(mu) ) {
96 Warning(
"MuonEfficiencyCorrections::dRJetAxisHandler()",
"The DFCommonJetDr jet decoration is not available in the derivation will fall back to %s",s_close_jet_decor.c_str());
104 Warning(
"MuonEfficiencyCorrections::dRJetAxisHandler()",
"The %s decoration has not been found for the Muon. Isolation scale-factors are now also binned in #Delta R(jet,#mu)", s_close_jet_decor.c_str());
105 Warning(
"MuonEfficiencyCorrections::dRJetAxisHandler()",
"using the closest calibrated AntiKt4EMTopo jet with p_{T}>20~GeV and surving the standard OR criteria.");
106 Warning(
"MuonEfficiencyCorrections::dRJetAxisHandler()",
"You should decorate your muon appropiately before passing to the tool, and use dRJet = -1 in case there is no jet in an event.");
107 Warning(
"MuonEfficiencyCorrections::dRJetAxisHandler()",
"For the time being the inclusive scale-factor is going to be returned.");
108 Warning(
"MuonEfficiencyCorrections::dRJetAxisHandler()",
"In future derivations, muons will also be decorated centrally with DFCommonJetDr, for your benefit.");
109 Warning(
"MuonEfficiencyCorrections::dRJetAxisHandler()",
"You can define custom jet decorations via the 'CloseJetDRDecorator' property of the MuonEfficiencyCorrections tool");
142 m_H->SetBinContent(
bin, val);
147 m_H->SetBinError(
bin, val);
164 TAxis* xAx =
GetHist()->GetXaxis();
165 return Form(
"%s_%.2f_to_%.2f", xAx->GetTitle(), xAx->GetBinLowEdge(
bin), xAx->GetBinUpEdge(
bin));
177 if (bin < 1 || bin >
GetHist()->GetNbinsX()) {
194 return (
GetHist()->GetNbinsX() + 2) * (
GetHist()->GetNbinsY() + 2);
198 int x(-1),
y(-1),
z(-1);
200 return x == 0 ||
x ==
GetHist()->GetXaxis()->GetNbins() + 1 ||
y == 0 ||
y ==
GetHist()->GetYaxis()->GetNbins() + 1;
210 int binx =
GetHist()->GetXaxis()->FindBin(parx);
211 int biny =
GetHist()->GetYaxis()->FindBin(pary);
212 if (binx < 1 || binx >
GetHist()->GetNbinsX() || biny < 1 || biny >
GetHist()->GetNbinsY()) {
222 int x(0),
y(0),
z(0);
224 TAxis* xAx =
GetHist()->GetXaxis();
225 TAxis* yAx =
GetHist()->GetYaxis();
226 return Form(
"%s_%.2f_to_%.2f_times_%s_%.2f_to_%.2f",
228 xAx->GetTitle(), xAx->GetBinLowEdge(
x), xAx->GetBinUpEdge(
x),
230 yAx->GetTitle(), yAx->GetBinLowEdge(
y), yAx->GetBinUpEdge(
y));
252 int x(-1),
y(-1),
z(-1);
254 return x == 0 ||
x ==
GetHist()->GetXaxis()->GetNbins() + 1 ||
255 y == 0 ||
y ==
GetHist()->GetYaxis()->GetNbins() + 1 ||
256 z == 0 ||
z ==
GetHist()->GetZaxis()->GetNbins() + 1;
267 int binx =
GetHist()->GetXaxis()->FindBin(parx);
268 int biny =
GetHist()->GetYaxis()->FindBin(pary);
269 int binz =
GetHist()->GetZaxis()->FindBin(parz);
270 if (binx < 1 || binx >
GetHist()->GetNbinsX() || biny < 1 || biny >
GetHist()->GetNbinsY() || binz < 1 || binz >
GetHist()->GetNbinsZ()) {
279 int x(0),
y(0),
z(0);
281 TAxis* xAx =
GetHist()->GetXaxis();
282 TAxis* yAx =
GetHist()->GetYaxis();
283 TAxis* zAx =
GetHist()->GetZaxis();
284 return Form(
"%s_%.2f_to_%.2f_times_%s_%.2f_to_%.2f_times_%s_%.2f_to_%.2f",
286 xAx->GetTitle(), xAx->GetBinLowEdge(
x), xAx->GetBinUpEdge(
x),
288 yAx->GetTitle(), yAx->GetBinLowEdge(
y), yAx->GetBinUpEdge(
y),
290 zAx->GetTitle(), zAx->GetBinLowEdge(
z), zAx->GetBinUpEdge(
z));
308 return m_h->GetNumberOfBins() + 1;
329 int x(0),
y(0),
z(0);
331 TAxis* xAx =
GetHist()->GetXaxis();
332 TAxis* yAx =
GetHist()->GetYaxis();
333 return Form(
"%s_%.2f_to_%.2f__times_%s_%.2f_to_%.2f",
334 xAx->GetTitle(), xAx->GetBinLowEdge(
x), xAx->GetBinUpEdge(
x),
335 yAx->GetTitle(), yAx->GetBinLowEdge(
y), yAx->GetBinUpEdge(
y));
Header file for AthHistogramAlgorithm.
CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const override
columnar::MuonAccessor< float > etaAcc
static std::unique_ptr< AxisHandler > GetAxisHandler(columnar::ColumnarTool<> *parent, const TAxis *axis)
AxisHandler(columnar::ColumnarTool<> *parent)
columnar::MuonAccessor< float > chargeAcc
CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const override
Return value from object correction CP tools.
@ Error
Some error happened during the object correction.
@ OutOfValidityRange
Input object is out of validity range.
@ Ok
The correction was done successfully.
columnar::MuonAccessor< float > etaAcc
CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const override
virtual ~HistHandler_TH1()
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)
virtual ~HistHandler_TH2Poly()
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.
virtual ~HistHandler_TH2()
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.
virtual ~HistHandler_TH3()
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
std::unique_ptr< TH1 > m_H
void SetBinError(int bin, float val)
void SetBinContent(int bin, float val)
HistHandler(columnar::ColumnarTool<> *parent, TH1 *Hist)
CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const override
columnar::MuonAccessor< float > phiAcc
CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const override
columnar::MuonAccessor< float > ptAcc
CorrectionCode GetBinningParameter(columnar::MuonId, float &) const override
CorrectionCode GetBinningParameter(columnar::MuonId mu, float &value) const override
columnar::MuonAccessor< float > acc_dR_deriv
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.
std::string EraseWhiteSpaces(std::string str)
Removes beginning and trailing white spaces from a string.
std::unique_ptr< TH1 > clone(TH1 *H)
Clones a TH1 and handles the ownership then to a unique_ptr.
ObjectId< ContainerId::muon > MuonId