20 #include "TGraphErrors.h"
28 #include <boost/format.hpp>
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) {
85 if (use_lastbin_overflow and
histo.IsBinOverflow(
bin)) {
88 if (use_firstbin_underflow and
histo.IsBinUnderflow(
bin)) {
94 double getValueHistAt(
const TH2&
histo,
double xvalue,
double yvalue,
95 bool use_lastbin_x_overflow =
false,
96 bool use_lastbin_y_overflow =
false,
97 bool use_fistbin_x_underflow =
false,
98 bool use_firstbin_y_underflow =
false) {
99 int xbin =
histo.GetXaxis()->FindFixBin(xvalue);
100 if (use_lastbin_x_overflow and xbin ==
histo.GetXaxis()->GetNbins() + 1) {
101 xbin =
histo.GetXaxis()->GetNbins();
103 if (use_fistbin_x_underflow and xbin == 0) {
106 int ybin =
histo.GetYaxis()->FindFixBin(yvalue);
107 if (use_lastbin_y_overflow and ybin ==
histo.GetYaxis()->GetNbins() + 1) {
108 ybin =
histo.GetYaxis()->GetNbins();
110 if (use_firstbin_y_underflow and ybin == 0) {
113 return histo.GetBinContent(xbin, ybin);
122 :
asg::AsgMessaging(
"egammaEnergyCorrectionTool"),
125 "egammaEnergyCorrectionData.root")),
130 throw std::runtime_error(
"cannot find file");
183 const std::unique_ptr<char[]>
fname(
185 std::unique_ptr<TFile>
rootFile(TFile::Open(
fname.get(),
"READ"));
204 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2010/alphaPS_errTot")));
206 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2010/alphaS12_errTot")));
207 m_zeeNom.reset(checked_own_cast<TH1*>(
208 rootFile->Get(
"Scales/es2010/alphaZee_errStat")));
210 rootFile->Get(
"Scales/es2010/alphaZee_errSyst")));
211 m_resNom.reset(checked_own_cast<TH1*>(
212 rootFile->Get(
"Resolution/es2010/ctZee_errStat")));
214 rootFile->Get(
"Resolution/es2010/ctZee_errSyst")));
216 checked_own_cast<TH1*>(
rootFile->Get(
"Resolution/es2010/resZee_Data")));
218 checked_own_cast<TH1*>(
rootFile->Get(
"Resolution/es2010/resZee_MC")));
227 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011c/alphaPS_errTot")));
229 rootFile->Get(
"Scales/es2011c/alphaS12_errTot")));
230 m_zeeNom.reset(checked_own_cast<TH1*>(
231 rootFile->Get(
"Scales/es2011c/alphaZee_errStat")));
233 rootFile->Get(
"Scales/es2011c/alphaZee_errSyst")));
234 m_resNom.reset(checked_own_cast<TH1*>(
235 rootFile->Get(
"Resolution/es2011c/ctZee_errStat")));
237 rootFile->Get(
"Resolution/es2011c/ctZee_errSyst")));
239 rootFile->Get(
"Resolution/es2011c/resZee_Data")));
241 checked_own_cast<TH1*>(
rootFile->Get(
"Resolution/es2011c/resZee_MC")));
254 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011d/alphaPS_uncor")));
256 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011d/dalphaPS_cor")));
258 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011d/alphaS12_uncor")));
260 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2011d/dalphaS12_cor")));
262 rootFile->Get(
"Scales/es2011d/momentum_errSyst")));
266 m_zeeNom.reset(checked_own_cast<TH1*>(
267 rootFile->Get(
"Scales/es2011d/alphaZee_errStat")));
269 rootFile->Get(
"Scales/es2011d/alphaZee_errSyst")));
270 m_resNom.reset(checked_own_cast<TH1*>(
271 rootFile->Get(
"Resolution/es2011d/ctZee_errStat")));
273 rootFile->Get(
"Resolution/es2011d/ctZee_errSyst")));
277 m_zeeNom.reset(checked_own_cast<TH1*>(
278 rootFile->Get(
"Scales/es2011dMedium/alphaZee_errStat")));
280 rootFile->Get(
"Scales/es2011dMedium/alphaZee_errSyst")));
282 rootFile->Get(
"Scales/es2011dMedium/alphaZee_errPhys")));
283 m_resNom.reset(checked_own_cast<TH1*>(
284 rootFile->Get(
"Resolution/es2011dMedium/ctZee_errStat")));
286 rootFile->Get(
"Resolution/es2011dMedium/ctZee_errSyst")));
290 m_zeeNom.reset(checked_own_cast<TH1*>(
291 rootFile->Get(
"Scales/es2011dTight/alphaZee_errStat")));
293 rootFile->Get(
"Scales/es2011dTight/alphaZee_errSyst")));
295 rootFile->Get(
"Scales/es2011dTight/alphaZee_errPhys")));
296 m_resNom.reset(checked_own_cast<TH1*>(
297 rootFile->Get(
"Resolution/es2011dTight/ctZee_errStat")));
299 rootFile->Get(
"Resolution/es2011dTight/ctZee_errSyst")));
303 rootFile->Get(
"Pedestals/es2011d/pedestals_l0")));
305 rootFile->Get(
"Pedestals/es2011d/pedestals_l1")));
307 rootFile->Get(
"Pedestals/es2011d/pedestals_l2")));
309 rootFile->Get(
"Pedestals/es2011d/pedestals_l3")));
312 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
315 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
317 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
320 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
322 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
324 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
326 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
329 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
331 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
333 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
336 rootFile->Get(
"Conversions/es2011d/convRadiusMigrations")));
338 rootFile->Get(
"Conversions/es2011d/convFakeRate")));
340 rootFile->Get(
"Conversions/es2011d/convRecoEfficiency")));
346 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
348 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
350 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
354 "e1hg_systematics_histos.root"));
361 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012a/alphaPS_errTot")));
363 rootFile->Get(
"Scales/es2012a/alphaS12_errTot")));
365 m_zeeNom.reset(checked_own_cast<TH1*>(
366 rootFile->Get(
"Scales/es2012a/alphaZee_errStat")));
368 rootFile->Get(
"Scales/es2012a/alphaZee_errSyst")));
370 m_resNom.reset(checked_own_cast<TH1*>(
371 rootFile->Get(
"Resolution/es2012a/ctZee_errStat")));
373 rootFile->Get(
"Resolution/es2012a/ctZee_errSyst")));
375 rootFile->Get(
"Resolution/es2012a/resZee_Data")));
377 checked_own_cast<TH1*>(
rootFile->Get(
"Resolution/es2012a/resZee_MC")));
389 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
391 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
393 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
395 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
398 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
400 m_zeeNom.reset(checked_own_cast<TH1*>(
401 rootFile->Get(
"Scales/es2012c/alphaZee_errStat")));
403 rootFile->Get(
"Scales/es2012c/alphaZee_errSyst")));
405 m_resNom.reset(checked_own_cast<TH1*>(
406 rootFile->Get(
"Resolution/es2012c/ctZee_errStat")));
408 rootFile->Get(
"Resolution/es2012c/ctZee_errSyst")));
411 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
413 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
415 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
417 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
420 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
423 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
425 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
428 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
430 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
432 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
434 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
437 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
439 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
441 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
444 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
446 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
448 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
454 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
456 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
458 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
462 "e1hg_systematics_histos.root"));
469 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
471 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
473 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
475 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
478 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
480 m_zeeNom.reset(checked_own_cast<TH1*>(
481 rootFile->Get(
"Scales/es2015PRE/alphaZee_errStat")));
483 rootFile->Get(
"Scales/es2012c/alphaZee_errSyst")));
485 m_resNom.reset(checked_own_cast<TH1*>(
486 rootFile->Get(
"Resolution/es2015PRE/ctZee_errStat")));
488 rootFile->Get(
"Resolution/es2012c/ctZee_errSyst")));
491 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
493 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
495 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
497 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
500 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
503 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
505 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
508 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
510 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
512 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
514 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
517 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
519 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
521 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
524 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
526 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
528 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
534 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
536 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
538 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
542 "e1hg_systematics_histos.root"));
550 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
552 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
554 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
556 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
559 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
561 m_zeeNom.reset(checked_own_cast<TH1*>(
562 rootFile->Get(
"Scales/es2015PRE/alphaZee_errStat")));
564 rootFile->Get(
"Scales/es2015PRE/alphaZee_errSyst")));
566 rootFile->Get(
"Scales/es2015PRE/histo_uA2MeV_week12")));
568 m_resNom.reset(checked_own_cast<TH1*>(
569 rootFile->Get(
"Resolution/es2015PRE/ctZee_errStat")));
571 rootFile->Get(
"Resolution/es2015PRE/ctZee_errSyst")));
574 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
576 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
578 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
580 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
583 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
586 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
588 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
591 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
593 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
595 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
597 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
600 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
602 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
604 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
607 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
609 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
611 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
617 rootFile->Get(
"FastSim/es2015/el_full_fast_resolution")));
619 rootFile->Get(
"FastSim/es2015/ph_unconv_full_fast_resolution")));
621 rootFile->Get(
"FastSim/es2015/ph_conv_full_fast_resolution")));
628 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
630 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
632 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
636 "e1hg_systematics_histos.root"));
644 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
646 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
648 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
650 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
653 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
655 m_zeeNom.reset(checked_own_cast<TH1*>(
656 rootFile->Get(
"Scales/es2015PRE/alphaZee_errStat")));
658 rootFile->Get(
"Scales/es2015PRE/alphaZee_errSyst")));
660 rootFile->Get(
"Scales/es2015PRE/histo_uA2MeV_week12")));
662 m_resNom.reset(checked_own_cast<TH1*>(
663 rootFile->Get(
"Resolution/es2015PRE/ctZee_errStat")));
665 rootFile->Get(
"Resolution/es2015PRE_res_improved/ctZee_errSyst")));
668 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
670 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
672 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
674 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
677 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
680 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
682 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
685 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
687 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
689 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
691 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
694 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
696 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
698 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
701 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
703 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
705 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
711 rootFile->Get(
"FastSim/es2015/el_full_fast_resolution")));
713 rootFile->Get(
"FastSim/es2015/ph_unconv_full_fast_resolution")));
715 rootFile->Get(
"FastSim/es2015/ph_conv_full_fast_resolution")));
721 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
723 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
725 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
729 "e1hg_systematics_histos.root"));
736 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
738 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
740 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
742 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
745 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
747 m_zeeNom.reset(checked_own_cast<TH1*>(
748 rootFile->Get(
"Scales/es2015Summer/alphaZee_errStat")));
750 rootFile->Get(
"Scales/es2015Summer/alphaZee_errSyst")));
753 m_resNom.reset(checked_own_cast<TH1*>(
754 rootFile->Get(
"Resolution/es2015Summer/ctZee_errStat")));
756 rootFile->Get(
"Resolution/es2015Summer/ctZee_errSyst")));
759 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
761 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
763 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
765 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
768 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
771 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
773 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
776 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
778 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
780 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
782 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
785 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
787 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
789 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
792 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
794 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
796 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
802 rootFile->Get(
"FastSim/es2015/el_full_fast_resolution")));
804 rootFile->Get(
"FastSim/es2015/ph_unconv_full_fast_resolution")));
806 rootFile->Get(
"FastSim/es2015/ph_conv_full_fast_resolution")));
813 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
815 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
817 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
821 "e1hg_systematics_histos.root"));
830 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
832 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
834 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
836 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
839 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
841 m_zeeNom.reset(checked_own_cast<TH1*>(
842 rootFile->Get(
"Scales/es2015Summer/alphaZee_errStat")));
844 rootFile->Get(
"Scales/es2015Summer/alphaZee_errSyst")));
846 m_resNom.reset(checked_own_cast<TH1*>(
847 rootFile->Get(
"Resolution/es2015Summer/ctZee_errStat")));
849 rootFile->Get(
"Resolution/es2015Summer/ctZee_errSyst")));
852 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
854 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
856 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
858 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
861 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
864 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
866 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
869 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
871 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
873 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
875 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
878 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
880 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
882 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
885 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
887 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
889 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
895 rootFile->Get(
"FastSim/es2015/el_full_fast_resolution")));
897 rootFile->Get(
"FastSim/es2015/ph_unconv_full_fast_resolution")));
899 rootFile->Get(
"FastSim/es2015/ph_conv_full_fast_resolution")));
906 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
908 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
910 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
914 "e1hg_systematics_histos.root"));
951 m_aPSNom.reset(checked_own_cast<TH1*>(
952 rootFile->Get(
"Scales/es2017_summer_final/alphaPS_uncor")));
954 rootFile->Get(
"Scales/es2017_summer_final/dalphaPS_b12")));
956 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
958 rootFile->Get(
"Scales/es2017_summer_final/alphaS12_uncor")));
960 rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
962 m_aPSNom.reset(checked_own_cast<TH1*>(
963 rootFile->Get(
"Scales/es2017_summer_final/alphaPS_uncor")));
965 rootFile->Get(
"Scales/es2017_summer_final/dalphaPS_b12")));
967 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
969 rootFile->Get(
"Scales/es2018_R21_v1/alphaS12_uncor")));
971 rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
973 m_aPSNom.reset(checked_own_cast<TH1*>(
974 rootFile->Get(
"Scales/es2023_R22_Run2_v0/alphaPS_uncor")));
976 rootFile->Get(
"Scales/es2023_R22_Run2_v0/alphaS12_uncor")));
978 m_aPSNom.reset(checked_own_cast<TH1*>(
979 rootFile->Get(
"Scales/es2012c/alphaPS_uncor")));
981 checked_own_cast<TH1*>(
rootFile->Get(
"Scales/es2012c/dalphaPS_cor")));
983 rootFile->Get(
"Scales/es2012c/alphaS12_uncor")));
985 rootFile->Get(
"Scales/es2012c/dalphaS12_cor")));
988 rootFile->Get(
"Scales/es2012c/momentum_errSyst")));
991 m_zeeNom.reset(checked_own_cast<TH1*>(
992 rootFile->Get(
"Scales/es2017/alphaZee_errStat_period_2016")));
994 rootFile->Get(
"Scales/es2017/alphaZee_errStat_period_2015")));
997 m_zeeNom.reset(checked_own_cast<TH1*>(
998 rootFile->Get(
"Scales/es2017_summer/alphaZee_errStat_period_2016")));
1000 rootFile->Get(
"Scales/es2017_summer/alphaZee_errStat_period_2015")));
1003 "Scales/es2017_summer_final/alphaZee_errStat_period_2016")));
1005 "Scales/es2017_summer_final/alphaZee_errStat_period_2015")));
1007 m_zeeNom.reset(checked_own_cast<TH1*>(
1008 rootFile->Get(
"Scales/es2015_5TeV/alphaZee_errStat_period_2015")));
1011 rootFile->Get(
"Scales/es2015_5TeV/alphaZee_errStat_period_2015")));
1013 m_zeeNom.reset(checked_own_cast<TH1*>(
1014 rootFile->Get(
"Scales/es2017_R21_v0/alphaZee_errStat_period_2017")));
1016 rootFile->Get(
"Scales/es2017_R21_v0/alphaZee_errStat_period_2016")));
1018 rootFile->Get(
"Scales/es2017_R21_v0/alphaZee_errStat_period_2015")));
1020 m_zeeNom.reset(checked_own_cast<TH1*>(
1021 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errStat_period_2017")));
1023 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errStat_period_2016")));
1025 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errStat_period_2015")));
1027 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalk")));
1029 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalb")));
1032 "Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2017")));
1034 "Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2016")));
1036 "Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2015")));
1038 "Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2018")));
1040 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalk")));
1042 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalb")));
1045 m_zeeNom.reset(checked_own_cast<TH1*>(
1046 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errStat_period_2018")));
1048 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errStat_period_2017")));
1050 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errStat_period_2016")));
1052 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errStat_period_2015")));
1054 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1056 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1058 m_zeeNom.reset(checked_own_cast<TH1*>(
1059 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2018")));
1061 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2017")));
1063 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2016")));
1065 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2015")));
1068 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1070 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1072 m_zeeNom.reset(checked_own_cast<TH1*>(
1073 rootFile->Get(
"Scales/es2022_R22_PRE/alphaZee_errStat_period_2018")));
1076 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1078 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1082 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2018")));
1084 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2017")));
1086 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2016")));
1088 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2015")));
1091 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
1093 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
1095 m_zeeNom.reset(checked_own_cast<TH1*>(
1096 rootFile->Get(
"Scales/es2017_R21_PRE/alphaZee_errStat_period_2016")));
1099 rootFile->Get(
"Scales/es2017_R21_PRE/alphaZee_errStat_period_2016")));
1103 rootFile->Get(
"Scales/es2017/alphaZee_errSyst")));
1106 rootFile->Get(
"Scales/es2017_summer_final/alphaZee_errSyst")));
1109 rootFile->Get(
"Scales/es2015_5TeV/alphaZee_errSyst")));
1112 rootFile->Get(
"Scales/es2017_summer_final/alphaZee_errSyst")));
1115 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errSyst")));
1118 rootFile->Get(
"Scales/es2017_R21_ofc0_v1/alphaZee_errSyst")));
1121 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errSyst")));
1125 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errSyst")));
1128 rootFile->Get(
"Scales/es2022_R22_PRE/alphaZee_errSyst")));
1130 rootFile->Get(
"Scales/es2022_R22_PRE/alphaZee_errOFCSyst")));
1133 rootFile->Get(
"Scales/es2017_summer/alphaZee_errSyst")));
1138 m_resNom.reset(checked_own_cast<TH1*>(
1139 rootFile->Get(
"Resolution/es2017/ctZee_errStat")));
1143 m_resNom.reset(checked_own_cast<TH1*>(
1144 rootFile->Get(
"Resolution/es2017_summer/ctZee_errStat")));
1146 m_resNom.reset(checked_own_cast<TH1*>(
1147 rootFile->Get(
"Resolution/es2017_summer_final/ctZee_errStat")));
1149 m_resNom.reset(checked_own_cast<TH1*>(
1150 rootFile->Get(
"Resolution/es2017_R21_v0/ctZee_errStat")));
1152 m_resNom.reset(checked_own_cast<TH1*>(
1153 rootFile->Get(
"Resolution/es2017_R21_v1/ctZee_errStat")));
1155 m_resNom.reset(checked_own_cast<TH1*>(
1156 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errStat")));
1158 m_resNom.reset(checked_own_cast<TH1*>(
1159 rootFile->Get(
"Resolution/es2018_R21_v0/ctZee_errStat")));
1161 m_resNom.reset(checked_own_cast<TH1*>(
1162 rootFile->Get(
"Resolution/es2018_R21_v1/ctZee_errStat")));
1164 m_resNom.reset(checked_own_cast<TH1*>(
1165 rootFile->Get(
"Resolution/es2022_R22_PRE/ctZee_errStat")));
1167 m_resNom.reset(checked_own_cast<TH1*>(
1168 rootFile->Get(
"Resolution/es2023_R22_Run2_v0/ctZee_errStat")));
1170 m_resNom.reset(checked_own_cast<TH1*>(
1171 rootFile->Get(
"Resolution/es2017_R21_PRE/ctZee_errStat")));
1176 rootFile->Get(
"Resolution/es2017/ctZee_errSyst")));
1179 rootFile->Get(
"Resolution/es2017_summer_final/ctZee_errSyst")));
1182 rootFile->Get(
"Resolution/es2015_5TeV/ctZee_errSyst")));
1185 rootFile->Get(
"Resolution/es2017_summer_final/ctZee_errSyst")));
1188 rootFile->Get(
"Resolution/es2017_R21_v1/ctZee_errSyst")));
1191 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errSyst")));
1194 rootFile->Get(
"Resolution/es2018_R21_v0/ctZee_errSyst")));
1198 rootFile->Get(
"Resolution/es2018_R21_v1/ctZee_errSyst")));
1201 rootFile->Get(
"Resolution/es2022_R22_PRE/ctZee_errSyst")));
1203 rootFile->Get(
"Resolution/es2022_R22_PRE/ctZee_errOFCSyst")));
1206 rootFile->Get(
"Resolution/es2017_summer/ctZee_errSyst")));
1214 checked_own_cast<TH1*>(
rootFile->Get(
"Pedestals/es2017/pedestals")));
1217 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
1220 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
1222 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
1225 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
1227 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
1229 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
1231 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
1234 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
1236 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
1238 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
1241 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
1244 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
1246 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
1249 rootFile->Get(
"Conversions/es2023_R22_Run2_v0/convFakeRate")));
1251 rootFile->Get(
"Conversions/es2023_R22_Run2_v0/convRecoEfficiency")));
1254 rootFile->Get(
"Conversions/es2017_summer/convFakeRate")));
1256 rootFile->Get(
"Conversions/es2017_summer/convRecoEfficiency")));
1263 "ElectronPhotonFourMomentumCorrection/v8/PP0sys.root");
1265 TFile file_pp0(filename_pp0.c_str());
1266 m_pp0_elec.reset(checked_own_cast<TH2*>(file_pp0.Get(
"elec")));
1267 m_pp0_conv.reset(checked_own_cast<TH2*>(file_pp0.Get(
"conv")));
1268 m_pp0_unconv.reset(checked_own_cast<TH2*>(file_pp0.Get(
"unco")));
1272 "ElectronPhotonFourMomentumCorrection/v8/wstot_related_syst.root");
1274 TFile file_wstot(filename_wstot.c_str());
1276 checked_own_cast<TH1*>(file_wstot.Get(
"A_data")));
1279 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_data_p0")));
1281 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_data_p1")));
1283 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_uc_data_p0")));
1285 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_uc_data_p1")));
1287 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_c_data_p0")));
1289 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_c_data_p1")));
1291 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_mc_p0")));
1293 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_mc_p1")));
1295 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_uc_mc_p0")));
1297 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_uc_mc_p1")));
1299 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_c_mc_p0")));
1301 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_c_mc_p1")));
1313 rootFile->Get(
"FastSim/es2017_v1/resol_Af2ToG4_elec_rel21")));
1315 rootFile->Get(
"FastSim/es2017_v1/resol_Af2ToG4_unco_rel21")));
1317 rootFile->Get(
"FastSim/es2017_v1/resol_Af2ToG4_conv_rel21")));
1320 rootFile->Get(
"FastSim/es2017/el_full_fast_resolution")));
1322 rootFile->Get(
"FastSim/es2017/ph_unconv_full_fast_resolution")));
1324 rootFile->Get(
"FastSim/es2017/ph_conv_full_fast_resolution")));
1331 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
1333 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
1336 std::string gain_tool_run_2_filename;
1342 "ElectronPhotonFourMomentumCorrection/v11/"
1343 "gain_uncertainty_specialRun.root");
1346 "ElectronPhotonFourMomentumCorrection/v29/"
1347 "gain_uncertainty_specialRun.root");
1350 "ElectronPhotonFourMomentumCorrection/v14/"
1351 "gain_uncertainty_specialRun.root");
1355 gain_tool_run_2_filename,
true,
"GainUncertainty",
1359 std::make_unique<egGain::GainUncertainty>(gain_tool_run_2_filename);
1367 "e1hg_systematics_histos.root"));
1371 "e1hg_systematics_histos.root"));
1380 m_aPSNom.reset(checked_own_cast<TH1*>(
1381 rootFile->Get(
"Scales/es2015_day0/alphaPS_uncor")));
1383 rootFile->Get(
"Scales/es2015_day0/dalphaPS_cor")));
1385 rootFile->Get(
"Scales/es2015_day0/alphaS12_uncor")));
1387 rootFile->Get(
"Scales/es2015_day0/dalphaS12_cor")));
1390 rootFile->Get(
"Scales/es2015_day0/momentum_errSyst")));
1392 m_zeeNom.reset(checked_own_cast<TH1*>(
1393 rootFile->Get(
"Scales/es2015_day0/alphaZee_errStat")));
1395 rootFile->Get(
"Scales/es2015_day0/alphaZee_errSyst")));
1397 m_resNom.reset(checked_own_cast<TH1*>(
1398 rootFile->Get(
"Resolution/es2012c/ctZee_errStat")));
1400 rootFile->Get(
"Resolution/es2012c/ctZee_errSyst")));
1403 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
1405 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
1407 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
1409 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
1412 rootFile->Get(
"Material/DX0_ConfigA")));
1415 "Material/Measured/DXerr_IPPS_NewG_errUncor")));
1417 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
1420 "Material/Measured/DXerr_IPAcc_NewG_errUncor")));
1422 "Material/Measured/DXerr_IPAcc_NewG_errLAr")));
1424 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
1426 "Material/Measured/DXerr_IPAcc_NewG_errGL1")));
1429 "Material/Measured/DXerr_PSAcc_NewG_errUncor")));
1431 "Material/Measured/DXerr_PSAcc_NewG_errLAr")));
1433 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
1436 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
1438 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
1440 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
1446 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
1448 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
1450 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
1454 "e1hg_systematics_histos.root"));
1459 ATH_MSG_FATAL(
"ES model not initialized - Initialization fails");
1462 ATH_MSG_FATAL(
"ES model not recognized - Initialization fails");
1485 rootFile->Get(
"E4Recalibration/v4/electron_eta_axis")));
1487 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/v4/electron")));
1490 rootFile->Get(
"E4Recalibration/v4/electron_eta_axis")));
1492 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/v4/electron")));
1494 rootFile->Get(
"E4Recalibration/v4/electron_eta_axis")));
1496 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/v4/electron")));
1520 rootFile->Get(
"PSRecalibration/es2015PRE/ElectronAxis")));
1522 rootFile->Get(
"PSRecalibration/es2015PRE/ElectronBiasPS")));
1524 rootFile->Get(
"PSRecalibration/es2015PRE/UnconvertedAxis")));
1526 rootFile->Get(
"PSRecalibration/es2015PRE/UnconvertedBiasPS")));
1528 rootFile->Get(
"PSRecalibration/es2015PRE/ConvertedAxis")));
1530 rootFile->Get(
"PSRecalibration/es2015PRE/ConvertedBiasPS")));
1533 rootFile->Get(
"S1Recalibration/es2015PRE/ElectronAxis")));
1535 rootFile->Get(
"S1Recalibration/es2015PRE/ElectronBiasS1")));
1537 rootFile->Get(
"S1Recalibration/es2015PRE/UnconvertedAxis")));
1539 rootFile->Get(
"S1Recalibration/es2015PRE/UnconvertedBiasS1")));
1541 rootFile->Get(
"S1Recalibration/es2015PRE/ConvertedAxis")));
1543 rootFile->Get(
"S1Recalibration/es2015PRE/ConvertedBiasS1")));
1546 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ElectronAxis")));
1548 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ElectronBiasPS")));
1550 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/UnconvertedAxis")));
1552 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/UnconvertedBiasPS")));
1554 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ConvertedAxis")));
1556 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ConvertedBiasPS")));
1559 rootFile->Get(
"S2Recalibration/ElectronAxis")));
1561 rootFile->Get(
"S2Recalibration/ElectronBiasS2")));
1563 rootFile->Get(
"S2Recalibration/UnconvertedAxis")));
1565 rootFile->Get(
"S2Recalibration/UnconvertedBiasS2")));
1567 rootFile->Get(
"S2Recalibration/ConvertedAxis")));
1569 rootFile->Get(
"S2Recalibration/ConvertedBiasS2")));
1572 rootFile->Get(
"SaccRecalibration/ElectronAxis")));
1574 rootFile->Get(
"SaccRecalibration/ElectronBiasSacc")));
1576 rootFile->Get(
"SaccRecalibration/UnconvertedAxis")));
1578 rootFile->Get(
"SaccRecalibration/UnconvertedBiasSacc")));
1580 rootFile->Get(
"SaccRecalibration/ConvertedAxis")));
1582 rootFile->Get(
"SaccRecalibration/ConvertedBiasSacc")));
1586 rootFile->Get(
"PSRecalibration/ElectronAxis")));
1588 rootFile->Get(
"PSRecalibration/ElectronBiasPS")));
1590 rootFile->Get(
"PSRecalibration/UnconvertedAxis")));
1592 rootFile->Get(
"PSRecalibration/UnconvertedBiasPS")));
1594 rootFile->Get(
"PSRecalibration/ConvertedAxis")));
1596 rootFile->Get(
"PSRecalibration/ConvertedBiasPS")));
1599 rootFile->Get(
"S1Recalibration/ElectronAxis")));
1601 rootFile->Get(
"S1Recalibration/ElectronBiasS1")));
1603 rootFile->Get(
"S1Recalibration/UnconvertedAxis")));
1605 rootFile->Get(
"S1Recalibration/UnconvertedBiasS1")));
1607 rootFile->Get(
"S1Recalibration/ConvertedAxis")));
1609 rootFile->Get(
"S1Recalibration/ConvertedBiasS1")));
1616 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1617 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigA"))));
1619 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1620 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigCpDp"))));
1622 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1623 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigEpLp"))));
1625 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1626 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigFpMX"))));
1628 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1629 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigGp"))));
1632 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigA"))));
1634 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigCpDp"))));
1636 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigEpLp"))));
1638 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigFpMX"))));
1640 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigGp"))));
1643 rootFile->Get(
"Material/electronCstTerm_ConfigA"))));
1645 rootFile->Get(
"Material/electronCstTerm_ConfigCpDp"))));
1647 rootFile->Get(
"Material/electronCstTerm_ConfigEpLp"))));
1649 rootFile->Get(
"Material/electronCstTerm_ConfigFpMX"))));
1651 rootFile->Get(
"Material/electronCstTerm_ConfigGp"))));
1661 checked_own_cast<TH1*>(
rootFile->Get(
"Material_rel21/DX0_ConfigA"))));
1663 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigCpDp"))));
1665 rootFile->Get(
"Material_rel21/DX0_ConfigEpLp"))));
1667 rootFile->Get(
"Material_rel21/DX0_ConfigFpMX"))));
1669 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigGp"))));
1671 checked_own_cast<TH1*>(
rootFile->Get(
"Material_rel21/DX0_ConfigN"))));
1674 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA"))));
1676 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigCpDp"))));
1678 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigEpLp"))));
1680 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigFpMX"))));
1682 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigGp"))));
1686 checked_own_cast<TAxis*>(
rootFile->Get(
"Material/LinearityEtaBins")));
1688 std::unique_ptr<TList>(checked_own_cast<TList*>(
1689 rootFile->Get(
"Material/Linearity_Cluster_ConfigA"))));
1691 std::unique_ptr<TList>(checked_own_cast<TList*>(
1692 rootFile->Get(
"Material/Linearity_Cluster_ConfigCpDp"))));
1694 std::unique_ptr<TList>(checked_own_cast<TList*>(
1695 rootFile->Get(
"Material/Linearity_Cluster_ConfigEpLp"))));
1697 std::unique_ptr<TList>(checked_own_cast<TList*>(
1698 rootFile->Get(
"Material/Linearity_Cluster_ConfigFpMX"))));
1700 std::unique_ptr<TList>(checked_own_cast<TList*>(
1701 rootFile->Get(
"Material/Linearity_Cluster_ConfigGp"))));
1710 rootFile->Get(
"Material_rel21/electronBias_ConfigA")));
1712 rootFile->Get(
"Material_rel21/electronBias_ConfigEpLp")));
1714 rootFile->Get(
"Material_rel21/electronBias_ConfigFpMX")));
1716 rootFile->Get(
"Material_rel21/electronBias_ConfigN")));
1718 rootFile->Get(
"Material_rel21/electronBias_ConfigIBL")));
1720 rootFile->Get(
"Material_rel21/electronBias_ConfigPP0")));
1722 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigA")));
1724 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigEpLp")));
1726 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigFpMX")));
1728 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigN")));
1730 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigIBL")));
1732 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigPP0")));
1734 rootFile->Get(
"Material_rel21/convertedBias_ConfigA")));
1736 rootFile->Get(
"Material_rel21/convertedBias_ConfigEpLp")));
1738 rootFile->Get(
"Material_rel21/convertedBias_ConfigFpMX")));
1740 rootFile->Get(
"Material_rel21/convertedBias_ConfigN")));
1742 rootFile->Get(
"Material_rel21/convertedBias_ConfigIBL")));
1744 rootFile->Get(
"Material_rel21/convertedBias_ConfigPP0")));
1757 rootFile->Get(
"FastSim/es2015/el_scale_full_fast_peak_gaussian")));
1759 "FastSim/es2015/ph_unconv_scale_full_fast_peak_gaussian")));
1761 rootFile->Get(
"FastSim/es2015/ph_conv_scale_full_fast_peak_gaussian")));
1770 rootFile->Get(
"FastSim/es2017/el_scale_full_fast_peak_gaussian")));
1772 "FastSim/es2017/ph_unconv_scale_full_fast_peak_gaussian")));
1774 rootFile->Get(
"FastSim/es2017/ph_conv_scale_full_fast_peak_gaussian")));
1782 rootFile->Get(
"FastSim/es2017_v1/scale_Af2ToG4_elec_rel21")));
1785 rootFile->Get(
"FastSim/es2017_v1/scale_Af2ToG4_unco_rel21")));
1787 rootFile->Get(
"FastSim/es2017_v1/scale_Af2ToG4_conv_rel21")));
1790 checked_own_cast<TH1*>(
rootFile->Get(
"FastSim/hG4OverAF")));
1793 checked_own_cast<TH1*>(
rootFile->Get(
"FastSim/hG4OverFS")));
1809 checked_own_cast<TH1*>(
rootFile->Get(
"Leakage/LeakageDiffConverted")));
1811 rootFile->Get(
"Leakage/LeakageDiffUnconverted")));
1814 rootFile->Get(
"Leakage/es2017_summer/LeakageDiffConverted")));
1816 rootFile->Get(
"Leakage/es2017_summer/LeakageDiffUnconverted")));
1819 rootFile->Get(
"Leakage/es2023_R22_Run2_v0/LeakageDiffConverted")));
1821 rootFile->Get(
"Leakage/es2023_R22_Run2_v0/LeakageDiffUnconverted")));
1823 rootFile->Get(
"Leakage/es2023_R22_Run2_v0/LeakageDiffElectron")));
1830 ATH_MSG_INFO(
"No leakage systematic uncertainty for ES model "
1836 checked_own_cast<TH1*>(
rootFile->Get(
"ZeeEnergyProfiles/p2MC")));
1839 rootFile->Get(
"ZeeMeanET/MC_eta_vs_et_profiled")));
1852 double correctedMomentum =
momentum;
1853 double aeta = std::abs(trk_eta);
1864 correctedMomentum *= 1. + corr * varSF;
1867 return correctedMomentum;
1879 double fullyCorrectedEnergy =
energy;
1887 fullyCorrectedEnergy =
1896 return fullyCorrectedEnergy;
1899 fullyCorrectedEnergy);
1908 energyS2, eraw, ptype, scaleVar, varSF);
1909 fullyCorrectedEnergy /= (1 + alpha);
1913 int ieta_k =
m_zeeFwdk->GetXaxis()->FindFixBin(cl_eta);
1914 double value_k =
m_zeeFwdk->GetBinContent(ieta_k);
1915 int ieta_b =
m_zeeFwdb->GetXaxis()->FindFixBin(cl_eta);
1916 double value_b =
m_zeeFwdb->GetBinContent(ieta_b);
1917 fullyCorrectedEnergy =
1918 value_k * fullyCorrectedEnergy +
1922 fullyCorrectedEnergy);
1932 fullyCorrectedEnergy, energyS2,
1933 eraw, ptype, scaleVar, varSF);
1936 fullyCorrectedEnergy *= (1 + deltaAlpha);
1938 fullyCorrectedEnergy);
1971 fullyCorrectedEnergy *= (1 + daAF2);
1977 fullyCorrectedEnergy *=
1982 fullyCorrectedEnergy);
1985 return fullyCorrectedEnergy;
1997 long int runnumber,
double cl_eta,
double cl_etaCalo,
2007 double meanE = meanET * std::cosh(cl_eta);
2008 double Et =
energy / std::cosh(cl_eta);
2017 double daPS, daS12, linPS, linS12, linEacc, linPS_40_elec, linEacc_40_elec,
2019 daPS = daS12 = linPS = linS12 = linEacc = linPS_40_elec = linEacc_40_elec =
2020 linS12_40_elec = 0.;
2022 double daE4 = 0., linE4 = 0.;
2049 double daWtots1 = 0.;
2067 daWtots1 = -daWtots1;
2095 "es2023_R22_Run2_v0 PS non-linearity before Acc correction: "
2097 linPS = linPS - linEacc * linPS_40_elec / linEacc_40_elec;
2098 ATH_MSG_DEBUG(
"es2023_R22_Run2_v0 PS non-linearity after Acc correction: "
2131 "es2023_R22_Run2_v0 S12 non-linearity before Acc correction: "
2133 linS12 = linS12 - linEacc * linS12_40_elec / linEacc_40_elec;
2135 "es2023_R22_Run2_v0 S12 non-linearity after Acc correction: "
2142 double daMatID, daMatCryo, daMatCalo;
2143 daMatID = daMatCryo = daMatCalo = 0;
2199 double daL1GainSwitch = 0.;
2216 daL1GainSwitch = -daL1GainSwitch;
2221 double daL2GainSwitch = 0.;
2222 double daL2MediumGainSwitch = 0.;
2223 double daL2LowGainSwitch = 0.;
2229 if (!(std::abs(cl_eta) < 1.52 && std::abs(cl_eta) > 1.37) &&
2230 std::abs(cl_eta) < 2.4) {
2232 energyS2 /
GeV, ptype);
2237 daL2GainSwitch = evar /
energy - eref / meanE;
2239 daL2GainSwitch = -daL2GainSwitch;
2245 daL2GainSwitch *= -1;
2249 "trying to compute gain systematic, but no tool for doing it has "
2250 "been instantiated, setting sys to 0");
2251 daL2GainSwitch = 0.;
2263 daL2MediumGainSwitch *= -1;
2264 ATH_MSG_DEBUG(
"L2 gain Medium uncertainty: " << daL2MediumGainSwitch);
2267 "trying to compute gain systematic, but no tool for doing it has "
2268 "been instantiated, setting sys to 0");
2269 daL2MediumGainSwitch = 0.;
2281 daL2LowGainSwitch *= -1;
2282 ATH_MSG_DEBUG(
"L2 gain Low uncertainty: " << daL2LowGainSwitch);
2285 "trying to compute Low gain systematic, but no tool for doing it has "
2286 "been instantiated, setting sys to 0");
2287 daL2LowGainSwitch = 0.;
2306 if (std::abs(cl_eta) < 1.5)
2337 const double aeta = std::abs(cl_eta);
2338 dapp0 = getValueHistAt(*
histo, aeta,
energy /
GeV / cosh(cl_eta),
false,
2345 if (aeta > 1.5 and aeta < 2.0) {
2347 }
else if (aeta >= 2.0 and aeta <= 2.5) {
2359 double daTopoCluster = 0;
2369 double Et =
energy / cosh(cl_eta);
2370 double Et0 = 10000.;
2374 daTopoCluster = 1
e-3 * (1. / (Et / Et0) - 1. / (meanET / Et0));
2376 daTopoCluster = -1
e-3 * (1. / (Et / Et0) - 1. / (meanET / Et0));
2382 double daADCLin = 0;
2388 daADCLin = 0.3 * corr;
2391 "trying to compute ADC correction systematic, but no tool for doing "
2392 "it has been instantiated, setting sys to 0");
2400 double alphaTot = alphaZee;
2401 alphaTot += daE4 * linE4;
2402 alphaTot += daPS * linPS;
2403 alphaTot += daS12 * linS12;
2404 alphaTot += daMatID + daMatCryo + daMatCalo;
2405 alphaTot += daLeakage;
2406 alphaTot += daL1GainSwitch;
2407 alphaTot += daL2GainSwitch;
2408 alphaTot += daL2MediumGainSwitch;
2409 alphaTot += daL2LowGainSwitch;
2410 alphaTot += daConvSyst;
2411 alphaTot += daPedestal;
2412 alphaTot += daWtots1;
2414 alphaTot += daTopoCluster;
2415 alphaTot += daADCLin;
2432 double alphaVar = 0.;
2440 eraw, ptype,
var, varSF) -
2449 energyS2, eraw, ptype,
ivar, varSF) -
2453 alphaVar +=
pow(
v, 2);
2455 alphaVar = sqrt(alphaVar);
2463 energyS2, eraw, ptype,
ivar, varSF) -
2467 alphaVar +=
pow(
v, 2);
2469 alphaVar = -sqrt(alphaVar);
2481 energyS2, eraw, ptype,
ivar, varSF) -
2483 alphaVar +=
pow(
v, 2);
2485 alphaVar = sqrt(alphaVar);
2497 energyS2, eraw, ptype,
ivar, varSF) -
2499 alphaVar +=
pow(
v, 2);
2501 alphaVar = -sqrt(alphaVar);
2512 if (std::abs(cl_eta) >= 2.47)
2526 double aeta = std::abs(cl_eta);
2527 double sampling = 0.;
2532 else if (aeta < 1.37)
2533 sampling = 0.036 + 0.130 * aeta;
2535 else if (aeta < 1.52)
2538 else if (aeta < 2.0)
2539 sampling = 0.85 - 0.36 * aeta;
2541 else if (aeta < 2.3)
2544 else if (aeta < 2.5)
2545 sampling = -1.05 + 0.52 * aeta;
2562 double aeta = std::abs(cl_eta);
2565 double noise37[25] = {0.27, 0.27, 0.27, 0.27, 0.27, 0.26, 0.25, 0.23, 0.21,
2566 0.19, 0.17, 0.16, 0.15, 0.14, 0.27, 0.23, 0.17, 0.15,
2567 0.13, 0.10, 0.07, 0.06, 0.05, 0.04, 0.03};
2569 int ieta = (
int)(aeta / 0.1);
2571 if (ieta >= 0 && ieta < 25)
2572 noise = noise37[ieta] * cosh(cl_eta);
2581 double aeta = std::abs(cl_eta);
2587 else if (aeta < 1.75)
2590 else if (aeta < 2.5)
2591 cst = 0.0055 * (2.69 - aeta);
2617 std::as_const(*m_peakResData).GetXaxis()->FindBin(cl_eta));
2625 std::as_const(*m_peakResMC).GetXaxis()->FindBin(cl_eta));
2631 double cl_eta)
const {
2643 sqrt(2 * (resData * resData - resMC * resMC) /
mz /
mz + cmc * cmc);
2645 sqrt(2 * (resData * resData - resMC * resMC * smpup * smpup) /
mz /
mz +
2648 sqrt(2 * (resData * resData - resMC * resMC * smpdo * smpdo) /
mz /
mz +
2651 double errdown = std::abs(central - vardown);
2652 double errup = std::abs(central - varup);
2654 return .5 * (errup + errdown);
2667 int eg_resolution_ptype;
2669 eg_resolution_ptype = 0;
2671 eg_resolution_ptype = 1;
2673 eg_resolution_ptype = 2;
2744 double resolution_error;
2745 double resolution_error_up;
2746 double resolution_error_down;
2749 resolution, resolution_error, resolution_error_up,
2750 resolution_error_down, resType,
2759 resolution_error = resolution_error_up /
resolution;
2761 resolution_error = resolution_error_down /
resolution;
2764 return resolution_error;
2770 double cl_eta,
double& errUp,
2771 double& errDown)
const {
2777 double Cdata_unc = 0.;
2778 if (Cdata_err > Cdata_cor)
2779 Cdata_unc = sqrt(Cdata_err * Cdata_err - Cdata_cor * Cdata_cor);
2780 if (Cdata_unc < 0.001)
2789 double err2 =
fcn_sigma(
energy, Cdata, -Cdata_unc, Smc, 0.) - central;
2790 double err3 =
fcn_sigma(
energy, Cdata, -Cdata_cor, Smc, Smc_err) - central;
2791 double err4 = -err3;
2795 errUp = sqrt(errUp * errUp + err1 * err1);
2797 errUp = sqrt(errUp * errUp + err2 * err2);
2799 errUp = sqrt(errUp * errUp + err3 * err3);
2801 errUp = sqrt(errUp * errUp + err4 * err4);
2809 double energy,
double cl_eta,
double cl_etaCalo,
2812 int eg_resolution_ptype;
2814 eg_resolution_ptype = 0;
2816 eg_resolution_ptype = 1;
2818 eg_resolution_ptype = 2;
2830 const double et =
energy / cosh(cl_eta);
2839 sig2 =
a *
a / energyGeV +
b *
b / energyGeV / energyGeV +
c *
c;
2842 if (withCT and
fast) {
2843 throw std::runtime_error(
2844 "It doesn't make sense to ask resolution fast sim + additional CT."
2845 " The resolution on data is FULL sim resolution + CT");
2848 if (
fast and std::abs(cl_eta) < 2.5) {
2869 double ratio_IQR_full_fast = 1.;
2870 const double ptGeV =
energy / cosh(cl_eta) / 1E3;
2885 ptGeV,
true,
true,
true,
true);
2888 ptGeV,
true,
true,
true,
true);
2891 ptGeV,
true,
true,
true,
true);
2896 ratio_IQR_full_fast = getValueHistAt(
2899 ratio_IQR_full_fast = getValueHistAt(
2902 ratio_IQR_full_fast = getValueHistAt(
2906 sig2 /= ratio_IQR_full_fast * ratio_IQR_full_fast;
2923 double Cdata_er,
double S,
2931 sigma = sqrt(sigma2);
2946 ATH_MSG_FATAL(
"Trying to compute smearing correction on data");
2955 const double resMC =
2962 ATH_MSG_DEBUG(
"resolution in data: " << resData <<
" in MC: " << resMC);
2966 ptype,
value, resType);
2968 double errUp, errDown;
2981 ATH_MSG_DEBUG(
"resolution in data after systematics: " << resData);
2983 const double sigma2 =
2993 const double sigma = sqrt(sigma2);
2997 const double DeltaE0 =
rng.Gaus(0,
sigma);
2998 const double cor0 = (energyGeV + DeltaE0) / energyGeV;
3001 << cor0 <<
"|" <<
rng.GetSeed());
3016 double aeta = std::abs(
eta);
3018 if (aeta < 1.42 || aeta > 1.55)
3021 const int nBoundaries = 18;
3022 double ETBoundaries[nBoundaries] = {0., 5.4, 8.5, 12.9, 16., 20.,
3023 25., 30., 35., 40., 45., 50.,
3024 55., 60., 65., 70., 75., 99999.};
3026 double CalibFactors[nBoundaries - 1] = {
3027 0.884845, 0.898526, 0.902439, 0.91899, 0.925868, 0.929440,
3028 0.948080, 0.943788, 0.96026, 0.955709, 0.964285, 0.95762,
3029 0.970385, 0.963489, 0.968149, 0.970799, 0.961617};
3032 for (
int i = 0;
i < nBoundaries - 1;
i++)
3033 if (ET /
GeV > ETBoundaries[
i] && ET /
GeV <= ETBoundaries[
i + 1])
3036 if (i0 >= 0 && i0 < nBoundaries - 1)
3037 return 1. / CalibFactors[i0];
3046 const double aeta = std::abs(
eta);
3081 true,
true,
true,
true));
3084 true,
true,
true,
true));
3087 true,
true,
true,
true));
3089 throw std::runtime_error(
"particle not valid");
3099 throw std::runtime_error(
"particle not valid");
3105 std::as_const(*m_G4OverAFII_electron).GetXaxis()->FindBin(
eta));
3113 double aeta = std::abs(
eta);
3114 if (aeta < 3.3 || aeta > 4.9)
3118 std::as_const(*m_G4OverFrSh).GetXaxis()->FindBin(aeta));
3125 double varSF)
const {
3134 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(
eta);
3139 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(
eta);
3143 "es2023_R22_Run2_v0 is only valid for Run-2 data! using 2018 scales");
3144 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(
eta);
3152 runnumber <= 341649 && runnumber >= 324320) {
3153 int ieta = std::as_const(*m_zeeNom_data2017).GetXaxis()->FindBin(
eta);
3160 int ieta = std::as_const(*m_zeeNom_data2016).GetXaxis()->FindBin(
eta);
3168 runnumber < 322817 && runnumber >= 297000) {
3169 int ieta = std::as_const(*m_zeeNom_data2016).GetXaxis()->FindBin(
eta);
3175 int ieta = std::as_const(*m_zeeNom_data2016).GetXaxis()->FindBin(
eta);
3180 int ieta = std::as_const(*m_zeeNom_data2015).GetXaxis()->FindBin(
eta);
3185 int ieta = std::as_const(*m_zeeNom_data2018).GetXaxis()->FindBin(
eta);
3202 int ieta = std::as_const(*m_zeeNom_data2015).GetXaxis()->FindBin(
eta);
3229 else if (
eta > -3.2)
3237 const double uA2MeV_correction =
3251 if (eta < -2.5 and eta > -3.2)
3268 else if (
eta > -3.2)
3314 double stat_error =
h->GetBinError(
h->FindFixBin(
eta));
3316 stat_error = stat_error / sqrt(
h->GetNbinsX());
3341 value -= 0.4E-2 * varSF;
3346 int ieta = std::as_const(*m_zeePhys).GetXaxis()->FindBin(
eta);
3351 int ieta = std::as_const(*m_zeePhys).GetXaxis()->FindBin(
eta);
3365 const double aeta = std::abs(
eta);
3370 }
else if (aeta > 1.45 and aeta < 3.2) {
3381 const double aeta = std::abs(
eta);
3384 if (aeta > 2.5 and aeta < 3.2) {
3397 value += qsum(0.05
E-2, 0.02
E-2) *
3404 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(
eta);
3412 ieta = std::as_const(*m_zeePhys).GetXaxis()->FindBin(
eta);
3426 const double aeta = std::abs(
eta);
3427 if ((aeta > 1.6) or (aeta < 1.4)) {
3433 double data_mc_difference = 0.;
3435 data_mc_difference = 1
E-2;
3437 else if (aeta < 1.52) {
3438 data_mc_difference = 3
E-2;
3441 data_mc_difference = 4.3E-2;
3444 const double em_scale = 2.4E-2;
3445 const double mbias = 1
E-2;
3446 const double laser = 4
E-2;
3448 return std::sqrt(data_mc_difference * data_mc_difference +
3449 em_scale * em_scale + mbias * mbias + laser * laser);
3473 double ETGeV =
energy / cosh(cl_eta) / 1E3;
3474 double wstot_pT_data_p0 = 0.;
3475 double wstot_pT_data_p1 = 0.;
3476 double wstot_pT_MC_p0 = 0.;
3477 double wstot_pT_MC_p1 = 0.;
3479 double wstot_40_data =
3482 double wstot_40_MC =
3505 double wstot_pT_data = 0.;
3506 double wstot_pT_MC = 0.;
3518 wstot_pT_data = wstot_pT_data_p0 + wstot_pT_data_p1 / sqrt(ETGeV);
3519 wstot_pT_MC = wstot_pT_MC_p0 + wstot_pT_MC_p1 / sqrt(ETGeV);
3521 value = 2 * A / 91.2 * (wstot_pT_data - wstot_40_data) -
3522 2 * B / 91.2 * (wstot_pT_MC - wstot_40_MC);
3532 double varSF)
const {
3540 double nearestEta = cl_eta;
3566 else if (iLayer == 1) {
3593 const double aeta = std::abs(cl_eta);
3595 if (aeta >= 1.37 and aeta < 2.5) {
3621 const double aeta = std::abs(cl_eta);
3623 if (aeta >= 1.37 and aeta < 2.5) {
3649 const double aeta = std::abs(cl_eta);
3650 if (aeta >= 2.4 and aeta < 2.5) {
3660 return value * varSF;
3666 const double aeta = std::abs(cl_eta);
3667 const double ETGeV =
energy / cosh(cl_eta) / 1E3;
3687 const int ieta =
axis->FindFixBin(aeta) - 1;
3688 if (ieta >= 0 and ieta < graphs->GetSize()) {
3689 value =
static_cast<TGraph*
>(
graphs->At(ieta))->Eval(ETGeV);
3696 int iLayer,
double cl_eta,
double energy,
3701 if (iLayer == 6 && std::abs(cl_eta) >= 2.47)
3703 double aeta = std::abs(cl_eta);
3704 double ET =
energy / cosh(cl_eta);
3712 if (iLayer == 0 && aeta >= 1.82)
3720 if (ieta >= 0 and ieta < m_psElectronGraphs->GetSize()) {
3723 }
else if (iLayer == 1) {
3726 if (ieta >= 0 and ieta < m_s12ElectronGraphs->GetSize()) {
3729 }
else if (iLayer == 6) {
3732 if (ieta >= 0 && ieta < m_EaccElectronGraphs->GetSize()) {
3742 if (ieta >= 0 and ieta < m_psUnconvertedGraphs->GetSize()) {
3746 }
else if (iLayer == 1) {
3749 if (ieta >= 0 and ieta < m_s12UnconvertedGraphs->GetSize()) {
3752 }
else if (iLayer == 6) {
3755 if (ieta >= 0 && ieta < m_EaccUnconvertedGraphs->GetSize()) {
3765 if (ieta >= 0 and ieta < m_psConvertedGraphs->GetSize()) {
3769 }
else if (iLayer == 1) {
3772 if (ieta >= 0 and ieta < m_s12ConvertedGraphs->GetSize()) {
3775 }
else if (iLayer == 6) {
3778 if (ieta >= 0 && ieta < m_EaccConvertedGraphs->GetSize()) {
3779 if (ET < 10000. && (aeta < 1.2 || (aeta >= 1.59 && aeta < 1.73))) {
3811 double aeta = std::abs(cl_eta);
3914 double varSF)
const {
3924 if (std::abs(cl_eta) < 2.)
3938 double DAlphaDXID, DAlphaDXCryo, DAlphaDXCalo, DAlphaDXGp;
3939 DAlphaDXID = DAlphaDXCryo = DAlphaDXCalo = DAlphaDXGp = 0;
3967 value = -DAlphaDXGp;
3994 value = DeltaX * (DAlphaDXID - DAlphaDXCryo);
3996 value = DeltaX * DAlphaDXCryo;
3998 value = DeltaX * DAlphaDXCalo;
4000 return value * varSF;
4005 double cl_eta,
double ET)
const {
4060 double aeta = std::abs(cl_eta);
4061 int ieta = hmat->GetXaxis()->FindBin(aeta);
4063 int ipt = hmat->GetYaxis()->FindBin(ET);
4064 double ptBin = hmat->GetYaxis()->GetBinCenter(ipt);
4072 pt2 = hmat->GetYaxis()->GetBinCenter(i2);
4076 pt1 = hmat->GetYaxis()->GetBinCenter(i1);
4080 int nbins = hmat->GetYaxis()->GetNbins();
4082 if (i1 >= 1 && i1 <
nbins) {
4085 value = (v1 * (pt2 - ET) +
v2 * (ET - pt1)) / (pt2 - pt1);
4101 double varSF)
const {
4104 double ET =
energy / cosh(cl_eta) /
GeV;
4118 if (std::abs(cl_eta) < 2.)
4126 if (std::abs(cl_eta) > 1.52 &&
4147 double DAlphaDXGp, DAlphaDXID, DAlphaDXCryo, DAlphaDXCalo;
4168 ->GetFunction(
"fNonLin")
4171 ->GetFunction(
"fNonLin")
4174 ->GetFunction(
"fNonLin")
4177 ->GetFunction(
"fNonLin")
4188 value = -DAlphaDXGp;
4225 value = DeltaX * (DAlphaDXID - DAlphaDXCryo);
4227 value = DeltaX * DAlphaDXCryo;
4229 value = DeltaX * DAlphaDXCalo;
4231 return value * varSF;
4239 double aeta = std::abs(cl_eta);
4266 return alpha * varSF;
4285 double aeta = std::abs(cl_eta);
4301 double etGeV =
et /
GeV;
4302 double alpha = 0, dalpha = 0;
4316 std::pair<double, double>
p =
4342 return alpha * varSF;
4346 const TH1&
hh,
double aeta,
double et,
bool useInterp)
const {
4350 int ibeta =
hh.GetXaxis()->FindBin(aeta);
4351 int nbpT =
hh.GetYaxis()->GetNbins();
4352 int ibpT =
hh.GetYaxis()->FindBin(
et);
4353 bool isOUFlow =
false;
4357 }
else if (ibpT == 0) {
4362 double pTp =
hh.GetYaxis()->GetBinCenter(ibpT), pTn = pTp;
4363 if (!useInterp || isOUFlow || (ibpT == nbpT &&
et > pTp) ||
4364 (ibpT == 1 &&
et < pTp))
4365 alpha =
hh.GetBinContent(ibeta, ibpT);
4367 int jp = ibpT, jn = ibpT - 1;
4372 pTp =
hh.GetYaxis()->GetBinCenter(jp);
4374 pTn =
hh.GetYaxis()->GetBinCenter(jn);
4376 double aPos =
hh.GetBinContent(ibeta, jp);
4377 double aNeg =
hh.GetBinContent(ibeta, jn);
4378 alpha = (aPos * (
et - pTn) + aNeg * (pTp -
et)) / (pTp - pTn);
4380 << aNeg <<
" alpha = " << alpha);
4382 double dalpha =
hh.GetBinError(ibeta, ibpT);
4384 return std::make_pair(alpha, dalpha);
4392 double aeta = std::abs(cl_eta);
4395 double ET =
energy / std::cosh(cl_eta);
4441 return alpha * varSF;
4445 const TH2& conv_hist,
double aeta,
double ET)
const {
4448 int ieta = conv_hist.GetXaxis()->FindBin(aeta);
4450 int ipt = conv_hist.GetYaxis()->FindBin(ET);
4451 double ptBin = conv_hist.GetYaxis()->GetBinCenter(ipt);
4459 pt2 = conv_hist.GetYaxis()->GetBinCenter(i2);
4463 pt1 = conv_hist.GetYaxis()->GetBinCenter(i1);
4467 int nbins = conv_hist.GetYaxis()->GetNbins();
4469 if (i1 >= 1 && i1 <
nbins) {
4470 double v1 = conv_hist.GetBinContent(ieta, i1);
4471 double v2 = conv_hist.GetBinContent(ieta, i2);
4472 value = (v1 * (pt2 - ET) +
v2 * (ET - pt1)) / (pt2 - pt1);
4478 value = conv_hist.GetBinContent(ieta, ipt);
4485 double cl_eta,
double energy,
double eraw,
4492 const double delta =
4494 alpha = delta / (
energy / cosh(cl_eta));
4510 alpha = 10. / (
energy / cosh(cl_eta));
4523 alpha = pedestal /
energy *
4526 alpha = pedestal / eraw;
4530 return alpha * varSF;
4537 double pedestal = 0.;
4538 double aeta = std::abs(cl_eta);
4545 else if (iLayer == 1)
4547 else if (iLayer == 2)
4549 else if (iLayer == 3)
4555 else if (iLayer == 2)
4556 pedestal *= 15. / 21.;
4563 return pedestal * varSF;
4568 return std::abs(cl_eta) >= 1.35 && std::abs(cl_eta) <= 1.55;
4573 double newEta = cl_eta;
4578 if (newEta >= 1.35 && newEta <= 1.45)
4580 if (newEta >= 1.45 && newEta <= 1.55)
4583 if (newEta >= -1.55 && newEta <= -1.45)
4585 if (newEta >= -1.45 && newEta <= -1.35)
4614 pileupNoise = sqrt(avgmu) * (60. + 40. *
log(
et / 10000.) /
log(5.));
4621 if (std::abs(
eta) < 1.4)
4630 double&
resolution,
double& resolution_error,
double& resolution_error_up,
4631 double& resolution_error_down,
int resol_type,
bool fast)
const {
4646 (pileupNoise * pileupNoise) / (
et *
et);
4649 double_t sum_sigma_resolution2 = 0.;
4650 double sum_deltaDown = 0.;
4651 double sum_deltaUp = 0.;
4653 for (
int isys = 0; isys < 11; isys++) {
4655 if (syst_mask & (1 << isys)) {
4658 double sigma2up = 0.;
4659 double sigma2down = 0.;
4663 double d1 = (smearingZ + esmearingZ) * (smearingZ + esmearingZ) -
4664 smearingZ * smearingZ;
4665 double d2 = smearingZ * smearingZ -
4666 (smearingZ - esmearingZ) * (smearingZ - esmearingZ);
4667 double d = 0.5 * (
d1 +
d2);
4672 boost::format(
"sys resolution Zsmearing: %.7f %.7f %.7f") % sigma2 %
4673 sigma2up % sigma2down);
4679 3, 40000. * cosh(
eta),
eta, resol_type);
4680 double deltaSigma2 = (1.1 * resolutionZ) * (1.1 * resolutionZ) -
4681 resolutionZ * resolutionZ;
4682 double resolution1 =
4684 sigma2up = (1.1 * resolution1) * (1.1 * resolution1) -
4685 resolution1 * resolution1 - deltaSigma2;
4686 deltaSigma2 = (0.9 * resolutionZ) * (0.9 * resolutionZ) -
4687 resolutionZ * resolutionZ;
4688 sigma2down = (0.9 * resolution1) * (0.9 * resolution1) -
4689 resolution1 * resolution1 - deltaSigma2;
4690 sigma2 = 0.5 * (sigma2up - sigma2down);
4692 boost::format(
"sys resolution intrinsic: %.7f %.7f %.7f") % sigma2 %
4693 sigma2up % sigma2down);
4697 else if (isys == 2) {
4700 sigma2 = sigmaA * sigmaA;
4702 sigma2down = -1. * sigma2;
4705 "sys resolution configA ID material: %.7f %.7f %.7f") %
4706 sigma2 % sigma2up % sigma2down);
4711 else if (isys == 3) {
4712 if (std::abs(
eta) < 1.45) {
4715 sigma2 = 0.5 * sigmaM * sigmaM;
4719 sigma2down = -1. * sigma2;
4721 boost::format(
"sys resolution presampler-layer1: %.7f %.7f %.7f") %
4722 sigma2 % sigma2up % sigma2down);
4727 else if (isys == 4) {
4728 if (std::abs(
eta) > 1.52 && std::abs(
eta) < 1.82) {
4735 sigma2down = -1. * sigma2;
4737 boost::format(
"sys resolution barrel-endcap gap: %.7f %.7f %.7f") %
4738 sigma2 % sigma2up % sigma2down);
4743 else if (isys == 5) {
4746 sigma2 = 0.5 * sigmaEL * sigmaEL;
4748 sigma2down = -1. * sigma2;
4750 boost::format(
"sys resolution cryostat area: %.7f %.7f %.7f") %
4751 sigma2 % sigma2up % sigma2down);
4756 else if (isys == 6) {
4758 double sigmaPileUp = 0.;
4768 sqrt(1.1 * 1.1 - 1.0) *
4770 sigmaPileUp = deltaNoise /
et;
4771 sigmaZ = deltaNoise / 40000.;
4780 double deltaPileupNoise = 100.;
4781 if (std::abs(
eta) >= 1.4 && std::abs(
eta) < 1.8)
4782 deltaPileupNoise = 200.;
4783 double scaleNcells = 1;
4785 scaleNcells = sqrt(3. / 5.);
4787 sigmaPileUp = deltaPileupNoise * scaleNcells /
et;
4789 deltaPileupNoise / (40000.);
4793 sigma2down = -1. * sigma2;
4795 boost::format(
"sys resolution pileup noise: %.7f %.7f %.7f") %
4796 sigma2 % sigma2up % sigma2down);
4800 else if (isys == 7 && std::abs(
eta) < 1.5 &&
4815 sigma2 = sigmaE * sigmaE;
4817 sigma2down = -1. * sigma2;
4819 boost::format(
"sys resolution ibl material: %.7f %.7f %.7f") %
4820 sigma2 % sigma2up % sigma2down);
4824 else if (isys == 8 && std::abs(
eta) > 1.5 &&
4840 sigma2 = 2.3 * sigmaE * sigmaE;
4842 sigma2down = -1. * sigma2;
4844 boost::format(
"sys resolution pp0 material: %.7f %.7f %.7f") %
4845 sigma2 % sigma2up % sigma2down);
4851 else if (isys == 9 &&
4859 const double ptGeV =
et / 1
e3;
4862 true,
true,
true,
true);
4865 ptGeV,
true,
true,
true,
true);
4868 ptGeV,
true,
true,
true,
true);
4869 sigma2up = -1. * sigma2;
4871 sigma2down = sigma2;
4876 double d1 = (smearingZ + esmearingOFC) * (smearingZ + esmearingOFC) -
4877 smearingZ * smearingZ;
4878 double d2 = smearingZ * smearingZ -
4879 (smearingZ - esmearingOFC) * (smearingZ - esmearingOFC);
4880 double d = 0.5 * (
d1 +
d2);
4885 sigma2 % sigma2up % sigma2down);
4902 if ((resolution2 + sigma2up) > 0.)
4903 rr1 = sqrt(resolution2 + sigma2up);
4905 if ((resolution2 + sigma2down) > 0.)
4906 rr2 = sqrt(resolution2 +
4908 double deltaSigma_sys;
4914 sum_sigma_resolution2 += deltaSigma_sys * deltaSigma_sys;
4916 if ((resolution2 + sigma2up) > 0.)
4917 rr1 = sqrt(resolution2 + sigma2up);
4923 if ((resolution2 + sigma2down) > 0.)
4924 rr2 = sqrt(resolution2 + sigma2down);
4928 ATH_MSG_VERBOSE(
"relative resolution change Down " << deltaSigmaDown);
4930 sum_deltaUp += deltaSigmaUp;
4931 sum_deltaDown += deltaSigmaDown;
4936 resolution_error = sqrt(sum_sigma_resolution2) *
4939 resolution_error_up = sum_deltaUp *
resolution;
4940 resolution_error_down = sum_deltaDown *
resolution;
4944 <<
" Resolution Error (MeV): " << resolution_error <<
" down "
4945 << resolution_error_down <<
" up " << resolution_error_up
4946 <<
" Z smearing " << smearingZ <<
" +- " << esmearingZ
4947 <<
" using mask " << syst_mask);
4958 return "topoClusterThresUp";
4960 return "topoClusterThresDown";
4962 return "MomentumUp";
4964 return "MomentumDown";
4968 return "ZeeStatDown";
4972 return "ZeeSystDown";
4976 return "ZeePhysDown";
4980 return "ZeeAllDown";
4982 return "LArCalibUp";
4984 return "LArCalibDown";
4986 return "LArUnconvCalibUp";
4988 return "LArUnconvCalibDown";
4990 return "LArElecCalibUp";
4992 return "LArElecCalibDown";
4994 return "LArCalibExtra2015PreUp";
4996 return "LArCalibExtra2015PreDown";
4998 return "LArElecUnconvUp";
5000 return "LArElecUnconvDown";
5018 return "S12ExtraLastEtaBinRun2Up";
5020 return "S12ExtraLastEtaBinRun2Down";
5028 return "MatCryoDown";
5032 return "MatCaloDown";
5036 return "L1GainDown";
5040 return "L2GainDown";
5042 return "L2LowGainDown";
5044 return "L2LowGainUp";
5046 return "L2MediumGainDown";
5048 return "L2MediumGainUp";
5052 return "ADCLinDown";
5054 return "LeakageElecUp";
5056 return "LeakageElecDown";
5058 return "ConvRecoUp";
5060 return "ConvRecoDown";
5066 return "LeakageUnconvUp";
5068 return "LeakageUnconvDown";
5070 return "LeakageConvUp";
5072 return "LeakageConvDown";
5074 return "ConvEfficiencyUp";
5076 return "ConvEfficiencyDown";
5078 return "ConvFakeRateUp";
5080 return "ConvFakeRateDown";
5082 return "ConvRadiusUp";
5084 return "ConvRadiusDown";
5086 return "PedestalUp";
5088 return "PedestalDown";
5094 return "AllCorrelatedUp";
5096 return "AllCorrelatedDown";
5098 return "LArTemperature2015PreUp";
5100 return "LArTemperature2015PreDown";
5102 return "LArTemperature2016PreUp";
5104 return "LArTemperature2016PreDown";
5106 return "E4ScintillatorUp";
5108 return "E4ScintillatorDown";
5112 return "MatPP0Down";
5116 return "Wtots1Down";
5118 return "LastScaleVariation";
5124 return "EXTRARUN3PREUp";
5126 return "EXTRARUN3PREDown";
5136 return "Resolution::None";
5138 return "Resolution::Nominal";
5140 return "Resolution::AllDown";
5142 return "Resolution::AllUp";
5144 return "Resolution::ZSmearingUp";
5146 return "Resolution::ZSmearingDown";
5148 return "Resolution::SamplingTermUp";
5150 return "Resolution::SamplingTermDown";
5152 return "Resolution::MaterialUp";
5154 return "Resolution::MaterialDown";
5156 return "Resolution::MaterialUp";
5158 return "Resolution::MaterialDown";
5160 return "Resolution::MaterialUp";
5162 return "Resolution::MaterialDown";
5164 return "Resolution::MaterialUp";
5166 return "Resolution::MaterialDown";
5168 return "Resolution::PileUpUp";
5170 return "Resolution::PileUpDown";
5172 return "Resolution::MaterialPP0Up";
5174 return "Resolution::MaterialPP0Down";
5176 return "Resolution::MaterialIBLUp";
5178 return "Resolution::MaterialIBLDown";
5180 return "Resolution::af2Up";
5182 return "Resolution::af2Down";
5184 return "Resolution::OFCUp";
5186 return "Resolution::OFCDown";
5188 return "LastResolutionVariation";
5190 return "Resolution::Unknown";
5195 const auto ieta = std::as_const(*m_zeeSyst).GetXaxis()->FindFixBin(
eta);
5196 auto value_histo =
m_zeeSyst->GetBinContent(ieta);
5202 const auto ieta = std::as_const(*m_zeeSystOFC).GetXaxis()->FindFixBin(
eta);
5209 return *std::as_const(*m_zeeNom).GetXaxis();