20 #include "TGraphErrors.h"
35 #include <type_traits>
40 double qsum(
double x,
double y) {
41 return std::hypot(
x,
y);
44 template <
typename TargetPtr,
typename SourcePtr>
45 TargetPtr checked_own_cast(SourcePtr
ptr) {
48 "attempt to cast to no ptr object");
50 "attempt to cast from no ptr object");
54 throw std::runtime_error(
55 "Attempt to cast from nullptr in egammaEnergyCorrectionTool");
59 TargetPtr
obj =
dynamic_cast<TargetPtr
>(
ptr);
61 throw std::runtime_error(
"failed dynamic cast for " +
62 std::string(
ptr->GetName()) +
63 " in egammaEnergyCorrectionTool");
68 if constexpr (std::is_same_v<TAxis, std::remove_pointer_t<TargetPtr>>) {
71 else if constexpr (std::is_same_v<TList, std::remove_pointer_t<TargetPtr>>) {
75 obj->SetDirectory(
nullptr);
81 double getValueHistoAt(
const TH1&
histo,
double xvalue,
82 bool use_lastbin_overflow =
false,
83 bool use_firstbin_underflow =
false,
84 bool use_interpolation =
false) {
85 if (use_interpolation) {
86 return histo.Interpolate(xvalue);
90 if (use_lastbin_overflow and
histo.IsBinOverflow(
bin)) {
93 if (use_firstbin_underflow and
histo.IsBinUnderflow(
bin)) {
100 double getValueHistAt(
const TH2&
histo,
double xvalue,
double yvalue,
101 bool use_lastbin_x_overflow =
false,
102 bool use_lastbin_y_overflow =
false,
103 bool use_fistbin_x_underflow =
false,
104 bool use_firstbin_y_underflow =
false,
105 bool use_x_interpolation =
false,
106 bool use_y_interpolation =
false) {
107 int xbin =
histo.GetXaxis()->FindFixBin(xvalue);
108 int nxbins =
histo.GetXaxis()->GetNbins();
109 if (use_lastbin_x_overflow and xbin == nxbins + 1) {
112 if (use_fistbin_x_underflow and xbin == 0) {
115 int ybin =
histo.GetYaxis()->FindFixBin(yvalue);
116 int nybins =
histo.GetYaxis()->GetNbins();
117 if (use_lastbin_y_overflow and ybin == nybins + 1) {
120 if (use_firstbin_y_underflow and ybin == 0) {
124 int interpolation = 0b00;
125 if (use_x_interpolation and
126 xvalue >
histo.GetXaxis()->GetBinCenter(1) and
127 xvalue <
histo.GetXaxis()->GetBinCenter(nxbins)) {
128 interpolation |= 0b01;
130 if (use_y_interpolation and
131 yvalue >
histo.GetYaxis()->GetBinCenter(1) and
132 yvalue <
histo.GetYaxis()->GetBinCenter(nybins)) {
133 interpolation |= 0b10;
136 if (interpolation == 0b00) {
137 return histo.GetBinContent(xbin, ybin);
139 else if (interpolation == 0b01) {
141 if(xvalue<=
histo.GetXaxis()->GetBinCenter(xbin)) {
149 double x0 =
histo.GetXaxis()->GetBinCenter(xbin0);
150 double x1 =
histo.GetXaxis()->GetBinCenter(xbin1);
151 double z0 =
histo.GetBinContent(xbin0, ybin);
152 double z1 =
histo.GetBinContent(xbin1, ybin);
155 else if (interpolation == 0b10) {
157 if(yvalue<=
histo.GetYaxis()->GetBinCenter(ybin)) {
165 double y0 =
histo.GetYaxis()->GetBinCenter(ybin0);
166 double y1 =
histo.GetYaxis()->GetBinCenter(ybin1);
167 double z0 =
histo.GetBinContent(xbin, ybin0);
168 double z1 =
histo.GetBinContent(xbin, ybin1);
172 return histo.Interpolate(xvalue, yvalue);
182 :
asg::AsgMessaging(
"egammaEnergyCorrectionTool"),
185 "egammaEnergyCorrectionData.root")),
190 throw std::runtime_error(
"cannot find file");
243 const std::unique_ptr<char[]>
fname(
245 std::unique_ptr<TFile>
rootFile(TFile::Open(
fname.get(),
"READ"));
268 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2010/alphaPS_errTot")));
270 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2010/alphaS12_errTot")));
271 m_zeeNom.reset(checked_own_cast<TH1*>(
272 rootFile->Get(
"Scales/es2010/alphaZee_errStat")));
274 rootFile->Get(
"Scales/es2010/alphaZee_errSyst")));
275 m_resNom.reset(checked_own_cast<TH1*>(
276 rootFile->Get(
"Resolution/es2010/ctZee_errStat")));
278 rootFile->Get(
"Resolution/es2010/ctZee_errSyst")));
280 checked_own_cast<TH1*>(
rootFile->Get(
"Resolution/es2010/resZee_Data")));
282 checked_own_cast<TH1*>(
rootFile->Get(
"Resolution/es2010/resZee_MC")));
291 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011c/alphaPS_errTot")));
293 rootFile->Get(
"Scales/es2011c/alphaS12_errTot")));
294 m_zeeNom.reset(checked_own_cast<TH1*>(
295 rootFile->Get(
"Scales/es2011c/alphaZee_errStat")));
297 rootFile->Get(
"Scales/es2011c/alphaZee_errSyst")));
298 m_resNom.reset(checked_own_cast<TH1*>(
299 rootFile->Get(
"Resolution/es2011c/ctZee_errStat")));
301 rootFile->Get(
"Resolution/es2011c/ctZee_errSyst")));
303 rootFile->Get(
"Resolution/es2011c/resZee_Data")));
305 checked_own_cast<TH1*>(
rootFile->Get(
"Resolution/es2011c/resZee_MC")));
318 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011d/alphaPS_uncor")));
320 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011d/dalphaPS_cor")));
322 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011d/alphaS12_uncor")));
324 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011d/dalphaS12_cor")));
326 rootFile->Get(
"Scales/es2011d/momentum_errSyst")));
330 m_zeeNom.reset(checked_own_cast<TH1*>(
331 rootFile->Get(
"Scales/es2011d/alphaZee_errStat")));
333 rootFile->Get(
"Scales/es2011d/alphaZee_errSyst")));
334 m_resNom.reset(checked_own_cast<TH1*>(
335 rootFile->Get(
"Resolution/es2011d/ctZee_errStat")));
337 rootFile->Get(
"Resolution/es2011d/ctZee_errSyst")));
341 m_zeeNom.reset(checked_own_cast<TH1*>(
342 rootFile->Get(
"Scales/es2011dMedium/alphaZee_errStat")));
344 rootFile->Get(
"Scales/es2011dMedium/alphaZee_errSyst")));
346 rootFile->Get(
"Scales/es2011dMedium/alphaZee_errPhys")));
347 m_resNom.reset(checked_own_cast<TH1*>(
348 rootFile->Get(
"Resolution/es2011dMedium/ctZee_errStat")));
350 rootFile->Get(
"Resolution/es2011dMedium/ctZee_errSyst")));
354 m_zeeNom.reset(checked_own_cast<TH1*>(
355 rootFile->Get(
"Scales/es2011dTight/alphaZee_errStat")));
357 rootFile->Get(
"Scales/es2011dTight/alphaZee_errSyst")));
359 rootFile->Get(
"Scales/es2011dTight/alphaZee_errPhys")));
360 m_resNom.reset(checked_own_cast<TH1*>(
361 rootFile->Get(
"Resolution/es2011dTight/ctZee_errStat")));
363 rootFile->Get(
"Resolution/es2011dTight/ctZee_errSyst")));
367 rootFile->Get(
"Pedestals/es2011d/pedestals_l0")));
369 rootFile->Get(
"Pedestals/es2011d/pedestals_l1")));
371 rootFile->Get(
"Pedestals/es2011d/pedestals_l2")));
373 rootFile->Get(
"Pedestals/es2011d/pedestals_l3")));
376 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
379 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
381 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
384 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
386 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
388 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
390 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
393 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
395 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
397 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
400 rootFile->Get(
"Conversions/es2011d/convRadiusMigrations")));
402 rootFile->Get(
"Conversions/es2011d/convFakeRate")));
404 rootFile->Get(
"Conversions/es2011d/convRecoEfficiency")));
410 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
412 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
414 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
418 "e1hg_systematics_histos.root"));
425 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012a/alphaPS_errTot")));
427 rootFile->Get(
"Scales/es2012a/alphaS12_errTot")));
429 m_zeeNom.reset(checked_own_cast<TH1*>(
430 rootFile->Get(
"Scales/es2012a/alphaZee_errStat")));
432 rootFile->Get(
"Scales/es2012a/alphaZee_errSyst")));
434 m_resNom.reset(checked_own_cast<TH1*>(
435 rootFile->Get(
"Resolution/es2012a/ctZee_errStat")));
437 rootFile->Get(
"Resolution/es2012a/ctZee_errSyst")));
439 rootFile->Get(
"Resolution/es2012a/resZee_Data")));
441 checked_own_cast<TH1*>(
rootFile->Get(
"Resolution/es2012a/resZee_MC")));
453 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
455 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
457 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
459 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
462 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
464 m_zeeNom.reset(checked_own_cast<TH1*>(
465 rootFile->Get(
"Scales/es2012c/alphaZee_errStat")));
467 rootFile->Get(
"Scales/es2012c/alphaZee_errSyst")));
469 m_resNom.reset(checked_own_cast<TH1*>(
470 rootFile->Get(
"Resolution/es2012c/ctZee_errStat")));
472 rootFile->Get(
"Resolution/es2012c/ctZee_errSyst")));
475 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
477 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
479 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
481 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
484 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
487 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
489 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
492 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
494 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
496 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
498 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
501 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
503 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
505 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
508 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
510 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
512 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
518 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
520 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
522 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
526 "e1hg_systematics_histos.root"));
533 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
535 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
537 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
539 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
542 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
544 m_zeeNom.reset(checked_own_cast<TH1*>(
545 rootFile->Get(
"Scales/es2015PRE/alphaZee_errStat")));
547 rootFile->Get(
"Scales/es2012c/alphaZee_errSyst")));
549 m_resNom.reset(checked_own_cast<TH1*>(
550 rootFile->Get(
"Resolution/es2015PRE/ctZee_errStat")));
552 rootFile->Get(
"Resolution/es2012c/ctZee_errSyst")));
555 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
557 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
559 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
561 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
564 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
567 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
569 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
572 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
574 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
576 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
578 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
581 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
583 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
585 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
588 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
590 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
592 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
598 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
600 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
602 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
606 "e1hg_systematics_histos.root"));
614 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
616 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
618 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
620 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
623 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
625 m_zeeNom.reset(checked_own_cast<TH1*>(
626 rootFile->Get(
"Scales/es2015PRE/alphaZee_errStat")));
628 rootFile->Get(
"Scales/es2015PRE/alphaZee_errSyst")));
630 rootFile->Get(
"Scales/es2015PRE/histo_uA2MeV_week12")));
632 m_resNom.reset(checked_own_cast<TH1*>(
633 rootFile->Get(
"Resolution/es2015PRE/ctZee_errStat")));
635 rootFile->Get(
"Resolution/es2015PRE/ctZee_errSyst")));
638 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
640 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
642 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
644 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
647 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
650 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
652 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
655 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
657 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
659 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
661 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
664 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
666 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
668 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
671 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
673 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
675 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
681 rootFile->Get(
"FastSim/es2015/el_full_fast_resolution")));
683 rootFile->Get(
"FastSim/es2015/ph_unconv_full_fast_resolution")));
685 rootFile->Get(
"FastSim/es2015/ph_conv_full_fast_resolution")));
692 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
694 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
696 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
700 "e1hg_systematics_histos.root"));
708 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
710 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
712 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
714 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
717 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
719 m_zeeNom.reset(checked_own_cast<TH1*>(
720 rootFile->Get(
"Scales/es2015PRE/alphaZee_errStat")));
722 rootFile->Get(
"Scales/es2015PRE/alphaZee_errSyst")));
724 rootFile->Get(
"Scales/es2015PRE/histo_uA2MeV_week12")));
726 m_resNom.reset(checked_own_cast<TH1*>(
727 rootFile->Get(
"Resolution/es2015PRE/ctZee_errStat")));
729 rootFile->Get(
"Resolution/es2015PRE_res_improved/ctZee_errSyst")));
732 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
734 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
736 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
738 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
741 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
744 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
746 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
749 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
751 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
753 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
755 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
758 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
760 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
762 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
765 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
767 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
769 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
775 rootFile->Get(
"FastSim/es2015/el_full_fast_resolution")));
777 rootFile->Get(
"FastSim/es2015/ph_unconv_full_fast_resolution")));
779 rootFile->Get(
"FastSim/es2015/ph_conv_full_fast_resolution")));
785 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
787 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
789 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
793 "e1hg_systematics_histos.root"));
800 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
802 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
804 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
806 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
809 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
811 m_zeeNom.reset(checked_own_cast<TH1*>(
812 rootFile->Get(
"Scales/es2015Summer/alphaZee_errStat")));
814 rootFile->Get(
"Scales/es2015Summer/alphaZee_errSyst")));
817 m_resNom.reset(checked_own_cast<TH1*>(
818 rootFile->Get(
"Resolution/es2015Summer/ctZee_errStat")));
820 rootFile->Get(
"Resolution/es2015Summer/ctZee_errSyst")));
823 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
825 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
827 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
829 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
832 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
835 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
837 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
840 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
842 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
844 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
846 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
849 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
851 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
853 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
856 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
858 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
860 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
866 rootFile->Get(
"FastSim/es2015/el_full_fast_resolution")));
868 rootFile->Get(
"FastSim/es2015/ph_unconv_full_fast_resolution")));
870 rootFile->Get(
"FastSim/es2015/ph_conv_full_fast_resolution")));
877 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
879 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
881 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
885 "e1hg_systematics_histos.root"));
894 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
896 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
898 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
900 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
903 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
905 m_zeeNom.reset(checked_own_cast<TH1*>(
906 rootFile->Get(
"Scales/es2015Summer/alphaZee_errStat")));
908 rootFile->Get(
"Scales/es2015Summer/alphaZee_errSyst")));
910 m_resNom.reset(checked_own_cast<TH1*>(
911 rootFile->Get(
"Resolution/es2015Summer/ctZee_errStat")));
913 rootFile->Get(
"Resolution/es2015Summer/ctZee_errSyst")));
916 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
918 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
920 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
922 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
925 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
928 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
930 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
933 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
935 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
937 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
939 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
942 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
944 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
946 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
949 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
951 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
953 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
959 rootFile->Get(
"FastSim/es2015/el_full_fast_resolution")));
961 rootFile->Get(
"FastSim/es2015/ph_unconv_full_fast_resolution")));
963 rootFile->Get(
"FastSim/es2015/ph_conv_full_fast_resolution")));
970 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
972 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
974 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
978 "e1hg_systematics_histos.root"));
1020 m_aPSNom.reset(checked_own_cast<TH1*>(
1021 rootFile->Get(
"Scales/es2017_summer_final/alphaPS_uncor")));
1023 rootFile->Get(
"Scales/es2017_summer_final/dalphaPS_b12")));
1025 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
1027 rootFile->Get(
"Scales/es2017_summer_final/alphaS12_uncor")));
1029 rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
1031 m_aPSNom.reset(checked_own_cast<TH1*>(
1032 rootFile->Get(
"Scales/es2017_summer_final/alphaPS_uncor")));
1034 rootFile->Get(
"Scales/es2017_summer_final/dalphaPS_b12")));
1036 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
1038 rootFile->Get(
"Scales/es2018_R21_v1/alphaS12_uncor")));
1040 rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
1042 m_aPSNom.reset(checked_own_cast<TH1*>(
1043 rootFile->Get(
"Scales/es2023_R22_Run2_v0/alphaPS_uncor")));
1045 rootFile->Get(
"Scales/es2023_R22_Run2_v0/alphaS12_uncor")));
1047 m_aPSNom.reset(checked_own_cast<TH1*>(
1048 rootFile->Get(
"Scales/es2023_R22_Run2_v0/alphaPS_uncor")));
1050 rootFile->Get(
"Scales/es2023_R22_Run2_v1/hE1E2_emu_run2_rel21_v0_fix")));
1052 m_aPSNom.reset(checked_own_cast<TH1*>(
1053 rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
1055 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
1057 rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
1059 rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
1062 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
1065 m_zeeNom.reset(checked_own_cast<TH1*>(
1066 rootFile->Get(
"Scales/es2017/alphaZee_errStat_period_2016")));
1068 rootFile->Get(
"Scales/es2017/alphaZee_errStat_period_2015")));
1071 m_zeeNom.reset(checked_own_cast<TH1*>(
1072 rootFile->Get(
"Scales/es2017_summer/alphaZee_errStat_period_2016")));
1074 rootFile->Get(
"Scales/es2017_summer/alphaZee_errStat_period_2015")));
1077 "Scales/es2017_summer_final/alphaZee_errStat_period_2016")));
1079 "Scales/es2017_summer_final/alphaZee_errStat_period_2015")));
1081 m_zeeNom.reset(checked_own_cast<TH1*>(
1082 rootFile->Get(
"Scales/es2015_5TeV/alphaZee_errStat_period_2015")));
1085 rootFile->Get(
"Scales/es2015_5TeV/alphaZee_errStat_period_2015")));
1087 m_zeeNom.reset(checked_own_cast<TH1*>(
1088 rootFile->Get(
"Scales/es2017_R21_v0/alphaZee_errStat_period_2017")));
1090 rootFile->Get(
"Scales/es2017_R21_v0/alphaZee_errStat_period_2016")));
1092 rootFile->Get(
"Scales/es2017_R21_v0/alphaZee_errStat_period_2015")));
1094 m_zeeNom.reset(checked_own_cast<TH1*>(
1095 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errStat_period_2017")));
1097 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errStat_period_2016")));
1099 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errStat_period_2015")));
1101 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalk")));
1103 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalb")));
1106 "Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2017")));
1108 "Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2016")));
1110 "Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2015")));
1112 "Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2018")));
1114 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalk")));
1116 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalb")));
1119 "Scales/es2024_Run3_ofc0_v0/alphaZee_errStat")));
1121 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalk")));
1123 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalb")));
1126 m_zeeNom.reset(checked_own_cast<TH1*>(
1127 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errStat_period_2018")));
1129 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errStat_period_2017")));
1131 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errStat_period_2016")));
1133 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errStat_period_2015")));
1135 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1137 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1139 m_zeeNom.reset(checked_own_cast<TH1*>(
1140 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2018")));
1142 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2017")));
1144 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2016")));
1146 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2015")));
1149 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1151 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1153 m_zeeNom.reset(checked_own_cast<TH1*>(
1154 rootFile->Get(
"Scales/es2022_R22_PRE/alphaZee_errStat_period_2018")));
1157 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1159 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1162 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2018")));
1164 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2017")));
1166 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2016")));
1168 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2015")));
1171 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1173 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1177 "Scales/es2023_R22_Run2_v1/alphaZee_errStat_period_2018")));
1179 "Scales/es2023_R22_Run2_v1/alphaZee_errStat_period_2017")));
1181 "Scales/es2023_R22_Run2_v1/alphaZee_errStat_period_2016")));
1183 "Scales/es2023_R22_Run2_v1/alphaZee_errStat_period_2015")));
1186 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1188 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1190 m_zeeNom.reset(checked_own_cast<TH1*>(
1191 rootFile->Get(
"Scales/es2017_R21_PRE/alphaZee_errStat_period_2016")));
1194 rootFile->Get(
"Scales/es2017_R21_PRE/alphaZee_errStat_period_2016")));
1198 rootFile->Get(
"Scales/es2017/alphaZee_errSyst")));
1201 rootFile->Get(
"Scales/es2017_summer_final/alphaZee_errSyst")));
1204 rootFile->Get(
"Scales/es2015_5TeV/alphaZee_errSyst")));
1207 rootFile->Get(
"Scales/es2017_summer_final/alphaZee_errSyst")));
1210 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errSyst")));
1213 rootFile->Get(
"Scales/es2017_R21_ofc0_v1/alphaZee_errSyst")));
1216 rootFile->Get(
"Scales/es2024_Run3_ofc0_v0/alphaZee_errSyst")));
1219 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errSyst")));
1224 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errSyst")));
1227 rootFile->Get(
"Scales/es2022_R22_PRE/alphaZee_errSyst")));
1229 rootFile->Get(
"Scales/es2022_R22_PRE/alphaZee_errOFCSyst")));
1232 rootFile->Get(
"Scales/es2017_summer/alphaZee_errSyst")));
1237 m_resNom.reset(checked_own_cast<TH1*>(
1238 rootFile->Get(
"Resolution/es2017/ctZee_errStat")));
1242 m_resNom.reset(checked_own_cast<TH1*>(
1243 rootFile->Get(
"Resolution/es2017_summer/ctZee_errStat")));
1245 m_resNom.reset(checked_own_cast<TH1*>(
1246 rootFile->Get(
"Resolution/es2017_summer_final/ctZee_errStat")));
1248 m_resNom.reset(checked_own_cast<TH1*>(
1249 rootFile->Get(
"Resolution/es2017_R21_v0/ctZee_errStat")));
1251 m_resNom.reset(checked_own_cast<TH1*>(
1252 rootFile->Get(
"Resolution/es2017_R21_v1/ctZee_errStat")));
1254 m_resNom.reset(checked_own_cast<TH1*>(
1255 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errStat")));
1258 m_resNom.reset(checked_own_cast<TH1*>(
1259 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errStat")));
1261 m_resNom.reset(checked_own_cast<TH1*>(
1262 rootFile->Get(
"Resolution/es2018_R21_v0/ctZee_errStat")));
1264 m_resNom.reset(checked_own_cast<TH1*>(
1265 rootFile->Get(
"Resolution/es2018_R21_v1/ctZee_errStat")));
1267 m_resNom.reset(checked_own_cast<TH1*>(
1268 rootFile->Get(
"Resolution/es2022_R22_PRE/ctZee_errStat")));
1270 m_resNom.reset(checked_own_cast<TH1*>(
1271 rootFile->Get(
"Resolution/es2023_R22_Run2_v0/ctZee_errStat")));
1273 m_resNom.reset(checked_own_cast<TH1*>(
1274 rootFile->Get(
"Resolution/es2023_R22_Run2_v1/ctZee_errStat")));
1276 m_resNom.reset(checked_own_cast<TH1*>(
1277 rootFile->Get(
"Resolution/es2017_R21_PRE/ctZee_errStat")));
1282 rootFile->Get(
"Resolution/es2017/ctZee_errSyst")));
1285 rootFile->Get(
"Resolution/es2017_summer_final/ctZee_errSyst")));
1288 rootFile->Get(
"Resolution/es2015_5TeV/ctZee_errSyst")));
1291 rootFile->Get(
"Resolution/es2017_summer_final/ctZee_errSyst")));
1294 rootFile->Get(
"Resolution/es2017_R21_v1/ctZee_errSyst")));
1297 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errSyst")));
1301 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errSyst")));
1304 rootFile->Get(
"Resolution/es2018_R21_v0/ctZee_errSyst")));
1309 rootFile->Get(
"Resolution/es2018_R21_v1/ctZee_errSyst")));
1312 rootFile->Get(
"Resolution/es2022_R22_PRE/ctZee_errSyst")));
1314 rootFile->Get(
"Resolution/es2022_R22_PRE/ctZee_errOFCSyst")));
1317 rootFile->Get(
"Resolution/es2017_summer/ctZee_errSyst")));
1325 checked_own_cast<TH1*>(
rootFile->Get(
"Pedestals/es2017/pedestals")));
1328 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
1331 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
1333 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
1336 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
1338 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
1340 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
1342 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
1345 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
1347 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
1349 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
1352 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
1355 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
1357 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
1361 rootFile->Get(
"Conversions/es2023_R22_Run2_v0/convFakeRate")));
1363 rootFile->Get(
"Conversions/es2023_R22_Run2_v0/convRecoEfficiency")));
1366 rootFile->Get(
"Conversions/es2017_summer/convFakeRate")));
1368 rootFile->Get(
"Conversions/es2017_summer/convRecoEfficiency")));
1375 "ElectronPhotonFourMomentumCorrection/v8/PP0sys.root");
1377 TFile file_pp0(filename_pp0.c_str());
1378 m_pp0_elec.reset(checked_own_cast<TH2*>(file_pp0.Get(
"elec")));
1379 m_pp0_conv.reset(checked_own_cast<TH2*>(file_pp0.Get(
"conv")));
1380 m_pp0_unconv.reset(checked_own_cast<TH2*>(file_pp0.Get(
"unco")));
1384 "ElectronPhotonFourMomentumCorrection/v8/wstot_related_syst.root");
1386 TFile file_wstot(filename_wstot.c_str());
1388 checked_own_cast<TH1*>(file_wstot.Get(
"A_data")));
1391 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_data_p0")));
1393 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_data_p1")));
1395 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_uc_data_p0")));
1397 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_uc_data_p1")));
1399 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_c_data_p0")));
1401 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_c_data_p1")));
1403 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_mc_p0")));
1405 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_mc_p1")));
1407 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_uc_mc_p0")));
1409 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_uc_mc_p1")));
1411 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_c_mc_p0")));
1413 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_c_mc_p1")));
1423 rootFile->Get(
"FastSim/es2017_v1/resol_Af2ToG4_elec_rel21")));
1425 rootFile->Get(
"FastSim/es2017_v1/resol_Af2ToG4_unco_rel21")));
1427 rootFile->Get(
"FastSim/es2017_v1/resol_Af2ToG4_conv_rel21")));
1434 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/resol_AF3ToG4_elec_rel22")));
1436 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/resol_AF3ToG4_unco_rel22")));
1438 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/resol_AF3ToG4_conv_rel22")));
1442 rootFile->Get(
"FastSim/es2017/el_full_fast_resolution")));
1444 rootFile->Get(
"FastSim/es2017/ph_unconv_full_fast_resolution")));
1446 rootFile->Get(
"FastSim/es2017/ph_conv_full_fast_resolution")));
1453 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
1455 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
1458 std::string gain_tool_run_2_filename;
1464 "ElectronPhotonFourMomentumCorrection/v11/"
1465 "gain_uncertainty_specialRun.root");
1469 "ElectronPhotonFourMomentumCorrection/v29/"
1470 "gain_uncertainty_specialRun.root");
1473 "ElectronPhotonFourMomentumCorrection/v14/"
1474 "gain_uncertainty_specialRun.root");
1479 gain_tool_run_2_filename,
true,
"GainUncertainty",
1483 std::make_unique<egGain::GainUncertainty>(gain_tool_run_2_filename);
1492 "e1hg_systematics_histos.root"));
1496 "e1hg_systematics_histos.root"));
1505 m_aPSNom.reset(checked_own_cast<TH1*>(
1506 rootFile->Get(
"Scales/es2015_day0/alphaPS_uncor")));
1508 rootFile->Get(
"Scales/es2015_day0/dalphaPS_cor")));
1510 rootFile->Get(
"Scales/es2015_day0/alphaS12_uncor")));
1512 rootFile->Get(
"Scales/es2015_day0/dalphaS12_cor")));
1515 rootFile->Get(
"Scales/es2015_day0/momentum_errSyst")));
1517 m_zeeNom.reset(checked_own_cast<TH1*>(
1518 rootFile->Get(
"Scales/es2015_day0/alphaZee_errStat")));
1520 rootFile->Get(
"Scales/es2015_day0/alphaZee_errSyst")));
1522 m_resNom.reset(checked_own_cast<TH1*>(
1523 rootFile->Get(
"Resolution/es2012c/ctZee_errStat")));
1525 rootFile->Get(
"Resolution/es2012c/ctZee_errSyst")));
1528 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
1530 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
1532 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
1534 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
1537 rootFile->Get(
"Material/DX0_ConfigA")));
1540 "Material/Measured/DXerr_IPPS_NewG_errUncor")));
1542 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
1545 "Material/Measured/DXerr_IPAcc_NewG_errUncor")));
1547 "Material/Measured/DXerr_IPAcc_NewG_errLAr")));
1549 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
1551 "Material/Measured/DXerr_IPAcc_NewG_errGL1")));
1554 "Material/Measured/DXerr_PSAcc_NewG_errUncor")));
1556 "Material/Measured/DXerr_PSAcc_NewG_errLAr")));
1558 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
1561 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
1563 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
1565 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
1571 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
1573 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
1575 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
1579 "e1hg_systematics_histos.root"));
1584 ATH_MSG_FATAL(
"ES model not initialized - Initialization fails");
1587 ATH_MSG_FATAL(
"ES model not recognized - Initialization fails");
1612 rootFile->Get(
"E4Recalibration/v4/electron_eta_axis")));
1614 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/v4/electron")));
1617 rootFile->Get(
"E4Recalibration/v4/electron_eta_axis")));
1619 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/v4/electron")));
1621 rootFile->Get(
"E4Recalibration/v4/electron_eta_axis")));
1623 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/v4/electron")));
1648 rootFile->Get(
"PSRecalibration/es2015PRE/ElectronAxis")));
1650 rootFile->Get(
"PSRecalibration/es2015PRE/ElectronBiasPS")));
1652 rootFile->Get(
"PSRecalibration/es2015PRE/UnconvertedAxis")));
1654 rootFile->Get(
"PSRecalibration/es2015PRE/UnconvertedBiasPS")));
1656 rootFile->Get(
"PSRecalibration/es2015PRE/ConvertedAxis")));
1658 rootFile->Get(
"PSRecalibration/es2015PRE/ConvertedBiasPS")));
1661 rootFile->Get(
"S1Recalibration/es2015PRE/ElectronAxis")));
1663 rootFile->Get(
"S1Recalibration/es2015PRE/ElectronBiasS1")));
1665 rootFile->Get(
"S1Recalibration/es2015PRE/UnconvertedAxis")));
1667 rootFile->Get(
"S1Recalibration/es2015PRE/UnconvertedBiasS1")));
1669 rootFile->Get(
"S1Recalibration/es2015PRE/ConvertedAxis")));
1671 rootFile->Get(
"S1Recalibration/es2015PRE/ConvertedBiasS1")));
1675 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ElectronAxis")));
1677 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ElectronBiasPS")));
1679 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/UnconvertedAxis")));
1681 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/UnconvertedBiasPS")));
1683 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ConvertedAxis")));
1685 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ConvertedBiasPS")));
1688 rootFile->Get(
"S2Recalibration/ElectronAxis")));
1690 rootFile->Get(
"S2Recalibration/ElectronBiasS2")));
1692 rootFile->Get(
"S2Recalibration/UnconvertedAxis")));
1694 rootFile->Get(
"S2Recalibration/UnconvertedBiasS2")));
1696 rootFile->Get(
"S2Recalibration/ConvertedAxis")));
1698 rootFile->Get(
"S2Recalibration/ConvertedBiasS2")));
1701 rootFile->Get(
"SaccRecalibration/ElectronAxis")));
1703 rootFile->Get(
"SaccRecalibration/ElectronBiasSacc")));
1705 rootFile->Get(
"SaccRecalibration/UnconvertedAxis")));
1707 rootFile->Get(
"SaccRecalibration/UnconvertedBiasSacc")));
1709 rootFile->Get(
"SaccRecalibration/ConvertedAxis")));
1711 rootFile->Get(
"SaccRecalibration/ConvertedBiasSacc")));
1715 rootFile->Get(
"PSRecalibration/ElectronAxis")));
1717 rootFile->Get(
"PSRecalibration/ElectronBiasPS")));
1719 rootFile->Get(
"PSRecalibration/UnconvertedAxis")));
1721 rootFile->Get(
"PSRecalibration/UnconvertedBiasPS")));
1723 rootFile->Get(
"PSRecalibration/ConvertedAxis")));
1725 rootFile->Get(
"PSRecalibration/ConvertedBiasPS")));
1728 rootFile->Get(
"S1Recalibration/ElectronAxis")));
1730 rootFile->Get(
"S1Recalibration/ElectronBiasS1")));
1732 rootFile->Get(
"S1Recalibration/UnconvertedAxis")));
1734 rootFile->Get(
"S1Recalibration/UnconvertedBiasS1")));
1736 rootFile->Get(
"S1Recalibration/ConvertedAxis")));
1738 rootFile->Get(
"S1Recalibration/ConvertedBiasS1")));
1745 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1746 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigA"))));
1748 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1749 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigCpDp"))));
1751 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1752 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigEpLp"))));
1754 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1755 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigFpMX"))));
1757 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1758 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigGp"))));
1761 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigA"))));
1763 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigCpDp"))));
1765 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigEpLp"))));
1767 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigFpMX"))));
1769 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigGp"))));
1772 rootFile->Get(
"Material/electronCstTerm_ConfigA"))));
1774 rootFile->Get(
"Material/electronCstTerm_ConfigCpDp"))));
1776 rootFile->Get(
"Material/electronCstTerm_ConfigEpLp"))));
1778 rootFile->Get(
"Material/electronCstTerm_ConfigFpMX"))));
1780 rootFile->Get(
"Material/electronCstTerm_ConfigGp"))));
1792 checked_own_cast<TH1*>(
rootFile->Get(
"Material_rel21/DX0_ConfigA"))));
1794 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigCpDp"))));
1796 rootFile->Get(
"Material_rel21/DX0_ConfigEpLp"))));
1798 rootFile->Get(
"Material_rel21/DX0_ConfigFpMX"))));
1800 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigGp"))));
1802 checked_own_cast<TH1*>(
rootFile->Get(
"Material_rel21/DX0_ConfigN"))));
1805 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA"))));
1807 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigCpDp"))));
1809 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigEpLp"))));
1811 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigFpMX"))));
1813 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigGp"))));
1817 checked_own_cast<TAxis*>(
rootFile->Get(
"Material/LinearityEtaBins")));
1819 std::unique_ptr<TList>(checked_own_cast<TList*>(
1820 rootFile->Get(
"Material/Linearity_Cluster_ConfigA"))));
1822 std::unique_ptr<TList>(checked_own_cast<TList*>(
1823 rootFile->Get(
"Material/Linearity_Cluster_ConfigCpDp"))));
1825 std::unique_ptr<TList>(checked_own_cast<TList*>(
1826 rootFile->Get(
"Material/Linearity_Cluster_ConfigEpLp"))));
1828 std::unique_ptr<TList>(checked_own_cast<TList*>(
1829 rootFile->Get(
"Material/Linearity_Cluster_ConfigFpMX"))));
1831 std::unique_ptr<TList>(checked_own_cast<TList*>(
1832 rootFile->Get(
"Material/Linearity_Cluster_ConfigGp"))));
1843 rootFile->Get(
"Material_rel21/electronBias_ConfigA")));
1845 rootFile->Get(
"Material_rel21/electronBias_ConfigEpLp")));
1847 rootFile->Get(
"Material_rel21/electronBias_ConfigFpMX")));
1849 rootFile->Get(
"Material_rel21/electronBias_ConfigN")));
1851 rootFile->Get(
"Material_rel21/electronBias_ConfigIBL")));
1853 rootFile->Get(
"Material_rel21/electronBias_ConfigPP0")));
1855 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigA")));
1857 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigEpLp")));
1859 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigFpMX")));
1861 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigN")));
1863 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigIBL")));
1865 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigPP0")));
1867 rootFile->Get(
"Material_rel21/convertedBias_ConfigA")));
1869 rootFile->Get(
"Material_rel21/convertedBias_ConfigEpLp")));
1871 rootFile->Get(
"Material_rel21/convertedBias_ConfigFpMX")));
1873 rootFile->Get(
"Material_rel21/convertedBias_ConfigN")));
1875 rootFile->Get(
"Material_rel21/convertedBias_ConfigIBL")));
1877 rootFile->Get(
"Material_rel21/convertedBias_ConfigPP0")));
1890 rootFile->Get(
"FastSim/es2015/el_scale_full_fast_peak_gaussian")));
1892 "FastSim/es2015/ph_unconv_scale_full_fast_peak_gaussian")));
1894 rootFile->Get(
"FastSim/es2015/ph_conv_scale_full_fast_peak_gaussian")));
1903 rootFile->Get(
"FastSim/es2017/el_scale_full_fast_peak_gaussian")));
1905 "FastSim/es2017/ph_unconv_scale_full_fast_peak_gaussian")));
1907 rootFile->Get(
"FastSim/es2017/ph_conv_scale_full_fast_peak_gaussian")));
1913 rootFile->Get(
"FastSim/es2017_v1/scale_Af2ToG4_elec_rel21")));
1916 rootFile->Get(
"FastSim/es2017_v1/scale_Af2ToG4_unco_rel21")));
1918 rootFile->Get(
"FastSim/es2017_v1/scale_Af2ToG4_conv_rel21")));
1925 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/scale_AF3ToG4_elec_rel22")));
1928 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/scale_AF3ToG4_unco_rel22")));
1930 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/scale_AF3ToG4_conv_rel22")));
1934 checked_own_cast<TH1*>(
rootFile->Get(
"FastSim/hG4OverAF")));
1937 checked_own_cast<TH1*>(
rootFile->Get(
"FastSim/hG4OverFS")));
1955 checked_own_cast<TH1*>(
rootFile->Get(
"Leakage/LeakageDiffConverted")));
1957 rootFile->Get(
"Leakage/LeakageDiffUnconverted")));
1961 rootFile->Get(
"Leakage/es2017_summer/LeakageDiffConverted")));
1963 rootFile->Get(
"Leakage/es2017_summer/LeakageDiffUnconverted")));
1966 rootFile->Get(
"Leakage/es2023_R22_Run2_v0/LeakageDiffConverted")));
1968 rootFile->Get(
"Leakage/es2023_R22_Run2_v0/LeakageDiffUnconverted")));
1970 rootFile->Get(
"Leakage/es2023_R22_Run2_v0/LeakageDiffElectron")));
1977 ATH_MSG_INFO(
"No leakage systematic uncertainty for ES model "
1983 checked_own_cast<TH1*>(
rootFile->Get(
"ZeeEnergyProfiles/p2MC")));
1986 rootFile->Get(
"ZeeMeanET/MC_eta_vs_et_profiled")));
1999 double correctedMomentum =
momentum;
2000 double aeta = std::abs(trk_eta);
2011 correctedMomentum *= 1. + corr * varSF;
2014 return correctedMomentum;
2026 double fullyCorrectedEnergy =
energy;
2034 fullyCorrectedEnergy =
2043 return fullyCorrectedEnergy;
2054 energyS2, eraw, ptype, scaleVar, varSF);
2055 fullyCorrectedEnergy /= (1 +
alpha);
2059 int ieta_k =
m_zeeFwdk->GetXaxis()->FindFixBin(cl_eta);
2060 double value_k =
m_zeeFwdk->GetBinContent(ieta_k);
2061 int ieta_b =
m_zeeFwdb->GetXaxis()->FindFixBin(cl_eta);
2062 double value_b =
m_zeeFwdb->GetBinContent(ieta_b);
2063 fullyCorrectedEnergy =
2064 value_k * fullyCorrectedEnergy +
2078 fullyCorrectedEnergy, energyS2,
2079 eraw, ptype, scaleVar, varSF);
2082 fullyCorrectedEnergy *= (1 + deltaAlpha);
2102 fullyCorrectedEnergy/cosh(cl_eta) < 20
e3) {
2109 fullyCorrectedEnergy *= (1 + daAF2);
2114 fullyCorrectedEnergy *=
2121 return fullyCorrectedEnergy;
2133 long int runnumber,
double cl_eta,
double cl_etaS2,
double cl_etaCalo,
2143 double meanE = meanET * std::cosh(cl_eta);
2144 double Et =
energy / std::cosh(cl_eta);
2153 double daPS, daS12, linPS, linS12, linEacc, linPS_40_elec, linEacc_40_elec,
2155 daPS = daS12 = linPS = linS12 = linEacc = linPS_40_elec = linEacc_40_elec =
2156 linS12_40_elec = 0.;
2158 double daE4 = 0., linE4 = 0.;
2187 double daWtots1 = 0.;
2207 daWtots1 = -daWtots1;
2236 "es2023_R22_Run2_v0 PS non-linearity before Acc correction: "
2238 linPS = linPS - linEacc * linPS_40_elec / linEacc_40_elec;
2239 ATH_MSG_DEBUG(
"es2023_R22_Run2_v0 PS non-linearity after Acc correction: "
2273 "es2023_R22_Run2_v0 S12 non-linearity before Acc correction: "
2275 linS12 = linS12 - linEacc * linS12_40_elec / linEacc_40_elec;
2277 "es2023_R22_Run2_v0 S12 non-linearity after Acc correction: "
2284 double daMatID, daMatCryo, daMatCalo;
2285 daMatID = daMatCryo = daMatCalo = 0;
2343 double daL1GainSwitch = 0.;
2360 daL1GainSwitch = -daL1GainSwitch;
2365 double daL2GainSwitch = 0.;
2366 double daL2MediumGainSwitch = 0.;
2367 double daL2LowGainSwitch = 0.;
2374 if (!(std::abs(cl_eta) < 1.52 && std::abs(cl_eta) > 1.37) &&
2375 std::abs(cl_eta) < 2.4) {
2377 energyS2 /
GeV, ptype);
2382 daL2GainSwitch = evar /
energy - eref / meanE;
2384 daL2GainSwitch = -daL2GainSwitch;
2390 daL2GainSwitch *= -1;
2394 "trying to compute gain systematic, but no tool for doing it has "
2395 "been instantiated, setting sys to 0");
2396 daL2GainSwitch = 0.;
2408 daL2MediumGainSwitch *= -1;
2409 ATH_MSG_DEBUG(
"L2 gain Medium uncertainty: " << daL2MediumGainSwitch);
2412 "trying to compute gain systematic, but no tool for doing it has "
2413 "been instantiated, setting sys to 0");
2414 daL2MediumGainSwitch = 0.;
2426 daL2LowGainSwitch *= -1;
2427 ATH_MSG_DEBUG(
"L2 gain Low uncertainty: " << daL2LowGainSwitch);
2430 "trying to compute Low gain systematic, but no tool for doing it has "
2431 "been instantiated, setting sys to 0");
2432 daL2LowGainSwitch = 0.;
2453 if (std::abs(cl_eta) < 1.5)
2474 const TH2*
histo =
nullptr;
2484 const double aeta = std::abs(cl_eta);
2485 dapp0 = getValueHistAt(*
histo, aeta,
energy /
GeV / cosh(cl_eta),
false,
2492 if (aeta > 1.5 and aeta < 2.0) {
2494 }
else if (aeta >= 2.0 and aeta <= 2.5) {
2506 double daTopoCluster = 0;
2518 double Et =
energy / cosh(cl_eta);
2519 double Et0 = 10000.;
2523 daTopoCluster = 1
e-3 * (1. / (Et / Et0) - 1. / (meanET / Et0));
2525 daTopoCluster = -1
e-3 * (1. / (Et / Et0) - 1. / (meanET / Et0));
2531 double daADCLin = 0;
2537 daADCLin = 0.3 * corr;
2540 "trying to compute ADC correction systematic, but no tool for doing "
2541 "it has been instantiated, setting sys to 0");
2549 double alphaTot = alphaZee;
2550 alphaTot += daE4 * linE4;
2551 alphaTot += daPS * linPS;
2552 alphaTot += daS12 * linS12;
2553 alphaTot += daMatID + daMatCryo + daMatCalo;
2554 alphaTot += daLeakage;
2555 alphaTot += daL1GainSwitch;
2556 alphaTot += daL2GainSwitch;
2557 alphaTot += daL2MediumGainSwitch;
2558 alphaTot += daL2LowGainSwitch;
2559 alphaTot += daConvSyst;
2560 alphaTot += daPedestal;
2561 alphaTot += daWtots1;
2563 alphaTot += daTopoCluster;
2564 alphaTot += daADCLin;
2574 long int runnumber,
double cl_eta,
double cl_etaS2,
double cl_etaCalo,
double energy,
2581 double alphaVar = 0.;
2589 eraw, ptype,
var, varSF) -
2598 energyS2, eraw, ptype,
ivar, varSF) -
2602 alphaVar +=
pow(
v, 2);
2604 alphaVar = sqrt(alphaVar);
2612 energyS2, eraw, ptype,
ivar, varSF) -
2616 alphaVar +=
pow(
v, 2);
2618 alphaVar = -sqrt(alphaVar);
2630 energyS2, eraw, ptype,
ivar, varSF) -
2632 alphaVar +=
pow(
v, 2);
2634 alphaVar = sqrt(alphaVar);
2646 energyS2, eraw, ptype,
ivar, varSF) -
2648 alphaVar +=
pow(
v, 2);
2650 alphaVar = -sqrt(alphaVar);
2662 if (std::abs(cl_eta) >= 2.47)
2676 double aeta = std::abs(cl_eta);
2677 double sampling = 0.;
2682 else if (aeta < 1.37)
2683 sampling = 0.036 + 0.130 * aeta;
2685 else if (aeta < 1.52)
2688 else if (aeta < 2.0)
2689 sampling = 0.85 - 0.36 * aeta;
2691 else if (aeta < 2.3)
2694 else if (aeta < 2.5)
2695 sampling = -1.05 + 0.52 * aeta;
2712 double aeta = std::abs(cl_eta);
2715 double noise37[25] = {0.27, 0.27, 0.27, 0.27, 0.27, 0.26, 0.25, 0.23, 0.21,
2716 0.19, 0.17, 0.16, 0.15, 0.14, 0.27, 0.23, 0.17, 0.15,
2717 0.13, 0.10, 0.07, 0.06, 0.05, 0.04, 0.03};
2719 int ieta = (
int)(aeta / 0.1);
2721 if (ieta >= 0 && ieta < 25)
2722 noise = noise37[ieta] * cosh(cl_eta);
2731 double aeta = std::abs(cl_eta);
2737 else if (aeta < 1.75)
2740 else if (aeta < 2.5)
2741 cst = 0.0055 * (2.69 - aeta);
2767 std::as_const(*m_peakResData).GetXaxis()->FindBin(cl_eta));
2775 std::as_const(*m_peakResMC).GetXaxis()->FindBin(cl_eta));
2781 double cl_eta)
const {
2793 sqrt(2 * (resData * resData - resMC * resMC) /
mz /
mz + cmc * cmc);
2795 sqrt(2 * (resData * resData - resMC * resMC * smpup * smpup) /
mz /
mz +
2798 sqrt(2 * (resData * resData - resMC * resMC * smpdo * smpdo) /
mz /
mz +
2801 double errdown = std::abs(central - vardown);
2802 double errup = std::abs(central - varup);
2804 return .5 * (errup + errdown);
2817 int eg_resolution_ptype;
2819 eg_resolution_ptype = 0;
2821 eg_resolution_ptype = 1;
2823 eg_resolution_ptype = 2;
2894 double resolution_error;
2895 double resolution_error_up;
2896 double resolution_error_down;
2899 resolution, resolution_error, resolution_error_up,
2900 resolution_error_down, resType,
2909 resolution_error = resolution_error_up /
resolution;
2911 resolution_error = resolution_error_down /
resolution;
2914 return resolution_error;
2920 double cl_eta,
double& errUp,
2921 double& errDown)
const {
2927 double Cdata_unc = 0.;
2928 if (Cdata_err > Cdata_cor)
2929 Cdata_unc = sqrt(Cdata_err * Cdata_err - Cdata_cor * Cdata_cor);
2930 if (Cdata_unc < 0.001)
2939 double err2 =
fcn_sigma(
energy, Cdata, -Cdata_unc, Smc, 0.) - central;
2940 double err3 =
fcn_sigma(
energy, Cdata, -Cdata_cor, Smc, Smc_err) - central;
2941 double err4 = -err3;
2945 errUp = sqrt(errUp * errUp + err1 * err1);
2947 errUp = sqrt(errUp * errUp + err2 * err2);
2949 errUp = sqrt(errUp * errUp + err3 * err3);
2951 errUp = sqrt(errUp * errUp + err4 * err4);
2959 double energy,
double cl_eta,
double cl_etaCalo,
2962 int eg_resolution_ptype;
2964 eg_resolution_ptype = 0;
2966 eg_resolution_ptype = 1;
2968 eg_resolution_ptype = 2;
2980 const double et =
energy / cosh(cl_eta);
2989 sig2 =
a *
a / energyGeV +
b *
b / energyGeV / energyGeV +
c *
c;
2992 if (withCT and
fast) {
2993 throw std::runtime_error(
2994 "It doesn't make sense to ask resolution fast sim + additional CT."
2995 " The resolution on data is FULL sim resolution + CT");
2998 if (
fast and std::abs(cl_eta) < 2.5) {
3021 double ratio_IQR_full_fast = 1.;
3022 const double ptGeV =
energy / cosh(cl_eta) / 1E3;
3036 bool interpolate_eta =
false;
3037 bool interpolate_pt =
false;
3040 interpolate_pt =
true;
3044 ptGeV,
true,
true,
true,
true,
3045 interpolate_eta, interpolate_pt);
3048 ptGeV,
true,
true,
true,
true,
3049 interpolate_eta, interpolate_pt);
3052 ptGeV,
true,
true,
true,
true,
3053 interpolate_eta, interpolate_pt);
3058 ratio_IQR_full_fast = getValueHistAt(
3061 ratio_IQR_full_fast = getValueHistAt(
3064 ratio_IQR_full_fast = getValueHistAt(
3068 sig2 /= ratio_IQR_full_fast * ratio_IQR_full_fast;
3085 double Cdata_er,
double S,
3093 sigma = sqrt(sigma2);
3108 ATH_MSG_FATAL(
"Trying to compute smearing correction on data");
3117 const double resMC =
3124 ATH_MSG_DEBUG(
"resolution in data: " << resData <<
" in MC: " << resMC);
3128 ptype,
value, resType);
3130 double errUp, errDown;
3143 ATH_MSG_DEBUG(
"resolution in data after systematics: " << resData);
3145 const double sigma2 =
3155 const double sigma = sqrt(sigma2);
3159 const double DeltaE0 =
rng.Gaus(0,
sigma);
3160 const double cor0 = (energyGeV + DeltaE0) / energyGeV;
3163 << cor0 <<
"|" <<
rng.GetSeed());
3178 double aeta = std::abs(eta);
3180 if (aeta < 1.42 || aeta > 1.55)
3183 const int nBoundaries = 18;
3184 double ETBoundaries[nBoundaries] = {0., 5.4, 8.5, 12.9, 16., 20.,
3185 25., 30., 35., 40., 45., 50.,
3186 55., 60., 65., 70., 75., 99999.};
3188 double CalibFactors[nBoundaries - 1] = {
3189 0.884845, 0.898526, 0.902439, 0.91899, 0.925868, 0.929440,
3190 0.948080, 0.943788, 0.96026, 0.955709, 0.964285, 0.95762,
3191 0.970385, 0.963489, 0.968149, 0.970799, 0.961617};
3194 for (
int i = 0;
i < nBoundaries - 1;
i++)
3195 if (ET /
GeV > ETBoundaries[
i] && ET /
GeV <= ETBoundaries[
i + 1])
3198 if (i0 >= 0 && i0 < nBoundaries - 1)
3199 return 1. / CalibFactors[i0];
3208 const double aeta = std::abs(eta);
3244 bool interpolate_eta =
false;
3245 bool interpolate_pt =
false;
3248 interpolate_pt =
true;
3252 true,
true,
true,
true,
3253 interpolate_eta, interpolate_pt));
3256 true,
true,
true,
true,
3257 interpolate_eta, interpolate_pt));
3260 true,
true,
true,
true,
3261 interpolate_eta, interpolate_pt));
3263 throw std::runtime_error(
"particle not valid");
3273 throw std::runtime_error(
"particle not valid");
3279 std::as_const(*m_G4OverAFII_electron).GetXaxis()->FindBin(eta));
3287 double aeta = std::abs(eta);
3288 if (aeta < 3.3 || aeta > 4.9)
3292 std::as_const(*m_G4OverFrSh).GetXaxis()->FindBin(aeta));
3299 double varSF)
const {
3309 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(eta);
3314 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(eta);
3318 "es2023_R22_Run2_v0/v1 is only valid for Run-2 data! using 2018 scales");
3319 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(eta);
3328 runnumber <= 341649 && runnumber >= 324320) {
3329 int ieta = std::as_const(*m_zeeNom_data2017).GetXaxis()->FindBin(eta);
3336 int ieta = std::as_const(*m_zeeNom_data2016).GetXaxis()->FindBin(eta);
3345 runnumber < 322817 && runnumber >= 297000) {
3346 int ieta = std::as_const(*m_zeeNom_data2016).GetXaxis()->FindBin(eta);
3352 int ieta = std::as_const(*m_zeeNom_data2016).GetXaxis()->FindBin(eta);
3357 int ieta = std::as_const(*m_zeeNom_data2015).GetXaxis()->FindBin(eta);
3362 int ieta = std::as_const(*m_zeeNom_data2018).GetXaxis()->FindBin(eta);
3367 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(eta);
3385 int ieta = std::as_const(*m_zeeNom_data2015).GetXaxis()->FindBin(eta);
3412 else if (eta > -3.2)
3420 const double uA2MeV_correction =
3434 if (eta < -2.5 and eta > -3.2)
3451 else if (eta > -3.2)
3502 double stat_error =
h->GetBinError(
h->FindFixBin(eta));
3504 stat_error = stat_error / sqrt(
h->GetNbinsX());
3529 value -= 0.4E-2 * varSF;
3534 int ieta = std::as_const(*m_zeePhys).GetXaxis()->FindBin(eta);
3539 int ieta = std::as_const(*m_zeePhys).GetXaxis()->FindBin(eta);
3553 const double aeta = std::abs(eta);
3558 }
else if (aeta > 1.45 and aeta < 3.2) {
3569 const double aeta = std::abs(eta);
3572 if (aeta > 2.5 and aeta < 3.2) {
3585 value += qsum(0.05
E-2, 0.02
E-2) *
3592 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(eta);
3600 ieta = std::as_const(*m_zeePhys).GetXaxis()->FindBin(eta);
3614 const double aeta = std::abs(eta);
3615 if ((aeta > 1.6) or (aeta < 1.4)) {
3621 double data_mc_difference = 0.;
3623 data_mc_difference = 1
E-2;
3625 else if (aeta < 1.52) {
3626 data_mc_difference = 3
E-2;
3629 data_mc_difference = 4.3E-2;
3632 const double em_scale = 2.4E-2;
3633 const double mbias = 1
E-2;
3634 const double laser = 4
E-2;
3636 return std::sqrt(data_mc_difference * data_mc_difference +
3637 em_scale * em_scale + mbias * mbias + laser * laser);
3661 double ETGeV =
energy / cosh(cl_eta) / 1E3;
3662 double wstot_pT_data_p0 = 0.;
3663 double wstot_pT_data_p1 = 0.;
3664 double wstot_pT_MC_p0 = 0.;
3665 double wstot_pT_MC_p1 = 0.;
3667 double wstot_40_data =
3670 double wstot_40_MC =
3693 double wstot_pT_data = 0.;
3694 double wstot_pT_MC = 0.;
3706 wstot_pT_data = wstot_pT_data_p0 + wstot_pT_data_p1 / sqrt(ETGeV);
3707 wstot_pT_MC = wstot_pT_MC_p0 + wstot_pT_MC_p1 / sqrt(ETGeV);
3709 value = 2 *
A / 91.2 * (wstot_pT_data - wstot_40_data) -
3710 2 * B / 91.2 * (wstot_pT_MC - wstot_40_MC);
3720 double varSF)
const {
3728 double nearestEta = cl_eta;
3756 else if (iLayer == 1) {
3783 const double aeta = std::abs(cl_eta);
3785 if (aeta >= 1.37 and aeta < 2.5) {
3811 const double aeta = std::abs(cl_eta);
3813 if (aeta >= 1.37 and aeta < 2.5) {
3839 const double aeta = std::abs(cl_eta);
3840 if (aeta >= 2.4 and aeta < 2.5) {
3850 return value * varSF;
3856 const double aeta = std::abs(cl_eta);
3857 const double ETGeV =
energy / cosh(cl_eta) / 1E3;
3877 const int ieta =
axis->FindFixBin(aeta) - 1;
3878 if (ieta >= 0 and ieta < graphs->GetSize()) {
3879 value =
static_cast<TGraph*
>(
graphs->At(ieta))->Eval(ETGeV);
3886 int iLayer,
double cl_eta,
double energy,
3891 if (iLayer == 6 && std::abs(cl_eta) >= 2.47)
3893 double aeta = std::abs(cl_eta);
3894 double ET =
energy / cosh(cl_eta);
3903 if (iLayer == 0 && aeta >= 1.82)
3911 if (ieta >= 0 and ieta < m_psElectronGraphs->GetSize()) {
3914 }
else if (iLayer == 1) {
3917 if (ieta >= 0 and ieta < m_s12ElectronGraphs->GetSize()) {
3920 }
else if (iLayer == 6) {
3923 if (ieta >= 0 && ieta < m_EaccElectronGraphs->GetSize()) {
3933 if (ieta >= 0 and ieta < m_psUnconvertedGraphs->GetSize()) {
3937 }
else if (iLayer == 1) {
3940 if (ieta >= 0 and ieta < m_s12UnconvertedGraphs->GetSize()) {
3943 }
else if (iLayer == 6) {
3946 if (ieta >= 0 && ieta < m_EaccUnconvertedGraphs->GetSize()) {
3956 if (ieta >= 0 and ieta < m_psConvertedGraphs->GetSize()) {
3960 }
else if (iLayer == 1) {
3963 if (ieta >= 0 and ieta < m_s12ConvertedGraphs->GetSize()) {
3966 }
else if (iLayer == 6) {
3969 if (ieta >= 0 && ieta < m_EaccConvertedGraphs->GetSize()) {
3970 if (ET < 10000. && (aeta < 1.2 || (aeta >= 1.59 && aeta < 1.73))) {
4002 double aeta = std::abs(cl_eta);
4105 double varSF)
const {
4115 if (std::abs(cl_eta) < 2.)
4129 double DAlphaDXID, DAlphaDXCryo, DAlphaDXCalo, DAlphaDXGp;
4130 DAlphaDXID = DAlphaDXCryo = DAlphaDXCalo = DAlphaDXGp = 0;
4158 value = -DAlphaDXGp;
4185 value = DeltaX * (DAlphaDXID - DAlphaDXCryo);
4187 value = DeltaX * DAlphaDXCryo;
4189 value = DeltaX * DAlphaDXCalo;
4191 return value * varSF;
4196 double cl_eta,
double ET)
const {
4251 double aeta = std::abs(cl_eta);
4252 int ieta = hmat->GetXaxis()->FindBin(aeta);
4254 int ipt = hmat->GetYaxis()->FindBin(ET);
4255 double ptBin = hmat->GetYaxis()->GetBinCenter(ipt);
4263 pt2 = hmat->GetYaxis()->GetBinCenter(i2);
4267 pt1 = hmat->GetYaxis()->GetBinCenter(i1);
4271 int nbins = hmat->GetYaxis()->GetNbins();
4273 if (i1 >= 1 && i1 <
nbins) {
4274 double v1 = hmat->GetBinContent(ieta, i1);
4275 double v2 = hmat->GetBinContent(ieta, i2);
4276 value = (v1 * (pt2 - ET) +
v2 * (ET - pt1)) / (pt2 - pt1);
4282 value = hmat->GetBinContent(ieta, ipt);
4292 double varSF)
const {
4295 double ET =
energy / cosh(cl_eta) /
GeV;
4311 if (std::abs(cl_eta) < 2.)
4319 if (std::abs(cl_eta) > 1.52 &&
4342 double DAlphaDXGp, DAlphaDXID, DAlphaDXCryo, DAlphaDXCalo;
4365 ->GetFunction(
"fNonLin")
4368 ->GetFunction(
"fNonLin")
4371 ->GetFunction(
"fNonLin")
4374 ->GetFunction(
"fNonLin")
4385 value = -DAlphaDXGp;
4422 value = DeltaX * (DAlphaDXID - DAlphaDXCryo);
4424 value = DeltaX * DAlphaDXCryo;
4426 value = DeltaX * DAlphaDXCalo;
4428 return value * varSF;
4436 double aeta = std::abs(cl_eta);
4463 return alpha * varSF;
4483 double aeta = std::abs(cl_eta);
4499 double etGeV =
et /
GeV;
4500 double alpha = 0, dalpha = 0;
4514 std::pair<double, double>
p =
4542 return alpha * varSF;
4546 const TH1&
hh,
double aeta,
double et,
bool useInterp)
const {
4550 int ibeta =
hh.GetXaxis()->FindBin(aeta);
4551 int nbpT =
hh.GetYaxis()->GetNbins();
4552 int ibpT =
hh.GetYaxis()->FindBin(
et);
4553 bool isOUFlow =
false;
4557 }
else if (ibpT == 0) {
4562 double pTp =
hh.GetYaxis()->GetBinCenter(ibpT), pTn = pTp;
4563 if (!useInterp || isOUFlow || (ibpT == nbpT &&
et > pTp) ||
4564 (ibpT == 1 &&
et < pTp))
4565 alpha =
hh.GetBinContent(ibeta, ibpT);
4567 int jp = ibpT, jn = ibpT - 1;
4572 pTp =
hh.GetYaxis()->GetBinCenter(jp);
4574 pTn =
hh.GetYaxis()->GetBinCenter(jn);
4576 double aPos =
hh.GetBinContent(ibeta, jp);
4577 double aNeg =
hh.GetBinContent(ibeta, jn);
4578 alpha = (aPos * (
et - pTn) + aNeg * (pTp -
et)) / (pTp - pTn);
4580 << aNeg <<
" alpha = " <<
alpha);
4582 double dalpha =
hh.GetBinError(ibeta, ibpT);
4584 return std::make_pair(
alpha, dalpha);
4592 double aeta = std::abs(cl_eta);
4595 double ET =
energy / std::cosh(cl_eta);
4649 return alpha * varSF;
4653 const TH2& conv_hist,
double aeta,
double ET)
const {
4656 int ieta = conv_hist.GetXaxis()->FindBin(aeta);
4658 int ipt = conv_hist.GetYaxis()->FindBin(ET);
4659 double ptBin = conv_hist.GetYaxis()->GetBinCenter(ipt);
4667 pt2 = conv_hist.GetYaxis()->GetBinCenter(i2);
4671 pt1 = conv_hist.GetYaxis()->GetBinCenter(i1);
4675 int nbins = conv_hist.GetYaxis()->GetNbins();
4677 if (i1 >= 1 && i1 <
nbins) {
4678 double v1 = conv_hist.GetBinContent(ieta, i1);
4679 double v2 = conv_hist.GetBinContent(ieta, i2);
4680 value = (v1 * (pt2 - ET) +
v2 * (ET - pt1)) / (pt2 - pt1);
4686 value = conv_hist.GetBinContent(ieta, ipt);
4693 double cl_eta,
double energy,
double eraw,
4700 const double delta =
4736 alpha = pedestal / eraw;
4740 return alpha * varSF;
4747 double pedestal = 0.;
4748 double aeta = std::abs(cl_eta);
4755 else if (iLayer == 1)
4757 else if (iLayer == 2)
4759 else if (iLayer == 3)
4765 else if (iLayer == 2)
4766 pedestal *= 15. / 21.;
4773 return pedestal * varSF;
4778 return std::abs(cl_eta) >= 1.35 && std::abs(cl_eta) <= 1.55;
4783 double newEta = cl_eta;
4788 if (newEta >= 1.35 && newEta <= 1.45)
4790 if (newEta >= 1.45 && newEta <= 1.55)
4793 if (newEta >= -1.55 && newEta <= -1.45)
4795 if (newEta >= -1.45 && newEta <= -1.35)
4827 pileupNoise = sqrt(avgmu) * (60. + 40. *
log(
et / 10000.) /
log(5.));
4834 if (std::abs(eta) < 1.4)
4843 double&
resolution,
double& resolution_error,
double& resolution_error_up,
4844 double& resolution_error_down,
int resol_type,
bool fast)
const {
4859 (pileupNoise * pileupNoise) / (
et *
et);
4862 double_t sum_sigma_resolution2 = 0.;
4863 double sum_deltaDown = 0.;
4864 double sum_deltaUp = 0.;
4866 for (
int isys = 0; isys < 11; isys++) {
4868 if (syst_mask & (1 << isys)) {
4871 double sigma2up = 0.;
4872 double sigma2down = 0.;
4876 double d1 = (smearingZ + esmearingZ) * (smearingZ + esmearingZ) -
4877 smearingZ * smearingZ;
4878 double d2 = smearingZ * smearingZ -
4879 (smearingZ - esmearingZ) * (smearingZ - esmearingZ);
4880 double d = 0.5 * (
d1 +
d2);
4885 std::format(
"sys resolution Zsmearing: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4891 3, 40000. * cosh(eta), eta, resol_type);
4892 double deltaSigma2 = (1.1 * resolutionZ) * (1.1 * resolutionZ) -
4893 resolutionZ * resolutionZ;
4894 double resolution1 =
4896 sigma2up = (1.1 * resolution1) * (1.1 * resolution1) -
4897 resolution1 * resolution1 - deltaSigma2;
4898 deltaSigma2 = (0.9 * resolutionZ) * (0.9 * resolutionZ) -
4899 resolutionZ * resolutionZ;
4900 sigma2down = (0.9 * resolution1) * (0.9 * resolution1) -
4901 resolution1 * resolution1 - deltaSigma2;
4902 sigma2 = 0.5 * (sigma2up - sigma2down);
4904 std::format(
"sys resolution intrinsic: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4908 else if (isys == 2) {
4911 sigma2 = sigmaA * sigmaA;
4913 sigma2down = -1. * sigma2;
4915 std::format(
"sys resolution configA ID material: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4920 else if (isys == 3) {
4921 if (std::abs(eta) < 1.45) {
4924 sigma2 = 0.5 * sigmaM * sigmaM;
4928 sigma2down = -1. * sigma2;
4930 std::format(
"sys resolution presampler-layer1: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4935 else if (isys == 4) {
4936 if (std::abs(eta) > 1.52 && std::abs(eta) < 1.82) {
4943 sigma2down = -1. * sigma2;
4945 std::format(
"sys resolution barrel-endcap gap: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4950 else if (isys == 5) {
4953 sigma2 = 0.5 * sigmaEL * sigmaEL;
4955 sigma2down = -1. * sigma2;
4957 std::format(
"sys resolution cryostat area: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4962 else if (isys == 6) {
4964 double sigmaPileUp = 0.;
4975 sqrt(1.1 * 1.1 - 1.0) *
4977 sigmaPileUp = deltaNoise /
et;
4978 sigmaZ = deltaNoise / 40000.;
4987 double deltaPileupNoise = 100.;
4988 if (std::abs(eta) >= 1.4 && std::abs(eta) < 1.8)
4989 deltaPileupNoise = 200.;
4990 double scaleNcells = 1;
4992 scaleNcells = sqrt(3. / 5.);
4994 sigmaPileUp = deltaPileupNoise * scaleNcells /
et;
4996 deltaPileupNoise / (40000.);
5000 sigma2down = -1. * sigma2;
5005 else if (isys == 7 && std::abs(eta) < 1.5 &&
5022 sigma2 = sigmaE * sigmaE;
5024 sigma2down = -1. * sigma2;
5026 std::format(
"sys resolution ibl material: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
5030 else if (isys == 8 && std::abs(eta) > 1.5 &&
5048 sigma2 = 2.3 * sigmaE * sigmaE;
5050 sigma2down = -1. * sigma2;
5052 std::format(
"sys resolution pp0 material: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
5058 else if (isys == 9 &&
5068 const double ptGeV =
et / 1
e3;
5069 bool interpolate_eta =
false;
5070 bool interpolate_pt =
false;
5073 interpolate_pt =
true;
5077 true,
true,
true,
true,
5078 interpolate_eta, interpolate_pt);
5081 ptGeV,
true,
true,
true,
true,
5082 interpolate_eta, interpolate_pt);
5085 ptGeV,
true,
true,
true,
true,
5086 interpolate_eta, interpolate_pt);
5087 sigma2up = -1. * sigma2;
5089 sigma2down = sigma2;
5094 double d1 = (smearingZ + esmearingOFC) * (smearingZ + esmearingOFC) -
5095 smearingZ * smearingZ;
5096 double d2 = smearingZ * smearingZ -
5097 (smearingZ - esmearingOFC) * (smearingZ - esmearingOFC);
5098 double d = 0.5 * (
d1 +
d2);
5119 if ((resolution2 + sigma2up) > 0.)
5120 rr1 = sqrt(resolution2 + sigma2up);
5122 if ((resolution2 + sigma2down) > 0.)
5123 rr2 = sqrt(resolution2 +
5125 double deltaSigma_sys;
5131 sum_sigma_resolution2 += deltaSigma_sys * deltaSigma_sys;
5133 if ((resolution2 + sigma2up) > 0.)
5134 rr1 = sqrt(resolution2 + sigma2up);
5140 if ((resolution2 + sigma2down) > 0.)
5141 rr2 = sqrt(resolution2 + sigma2down);
5145 ATH_MSG_VERBOSE(
"relative resolution change Down " << deltaSigmaDown);
5147 sum_deltaUp += deltaSigmaUp;
5148 sum_deltaDown += deltaSigmaDown;
5153 resolution_error = sqrt(sum_sigma_resolution2) *
5156 resolution_error_up = sum_deltaUp *
resolution;
5157 resolution_error_down = sum_deltaDown *
resolution;
5161 <<
" Resolution Error (MeV): " << resolution_error <<
" down "
5162 << resolution_error_down <<
" up " << resolution_error_up
5163 <<
" Z smearing " << smearingZ <<
" +- " << esmearingZ
5164 <<
" using mask " << syst_mask);
5175 return "topoClusterThresUp";
5177 return "topoClusterThresDown";
5179 return "MomentumUp";
5181 return "MomentumDown";
5185 return "ZeeStatDown";
5189 return "ZeeSystDown";
5193 return "ZeePhysDown";
5197 return "ZeeAllDown";
5199 return "LArCalibUp";
5201 return "LArCalibDown";
5203 return "LArUnconvCalibUp";
5205 return "LArUnconvCalibDown";
5207 return "LArElecCalibUp";
5209 return "LArElecCalibDown";
5211 return "LArCalibExtra2015PreUp";
5213 return "LArCalibExtra2015PreDown";
5215 return "LArElecUnconvUp";
5217 return "LArElecUnconvDown";
5235 return "S12ExtraLastEtaBinRun2Up";
5237 return "S12ExtraLastEtaBinRun2Down";
5245 return "MatCryoDown";
5249 return "MatCaloDown";
5253 return "L1GainDown";
5257 return "L2GainDown";
5259 return "L2LowGainDown";
5261 return "L2LowGainUp";
5263 return "L2MediumGainDown";
5265 return "L2MediumGainUp";
5269 return "ADCLinDown";
5271 return "LeakageElecUp";
5273 return "LeakageElecDown";
5275 return "ConvRecoUp";
5277 return "ConvRecoDown";
5283 return "LeakageUnconvUp";
5285 return "LeakageUnconvDown";
5287 return "LeakageConvUp";
5289 return "LeakageConvDown";
5291 return "ConvEfficiencyUp";
5293 return "ConvEfficiencyDown";
5295 return "ConvFakeRateUp";
5297 return "ConvFakeRateDown";
5299 return "ConvRadiusUp";
5301 return "ConvRadiusDown";
5303 return "PedestalUp";
5305 return "PedestalDown";
5311 return "AllCorrelatedUp";
5313 return "AllCorrelatedDown";
5315 return "LArTemperature2015PreUp";
5317 return "LArTemperature2015PreDown";
5319 return "LArTemperature2016PreUp";
5321 return "LArTemperature2016PreDown";
5323 return "E4ScintillatorUp";
5325 return "E4ScintillatorDown";
5329 return "MatPP0Down";
5333 return "Wtots1Down";
5335 return "LastScaleVariation";
5341 return "EXTRARUN3PREUp";
5343 return "EXTRARUN3PREDown";
5353 return "Resolution::None";
5355 return "Resolution::Nominal";
5357 return "Resolution::AllDown";
5359 return "Resolution::AllUp";
5361 return "Resolution::ZSmearingUp";
5363 return "Resolution::ZSmearingDown";
5365 return "Resolution::SamplingTermUp";
5367 return "Resolution::SamplingTermDown";
5369 return "Resolution::MaterialUp";
5371 return "Resolution::MaterialDown";
5373 return "Resolution::MaterialUp";
5375 return "Resolution::MaterialDown";
5377 return "Resolution::MaterialUp";
5379 return "Resolution::MaterialDown";
5381 return "Resolution::MaterialUp";
5383 return "Resolution::MaterialDown";
5385 return "Resolution::PileUpUp";
5387 return "Resolution::PileUpDown";
5389 return "Resolution::MaterialPP0Up";
5391 return "Resolution::MaterialPP0Down";
5393 return "Resolution::MaterialIBLUp";
5395 return "Resolution::MaterialIBLDown";
5397 return "Resolution::afUp";
5399 return "Resolution::afDown";
5401 return "Resolution::OFCUp";
5403 return "Resolution::OFCDown";
5405 return "LastResolutionVariation";
5407 return "Resolution::Unknown";
5412 const auto ieta = std::as_const(*m_zeeSyst).GetXaxis()->FindFixBin(eta);
5413 auto value_histo =
m_zeeSyst->GetBinContent(ieta);
5419 const auto ieta = std::as_const(*m_zeeSystOFC).GetXaxis()->FindFixBin(eta);
5426 return *std::as_const(*m_zeeNom).GetXaxis();