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"));
269 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2010/alphaPS_errTot")));
271 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2010/alphaS12_errTot")));
272 m_zeeNom.reset(checked_own_cast<TH1*>(
273 rootFile->Get(
"Scales/es2010/alphaZee_errStat")));
275 rootFile->Get(
"Scales/es2010/alphaZee_errSyst")));
276 m_resNom.reset(checked_own_cast<TH1*>(
277 rootFile->Get(
"Resolution/es2010/ctZee_errStat")));
279 rootFile->Get(
"Resolution/es2010/ctZee_errSyst")));
281 checked_own_cast<TH1*>(
rootFile->Get(
"Resolution/es2010/resZee_Data")));
283 checked_own_cast<TH1*>(
rootFile->Get(
"Resolution/es2010/resZee_MC")));
292 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011c/alphaPS_errTot")));
294 rootFile->Get(
"Scales/es2011c/alphaS12_errTot")));
295 m_zeeNom.reset(checked_own_cast<TH1*>(
296 rootFile->Get(
"Scales/es2011c/alphaZee_errStat")));
298 rootFile->Get(
"Scales/es2011c/alphaZee_errSyst")));
299 m_resNom.reset(checked_own_cast<TH1*>(
300 rootFile->Get(
"Resolution/es2011c/ctZee_errStat")));
302 rootFile->Get(
"Resolution/es2011c/ctZee_errSyst")));
304 rootFile->Get(
"Resolution/es2011c/resZee_Data")));
306 checked_own_cast<TH1*>(
rootFile->Get(
"Resolution/es2011c/resZee_MC")));
319 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011d/alphaPS_uncor")));
321 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011d/dalphaPS_cor")));
323 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011d/alphaS12_uncor")));
325 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011d/dalphaS12_cor")));
327 rootFile->Get(
"Scales/es2011d/momentum_errSyst")));
331 m_zeeNom.reset(checked_own_cast<TH1*>(
332 rootFile->Get(
"Scales/es2011d/alphaZee_errStat")));
334 rootFile->Get(
"Scales/es2011d/alphaZee_errSyst")));
335 m_resNom.reset(checked_own_cast<TH1*>(
336 rootFile->Get(
"Resolution/es2011d/ctZee_errStat")));
338 rootFile->Get(
"Resolution/es2011d/ctZee_errSyst")));
342 m_zeeNom.reset(checked_own_cast<TH1*>(
343 rootFile->Get(
"Scales/es2011dMedium/alphaZee_errStat")));
345 rootFile->Get(
"Scales/es2011dMedium/alphaZee_errSyst")));
347 rootFile->Get(
"Scales/es2011dMedium/alphaZee_errPhys")));
348 m_resNom.reset(checked_own_cast<TH1*>(
349 rootFile->Get(
"Resolution/es2011dMedium/ctZee_errStat")));
351 rootFile->Get(
"Resolution/es2011dMedium/ctZee_errSyst")));
355 m_zeeNom.reset(checked_own_cast<TH1*>(
356 rootFile->Get(
"Scales/es2011dTight/alphaZee_errStat")));
358 rootFile->Get(
"Scales/es2011dTight/alphaZee_errSyst")));
360 rootFile->Get(
"Scales/es2011dTight/alphaZee_errPhys")));
361 m_resNom.reset(checked_own_cast<TH1*>(
362 rootFile->Get(
"Resolution/es2011dTight/ctZee_errStat")));
364 rootFile->Get(
"Resolution/es2011dTight/ctZee_errSyst")));
368 rootFile->Get(
"Pedestals/es2011d/pedestals_l0")));
370 rootFile->Get(
"Pedestals/es2011d/pedestals_l1")));
372 rootFile->Get(
"Pedestals/es2011d/pedestals_l2")));
374 rootFile->Get(
"Pedestals/es2011d/pedestals_l3")));
377 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
380 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
382 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
385 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
387 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
389 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
391 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
394 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
396 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
398 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
401 rootFile->Get(
"Conversions/es2011d/convRadiusMigrations")));
403 rootFile->Get(
"Conversions/es2011d/convFakeRate")));
405 rootFile->Get(
"Conversions/es2011d/convRecoEfficiency")));
411 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
413 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
415 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
419 "e1hg_systematics_histos.root"));
426 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012a/alphaPS_errTot")));
428 rootFile->Get(
"Scales/es2012a/alphaS12_errTot")));
430 m_zeeNom.reset(checked_own_cast<TH1*>(
431 rootFile->Get(
"Scales/es2012a/alphaZee_errStat")));
433 rootFile->Get(
"Scales/es2012a/alphaZee_errSyst")));
435 m_resNom.reset(checked_own_cast<TH1*>(
436 rootFile->Get(
"Resolution/es2012a/ctZee_errStat")));
438 rootFile->Get(
"Resolution/es2012a/ctZee_errSyst")));
440 rootFile->Get(
"Resolution/es2012a/resZee_Data")));
442 checked_own_cast<TH1*>(
rootFile->Get(
"Resolution/es2012a/resZee_MC")));
454 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
456 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
458 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
460 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
463 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
465 m_zeeNom.reset(checked_own_cast<TH1*>(
466 rootFile->Get(
"Scales/es2012c/alphaZee_errStat")));
468 rootFile->Get(
"Scales/es2012c/alphaZee_errSyst")));
470 m_resNom.reset(checked_own_cast<TH1*>(
471 rootFile->Get(
"Resolution/es2012c/ctZee_errStat")));
473 rootFile->Get(
"Resolution/es2012c/ctZee_errSyst")));
476 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
478 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
480 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
482 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
485 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
488 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
490 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
493 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
495 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
497 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
499 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
502 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
504 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
506 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
509 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
511 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
513 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
519 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
521 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
523 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
527 "e1hg_systematics_histos.root"));
534 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
536 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
538 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
540 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
543 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
545 m_zeeNom.reset(checked_own_cast<TH1*>(
546 rootFile->Get(
"Scales/es2015PRE/alphaZee_errStat")));
548 rootFile->Get(
"Scales/es2012c/alphaZee_errSyst")));
550 m_resNom.reset(checked_own_cast<TH1*>(
551 rootFile->Get(
"Resolution/es2015PRE/ctZee_errStat")));
553 rootFile->Get(
"Resolution/es2012c/ctZee_errSyst")));
556 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
558 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
560 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
562 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
565 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
568 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
570 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
573 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
575 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
577 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
579 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
582 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
584 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
586 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
589 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
591 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
593 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
599 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
601 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
603 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
607 "e1hg_systematics_histos.root"));
615 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
617 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
619 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
621 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
624 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
626 m_zeeNom.reset(checked_own_cast<TH1*>(
627 rootFile->Get(
"Scales/es2015PRE/alphaZee_errStat")));
629 rootFile->Get(
"Scales/es2015PRE/alphaZee_errSyst")));
631 rootFile->Get(
"Scales/es2015PRE/histo_uA2MeV_week12")));
633 m_resNom.reset(checked_own_cast<TH1*>(
634 rootFile->Get(
"Resolution/es2015PRE/ctZee_errStat")));
636 rootFile->Get(
"Resolution/es2015PRE/ctZee_errSyst")));
639 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
641 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
643 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
645 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
648 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
651 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
653 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
656 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
658 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
660 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
662 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
665 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
667 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
669 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
672 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
674 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
676 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
682 rootFile->Get(
"FastSim/es2015/el_full_fast_resolution")));
684 rootFile->Get(
"FastSim/es2015/ph_unconv_full_fast_resolution")));
686 rootFile->Get(
"FastSim/es2015/ph_conv_full_fast_resolution")));
693 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
695 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
697 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
701 "e1hg_systematics_histos.root"));
709 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
711 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
713 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
715 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
718 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
720 m_zeeNom.reset(checked_own_cast<TH1*>(
721 rootFile->Get(
"Scales/es2015PRE/alphaZee_errStat")));
723 rootFile->Get(
"Scales/es2015PRE/alphaZee_errSyst")));
725 rootFile->Get(
"Scales/es2015PRE/histo_uA2MeV_week12")));
727 m_resNom.reset(checked_own_cast<TH1*>(
728 rootFile->Get(
"Resolution/es2015PRE/ctZee_errStat")));
730 rootFile->Get(
"Resolution/es2015PRE_res_improved/ctZee_errSyst")));
733 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
735 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
737 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
739 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
742 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
745 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
747 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
750 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
752 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
754 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
756 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
759 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
761 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
763 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
766 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
768 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
770 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
776 rootFile->Get(
"FastSim/es2015/el_full_fast_resolution")));
778 rootFile->Get(
"FastSim/es2015/ph_unconv_full_fast_resolution")));
780 rootFile->Get(
"FastSim/es2015/ph_conv_full_fast_resolution")));
786 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
788 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
790 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
794 "e1hg_systematics_histos.root"));
801 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
803 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
805 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
807 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
810 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
812 m_zeeNom.reset(checked_own_cast<TH1*>(
813 rootFile->Get(
"Scales/es2015Summer/alphaZee_errStat")));
815 rootFile->Get(
"Scales/es2015Summer/alphaZee_errSyst")));
818 m_resNom.reset(checked_own_cast<TH1*>(
819 rootFile->Get(
"Resolution/es2015Summer/ctZee_errStat")));
821 rootFile->Get(
"Resolution/es2015Summer/ctZee_errSyst")));
824 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
826 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
828 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
830 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
833 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
836 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
838 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
841 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
843 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
845 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
847 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
850 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
852 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
854 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
857 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
859 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
861 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
867 rootFile->Get(
"FastSim/es2015/el_full_fast_resolution")));
869 rootFile->Get(
"FastSim/es2015/ph_unconv_full_fast_resolution")));
871 rootFile->Get(
"FastSim/es2015/ph_conv_full_fast_resolution")));
878 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
880 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
882 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
886 "e1hg_systematics_histos.root"));
895 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
897 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
899 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
901 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
904 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
906 m_zeeNom.reset(checked_own_cast<TH1*>(
907 rootFile->Get(
"Scales/es2015Summer/alphaZee_errStat")));
909 rootFile->Get(
"Scales/es2015Summer/alphaZee_errSyst")));
911 m_resNom.reset(checked_own_cast<TH1*>(
912 rootFile->Get(
"Resolution/es2015Summer/ctZee_errStat")));
914 rootFile->Get(
"Resolution/es2015Summer/ctZee_errSyst")));
917 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
919 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
921 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
923 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
926 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
929 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
931 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
934 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
936 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
938 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
940 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
943 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
945 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
947 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
950 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
952 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
954 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
960 rootFile->Get(
"FastSim/es2015/el_full_fast_resolution")));
962 rootFile->Get(
"FastSim/es2015/ph_unconv_full_fast_resolution")));
964 rootFile->Get(
"FastSim/es2015/ph_conv_full_fast_resolution")));
971 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
973 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
975 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
979 "e1hg_systematics_histos.root"));
1023 m_aPSNom.reset(checked_own_cast<TH1*>(
1024 rootFile->Get(
"Scales/es2017_summer_final/alphaPS_uncor")));
1026 rootFile->Get(
"Scales/es2017_summer_final/dalphaPS_b12")));
1028 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
1030 rootFile->Get(
"Scales/es2017_summer_final/alphaS12_uncor")));
1032 rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
1034 m_aPSNom.reset(checked_own_cast<TH1*>(
1035 rootFile->Get(
"Scales/es2017_summer_final/alphaPS_uncor")));
1037 rootFile->Get(
"Scales/es2017_summer_final/dalphaPS_b12")));
1039 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
1041 rootFile->Get(
"Scales/es2018_R21_v1/alphaS12_uncor")));
1043 rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
1045 m_aPSNom.reset(checked_own_cast<TH1*>(
1046 rootFile->Get(
"Scales/es2023_R22_Run2_v0/alphaPS_uncor")));
1048 rootFile->Get(
"Scales/es2023_R22_Run2_v0/alphaS12_uncor")));
1052 m_aPSNom.reset(checked_own_cast<TH1*>(
1053 rootFile->Get(
"Scales/es2023_R22_Run2_v0/alphaPS_uncor")));
1055 rootFile->Get(
"Scales/es2023_R22_Run2_v1/hE1E2_emu_run2_rel21_v0_fix")));
1057 m_aPSNom.reset(checked_own_cast<TH1*>(
1058 rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
1060 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
1062 rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
1064 rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
1067 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
1070 m_zeeNom.reset(checked_own_cast<TH1*>(
1071 rootFile->Get(
"Scales/es2017/alphaZee_errStat_period_2016")));
1073 rootFile->Get(
"Scales/es2017/alphaZee_errStat_period_2015")));
1076 m_zeeNom.reset(checked_own_cast<TH1*>(
1077 rootFile->Get(
"Scales/es2017_summer/alphaZee_errStat_period_2016")));
1079 rootFile->Get(
"Scales/es2017_summer/alphaZee_errStat_period_2015")));
1082 "Scales/es2017_summer_final/alphaZee_errStat_period_2016")));
1084 "Scales/es2017_summer_final/alphaZee_errStat_period_2015")));
1086 m_zeeNom.reset(checked_own_cast<TH1*>(
1087 rootFile->Get(
"Scales/es2015_5TeV/alphaZee_errStat_period_2015")));
1090 rootFile->Get(
"Scales/es2015_5TeV/alphaZee_errStat_period_2015")));
1092 m_zeeNom.reset(checked_own_cast<TH1*>(
1093 rootFile->Get(
"Scales/es2017_R21_v0/alphaZee_errStat_period_2017")));
1095 rootFile->Get(
"Scales/es2017_R21_v0/alphaZee_errStat_period_2016")));
1097 rootFile->Get(
"Scales/es2017_R21_v0/alphaZee_errStat_period_2015")));
1099 m_zeeNom.reset(checked_own_cast<TH1*>(
1100 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errStat_period_2017")));
1102 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errStat_period_2016")));
1104 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errStat_period_2015")));
1106 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalk")));
1108 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalb")));
1111 "Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2017")));
1113 "Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2016")));
1115 "Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2015")));
1117 "Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2018")));
1119 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalk")));
1121 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalb")));
1124 "Scales/es2024_Run3_ofc0_v0/alphaZee_errStat")));
1126 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalk")));
1128 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalb")));
1131 m_zeeNom.reset(checked_own_cast<TH1*>(
1132 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errStat_period_2018")));
1134 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errStat_period_2017")));
1136 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errStat_period_2016")));
1138 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errStat_period_2015")));
1140 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1142 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1144 m_zeeNom.reset(checked_own_cast<TH1*>(
1145 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2018")));
1147 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2017")));
1149 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2016")));
1151 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2015")));
1154 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1156 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1158 m_zeeNom.reset(checked_own_cast<TH1*>(
1159 rootFile->Get(
"Scales/es2022_R22_PRE/alphaZee_errStat_period_2018")));
1162 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1164 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1167 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2018")));
1169 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2017")));
1171 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2016")));
1173 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2015")));
1176 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1178 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1182 "Scales/es2023_R22_Run2_v1/alphaZee_errStat_period_2018")));
1184 "Scales/es2023_R22_Run2_v1/alphaZee_errStat_period_2017")));
1186 "Scales/es2023_R22_Run2_v1/alphaZee_errStat_period_2016")));
1188 "Scales/es2023_R22_Run2_v1/alphaZee_errStat_period_2015")));
1191 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1193 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1195 m_zeeNom.reset(checked_own_cast<TH1*>(
1196 rootFile->Get(
"Scales/es2024_Run3_v0/alphaZee_errStat_period_2024")));
1198 rootFile->Get(
"Scales/es2024_Run3_v0/alphaZee_errStat_period_2023")));
1200 rootFile->Get(
"Scales/es2024_Run3_v0/alphaZee_errStat_period_2022")));
1202 m_zeeNom.reset(checked_own_cast<TH1*>(
1203 rootFile->Get(
"Scales/es2017_R21_PRE/alphaZee_errStat_period_2016")));
1206 rootFile->Get(
"Scales/es2017_R21_PRE/alphaZee_errStat_period_2016")));
1210 rootFile->Get(
"Scales/es2017/alphaZee_errSyst")));
1213 rootFile->Get(
"Scales/es2017_summer_final/alphaZee_errSyst")));
1216 rootFile->Get(
"Scales/es2015_5TeV/alphaZee_errSyst")));
1219 rootFile->Get(
"Scales/es2017_summer_final/alphaZee_errSyst")));
1222 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errSyst")));
1225 rootFile->Get(
"Scales/es2017_R21_ofc0_v1/alphaZee_errSyst")));
1228 rootFile->Get(
"Scales/es2024_Run3_ofc0_v0/alphaZee_errSyst")));
1231 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errSyst")));
1237 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errSyst")));
1240 rootFile->Get(
"Scales/es2022_R22_PRE/alphaZee_errSyst")));
1242 rootFile->Get(
"Scales/es2022_R22_PRE/alphaZee_errOFCSyst")));
1245 rootFile->Get(
"Scales/es2017_summer/alphaZee_errSyst")));
1250 m_resNom.reset(checked_own_cast<TH1*>(
1251 rootFile->Get(
"Resolution/es2017/ctZee_errStat")));
1255 m_resNom.reset(checked_own_cast<TH1*>(
1256 rootFile->Get(
"Resolution/es2017_summer/ctZee_errStat")));
1258 m_resNom.reset(checked_own_cast<TH1*>(
1259 rootFile->Get(
"Resolution/es2017_summer_final/ctZee_errStat")));
1261 m_resNom.reset(checked_own_cast<TH1*>(
1262 rootFile->Get(
"Resolution/es2017_R21_v0/ctZee_errStat")));
1264 m_resNom.reset(checked_own_cast<TH1*>(
1265 rootFile->Get(
"Resolution/es2017_R21_v1/ctZee_errStat")));
1267 m_resNom.reset(checked_own_cast<TH1*>(
1268 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errStat")));
1271 m_resNom.reset(checked_own_cast<TH1*>(
1272 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errStat")));
1274 m_resNom.reset(checked_own_cast<TH1*>(
1275 rootFile->Get(
"Resolution/es2018_R21_v0/ctZee_errStat")));
1277 m_resNom.reset(checked_own_cast<TH1*>(
1278 rootFile->Get(
"Resolution/es2018_R21_v1/ctZee_errStat")));
1280 m_resNom.reset(checked_own_cast<TH1*>(
1281 rootFile->Get(
"Resolution/es2022_R22_PRE/ctZee_errStat")));
1283 m_resNom.reset(checked_own_cast<TH1*>(
1284 rootFile->Get(
"Resolution/es2023_R22_Run2_v0/ctZee_errStat")));
1286 m_resNom.reset(checked_own_cast<TH1*>(
1287 rootFile->Get(
"Resolution/es2023_R22_Run2_v1/ctZee_errStat")));
1289 m_resNom.reset(checked_own_cast<TH1*>(
1290 rootFile->Get(
"Resolution/es2024_Run3_v0/ctZee_errStat")));
1292 m_resNom.reset(checked_own_cast<TH1*>(
1293 rootFile->Get(
"Resolution/es2017_R21_PRE/ctZee_errStat")));
1298 rootFile->Get(
"Resolution/es2017/ctZee_errSyst")));
1301 rootFile->Get(
"Resolution/es2017_summer_final/ctZee_errSyst")));
1304 rootFile->Get(
"Resolution/es2015_5TeV/ctZee_errSyst")));
1307 rootFile->Get(
"Resolution/es2017_summer_final/ctZee_errSyst")));
1310 rootFile->Get(
"Resolution/es2017_R21_v1/ctZee_errSyst")));
1313 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errSyst")));
1317 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errSyst")));
1320 rootFile->Get(
"Resolution/es2018_R21_v0/ctZee_errSyst")));
1326 rootFile->Get(
"Resolution/es2018_R21_v1/ctZee_errSyst")));
1329 rootFile->Get(
"Resolution/es2022_R22_PRE/ctZee_errSyst")));
1331 rootFile->Get(
"Resolution/es2022_R22_PRE/ctZee_errOFCSyst")));
1334 rootFile->Get(
"Resolution/es2017_summer/ctZee_errSyst")));
1342 checked_own_cast<TH1*>(
rootFile->Get(
"Pedestals/es2017/pedestals")));
1345 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
1348 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
1350 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
1353 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
1355 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
1357 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
1359 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
1362 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
1364 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
1366 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
1369 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
1372 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
1374 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
1378 rootFile->Get(
"Conversions/es2023_R22_Run2_v0/convFakeRate")));
1380 rootFile->Get(
"Conversions/es2023_R22_Run2_v0/convRecoEfficiency")));
1383 rootFile->Get(
"Conversions/es2024_Run3_v0/conv_energybias")));
1385 rootFile->Get(
"Conversions/es2024_Run3_v0/unconv_energybias")));
1388 rootFile->Get(
"Conversions/es2017_summer/convFakeRate")));
1390 rootFile->Get(
"Conversions/es2017_summer/convRecoEfficiency")));
1397 "ElectronPhotonFourMomentumCorrection/v8/PP0sys.root");
1399 TFile file_pp0(filename_pp0.c_str());
1400 m_pp0_elec.reset(checked_own_cast<TH2*>(file_pp0.Get(
"elec")));
1401 m_pp0_conv.reset(checked_own_cast<TH2*>(file_pp0.Get(
"conv")));
1402 m_pp0_unconv.reset(checked_own_cast<TH2*>(file_pp0.Get(
"unco")));
1406 "ElectronPhotonFourMomentumCorrection/v8/wstot_related_syst.root");
1408 TFile file_wstot(filename_wstot.c_str());
1410 checked_own_cast<TH1*>(file_wstot.Get(
"A_data")));
1413 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_data_p0")));
1415 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_data_p1")));
1417 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_uc_data_p0")));
1419 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_uc_data_p1")));
1421 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_c_data_p0")));
1423 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_c_data_p1")));
1425 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_mc_p0")));
1427 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_mc_p1")));
1429 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_uc_mc_p0")));
1431 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_uc_mc_p1")));
1433 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_c_mc_p0")));
1435 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_c_mc_p1")));
1445 rootFile->Get(
"FastSim/es2017_v1/resol_Af2ToG4_elec_rel21")));
1447 rootFile->Get(
"FastSim/es2017_v1/resol_Af2ToG4_unco_rel21")));
1449 rootFile->Get(
"FastSim/es2017_v1/resol_Af2ToG4_conv_rel21")));
1456 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/resol_AF3ToG4_elec_rel22")));
1458 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/resol_AF3ToG4_unco_rel22")));
1460 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/resol_AF3ToG4_conv_rel22")));
1464 rootFile->Get(
"FastSim/es2024_Run3_v0/resol_AF3ToG4_elec_mc23")));
1466 rootFile->Get(
"FastSim/es2024_Run3_v0/resol_AF3ToG4_unco_mc23")));
1468 rootFile->Get(
"FastSim/es2024_Run3_v0/resol_AF3ToG4_conv_mc23")));
1471 rootFile->Get(
"FastSim/es2024_Run3_v0/adhoc_resol_AF3ToG4_elec_mc23_1p3_1p35")));
1473 rootFile->Get(
"FastSim/es2024_Run3_v0/adhoc_resol_AF3ToG4_elec_mc23_1p3_1p35")));
1475 rootFile->Get(
"FastSim/es2024_Run3_v0/adhoc_resol_AF3ToG4_unconv_mc23_1p3_1p35")));
1479 rootFile->Get(
"FastSim/es2017/el_full_fast_resolution")));
1481 rootFile->Get(
"FastSim/es2017/ph_unconv_full_fast_resolution")));
1483 rootFile->Get(
"FastSim/es2017/ph_conv_full_fast_resolution")));
1490 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
1492 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
1495 std::string gain_tool_run_2_filename;
1496 std::string gain_tool_run3_extra_filename;
1502 "ElectronPhotonFourMomentumCorrection/v11/"
1503 "gain_uncertainty_specialRun.root");
1508 "ElectronPhotonFourMomentumCorrection/v29/"
1509 "gain_uncertainty_specialRun.root");
1512 "ElectronPhotonFourMomentumCorrection/v38/"
1513 "gain_uncertainty_specialRun.root");
1517 "ElectronPhotonFourMomentumCorrection/v14/"
1518 "gain_uncertainty_specialRun.root");
1524 gain_tool_run_2_filename,
true,
"GainUncertainty",
1528 gain_tool_run3_extra_filename,
true,
"GainUncertainty",
1533 std::make_unique<egGain::GainUncertainty>(gain_tool_run_2_filename);
1543 "e1hg_systematics_histos.root"));
1547 "e1hg_systematics_histos.root"));
1556 m_aPSNom.reset(checked_own_cast<TH1*>(
1557 rootFile->Get(
"Scales/es2015_day0/alphaPS_uncor")));
1559 rootFile->Get(
"Scales/es2015_day0/dalphaPS_cor")));
1561 rootFile->Get(
"Scales/es2015_day0/alphaS12_uncor")));
1563 rootFile->Get(
"Scales/es2015_day0/dalphaS12_cor")));
1566 rootFile->Get(
"Scales/es2015_day0/momentum_errSyst")));
1568 m_zeeNom.reset(checked_own_cast<TH1*>(
1569 rootFile->Get(
"Scales/es2015_day0/alphaZee_errStat")));
1571 rootFile->Get(
"Scales/es2015_day0/alphaZee_errSyst")));
1573 m_resNom.reset(checked_own_cast<TH1*>(
1574 rootFile->Get(
"Resolution/es2012c/ctZee_errStat")));
1576 rootFile->Get(
"Resolution/es2012c/ctZee_errSyst")));
1579 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
1581 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
1583 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
1585 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
1588 rootFile->Get(
"Material/DX0_ConfigA")));
1591 "Material/Measured/DXerr_IPPS_NewG_errUncor")));
1593 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
1596 "Material/Measured/DXerr_IPAcc_NewG_errUncor")));
1598 "Material/Measured/DXerr_IPAcc_NewG_errLAr")));
1600 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
1602 "Material/Measured/DXerr_IPAcc_NewG_errGL1")));
1605 "Material/Measured/DXerr_PSAcc_NewG_errUncor")));
1607 "Material/Measured/DXerr_PSAcc_NewG_errLAr")));
1609 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
1612 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
1614 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
1616 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
1622 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
1624 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
1626 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
1630 "e1hg_systematics_histos.root"));
1635 ATH_MSG_FATAL(
"ES model not initialized - Initialization fails");
1638 ATH_MSG_FATAL(
"ES model not recognized - Initialization fails");
1663 rootFile->Get(
"E4Recalibration/v4/electron_eta_axis")));
1665 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/v4/electron")));
1668 rootFile->Get(
"E4Recalibration/v4/electron_eta_axis")));
1670 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/v4/electron")));
1672 rootFile->Get(
"E4Recalibration/v4/electron_eta_axis")));
1674 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/v4/electron")));
1679 rootFile->Get(
"E4Recalibration/es2024_Run3_v0/E4_eta_axis")));
1681 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/es2024_Run3_v0/electron_sensitivity")));
1683 rootFile->Get(
"E4Recalibration/es2024_Run3_v0/E4_eta_axis")));
1685 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/es2024_Run3_v0/unconv_photon_sensitivity")));
1687 rootFile->Get(
"E4Recalibration/es2024_Run3_v0/E4_eta_axis")));
1689 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/es2024_Run3_v0/conv_photon_sensitivity")));
1714 rootFile->Get(
"PSRecalibration/es2015PRE/ElectronAxis")));
1716 rootFile->Get(
"PSRecalibration/es2015PRE/ElectronBiasPS")));
1718 rootFile->Get(
"PSRecalibration/es2015PRE/UnconvertedAxis")));
1720 rootFile->Get(
"PSRecalibration/es2015PRE/UnconvertedBiasPS")));
1722 rootFile->Get(
"PSRecalibration/es2015PRE/ConvertedAxis")));
1724 rootFile->Get(
"PSRecalibration/es2015PRE/ConvertedBiasPS")));
1727 rootFile->Get(
"S1Recalibration/es2015PRE/ElectronAxis")));
1729 rootFile->Get(
"S1Recalibration/es2015PRE/ElectronBiasS1")));
1731 rootFile->Get(
"S1Recalibration/es2015PRE/UnconvertedAxis")));
1733 rootFile->Get(
"S1Recalibration/es2015PRE/UnconvertedBiasS1")));
1735 rootFile->Get(
"S1Recalibration/es2015PRE/ConvertedAxis")));
1737 rootFile->Get(
"S1Recalibration/es2015PRE/ConvertedBiasS1")));
1742 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ElectronAxis")));
1744 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ElectronBiasPS")));
1746 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/UnconvertedAxis")));
1748 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/UnconvertedBiasPS")));
1750 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ConvertedAxis")));
1752 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ConvertedBiasPS")));
1755 rootFile->Get(
"S2Recalibration/ElectronAxis")));
1757 rootFile->Get(
"S2Recalibration/ElectronBiasS2")));
1759 rootFile->Get(
"S2Recalibration/UnconvertedAxis")));
1761 rootFile->Get(
"S2Recalibration/UnconvertedBiasS2")));
1763 rootFile->Get(
"S2Recalibration/ConvertedAxis")));
1765 rootFile->Get(
"S2Recalibration/ConvertedBiasS2")));
1768 rootFile->Get(
"SaccRecalibration/ElectronAxis")));
1771 rootFile->Get(
"SaccRecalibration/es2024_Run3_v0/ElectronBiasSacc")));
1775 rootFile->Get(
"SaccRecalibration/ElectronBiasSacc")));
1778 rootFile->Get(
"SaccRecalibration/UnconvertedAxis")));
1780 rootFile->Get(
"SaccRecalibration/UnconvertedBiasSacc")));
1782 rootFile->Get(
"SaccRecalibration/ConvertedAxis")));
1784 rootFile->Get(
"SaccRecalibration/ConvertedBiasSacc")));
1788 rootFile->Get(
"PSRecalibration/ElectronAxis")));
1790 rootFile->Get(
"PSRecalibration/ElectronBiasPS")));
1792 rootFile->Get(
"PSRecalibration/UnconvertedAxis")));
1794 rootFile->Get(
"PSRecalibration/UnconvertedBiasPS")));
1796 rootFile->Get(
"PSRecalibration/ConvertedAxis")));
1798 rootFile->Get(
"PSRecalibration/ConvertedBiasPS")));
1801 rootFile->Get(
"S1Recalibration/ElectronAxis")));
1803 rootFile->Get(
"S1Recalibration/ElectronBiasS1")));
1805 rootFile->Get(
"S1Recalibration/UnconvertedAxis")));
1807 rootFile->Get(
"S1Recalibration/UnconvertedBiasS1")));
1809 rootFile->Get(
"S1Recalibration/ConvertedAxis")));
1811 rootFile->Get(
"S1Recalibration/ConvertedBiasS1")));
1818 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1819 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigA"))));
1821 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1822 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigCpDp"))));
1824 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1825 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigEpLp"))));
1827 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1828 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigFpMX"))));
1830 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1831 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigGp"))));
1834 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigA"))));
1836 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigCpDp"))));
1838 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigEpLp"))));
1840 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigFpMX"))));
1842 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigGp"))));
1845 rootFile->Get(
"Material/electronCstTerm_ConfigA"))));
1847 rootFile->Get(
"Material/electronCstTerm_ConfigCpDp"))));
1849 rootFile->Get(
"Material/electronCstTerm_ConfigEpLp"))));
1851 rootFile->Get(
"Material/electronCstTerm_ConfigFpMX"))));
1853 rootFile->Get(
"Material/electronCstTerm_ConfigGp"))));
1866 checked_own_cast<TH1*>(
rootFile->Get(
"Material_rel21/DX0_ConfigA"))));
1868 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigCpDp"))));
1870 rootFile->Get(
"Material_rel21/DX0_ConfigEpLp"))));
1872 rootFile->Get(
"Material_rel21/DX0_ConfigFpMX"))));
1874 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigGp"))));
1876 checked_own_cast<TH1*>(
rootFile->Get(
"Material_rel21/DX0_ConfigN"))));
1879 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA"))));
1881 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigCpDp"))));
1883 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigEpLp"))));
1885 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigFpMX"))));
1887 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigGp"))));
1891 checked_own_cast<TAxis*>(
rootFile->Get(
"Material/LinearityEtaBins")));
1893 std::unique_ptr<TList>(checked_own_cast<TList*>(
1894 rootFile->Get(
"Material/Linearity_Cluster_ConfigA"))));
1896 std::unique_ptr<TList>(checked_own_cast<TList*>(
1897 rootFile->Get(
"Material/Linearity_Cluster_ConfigCpDp"))));
1899 std::unique_ptr<TList>(checked_own_cast<TList*>(
1900 rootFile->Get(
"Material/Linearity_Cluster_ConfigEpLp"))));
1902 std::unique_ptr<TList>(checked_own_cast<TList*>(
1903 rootFile->Get(
"Material/Linearity_Cluster_ConfigFpMX"))));
1905 std::unique_ptr<TList>(checked_own_cast<TList*>(
1906 rootFile->Get(
"Material/Linearity_Cluster_ConfigGp"))));
1918 rootFile->Get(
"Material_rel21/electronBias_ConfigA")));
1920 rootFile->Get(
"Material_rel21/electronBias_ConfigEpLp")));
1922 rootFile->Get(
"Material_rel21/electronBias_ConfigFpMX")));
1924 rootFile->Get(
"Material_rel21/electronBias_ConfigN")));
1926 rootFile->Get(
"Material_rel21/electronBias_ConfigIBL")));
1928 rootFile->Get(
"Material_rel21/electronBias_ConfigPP0")));
1930 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigA")));
1932 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigEpLp")));
1934 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigFpMX")));
1936 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigN")));
1938 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigIBL")));
1940 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigPP0")));
1942 rootFile->Get(
"Material_rel21/convertedBias_ConfigA")));
1944 rootFile->Get(
"Material_rel21/convertedBias_ConfigEpLp")));
1946 rootFile->Get(
"Material_rel21/convertedBias_ConfigFpMX")));
1948 rootFile->Get(
"Material_rel21/convertedBias_ConfigN")));
1950 rootFile->Get(
"Material_rel21/convertedBias_ConfigIBL")));
1952 rootFile->Get(
"Material_rel21/convertedBias_ConfigPP0")));
1965 rootFile->Get(
"FastSim/es2015/el_scale_full_fast_peak_gaussian")));
1967 "FastSim/es2015/ph_unconv_scale_full_fast_peak_gaussian")));
1969 rootFile->Get(
"FastSim/es2015/ph_conv_scale_full_fast_peak_gaussian")));
1978 rootFile->Get(
"FastSim/es2017/el_scale_full_fast_peak_gaussian")));
1980 "FastSim/es2017/ph_unconv_scale_full_fast_peak_gaussian")));
1982 rootFile->Get(
"FastSim/es2017/ph_conv_scale_full_fast_peak_gaussian")));
1988 rootFile->Get(
"FastSim/es2017_v1/scale_Af2ToG4_elec_rel21")));
1991 rootFile->Get(
"FastSim/es2017_v1/scale_Af2ToG4_unco_rel21")));
1993 rootFile->Get(
"FastSim/es2017_v1/scale_Af2ToG4_conv_rel21")));
2000 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/scale_AF3ToG4_elec_rel22")));
2003 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/scale_AF3ToG4_unco_rel22")));
2005 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/scale_AF3ToG4_conv_rel22")));
2009 rootFile->Get(
"FastSim/es2024_Run3_v0/scale_AF3ToG4_elec_mc23")));
2012 rootFile->Get(
"FastSim/es2024_Run3_v0/scale_AF3ToG4_unco_mc23")));
2014 rootFile->Get(
"FastSim/es2024_Run3_v0/scale_AF3ToG4_conv_mc23")));
2017 rootFile->Get(
"FastSim/es2024_Run3_v0/adhoc_scale_AF3ToG4_elec_mc23_1p3_1p35")));
2019 rootFile->Get(
"FastSim/es2024_Run3_v0/adhoc_scale_AF3ToG4_elec_mc23_1p3_1p35")));
2021 rootFile->Get(
"FastSim/es2024_Run3_v0/adhoc_scale_AF3ToG4_unconv_mc23_1p3_1p35")));
2025 checked_own_cast<TH1*>(
rootFile->Get(
"FastSim/hG4OverAF")));
2028 checked_own_cast<TH1*>(
rootFile->Get(
"FastSim/hG4OverFS")));
2047 checked_own_cast<TH1*>(
rootFile->Get(
"Leakage/LeakageDiffConverted")));
2049 rootFile->Get(
"Leakage/LeakageDiffUnconverted")));
2054 rootFile->Get(
"Leakage/es2017_summer/LeakageDiffConverted")));
2056 rootFile->Get(
"Leakage/es2017_summer/LeakageDiffUnconverted")));
2059 rootFile->Get(
"Leakage/es2023_R22_Run2_v0/LeakageDiffConverted")));
2061 rootFile->Get(
"Leakage/es2023_R22_Run2_v0/LeakageDiffUnconverted")));
2063 rootFile->Get(
"Leakage/es2023_R22_Run2_v0/LeakageDiffElectron")));
2070 ATH_MSG_INFO(
"No leakage systematic uncertainty for ES model "
2076 checked_own_cast<TH1*>(
rootFile->Get(
"ZeeEnergyProfiles/p2MC")));
2080 rootFile->Get(
"ZeeMeanET/es2024_Run3_v0/MC_eta_vs_et_profiled")));
2085 rootFile->Get(
"ZeeMeanET/MC_eta_vs_et_profiled")));
2099 double correctedMomentum =
momentum;
2100 double aeta = std::abs(trk_eta);
2111 correctedMomentum *= 1. + corr * varSF;
2114 return correctedMomentum;
2126 double fullyCorrectedEnergy =
energy;
2134 fullyCorrectedEnergy =
2143 return fullyCorrectedEnergy;
2154 energyS2, eraw, ptype, scaleVar, varSF);
2155 fullyCorrectedEnergy /= (1 +
alpha);
2159 int ieta_k =
m_zeeFwdk->GetXaxis()->FindFixBin(cl_eta);
2160 double value_k =
m_zeeFwdk->GetBinContent(ieta_k);
2161 int ieta_b =
m_zeeFwdb->GetXaxis()->FindFixBin(cl_eta);
2162 double value_b =
m_zeeFwdb->GetBinContent(ieta_b);
2163 fullyCorrectedEnergy =
2164 value_k * fullyCorrectedEnergy +
2178 fullyCorrectedEnergy, energyS2,
2179 eraw, ptype, scaleVar, varSF);
2182 fullyCorrectedEnergy *= (1 + deltaAlpha);
2202 fullyCorrectedEnergy/cosh(cl_eta) < 20
e3) {
2210 if (std::abs(cl_eta) >= 1.3 and std::abs(cl_eta) <= 1.35) {
2213 fullyCorrectedEnergy / cosh(cl_eta) / 1000.,
2218 fullyCorrectedEnergy / cosh(cl_eta) / 1000.,
2223 fullyCorrectedEnergy / cosh(cl_eta) / 1000.,
2226 daAF2 = sqrt(daAF2*daAF2 + 0.001*0.001)*
sign;
2232 fullyCorrectedEnergy *= (1 + daAF2);
2237 fullyCorrectedEnergy *=
2244 return fullyCorrectedEnergy;
2256 long int runnumber,
double cl_eta,
double cl_etaS2,
double cl_etaCalo,
2266 double meanE = meanET * std::cosh(cl_eta);
2267 double Et =
energy / std::cosh(cl_eta);
2276 double daPS, daS12, linPS, linS12, linEacc, linPS_40_elec, linEacc_40_elec,
2278 daPS = daS12 = linPS = linS12 = linEacc = linPS_40_elec = linEacc_40_elec =
2279 linS12_40_elec = 0.;
2281 double daE4 = 0., linE4 = 0.;
2311 double daWtots1 = 0.;
2332 daWtots1 = -daWtots1;
2364 "es2023_R22_Run2_v0 PS non-linearity before Acc correction: "
2366 linPS = linPS - linEacc * linPS_40_elec / linEacc_40_elec;
2367 ATH_MSG_DEBUG(
"es2023_R22_Run2_v0 PS non-linearity after Acc correction: "
2404 "es2023_R22_Run2_v0 S12 non-linearity before Acc correction: "
2406 linS12 = linS12 - linEacc * linS12_40_elec / linEacc_40_elec;
2408 "es2023_R22_Run2_v0 S12 non-linearity after Acc correction: "
2415 double daMatID, daMatCryo, daMatCalo;
2416 daMatID = daMatCryo = daMatCalo = 0;
2475 double daL1GainSwitch = 0.;
2492 daL1GainSwitch = -daL1GainSwitch;
2497 double daL2GainSwitch = 0.;
2498 double daL2MediumGainSwitch = 0.;
2499 double daL2LowGainSwitch = 0.;
2507 if (!(std::abs(cl_eta) < 1.52 && std::abs(cl_eta) > 1.37) &&
2508 std::abs(cl_eta) < 2.4) {
2510 energyS2 /
GeV, ptype);
2515 daL2GainSwitch = evar /
energy - eref / meanE;
2517 daL2GainSwitch = -daL2GainSwitch;
2523 daL2GainSwitch *= -1;
2527 "trying to compute gain systematic, but no tool for doing it has "
2528 "been instantiated, setting sys to 0");
2529 daL2GainSwitch = 0.;
2543 daL2MediumGainSwitch *= -1;
2544 ATH_MSG_DEBUG(
"L2 gain Medium uncertainty: " << daL2MediumGainSwitch);
2547 "trying to compute gain systematic, but no tool for doing it has "
2548 "been instantiated, setting sys to 0");
2549 daL2MediumGainSwitch = 0.;
2561 daL2MediumGainSwitch *= -1;
2562 ATH_MSG_DEBUG(
"L2 gain Medium uncertainty extraplation: " << daL2MediumGainSwitch);
2565 "trying to compute gain systematic, but no tool for doing it has "
2566 "been instantiated, setting sys to 0");
2567 daL2MediumGainSwitch = 0.;
2581 daL2LowGainSwitch *= -1;
2582 ATH_MSG_DEBUG(
"L2 gain Low uncertainty: " << daL2LowGainSwitch);
2585 "trying to compute Low gain systematic, but no tool for doing it has "
2586 "been instantiated, setting sys to 0");
2587 daL2LowGainSwitch = 0.;
2599 daL2LowGainSwitch *= -1;
2600 ATH_MSG_DEBUG(
"L2 gain Low uncertainty extraplation: " << daL2LowGainSwitch);
2603 "trying to compute gain systematic, but no tool for doing it has "
2604 "been instantiated, setting sys to 0");
2605 daL2LowGainSwitch = 0.;
2626 if (std::abs(cl_eta) < 1.5)
2647 const TH2*
histo =
nullptr;
2657 const double aeta = std::abs(cl_eta);
2658 dapp0 = getValueHistAt(*
histo, aeta,
energy /
GeV / cosh(cl_eta),
false,
2665 if (aeta > 1.5 and aeta < 2.0) {
2667 }
else if (aeta >= 2.0 and aeta <= 2.5) {
2679 double daTopoCluster = 0;
2692 double Et =
energy / cosh(cl_eta);
2693 double Et0 = 10000.;
2697 daTopoCluster = 1
e-3 * (1. / (Et / Et0) - 1. / (meanET / Et0));
2699 daTopoCluster = -1
e-3 * (1. / (Et / Et0) - 1. / (meanET / Et0));
2705 double daADCLin = 0;
2713 daADCLin = 0.3 * corr;
2716 "trying to compute ADC correction systematic, but no tool for doing "
2717 "it has been instantiated, setting sys to 0");
2725 double alphaTot = alphaZee;
2726 alphaTot += daE4 * linE4;
2727 alphaTot += daPS * linPS;
2728 alphaTot += daS12 * linS12;
2729 alphaTot += daMatID + daMatCryo + daMatCalo;
2730 alphaTot += daLeakage;
2731 alphaTot += daL1GainSwitch;
2732 alphaTot += daL2GainSwitch;
2733 alphaTot += daL2MediumGainSwitch;
2734 alphaTot += daL2LowGainSwitch;
2735 alphaTot += daConvSyst;
2736 alphaTot += daPedestal;
2737 alphaTot += daWtots1;
2739 alphaTot += daTopoCluster;
2740 alphaTot += daADCLin;
2750 long int runnumber,
double cl_eta,
double cl_etaS2,
double cl_etaCalo,
double energy,
2757 double alphaVar = 0.;
2765 eraw, ptype,
var, varSF) -
2774 energyS2, eraw, ptype,
ivar, varSF) -
2778 alphaVar +=
pow(
v, 2);
2780 alphaVar = sqrt(alphaVar);
2788 energyS2, eraw, ptype,
ivar, varSF) -
2792 alphaVar +=
pow(
v, 2);
2794 alphaVar = -sqrt(alphaVar);
2806 energyS2, eraw, ptype,
ivar, varSF) -
2808 alphaVar +=
pow(
v, 2);
2810 alphaVar = sqrt(alphaVar);
2822 energyS2, eraw, ptype,
ivar, varSF) -
2824 alphaVar +=
pow(
v, 2);
2826 alphaVar = -sqrt(alphaVar);
2839 if (std::abs(cl_eta) >= 2.47)
2853 double aeta = std::abs(cl_eta);
2854 double sampling = 0.;
2859 else if (aeta < 1.37)
2860 sampling = 0.036 + 0.130 * aeta;
2862 else if (aeta < 1.52)
2865 else if (aeta < 2.0)
2866 sampling = 0.85 - 0.36 * aeta;
2868 else if (aeta < 2.3)
2871 else if (aeta < 2.5)
2872 sampling = -1.05 + 0.52 * aeta;
2889 double aeta = std::abs(cl_eta);
2892 double noise37[25] = {0.27, 0.27, 0.27, 0.27, 0.27, 0.26, 0.25, 0.23, 0.21,
2893 0.19, 0.17, 0.16, 0.15, 0.14, 0.27, 0.23, 0.17, 0.15,
2894 0.13, 0.10, 0.07, 0.06, 0.05, 0.04, 0.03};
2896 int ieta = (
int)(aeta / 0.1);
2898 if (ieta >= 0 && ieta < 25)
2899 noise = noise37[ieta] * cosh(cl_eta);
2908 double aeta = std::abs(cl_eta);
2914 else if (aeta < 1.75)
2917 else if (aeta < 2.5)
2918 cst = 0.0055 * (2.69 - aeta);
2944 std::as_const(*m_peakResData).GetXaxis()->FindBin(cl_eta));
2952 std::as_const(*m_peakResMC).GetXaxis()->FindBin(cl_eta));
2958 double cl_eta)
const {
2970 sqrt(2 * (resData * resData - resMC * resMC) /
mz /
mz + cmc * cmc);
2972 sqrt(2 * (resData * resData - resMC * resMC * smpup * smpup) /
mz /
mz +
2975 sqrt(2 * (resData * resData - resMC * resMC * smpdo * smpdo) /
mz /
mz +
2978 double errdown = std::abs(central - vardown);
2979 double errup = std::abs(central - varup);
2981 return .5 * (errup + errdown);
2994 int eg_resolution_ptype;
2996 eg_resolution_ptype = 0;
2998 eg_resolution_ptype = 1;
3000 eg_resolution_ptype = 2;
3007 isys = 0xFFFF & ~0x200;
3071 double resolution_error;
3072 double resolution_error_up;
3073 double resolution_error_down;
3076 resolution, resolution_error, resolution_error_up,
3077 resolution_error_down, resType,
3086 resolution_error = resolution_error_up /
resolution;
3088 resolution_error = resolution_error_down /
resolution;
3091 return resolution_error;
3097 double cl_eta,
double& errUp,
3098 double& errDown)
const {
3104 double Cdata_unc = 0.;
3105 if (Cdata_err > Cdata_cor)
3106 Cdata_unc = sqrt(Cdata_err * Cdata_err - Cdata_cor * Cdata_cor);
3107 if (Cdata_unc < 0.001)
3116 double err2 =
fcn_sigma(
energy, Cdata, -Cdata_unc, Smc, 0.) - central;
3117 double err3 =
fcn_sigma(
energy, Cdata, -Cdata_cor, Smc, Smc_err) - central;
3118 double err4 = -err3;
3122 errUp = sqrt(errUp * errUp + err1 * err1);
3124 errUp = sqrt(errUp * errUp + err2 * err2);
3126 errUp = sqrt(errUp * errUp + err3 * err3);
3128 errUp = sqrt(errUp * errUp + err4 * err4);
3136 double energy,
double cl_eta,
double cl_etaCalo,
3139 int eg_resolution_ptype;
3141 eg_resolution_ptype = 0;
3143 eg_resolution_ptype = 1;
3145 eg_resolution_ptype = 2;
3157 const double et =
energy / cosh(cl_eta);
3166 sig2 =
a *
a / energyGeV +
b *
b / energyGeV / energyGeV +
c *
c;
3169 if (withCT and
fast) {
3170 throw std::runtime_error(
3171 "It doesn't make sense to ask resolution fast sim + additional CT."
3172 " The resolution on data is FULL sim resolution + CT");
3175 if (
fast and std::abs(cl_eta) < 2.5) {
3199 double ratio_IQR_full_fast = 1.;
3200 const double ptGeV =
energy / cosh(cl_eta) / 1E3;
3215 bool interpolate_eta =
false;
3216 bool interpolate_pt =
false;
3219 interpolate_pt =
true;
3223 ptGeV,
true,
true,
true,
true,
3224 interpolate_eta, interpolate_pt);
3227 ptGeV,
true,
true,
true,
true,
3228 interpolate_eta, interpolate_pt);
3231 ptGeV,
true,
true,
true,
true,
3232 interpolate_eta, interpolate_pt);
3237 ratio_IQR_full_fast = getValueHistAt(
3240 ratio_IQR_full_fast = getValueHistAt(
3243 ratio_IQR_full_fast = getValueHistAt(
3247 sig2 /= ratio_IQR_full_fast * ratio_IQR_full_fast;
3264 double Cdata_er,
double S,
3272 sigma = sqrt(sigma2);
3287 ATH_MSG_FATAL(
"Trying to compute smearing correction on data");
3296 const double resMC =
3303 ATH_MSG_DEBUG(
"resolution in data: " << resData <<
" in MC: " << resMC);
3307 ptype,
value, resType);
3309 double errUp, errDown;
3322 ATH_MSG_DEBUG(
"resolution in data after systematics: " << resData);
3324 const double sigma2 =
3334 const double sigma = sqrt(sigma2);
3338 const double DeltaE0 =
rng.Gaus(0,
sigma);
3339 const double cor0 = (energyGeV + DeltaE0) / energyGeV;
3342 << cor0 <<
"|" <<
rng.GetSeed());
3357 double aeta = std::abs(eta);
3359 if (aeta < 1.42 || aeta > 1.55)
3362 const int nBoundaries = 18;
3363 double ETBoundaries[nBoundaries] = {0., 5.4, 8.5, 12.9, 16., 20.,
3364 25., 30., 35., 40., 45., 50.,
3365 55., 60., 65., 70., 75., 99999.};
3367 double CalibFactors[nBoundaries - 1] = {
3368 0.884845, 0.898526, 0.902439, 0.91899, 0.925868, 0.929440,
3369 0.948080, 0.943788, 0.96026, 0.955709, 0.964285, 0.95762,
3370 0.970385, 0.963489, 0.968149, 0.970799, 0.961617};
3373 for (
int i = 0;
i < nBoundaries - 1;
i++)
3374 if (ET /
GeV > ETBoundaries[
i] && ET /
GeV <= ETBoundaries[
i + 1])
3377 if (i0 >= 0 && i0 < nBoundaries - 1)
3378 return 1. / CalibFactors[i0];
3387 const double aeta = std::abs(eta);
3400 bool interpolate_eta =
false;
3401 bool interpolate_pt =
false;
3404 interpolate_pt =
true;
3408 true,
true,
true,
true,
3409 interpolate_eta, interpolate_pt));
3412 true,
true,
true,
true,
3413 interpolate_eta, interpolate_pt));
3416 true,
true,
true,
true,
3417 interpolate_eta, interpolate_pt));
3419 throw std::runtime_error(
"particle not valid");
3429 throw std::runtime_error(
"particle not valid");
3435 std::as_const(*m_G4OverAFII_electron).GetXaxis()->FindBin(eta));
3443 double aeta = std::abs(eta);
3444 if (aeta < 3.3 || aeta > 4.9)
3448 std::as_const(*m_G4OverFrSh).GetXaxis()->FindBin(aeta));
3455 double varSF)
const {
3463 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(eta);
3472 int ieta = std::as_const(*m_zeeNom_data2023).GetXaxis()->FindBin(eta);
3478 int ieta = std::as_const(*m_zeeNom_data2022).GetXaxis()->FindBin(eta);
3487 runnumber <= 341649 && runnumber >= 324320) {
3488 int ieta = std::as_const(*m_zeeNom_data2017).GetXaxis()->FindBin(eta);
3495 int ieta = std::as_const(*m_zeeNom_data2016).GetXaxis()->FindBin(eta);
3504 runnumber < 322817 && runnumber >= 297000) {
3505 int ieta = std::as_const(*m_zeeNom_data2016).GetXaxis()->FindBin(eta);
3511 int ieta = std::as_const(*m_zeeNom_data2016).GetXaxis()->FindBin(eta);
3516 int ieta = std::as_const(*m_zeeNom_data2015).GetXaxis()->FindBin(eta);
3521 int ieta = std::as_const(*m_zeeNom_data2018).GetXaxis()->FindBin(eta);
3526 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(eta);
3544 int ieta = std::as_const(*m_zeeNom_data2015).GetXaxis()->FindBin(eta);
3571 else if (eta > -3.2)
3579 const double uA2MeV_correction =
3593 if (eta < -2.5 and eta > -3.2)
3610 else if (eta > -3.2)
3669 double stat_error =
h->GetBinError(
h->FindFixBin(eta));
3671 stat_error = stat_error / sqrt(
h->GetNbinsX());
3698 value -= 0.4E-2 * varSF;
3701 int ieta = std::as_const(*m_zeePhys).GetXaxis()->FindBin(eta);
3706 int ieta = std::as_const(*m_zeePhys).GetXaxis()->FindBin(eta);
3720 const double aeta = std::abs(eta);
3725 }
else if (aeta > 1.45 and aeta < 3.2) {
3736 const double aeta = std::abs(eta);
3739 if (aeta > 2.5 and aeta < 3.2) {
3752 value += qsum(0.05
E-2, 0.02
E-2) *
3759 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(eta);
3767 ieta = std::as_const(*m_zeePhys).GetXaxis()->FindBin(eta);
3781 const double aeta = std::abs(eta);
3782 double data_mc_difference = 0.;
3785 if ((aeta > 1.72) or (aeta < 1.4)) {
3790 data_mc_difference = 15
E-2;
3794 if ((aeta > 1.6) or (aeta < 1.4)) {
3798 else if (aeta < 1.46) {
3799 data_mc_difference = 1
E-2;
3801 else if (aeta < 1.52) {
3802 data_mc_difference = 3
E-2;
3805 data_mc_difference = 4.3E-2;
3809 const double em_scale = 2.4E-2;
3810 const double mbias = 1
E-2;
3811 const double laser = 4
E-2;
3813 return std::sqrt(data_mc_difference * data_mc_difference +
3814 em_scale * em_scale + mbias * mbias + laser * laser);
3838 double ETGeV =
energy / cosh(cl_eta) / 1E3;
3839 double wstot_pT_data_p0 = 0.;
3840 double wstot_pT_data_p1 = 0.;
3841 double wstot_pT_MC_p0 = 0.;
3842 double wstot_pT_MC_p1 = 0.;
3844 double wstot_40_data =
3847 double wstot_40_MC =
3870 double wstot_pT_data = 0.;
3871 double wstot_pT_MC = 0.;
3883 wstot_pT_data = wstot_pT_data_p0 + wstot_pT_data_p1 / sqrt(ETGeV);
3884 wstot_pT_MC = wstot_pT_MC_p0 + wstot_pT_MC_p1 / sqrt(ETGeV);
3886 value = 2 *
A / 91.2 * (wstot_pT_data - wstot_40_data) -
3887 2 * B / 91.2 * (wstot_pT_MC - wstot_40_MC);
3897 double varSF)
const {
3905 double nearestEta = cl_eta;
3935 const double aeta = std::abs(cl_eta);
3943 else if (iLayer == 1) {
3970 const double aeta = std::abs(cl_eta);
3972 if (aeta >= 1.37 and aeta < 2.5) {
3998 const double aeta = std::abs(cl_eta);
4000 if (aeta >= 1.37 and aeta < 2.5) {
4026 const double aeta = std::abs(cl_eta);
4027 if (aeta >= 2.4 and aeta < 2.5) {
4039 const double aeta = std::abs(cl_eta);
4043 else if (aeta <= 1.5) {
4046 else if (aeta <= 2.5) {
4052 return value * varSF;
4058 const double aeta = std::abs(cl_eta);
4078 const int ieta =
axis->FindFixBin(aeta) - 1;
4079 if (ieta >= 0 and ieta < graphs->GetSize()) {
4081 const double ETMeV =
energy / cosh(cl_eta);
4082 value =
static_cast<TF1*
>(
graphs->At(ieta))->Eval(ETMeV);
4084 const double ETGeV =
energy / cosh(cl_eta) / 1E3;
4085 value =
static_cast<TGraph*
>(
graphs->At(ieta))->Eval(ETGeV);
4093 int iLayer,
double cl_eta,
double energy,
4098 if (iLayer == 6 && std::abs(cl_eta) >= 2.47)
4100 double aeta = std::abs(cl_eta);
4101 double ET =
energy / cosh(cl_eta);
4111 if (iLayer == 0 && aeta >= 1.82)
4119 if (ieta >= 0 and ieta < m_psElectronGraphs->GetSize()) {
4122 }
else if (iLayer == 1) {
4125 if (ieta >= 0 and ieta < m_s12ElectronGraphs->GetSize()) {
4128 }
else if (iLayer == 6) {
4131 if (ieta >= 0 && ieta < m_EaccElectronGraphs->GetSize()) {
4141 if (ieta >= 0 and ieta < m_psUnconvertedGraphs->GetSize()) {
4145 }
else if (iLayer == 1) {
4148 if (ieta >= 0 and ieta < m_s12UnconvertedGraphs->GetSize()) {
4151 }
else if (iLayer == 6) {
4154 if (ieta >= 0 && ieta < m_EaccUnconvertedGraphs->GetSize()) {
4164 if (ieta >= 0 and ieta < m_psConvertedGraphs->GetSize()) {
4168 }
else if (iLayer == 1) {
4171 if (ieta >= 0 and ieta < m_s12ConvertedGraphs->GetSize()) {
4174 }
else if (iLayer == 6) {
4177 if (ieta >= 0 && ieta < m_EaccConvertedGraphs->GetSize()) {
4178 if (ET < 10000. && (aeta < 1.2 || (aeta >= 1.59 && aeta < 1.73))) {
4210 double aeta = std::abs(cl_eta);
4313 double varSF)
const {
4323 if (std::abs(cl_eta) < 2.)
4337 double DAlphaDXID, DAlphaDXCryo, DAlphaDXCalo, DAlphaDXGp;
4338 DAlphaDXID = DAlphaDXCryo = DAlphaDXCalo = DAlphaDXGp = 0;
4366 value = -DAlphaDXGp;
4393 value = DeltaX * (DAlphaDXID - DAlphaDXCryo);
4395 value = DeltaX * DAlphaDXCryo;
4397 value = DeltaX * DAlphaDXCalo;
4399 return value * varSF;
4404 double cl_eta,
double ET)
const {
4459 double aeta = std::abs(cl_eta);
4460 int ieta = hmat->GetXaxis()->FindBin(aeta);
4462 int ipt = hmat->GetYaxis()->FindBin(ET);
4463 double ptBin = hmat->GetYaxis()->GetBinCenter(ipt);
4471 pt2 = hmat->GetYaxis()->GetBinCenter(i2);
4475 pt1 = hmat->GetYaxis()->GetBinCenter(i1);
4479 int nbins = hmat->GetYaxis()->GetNbins();
4481 if (i1 >= 1 && i1 <
nbins) {
4482 double v1 = hmat->GetBinContent(ieta, i1);
4483 double v2 = hmat->GetBinContent(ieta, i2);
4484 value = (v1 * (pt2 - ET) +
v2 * (ET - pt1)) / (pt2 - pt1);
4490 value = hmat->GetBinContent(ieta, ipt);
4500 double varSF)
const {
4503 double ET =
energy / cosh(cl_eta) /
GeV;
4520 if (std::abs(cl_eta) < 2.)
4528 if (std::abs(cl_eta) > 1.52 &&
4552 double DAlphaDXGp, DAlphaDXID, DAlphaDXCryo, DAlphaDXCalo;
4576 ->GetFunction(
"fNonLin")
4579 ->GetFunction(
"fNonLin")
4582 ->GetFunction(
"fNonLin")
4585 ->GetFunction(
"fNonLin")
4596 value = -DAlphaDXGp;
4633 value = DeltaX * (DAlphaDXID - DAlphaDXCryo);
4635 value = DeltaX * DAlphaDXCryo;
4637 value = DeltaX * DAlphaDXCalo;
4639 return value * varSF;
4647 double aeta = std::abs(cl_eta);
4674 return alpha * varSF;
4695 double aeta = std::abs(cl_eta);
4711 double etGeV =
et /
GeV;
4712 double alpha = 0, dalpha = 0;
4726 std::pair<double, double>
p =
4755 return alpha * varSF;
4759 const TH1&
hh,
double aeta,
double et,
bool useInterp)
const {
4763 int ibeta =
hh.GetXaxis()->FindBin(aeta);
4764 int nbpT =
hh.GetYaxis()->GetNbins();
4765 int ibpT =
hh.GetYaxis()->FindBin(
et);
4766 bool isOUFlow =
false;
4770 }
else if (ibpT == 0) {
4775 double pTp =
hh.GetYaxis()->GetBinCenter(ibpT), pTn = pTp;
4776 if (!useInterp || isOUFlow || (ibpT == nbpT &&
et > pTp) ||
4777 (ibpT == 1 &&
et < pTp))
4778 alpha =
hh.GetBinContent(ibeta, ibpT);
4780 int jp = ibpT, jn = ibpT - 1;
4785 pTp =
hh.GetYaxis()->GetBinCenter(jp);
4787 pTn =
hh.GetYaxis()->GetBinCenter(jn);
4789 double aPos =
hh.GetBinContent(ibeta, jp);
4790 double aNeg =
hh.GetBinContent(ibeta, jn);
4791 alpha = (aPos * (
et - pTn) + aNeg * (pTp -
et)) / (pTp - pTn);
4793 << aNeg <<
" alpha = " <<
alpha);
4795 double dalpha =
hh.GetBinError(ibeta, ibpT);
4797 return std::make_pair(
alpha, dalpha);
4805 double aeta = std::abs(cl_eta);
4808 double ET =
energy / std::cosh(cl_eta);
4870 return alpha * varSF;
4874 const TH2& conv_hist,
double aeta,
double ET) {
4877 int ieta = conv_hist.GetXaxis()->FindBin(aeta);
4879 int ipt = conv_hist.GetYaxis()->FindBin(ET);
4880 double ptBin = conv_hist.GetYaxis()->GetBinCenter(ipt);
4888 pt2 = conv_hist.GetYaxis()->GetBinCenter(i2);
4892 pt1 = conv_hist.GetYaxis()->GetBinCenter(i1);
4896 int nbins = conv_hist.GetYaxis()->GetNbins();
4898 if (i1 >= 1 && i1 <
nbins) {
4899 double v1 = conv_hist.GetBinContent(ieta, i1);
4900 double v2 = conv_hist.GetBinContent(ieta, i2);
4901 value = (v1 * (pt2 - ET) +
v2 * (ET - pt1)) / (pt2 - pt1);
4907 value = conv_hist.GetBinContent(ieta, ipt);
4914 double cl_eta,
double energy,
double eraw,
4921 const double delta =
4958 alpha = pedestal / eraw;
4962 return alpha * varSF;
4969 double pedestal = 0.;
4970 double aeta = std::abs(cl_eta);
4977 else if (iLayer == 1)
4979 else if (iLayer == 2)
4981 else if (iLayer == 3)
4987 else if (iLayer == 2)
4988 pedestal *= 15. / 21.;
4995 return pedestal * varSF;
5000 return std::abs(cl_eta) >= 1.35 && std::abs(cl_eta) <= 1.55;
5005 double newEta = cl_eta;
5010 if (newEta >= 1.35 && newEta <= 1.45)
5012 if (newEta >= 1.45 && newEta <= 1.55)
5015 if (newEta >= -1.55 && newEta <= -1.45)
5017 if (newEta >= -1.45 && newEta <= -1.35)
5052 pileupNoise = sqrt(avgmu) * (60. + 40. *
log(
et / 10000.) /
log(5.));
5059 if (std::abs(eta) < 1.4)
5068 double&
resolution,
double& resolution_error,
double& resolution_error_up,
5069 double& resolution_error_down,
int resol_type,
bool fast)
const {
5084 (pileupNoise * pileupNoise) / (
et *
et);
5087 double_t sum_sigma_resolution2 = 0.;
5088 double sum_deltaDown = 0.;
5089 double sum_deltaUp = 0.;
5091 for (
int isys = 0; isys < 11; isys++) {
5093 if (syst_mask & (1 << isys)) {
5096 double sigma2up = 0.;
5097 double sigma2down = 0.;
5101 double d1 = (smearingZ + esmearingZ) * (smearingZ + esmearingZ) -
5102 smearingZ * smearingZ;
5103 double d2 = smearingZ * smearingZ -
5104 (smearingZ - esmearingZ) * (smearingZ - esmearingZ);
5105 double d = 0.5 * (
d1 +
d2);
5110 std::format(
"sys resolution Zsmearing: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
5116 3, 40000. * cosh(eta), eta, resol_type);
5117 double deltaSigma2 = (1.1 * resolutionZ) * (1.1 * resolutionZ) -
5118 resolutionZ * resolutionZ;
5119 double resolution1 =
5121 sigma2up = (1.1 * resolution1) * (1.1 * resolution1) -
5122 resolution1 * resolution1 - deltaSigma2;
5123 deltaSigma2 = (0.9 * resolutionZ) * (0.9 * resolutionZ) -
5124 resolutionZ * resolutionZ;
5125 sigma2down = (0.9 * resolution1) * (0.9 * resolution1) -
5126 resolution1 * resolution1 - deltaSigma2;
5127 sigma2 = 0.5 * (sigma2up - sigma2down);
5129 std::format(
"sys resolution intrinsic: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
5133 else if (isys == 2) {
5136 sigma2 = sigmaA * sigmaA;
5138 sigma2down = -1. * sigma2;
5140 std::format(
"sys resolution configA ID material: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
5145 else if (isys == 3) {
5146 if (std::abs(eta) < 1.45) {
5149 sigma2 = 0.5 * sigmaM * sigmaM;
5153 sigma2down = -1. * sigma2;
5155 std::format(
"sys resolution presampler-layer1: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
5160 else if (isys == 4) {
5161 if (std::abs(eta) > 1.52 && std::abs(eta) < 1.82) {
5168 sigma2down = -1. * sigma2;
5170 std::format(
"sys resolution barrel-endcap gap: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
5175 else if (isys == 5) {
5178 sigma2 = 0.5 * sigmaEL * sigmaEL;
5180 sigma2down = -1. * sigma2;
5182 std::format(
"sys resolution cryostat area: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
5187 else if (isys == 6) {
5189 double sigmaPileUp = 0.;
5201 sqrt(1.1 * 1.1 - 1.0) *
5203 sigmaPileUp = deltaNoise /
et;
5204 sigmaZ = deltaNoise / 40000.;
5213 double deltaPileupNoise = 100.;
5214 if (std::abs(eta) >= 1.4 && std::abs(eta) < 1.8)
5215 deltaPileupNoise = 200.;
5216 double scaleNcells = 1;
5218 scaleNcells = sqrt(3. / 5.);
5220 sigmaPileUp = deltaPileupNoise * scaleNcells /
et;
5222 deltaPileupNoise / (40000.);
5226 sigma2down = -1. * sigma2;
5231 else if (isys == 7 && std::abs(eta) < 1.5 &&
5249 sigma2 = sigmaE * sigmaE;
5251 sigma2down = -1. * sigma2;
5253 std::format(
"sys resolution ibl material: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
5257 else if (isys == 8 && std::abs(eta) > 1.5 &&
5276 sigma2 = 2.3 * sigmaE * sigmaE;
5278 sigma2down = -1. * sigma2;
5280 std::format(
"sys resolution pp0 material: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
5286 else if (isys == 9 &&
5289 const double ptGeV =
et / 1
e3;
5290 bool interpolate_eta =
false;
5291 bool interpolate_pt =
false;
5294 interpolate_pt =
true;
5298 true,
true,
true,
true,
5299 interpolate_eta, interpolate_pt);
5300 if (std::abs(eta)>=1.3 and std::abs(eta)<=1.35 and
5304 ptGeV,
true,
true, interpolate_pt), 2);
5308 ptGeV,
true,
true,
true,
true,
5309 interpolate_eta, interpolate_pt);
5310 if (std::abs(eta)>=1.3 and std::abs(eta)<=1.35 and
5313 ptGeV,
true,
true, interpolate_pt), 2);
5317 ptGeV,
true,
true,
true,
true,
5318 interpolate_eta, interpolate_pt);
5319 if (std::abs(eta)>=1.3 and std::abs(eta)<=1.35 and
5322 ptGeV,
true,
true, interpolate_pt), 2);
5324 sigma2up = -1. * sigma2;
5326 sigma2down = sigma2;
5331 double d1 = (smearingZ + esmearingOFC) * (smearingZ + esmearingOFC) -
5332 smearingZ * smearingZ;
5333 double d2 = smearingZ * smearingZ -
5334 (smearingZ - esmearingOFC) * (smearingZ - esmearingOFC);
5335 double d = 0.5 * (
d1 +
d2);
5356 if ((resolution2 + sigma2up) > 0.)
5357 rr1 = sqrt(resolution2 + sigma2up);
5359 if ((resolution2 + sigma2down) > 0.)
5360 rr2 = sqrt(resolution2 +
5362 double deltaSigma_sys;
5368 sum_sigma_resolution2 += deltaSigma_sys * deltaSigma_sys;
5370 if ((resolution2 + sigma2up) > 0.)
5371 rr1 = sqrt(resolution2 + sigma2up);
5377 if ((resolution2 + sigma2down) > 0.)
5378 rr2 = sqrt(resolution2 + sigma2down);
5382 ATH_MSG_VERBOSE(
"relative resolution change Down " << deltaSigmaDown);
5384 sum_deltaUp += deltaSigmaUp;
5385 sum_deltaDown += deltaSigmaDown;
5390 resolution_error = sqrt(sum_sigma_resolution2) *
5393 resolution_error_up = sum_deltaUp *
resolution;
5394 resolution_error_down = sum_deltaDown *
resolution;
5398 <<
" Resolution Error (MeV): " << resolution_error <<
" down "
5399 << resolution_error_down <<
" up " << resolution_error_up
5400 <<
" Z smearing " << smearingZ <<
" +- " << esmearingZ
5401 <<
" using mask " << syst_mask);
5412 return "topoClusterThresUp";
5414 return "topoClusterThresDown";
5416 return "MomentumUp";
5418 return "MomentumDown";
5422 return "ZeeStatDown";
5426 return "ZeeSystDown";
5430 return "ZeePhysDown";
5434 return "ZeeAllDown";
5436 return "LArCalibUp";
5438 return "LArCalibDown";
5440 return "LArUnconvCalibUp";
5442 return "LArUnconvCalibDown";
5444 return "LArElecCalibUp";
5446 return "LArElecCalibDown";
5448 return "LArCalibExtra2015PreUp";
5450 return "LArCalibExtra2015PreDown";
5452 return "LArElecUnconvUp";
5454 return "LArElecUnconvDown";
5472 return "S12ExtraLastEtaBinRun2Up";
5474 return "S12ExtraLastEtaBinRun2Down";
5482 return "MatCryoDown";
5486 return "MatCaloDown";
5490 return "L1GainDown";
5494 return "L2GainDown";
5496 return "L2LowGainDown";
5498 return "L2LowGainUp";
5500 return "L2MediumGainDown";
5502 return "L2MediumGainUp";
5506 return "ADCLinDown";
5508 return "LeakageElecUp";
5510 return "LeakageElecDown";
5512 return "ConvRecoUp";
5514 return "ConvRecoDown";
5520 return "LeakageUnconvUp";
5522 return "LeakageUnconvDown";
5524 return "LeakageConvUp";
5526 return "LeakageConvDown";
5528 return "ConvEfficiencyUp";
5530 return "ConvEfficiencyDown";
5532 return "ConvFakeRateUp";
5534 return "ConvFakeRateDown";
5536 return "ConvRadiusUp";
5538 return "ConvRadiusDown";
5540 return "PedestalUp";
5542 return "PedestalDown";
5548 return "AllCorrelatedUp";
5550 return "AllCorrelatedDown";
5552 return "LArTemperature2015PreUp";
5554 return "LArTemperature2015PreDown";
5556 return "LArTemperature2016PreUp";
5558 return "LArTemperature2016PreDown";
5560 return "E4ScintillatorUp";
5562 return "E4ScintillatorDown";
5566 return "MatPP0Down";
5570 return "Wtots1Down";
5572 return "LastScaleVariation";
5578 return "EXTRARUN3PREUp";
5580 return "EXTRARUN3PREDown";
5582 return "PSEXTRARUN3Up";
5584 return "PSEXTRARUN3Down";
5586 return "S12EXTRARUN3Up";
5588 return "S12EXTRARUN3Down";
5590 return "L2MediumGainEXTRARUN3Up";
5592 return "L2MediumGainEXTRARUN3Down";
5594 return "L2LowGainEXTRARUN3Up";
5596 return "L2LowGainEXTRARUN3Down";
5606 return "Resolution::None";
5608 return "Resolution::Nominal";
5610 return "Resolution::AllDown";
5612 return "Resolution::AllUp";
5614 return "Resolution::ZSmearingUp";
5616 return "Resolution::ZSmearingDown";
5618 return "Resolution::SamplingTermUp";
5620 return "Resolution::SamplingTermDown";
5622 return "Resolution::MaterialUp";
5624 return "Resolution::MaterialDown";
5626 return "Resolution::MaterialUp";
5628 return "Resolution::MaterialDown";
5630 return "Resolution::MaterialUp";
5632 return "Resolution::MaterialDown";
5634 return "Resolution::MaterialUp";
5636 return "Resolution::MaterialDown";
5638 return "Resolution::PileUpUp";
5640 return "Resolution::PileUpDown";
5642 return "Resolution::MaterialPP0Up";
5644 return "Resolution::MaterialPP0Down";
5646 return "Resolution::MaterialIBLUp";
5648 return "Resolution::MaterialIBLDown";
5650 return "Resolution::afUp";
5652 return "Resolution::afDown";
5654 return "Resolution::OFCUp";
5656 return "Resolution::OFCDown";
5658 return "LastResolutionVariation";
5660 return "Resolution::Unknown";
5665 const auto ieta = std::as_const(*m_zeeSyst).GetXaxis()->FindFixBin(eta);
5666 auto value_histo =
m_zeeSyst->GetBinContent(ieta);
5672 const auto ieta = std::as_const(*m_zeeSystOFC).GetXaxis()->FindFixBin(eta);
5679 return *std::as_const(*m_zeeNom).GetXaxis();