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);
153 return z0 + (xvalue-x0)*((z1-
z0)/(
x1-x0));
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);
169 return z0 + (yvalue-y0)*((z1-
z0)/(
y1-y0));
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"));
320 load(
m_zeeNom,
"Scales/es2011dMedium/alphaZee_errStat");
323 load(
m_resNom,
"Resolution/es2011dMedium/ctZee_errStat");
331 load(
m_resNom,
"Resolution/es2011dTight/ctZee_errStat");
362 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
364 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
366 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
370 "e1hg_systematics_histos.root"));
436 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
438 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
440 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
444 "e1hg_systematics_histos.root"));
490 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
492 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
494 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
498 "e1hg_systematics_histos.root"));
554 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
556 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
558 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
562 "e1hg_systematics_histos.root"));
581 load(
m_resSyst,
"Resolution/es2015PRE_res_improved/ctZee_errSyst");
617 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
619 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
621 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
625 "e1hg_systematics_histos.root"));
642 load(
m_resNom,
"Resolution/es2015Summer/ctZee_errStat");
680 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
682 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
684 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
688 "e1hg_systematics_histos.root"));
706 load(
m_resNom,
"Resolution/es2015Summer/ctZee_errStat");
744 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
746 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
748 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
752 "e1hg_systematics_histos.root"));
796 load(
m_aPSNom,
"Scales/es2017_summer_final/alphaPS_uncor");
799 load(
m_aS12Nom,
"Scales/es2017_summer_final/alphaS12_uncor");
802 load(
m_aPSNom,
"Scales/es2017_summer_final/alphaPS_uncor");
808 load(
m_aPSNom,
"Scales/es2023_R22_Run2_v0/alphaPS_uncor");
813 load(
m_aPSNom,
"Scales/es2023_R22_Run2_v0/alphaPS_uncor");
814 load(
m_aS12Nom,
"Scales/es2023_R22_Run2_v1/hE1E2_emu_run2_rel21_v0_fix");
824 load(
m_zeeNom,
"Scales/es2017/alphaZee_errStat_period_2016");
828 load(
m_zeeNom,
"Scales/es2017_summer/alphaZee_errStat_period_2016");
831 load(
m_zeeNom,
"Scales/es2017_summer_final/alphaZee_errStat_period_2016");
834 load(
m_zeeNom,
"Scales/es2015_5TeV/alphaZee_errStat_period_2015");
838 load(
m_zeeNom,
"Scales/es2017_R21_v0/alphaZee_errStat_period_2017");
842 load(
m_zeeNom,
"Scales/es2017_R21_v1/alphaZee_errStat_period_2017");
846 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalk")));
848 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalb")));
850 load(
m_zeeNom,
"Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2017");
855 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalk")));
857 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalb")));
859 load(
m_zeeNom,
"Scales/es2024_Run3_ofc0_v0/alphaZee_errStat");
861 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalk")));
863 rootFile->Get(
"Scales/es2017_R21_v1/alphaFwd_Finalb")));
866 load(
m_zeeNom,
"Scales/es2018_R21_v0/alphaZee_errStat_period_2018");
871 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
873 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
875 m_zeeNom.reset(checked_own_cast<TH1*>(
876 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2018")));
878 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2017")));
880 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2016")));
882 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errStat_period_2015")));
885 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
887 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
889 m_zeeNom.reset(checked_own_cast<TH1*>(
890 rootFile->Get(
"Scales/es2022_R22_PRE/alphaZee_errStat_period_2018")));
893 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
895 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
898 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2018")));
900 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2017")));
902 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2016")));
904 "Scales/es2023_R22_Run2_v0/alphaZee_errStat_period_2015")));
907 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
909 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
913 "Scales/es2023_R22_Run2_v1/alphaZee_errStat_period_2018")));
915 "Scales/es2023_R22_Run2_v1/alphaZee_errStat_period_2017")));
917 "Scales/es2023_R22_Run2_v1/alphaZee_errStat_period_2016")));
919 "Scales/es2023_R22_Run2_v1/alphaZee_errStat_period_2015")));
922 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalk")));
924 rootFile->Get(
"Scales/es2018_R21_v0/alphaFwd_Finalb")));
926 m_zeeNom.reset(checked_own_cast<TH1*>(
927 rootFile->Get(
"Scales/es2024_Run3_v0/alphaZee_errStat_period_2024")));
929 rootFile->Get(
"Scales/es2024_Run3_v0/alphaZee_errStat_period_2023")));
931 rootFile->Get(
"Scales/es2024_Run3_v0/alphaZee_errStat_period_2022")));
933 m_zeeNom.reset(checked_own_cast<TH1*>(
934 rootFile->Get(
"Scales/es2017_R21_PRE/alphaZee_errStat_period_2016")));
937 rootFile->Get(
"Scales/es2017_R21_PRE/alphaZee_errStat_period_2016")));
941 rootFile->Get(
"Scales/es2017/alphaZee_errSyst")));
944 rootFile->Get(
"Scales/es2017_summer_final/alphaZee_errSyst")));
947 rootFile->Get(
"Scales/es2015_5TeV/alphaZee_errSyst")));
950 rootFile->Get(
"Scales/es2017_summer_final/alphaZee_errSyst")));
953 rootFile->Get(
"Scales/es2017_R21_v1/alphaZee_errSyst")));
956 rootFile->Get(
"Scales/es2017_R21_ofc0_v1/alphaZee_errSyst")));
959 rootFile->Get(
"Scales/es2024_Run3_ofc0_v0/alphaZee_errSyst")));
962 rootFile->Get(
"Scales/es2018_R21_v0/alphaZee_errSyst")));
968 rootFile->Get(
"Scales/es2018_R21_v1/alphaZee_errSyst")));
971 rootFile->Get(
"Scales/es2022_R22_PRE/alphaZee_errSyst")));
973 rootFile->Get(
"Scales/es2022_R22_PRE/alphaZee_errOFCSyst")));
976 rootFile->Get(
"Scales/es2017_summer/alphaZee_errSyst")));
981 m_resNom.reset(checked_own_cast<TH1*>(
982 rootFile->Get(
"Resolution/es2017/ctZee_errStat")));
986 m_resNom.reset(checked_own_cast<TH1*>(
987 rootFile->Get(
"Resolution/es2017_summer/ctZee_errStat")));
989 m_resNom.reset(checked_own_cast<TH1*>(
990 rootFile->Get(
"Resolution/es2017_summer_final/ctZee_errStat")));
992 m_resNom.reset(checked_own_cast<TH1*>(
993 rootFile->Get(
"Resolution/es2017_R21_v0/ctZee_errStat")));
995 m_resNom.reset(checked_own_cast<TH1*>(
996 rootFile->Get(
"Resolution/es2017_R21_v1/ctZee_errStat")));
998 m_resNom.reset(checked_own_cast<TH1*>(
999 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errStat")));
1002 m_resNom.reset(checked_own_cast<TH1*>(
1003 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errStat")));
1005 m_resNom.reset(checked_own_cast<TH1*>(
1006 rootFile->Get(
"Resolution/es2018_R21_v0/ctZee_errStat")));
1008 m_resNom.reset(checked_own_cast<TH1*>(
1009 rootFile->Get(
"Resolution/es2018_R21_v1/ctZee_errStat")));
1011 m_resNom.reset(checked_own_cast<TH1*>(
1012 rootFile->Get(
"Resolution/es2022_R22_PRE/ctZee_errStat")));
1014 m_resNom.reset(checked_own_cast<TH1*>(
1015 rootFile->Get(
"Resolution/es2023_R22_Run2_v0/ctZee_errStat")));
1017 m_resNom.reset(checked_own_cast<TH1*>(
1018 rootFile->Get(
"Resolution/es2023_R22_Run2_v1/ctZee_errStat")));
1020 m_resNom.reset(checked_own_cast<TH1*>(
1021 rootFile->Get(
"Resolution/es2024_Run3_v0/ctZee_errStat")));
1023 m_resNom.reset(checked_own_cast<TH1*>(
1024 rootFile->Get(
"Resolution/es2017_R21_PRE/ctZee_errStat")));
1029 rootFile->Get(
"Resolution/es2017/ctZee_errSyst")));
1032 rootFile->Get(
"Resolution/es2017_summer_final/ctZee_errSyst")));
1035 rootFile->Get(
"Resolution/es2015_5TeV/ctZee_errSyst")));
1038 rootFile->Get(
"Resolution/es2017_summer_final/ctZee_errSyst")));
1041 rootFile->Get(
"Resolution/es2017_R21_v1/ctZee_errSyst")));
1044 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errSyst")));
1048 rootFile->Get(
"Resolution/es2017_R21_ofc0_v1/ctZee_errSyst")));
1051 rootFile->Get(
"Resolution/es2018_R21_v0/ctZee_errSyst")));
1057 rootFile->Get(
"Resolution/es2018_R21_v1/ctZee_errSyst")));
1060 rootFile->Get(
"Resolution/es2022_R22_PRE/ctZee_errSyst")));
1062 rootFile->Get(
"Resolution/es2022_R22_PRE/ctZee_errOFCSyst")));
1065 rootFile->Get(
"Resolution/es2017_summer/ctZee_errSyst")));
1073 checked_own_cast<TH1*>(
rootFile->Get(
"Pedestals/es2017/pedestals")));
1076 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA")));
1079 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errUncor")));
1081 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
1084 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errUncor")));
1086 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errLAr")));
1088 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
1090 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errGL1")));
1093 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errUncor")));
1095 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errLAr")));
1097 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
1100 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
1103 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
1105 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
1109 rootFile->Get(
"Conversions/es2023_R22_Run2_v0/convFakeRate")));
1111 rootFile->Get(
"Conversions/es2023_R22_Run2_v0/convRecoEfficiency")));
1114 rootFile->Get(
"Conversions/es2024_Run3_v0/conv_energybias")));
1116 rootFile->Get(
"Conversions/es2024_Run3_v0/unconv_energybias")));
1119 rootFile->Get(
"Conversions/es2017_summer/convFakeRate")));
1121 rootFile->Get(
"Conversions/es2017_summer/convRecoEfficiency")));
1128 "ElectronPhotonFourMomentumCorrection/v8/PP0sys.root");
1130 TFile file_pp0(filename_pp0.c_str());
1131 m_pp0_elec.reset(checked_own_cast<TH2*>(file_pp0.Get(
"elec")));
1132 m_pp0_conv.reset(checked_own_cast<TH2*>(file_pp0.Get(
"conv")));
1133 m_pp0_unconv.reset(checked_own_cast<TH2*>(file_pp0.Get(
"unco")));
1137 "ElectronPhotonFourMomentumCorrection/v8/wstot_related_syst.root");
1139 TFile file_wstot(filename_wstot.c_str());
1141 checked_own_cast<TH1*>(file_wstot.Get(
"A_data")));
1144 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_data_p0")));
1146 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_data_p1")));
1148 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_uc_data_p0")));
1150 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_uc_data_p1")));
1152 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_c_data_p0")));
1154 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_c_data_p1")));
1156 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_mc_p0")));
1158 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_el_mc_p1")));
1160 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_uc_mc_p0")));
1162 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_uc_mc_p1")));
1164 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_c_mc_p0")));
1166 checked_own_cast<TH1*>(file_wstot.Get(
"wstot_pT_ph_c_mc_p1")));
1176 rootFile->Get(
"FastSim/es2017_v1/resol_Af2ToG4_elec_rel21")));
1178 rootFile->Get(
"FastSim/es2017_v1/resol_Af2ToG4_unco_rel21")));
1180 rootFile->Get(
"FastSim/es2017_v1/resol_Af2ToG4_conv_rel21")));
1187 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/resol_AF3ToG4_elec_rel22")));
1189 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/resol_AF3ToG4_unco_rel22")));
1191 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/resol_AF3ToG4_conv_rel22")));
1195 rootFile->Get(
"FastSim/es2024_Run3_v0/resol_AF3ToG4_elec_mc23")));
1197 rootFile->Get(
"FastSim/es2024_Run3_v0/resol_AF3ToG4_unco_mc23")));
1199 rootFile->Get(
"FastSim/es2024_Run3_v0/resol_AF3ToG4_conv_mc23")));
1202 rootFile->Get(
"FastSim/es2024_Run3_v0/adhoc_resol_AF3ToG4_elec_mc23_1p3_1p35")));
1204 rootFile->Get(
"FastSim/es2024_Run3_v0/adhoc_resol_AF3ToG4_elec_mc23_1p3_1p35")));
1206 rootFile->Get(
"FastSim/es2024_Run3_v0/adhoc_resol_AF3ToG4_unconv_mc23_1p3_1p35")));
1210 rootFile->Get(
"FastSim/es2017/el_full_fast_resolution")));
1212 rootFile->Get(
"FastSim/es2017/ph_unconv_full_fast_resolution")));
1214 rootFile->Get(
"FastSim/es2017/ph_conv_full_fast_resolution")));
1221 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
1223 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
1226 std::string gain_tool_run_2_filename;
1227 std::string gain_tool_run3_extra_filename;
1233 "ElectronPhotonFourMomentumCorrection/v11/"
1234 "gain_uncertainty_specialRun.root");
1239 "ElectronPhotonFourMomentumCorrection/v29/"
1240 "gain_uncertainty_specialRun.root");
1243 "ElectronPhotonFourMomentumCorrection/v38/"
1244 "gain_uncertainty_specialRun.root");
1248 "ElectronPhotonFourMomentumCorrection/v14/"
1249 "gain_uncertainty_specialRun.root");
1255 gain_tool_run_2_filename,
true,
"GainUncertainty",
1259 gain_tool_run3_extra_filename,
true,
"GainUncertainty",
1264 std::make_unique<egGain::GainUncertainty>(gain_tool_run_2_filename);
1274 "e1hg_systematics_histos.root"));
1278 "e1hg_systematics_histos.root"));
1287 m_aPSNom.reset(checked_own_cast<TH1*>(
1288 rootFile->Get(
"Scales/es2015_day0/alphaPS_uncor")));
1290 rootFile->Get(
"Scales/es2015_day0/dalphaPS_cor")));
1292 rootFile->Get(
"Scales/es2015_day0/alphaS12_uncor")));
1294 rootFile->Get(
"Scales/es2015_day0/dalphaS12_cor")));
1297 rootFile->Get(
"Scales/es2015_day0/momentum_errSyst")));
1299 m_zeeNom.reset(checked_own_cast<TH1*>(
1300 rootFile->Get(
"Scales/es2015_day0/alphaZee_errStat")));
1302 rootFile->Get(
"Scales/es2015_day0/alphaZee_errSyst")));
1304 m_resNom.reset(checked_own_cast<TH1*>(
1305 rootFile->Get(
"Resolution/es2012c/ctZee_errStat")));
1307 rootFile->Get(
"Resolution/es2012c/ctZee_errSyst")));
1310 rootFile->Get(
"Pedestals/es2012c/pedestals_l0")));
1312 rootFile->Get(
"Pedestals/es2012c/pedestals_l1")));
1314 rootFile->Get(
"Pedestals/es2012c/pedestals_l2")));
1316 rootFile->Get(
"Pedestals/es2012c/pedestals_l3")));
1319 rootFile->Get(
"Material/DX0_ConfigA")));
1322 "Material/Measured/DXerr_IPPS_NewG_errUncor")));
1324 rootFile->Get(
"Material/Measured/DXerr_IPPS_NewG_errLAr")));
1327 "Material/Measured/DXerr_IPAcc_NewG_errUncor")));
1329 "Material/Measured/DXerr_IPAcc_NewG_errLAr")));
1331 rootFile->Get(
"Material/Measured/DXerr_IPAcc_NewG_errG4")));
1333 "Material/Measured/DXerr_IPAcc_NewG_errGL1")));
1336 "Material/Measured/DXerr_PSAcc_NewG_errUncor")));
1338 "Material/Measured/DXerr_PSAcc_NewG_errLAr")));
1340 rootFile->Get(
"Material/Measured/DXerr_PSAcc_NewG_errG4")));
1343 rootFile->Get(
"Conversions/es2012c/convRadiusMigrations")));
1345 rootFile->Get(
"Conversions/es2012c/convFakeRate")));
1347 rootFile->Get(
"Conversions/es2012c/convRecoEfficiency")));
1353 "ElectronPhotonFourMomentumCorrection/v8/FunctionsTO.root");
1355 "ElectronPhotonFourMomentumCorrection/v8/FunctionsG_all.root");
1357 std::make_unique<egGain::GainTool>(gain_filename1, gain_filename2);
1361 "e1hg_systematics_histos.root"));
1366 ATH_MSG_FATAL(
"ES model not initialized - Initialization fails");
1369 ATH_MSG_FATAL(
"ES model not recognized - Initialization fails");
1394 rootFile->Get(
"E4Recalibration/v4/electron_eta_axis")));
1396 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/v4/electron")));
1399 rootFile->Get(
"E4Recalibration/v4/electron_eta_axis")));
1401 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/v4/electron")));
1403 rootFile->Get(
"E4Recalibration/v4/electron_eta_axis")));
1405 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/v4/electron")));
1410 rootFile->Get(
"E4Recalibration/es2024_Run3_v0/E4_eta_axis")));
1412 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/es2024_Run3_v0/electron_sensitivity")));
1414 rootFile->Get(
"E4Recalibration/es2024_Run3_v0/E4_eta_axis")));
1416 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/es2024_Run3_v0/unconv_photon_sensitivity")));
1418 rootFile->Get(
"E4Recalibration/es2024_Run3_v0/E4_eta_axis")));
1420 checked_own_cast<TList*>(
rootFile->Get(
"E4Recalibration/es2024_Run3_v0/conv_photon_sensitivity")));
1445 rootFile->Get(
"PSRecalibration/es2015PRE/ElectronAxis")));
1447 rootFile->Get(
"PSRecalibration/es2015PRE/ElectronBiasPS")));
1449 rootFile->Get(
"PSRecalibration/es2015PRE/UnconvertedAxis")));
1451 rootFile->Get(
"PSRecalibration/es2015PRE/UnconvertedBiasPS")));
1453 rootFile->Get(
"PSRecalibration/es2015PRE/ConvertedAxis")));
1455 rootFile->Get(
"PSRecalibration/es2015PRE/ConvertedBiasPS")));
1458 rootFile->Get(
"S1Recalibration/es2015PRE/ElectronAxis")));
1460 rootFile->Get(
"S1Recalibration/es2015PRE/ElectronBiasS1")));
1462 rootFile->Get(
"S1Recalibration/es2015PRE/UnconvertedAxis")));
1464 rootFile->Get(
"S1Recalibration/es2015PRE/UnconvertedBiasS1")));
1466 rootFile->Get(
"S1Recalibration/es2015PRE/ConvertedAxis")));
1468 rootFile->Get(
"S1Recalibration/es2015PRE/ConvertedBiasS1")));
1473 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ElectronAxis")));
1475 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ElectronBiasPS")));
1477 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/UnconvertedAxis")));
1479 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/UnconvertedBiasPS")));
1481 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ConvertedAxis")));
1483 rootFile->Get(
"PSRecalibration/es2023_R22_Run2_v0/ConvertedBiasPS")));
1486 rootFile->Get(
"S2Recalibration/ElectronAxis")));
1488 rootFile->Get(
"S2Recalibration/ElectronBiasS2")));
1490 rootFile->Get(
"S2Recalibration/UnconvertedAxis")));
1492 rootFile->Get(
"S2Recalibration/UnconvertedBiasS2")));
1494 rootFile->Get(
"S2Recalibration/ConvertedAxis")));
1496 rootFile->Get(
"S2Recalibration/ConvertedBiasS2")));
1499 rootFile->Get(
"SaccRecalibration/ElectronAxis")));
1502 rootFile->Get(
"SaccRecalibration/es2024_Run3_v0/ElectronBiasSacc")));
1506 rootFile->Get(
"SaccRecalibration/ElectronBiasSacc")));
1509 rootFile->Get(
"SaccRecalibration/UnconvertedAxis")));
1511 rootFile->Get(
"SaccRecalibration/UnconvertedBiasSacc")));
1513 rootFile->Get(
"SaccRecalibration/ConvertedAxis")));
1515 rootFile->Get(
"SaccRecalibration/ConvertedBiasSacc")));
1519 rootFile->Get(
"PSRecalibration/ElectronAxis")));
1521 rootFile->Get(
"PSRecalibration/ElectronBiasPS")));
1523 rootFile->Get(
"PSRecalibration/UnconvertedAxis")));
1525 rootFile->Get(
"PSRecalibration/UnconvertedBiasPS")));
1527 rootFile->Get(
"PSRecalibration/ConvertedAxis")));
1529 rootFile->Get(
"PSRecalibration/ConvertedBiasPS")));
1532 rootFile->Get(
"S1Recalibration/ElectronAxis")));
1534 rootFile->Get(
"S1Recalibration/ElectronBiasS1")));
1536 rootFile->Get(
"S1Recalibration/UnconvertedAxis")));
1538 rootFile->Get(
"S1Recalibration/UnconvertedBiasS1")));
1540 rootFile->Get(
"S1Recalibration/ConvertedAxis")));
1542 rootFile->Get(
"S1Recalibration/ConvertedBiasS1")));
1549 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1550 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigA"))));
1552 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1553 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigCpDp"))));
1555 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1556 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigEpLp"))));
1558 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1559 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigFpMX"))));
1561 std::unique_ptr<TH1>(checked_own_cast<TH1*>(
1562 rootFile->Get(
"Material/unconvertedBiasSubtracted_ConfigGp"))));
1565 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigA"))));
1567 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigCpDp"))));
1569 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigEpLp"))));
1571 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigFpMX"))));
1573 rootFile->Get(
"Material/convertedBiasSubtracted_ConfigGp"))));
1576 rootFile->Get(
"Material/electronCstTerm_ConfigA"))));
1578 rootFile->Get(
"Material/electronCstTerm_ConfigCpDp"))));
1580 rootFile->Get(
"Material/electronCstTerm_ConfigEpLp"))));
1582 rootFile->Get(
"Material/electronCstTerm_ConfigFpMX"))));
1584 rootFile->Get(
"Material/electronCstTerm_ConfigGp"))));
1597 checked_own_cast<TH1*>(
rootFile->Get(
"Material_rel21/DX0_ConfigA"))));
1599 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigCpDp"))));
1601 rootFile->Get(
"Material_rel21/DX0_ConfigEpLp"))));
1603 rootFile->Get(
"Material_rel21/DX0_ConfigFpMX"))));
1605 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigGp"))));
1607 checked_own_cast<TH1*>(
rootFile->Get(
"Material_rel21/DX0_ConfigN"))));
1610 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigA"))));
1612 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigCpDp"))));
1614 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigEpLp"))));
1616 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigFpMX"))));
1618 checked_own_cast<TH1*>(
rootFile->Get(
"Material/DX0_ConfigGp"))));
1622 checked_own_cast<TAxis*>(
rootFile->Get(
"Material/LinearityEtaBins")));
1624 std::unique_ptr<TList>(checked_own_cast<TList*>(
1625 rootFile->Get(
"Material/Linearity_Cluster_ConfigA"))));
1627 std::unique_ptr<TList>(checked_own_cast<TList*>(
1628 rootFile->Get(
"Material/Linearity_Cluster_ConfigCpDp"))));
1630 std::unique_ptr<TList>(checked_own_cast<TList*>(
1631 rootFile->Get(
"Material/Linearity_Cluster_ConfigEpLp"))));
1633 std::unique_ptr<TList>(checked_own_cast<TList*>(
1634 rootFile->Get(
"Material/Linearity_Cluster_ConfigFpMX"))));
1636 std::unique_ptr<TList>(checked_own_cast<TList*>(
1637 rootFile->Get(
"Material/Linearity_Cluster_ConfigGp"))));
1649 rootFile->Get(
"Material_rel21/electronBias_ConfigA")));
1651 rootFile->Get(
"Material_rel21/electronBias_ConfigEpLp")));
1653 rootFile->Get(
"Material_rel21/electronBias_ConfigFpMX")));
1655 rootFile->Get(
"Material_rel21/electronBias_ConfigN")));
1657 rootFile->Get(
"Material_rel21/electronBias_ConfigIBL")));
1659 rootFile->Get(
"Material_rel21/electronBias_ConfigPP0")));
1661 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigA")));
1663 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigEpLp")));
1665 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigFpMX")));
1667 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigN")));
1669 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigIBL")));
1671 rootFile->Get(
"Material_rel21/unconvertedBias_ConfigPP0")));
1673 rootFile->Get(
"Material_rel21/convertedBias_ConfigA")));
1675 rootFile->Get(
"Material_rel21/convertedBias_ConfigEpLp")));
1677 rootFile->Get(
"Material_rel21/convertedBias_ConfigFpMX")));
1679 rootFile->Get(
"Material_rel21/convertedBias_ConfigN")));
1681 rootFile->Get(
"Material_rel21/convertedBias_ConfigIBL")));
1683 rootFile->Get(
"Material_rel21/convertedBias_ConfigPP0")));
1696 rootFile->Get(
"FastSim/es2015/el_scale_full_fast_peak_gaussian")));
1698 "FastSim/es2015/ph_unconv_scale_full_fast_peak_gaussian")));
1700 rootFile->Get(
"FastSim/es2015/ph_conv_scale_full_fast_peak_gaussian")));
1709 rootFile->Get(
"FastSim/es2017/el_scale_full_fast_peak_gaussian")));
1711 "FastSim/es2017/ph_unconv_scale_full_fast_peak_gaussian")));
1713 rootFile->Get(
"FastSim/es2017/ph_conv_scale_full_fast_peak_gaussian")));
1719 rootFile->Get(
"FastSim/es2017_v1/scale_Af2ToG4_elec_rel21")));
1722 rootFile->Get(
"FastSim/es2017_v1/scale_Af2ToG4_unco_rel21")));
1724 rootFile->Get(
"FastSim/es2017_v1/scale_Af2ToG4_conv_rel21")));
1731 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/scale_AF3ToG4_elec_rel22")));
1734 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/scale_AF3ToG4_unco_rel22")));
1736 rootFile->Get(
"FastSim/es2023_R22_Run2_v1/scale_AF3ToG4_conv_rel22")));
1740 rootFile->Get(
"FastSim/es2024_Run3_v0/scale_AF3ToG4_elec_mc23")));
1743 rootFile->Get(
"FastSim/es2024_Run3_v0/scale_AF3ToG4_unco_mc23")));
1745 rootFile->Get(
"FastSim/es2024_Run3_v0/scale_AF3ToG4_conv_mc23")));
1748 rootFile->Get(
"FastSim/es2024_Run3_v0/adhoc_scale_AF3ToG4_elec_mc23_1p3_1p35")));
1750 rootFile->Get(
"FastSim/es2024_Run3_v0/adhoc_scale_AF3ToG4_elec_mc23_1p3_1p35")));
1752 rootFile->Get(
"FastSim/es2024_Run3_v0/adhoc_scale_AF3ToG4_unconv_mc23_1p3_1p35")));
1756 checked_own_cast<TH1*>(
rootFile->Get(
"FastSim/hG4OverAF")));
1759 checked_own_cast<TH1*>(
rootFile->Get(
"FastSim/hG4OverFS")));
1778 checked_own_cast<TH1*>(
rootFile->Get(
"Leakage/LeakageDiffConverted")));
1780 rootFile->Get(
"Leakage/LeakageDiffUnconverted")));
1785 rootFile->Get(
"Leakage/es2017_summer/LeakageDiffConverted")));
1787 rootFile->Get(
"Leakage/es2017_summer/LeakageDiffUnconverted")));
1790 rootFile->Get(
"Leakage/es2023_R22_Run2_v0/LeakageDiffConverted")));
1792 rootFile->Get(
"Leakage/es2023_R22_Run2_v0/LeakageDiffUnconverted")));
1794 rootFile->Get(
"Leakage/es2023_R22_Run2_v0/LeakageDiffElectron")));
1801 ATH_MSG_INFO(
"No leakage systematic uncertainty for ES model "
1807 checked_own_cast<TH1*>(
rootFile->Get(
"ZeeEnergyProfiles/p2MC")));
1811 rootFile->Get(
"ZeeMeanET/es2024_Run3_v0/MC_eta_vs_et_profiled")));
1816 rootFile->Get(
"ZeeMeanET/MC_eta_vs_et_profiled")));
1830 double correctedMomentum =
momentum;
1831 double aeta = std::abs(trk_eta);
1842 correctedMomentum *= 1. + corr * varSF;
1845 return correctedMomentum;
1857 double fullyCorrectedEnergy =
energy;
1865 fullyCorrectedEnergy =
1874 return fullyCorrectedEnergy;
1885 energyS2, eraw, ptype, scaleVar, varSF);
1886 fullyCorrectedEnergy /= (1 +
alpha);
1890 int ieta_k =
m_zeeFwdk->GetXaxis()->FindFixBin(cl_eta);
1891 double value_k =
m_zeeFwdk->GetBinContent(ieta_k);
1892 int ieta_b =
m_zeeFwdb->GetXaxis()->FindFixBin(cl_eta);
1893 double value_b =
m_zeeFwdb->GetBinContent(ieta_b);
1894 fullyCorrectedEnergy =
1895 value_k * fullyCorrectedEnergy +
1909 fullyCorrectedEnergy, energyS2,
1910 eraw, ptype, scaleVar, varSF);
1913 fullyCorrectedEnergy *= (1 + deltaAlpha);
1933 fullyCorrectedEnergy/cosh(cl_eta) < 20
e3) {
1941 if (std::abs(cl_eta) >= 1.3 and std::abs(cl_eta) <= 1.35) {
1944 fullyCorrectedEnergy / cosh(cl_eta) / 1000.,
1949 fullyCorrectedEnergy / cosh(cl_eta) / 1000.,
1954 fullyCorrectedEnergy / cosh(cl_eta) / 1000.,
1957 daAF2 = sqrt(daAF2*daAF2 + 0.001*0.001)*
sign;
1963 fullyCorrectedEnergy *= (1 + daAF2);
1968 fullyCorrectedEnergy *=
1975 return fullyCorrectedEnergy;
1987 long int runnumber,
double cl_eta,
double cl_etaS2,
double cl_etaCalo,
1997 double meanE = meanET * std::cosh(cl_eta);
1998 double Et =
energy / std::cosh(cl_eta);
2007 double daPS, daS12, linPS, linS12, linEacc, linPS_40_elec, linEacc_40_elec,
2009 daPS = daS12 = linPS = linS12 = linEacc = linPS_40_elec = linEacc_40_elec =
2010 linS12_40_elec = 0.;
2012 double daE4 = 0., linE4 = 0.;
2042 double daWtots1 = 0.;
2063 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: "
2135 "es2023_R22_Run2_v0 S12 non-linearity before Acc correction: "
2137 linS12 = linS12 - linEacc * linS12_40_elec / linEacc_40_elec;
2139 "es2023_R22_Run2_v0 S12 non-linearity after Acc correction: "
2146 double daMatID, daMatCryo, daMatCalo;
2147 daMatID = daMatCryo = daMatCalo = 0;
2206 double daL1GainSwitch = 0.;
2223 daL1GainSwitch = -daL1GainSwitch;
2228 double daL2GainSwitch = 0.;
2229 double daL2MediumGainSwitch = 0.;
2230 double daL2LowGainSwitch = 0.;
2238 if (!(std::abs(cl_eta) < 1.52 && std::abs(cl_eta) > 1.37) &&
2239 std::abs(cl_eta) < 2.4) {
2241 energyS2 /
GeV, ptype);
2246 daL2GainSwitch = evar /
energy - eref / meanE;
2248 daL2GainSwitch = -daL2GainSwitch;
2254 daL2GainSwitch *= -1;
2258 "trying to compute gain systematic, but no tool for doing it has "
2259 "been instantiated, setting sys to 0");
2260 daL2GainSwitch = 0.;
2274 daL2MediumGainSwitch *= -1;
2275 ATH_MSG_DEBUG(
"L2 gain Medium uncertainty: " << daL2MediumGainSwitch);
2278 "trying to compute gain systematic, but no tool for doing it has "
2279 "been instantiated, setting sys to 0");
2280 daL2MediumGainSwitch = 0.;
2292 daL2MediumGainSwitch *= -1;
2293 ATH_MSG_DEBUG(
"L2 gain Medium uncertainty extraplation: " << daL2MediumGainSwitch);
2296 "trying to compute gain systematic, but no tool for doing it has "
2297 "been instantiated, setting sys to 0");
2298 daL2MediumGainSwitch = 0.;
2312 daL2LowGainSwitch *= -1;
2313 ATH_MSG_DEBUG(
"L2 gain Low uncertainty: " << daL2LowGainSwitch);
2316 "trying to compute Low gain systematic, but no tool for doing it has "
2317 "been instantiated, setting sys to 0");
2318 daL2LowGainSwitch = 0.;
2330 daL2LowGainSwitch *= -1;
2331 ATH_MSG_DEBUG(
"L2 gain Low uncertainty extraplation: " << daL2LowGainSwitch);
2334 "trying to compute gain systematic, but no tool for doing it has "
2335 "been instantiated, setting sys to 0");
2336 daL2LowGainSwitch = 0.;
2357 if (std::abs(cl_eta) < 1.5)
2378 const TH2*
histo =
nullptr;
2388 const double aeta = std::abs(cl_eta);
2389 dapp0 = getValueHistAt(*
histo, aeta,
energy /
GeV / cosh(cl_eta),
false,
2396 if (aeta > 1.5 and aeta < 2.0) {
2398 }
else if (aeta >= 2.0 and aeta <= 2.5) {
2410 double daTopoCluster = 0;
2423 double Et =
energy / cosh(cl_eta);
2424 double Et0 = 10000.;
2428 daTopoCluster = 1
e-3 * (1. / (Et / Et0) - 1. / (meanET / Et0));
2430 daTopoCluster = -1
e-3 * (1. / (Et / Et0) - 1. / (meanET / Et0));
2436 double daADCLin = 0;
2444 daADCLin = 0.3 * corr;
2447 "trying to compute ADC correction systematic, but no tool for doing "
2448 "it has been instantiated, setting sys to 0");
2456 double alphaTot = alphaZee;
2457 alphaTot += daE4 * linE4;
2458 alphaTot += daPS * linPS;
2459 alphaTot += daS12 * linS12;
2460 alphaTot += daMatID + daMatCryo + daMatCalo;
2461 alphaTot += daLeakage;
2462 alphaTot += daL1GainSwitch;
2463 alphaTot += daL2GainSwitch;
2464 alphaTot += daL2MediumGainSwitch;
2465 alphaTot += daL2LowGainSwitch;
2466 alphaTot += daConvSyst;
2467 alphaTot += daPedestal;
2468 alphaTot += daWtots1;
2470 alphaTot += daTopoCluster;
2471 alphaTot += daADCLin;
2481 long int runnumber,
double cl_eta,
double cl_etaS2,
double cl_etaCalo,
double energy,
2488 double alphaVar = 0.;
2496 eraw, ptype,
var, varSF) -
2505 energyS2, eraw, ptype,
ivar, varSF) -
2509 alphaVar +=
pow(
v, 2);
2511 alphaVar = sqrt(alphaVar);
2519 energyS2, eraw, ptype,
ivar, varSF) -
2523 alphaVar +=
pow(
v, 2);
2525 alphaVar = -sqrt(alphaVar);
2537 energyS2, eraw, ptype,
ivar, varSF) -
2539 alphaVar +=
pow(
v, 2);
2541 alphaVar = sqrt(alphaVar);
2553 energyS2, eraw, ptype,
ivar, varSF) -
2555 alphaVar +=
pow(
v, 2);
2557 alphaVar = -sqrt(alphaVar);
2570 if (std::abs(cl_eta) >= 2.47)
2584 double aeta = std::abs(cl_eta);
2585 double sampling = 0.;
2590 else if (aeta < 1.37)
2591 sampling = 0.036 + 0.130 * aeta;
2593 else if (aeta < 1.52)
2596 else if (aeta < 2.0)
2597 sampling = 0.85 - 0.36 * aeta;
2599 else if (aeta < 2.3)
2602 else if (aeta < 2.5)
2603 sampling = -1.05 + 0.52 * aeta;
2620 double aeta = std::abs(cl_eta);
2623 double noise37[25] = {0.27, 0.27, 0.27, 0.27, 0.27, 0.26, 0.25, 0.23, 0.21,
2624 0.19, 0.17, 0.16, 0.15, 0.14, 0.27, 0.23, 0.17, 0.15,
2625 0.13, 0.10, 0.07, 0.06, 0.05, 0.04, 0.03};
2627 int ieta = (
int)(aeta / 0.1);
2629 if (ieta >= 0 && ieta < 25)
2630 noise = noise37[ieta] * cosh(cl_eta);
2639 double aeta = std::abs(cl_eta);
2645 else if (aeta < 1.75)
2648 else if (aeta < 2.5)
2649 cst = 0.0055 * (2.69 - aeta);
2675 std::as_const(*m_peakResData).GetXaxis()->FindBin(cl_eta));
2683 std::as_const(*m_peakResMC).GetXaxis()->FindBin(cl_eta));
2689 double cl_eta)
const {
2701 sqrt(2 * (resData * resData - resMC * resMC) /
mz /
mz + cmc * cmc);
2703 sqrt(2 * (resData * resData - resMC * resMC * smpup * smpup) /
mz /
mz +
2706 sqrt(2 * (resData * resData - resMC * resMC * smpdo * smpdo) /
mz /
mz +
2709 double errdown = std::abs(central - vardown);
2710 double errup = std::abs(central - varup);
2712 return .5 * (errup + errdown);
2725 int eg_resolution_ptype;
2727 eg_resolution_ptype = 0;
2729 eg_resolution_ptype = 1;
2731 eg_resolution_ptype = 2;
2738 isys = 0xFFFF & ~0x200;
2802 double resolution_error;
2803 double resolution_error_up;
2804 double resolution_error_down;
2807 resolution, resolution_error, resolution_error_up,
2808 resolution_error_down, resType,
2817 resolution_error = resolution_error_up /
resolution;
2819 resolution_error = resolution_error_down /
resolution;
2822 return resolution_error;
2828 double cl_eta,
double& errUp,
2829 double& errDown)
const {
2835 double Cdata_unc = 0.;
2836 if (Cdata_err > Cdata_cor)
2837 Cdata_unc = sqrt(Cdata_err * Cdata_err - Cdata_cor * Cdata_cor);
2838 if (Cdata_unc < 0.001)
2847 double err2 =
fcn_sigma(
energy, Cdata, -Cdata_unc, Smc, 0.) - central;
2848 double err3 =
fcn_sigma(
energy, Cdata, -Cdata_cor, Smc, Smc_err) - central;
2849 double err4 = -err3;
2853 errUp = sqrt(errUp * errUp + err1 * err1);
2855 errUp = sqrt(errUp * errUp + err2 * err2);
2857 errUp = sqrt(errUp * errUp + err3 * err3);
2859 errUp = sqrt(errUp * errUp + err4 * err4);
2867 double energy,
double cl_eta,
double cl_etaCalo,
2870 int eg_resolution_ptype;
2872 eg_resolution_ptype = 0;
2874 eg_resolution_ptype = 1;
2876 eg_resolution_ptype = 2;
2888 const double et =
energy / cosh(cl_eta);
2897 sig2 =
a *
a / energyGeV +
b *
b / energyGeV / energyGeV +
c *
c;
2900 if (withCT and
fast) {
2901 throw std::runtime_error(
2902 "It doesn't make sense to ask resolution fast sim + additional CT."
2903 " The resolution on data is FULL sim resolution + CT");
2906 if (
fast and std::abs(cl_eta) < 2.5) {
2930 double ratio_IQR_full_fast = 1.;
2931 const double ptGeV =
energy / cosh(cl_eta) / 1E3;
2946 bool interpolate_eta =
false;
2947 bool interpolate_pt =
false;
2950 interpolate_pt =
true;
2954 ptGeV,
true,
true,
true,
true,
2955 interpolate_eta, interpolate_pt);
2958 ptGeV,
true,
true,
true,
true,
2959 interpolate_eta, interpolate_pt);
2962 ptGeV,
true,
true,
true,
true,
2963 interpolate_eta, interpolate_pt);
2968 ratio_IQR_full_fast = getValueHistAt(
2971 ratio_IQR_full_fast = getValueHistAt(
2974 ratio_IQR_full_fast = getValueHistAt(
2978 sig2 /= ratio_IQR_full_fast * ratio_IQR_full_fast;
2995 double Cdata_er,
double S,
3003 sigma = sqrt(sigma2);
3018 ATH_MSG_FATAL(
"Trying to compute smearing correction on data");
3027 const double resMC =
3034 ATH_MSG_DEBUG(
"resolution in data: " << resData <<
" in MC: " << resMC);
3038 ptype,
value, resType);
3040 double errUp, errDown;
3053 ATH_MSG_DEBUG(
"resolution in data after systematics: " << resData);
3055 const double sigma2 =
3065 const double sigma = sqrt(sigma2);
3069 const double DeltaE0 =
rng.Gaus(0,
sigma);
3070 const double cor0 = (energyGeV + DeltaE0) / energyGeV;
3073 << cor0 <<
"|" <<
rng.GetSeed());
3088 double aeta = std::abs(
eta);
3090 if (aeta < 1.42 || aeta > 1.55)
3093 const int nBoundaries = 18;
3094 double ETBoundaries[nBoundaries] = {0., 5.4, 8.5, 12.9, 16., 20.,
3095 25., 30., 35., 40., 45., 50.,
3096 55., 60., 65., 70., 75., 99999.};
3098 double CalibFactors[nBoundaries - 1] = {
3099 0.884845, 0.898526, 0.902439, 0.91899, 0.925868, 0.929440,
3100 0.948080, 0.943788, 0.96026, 0.955709, 0.964285, 0.95762,
3101 0.970385, 0.963489, 0.968149, 0.970799, 0.961617};
3104 for (
int i = 0;
i < nBoundaries - 1;
i++)
3105 if (ET /
GeV > ETBoundaries[
i] && ET /
GeV <= ETBoundaries[
i + 1])
3108 if (i0 >= 0 && i0 < nBoundaries - 1)
3109 return 1. / CalibFactors[i0];
3118 const double aeta = std::abs(
eta);
3131 bool interpolate_eta =
false;
3132 bool interpolate_pt =
false;
3135 interpolate_pt =
true;
3139 true,
true,
true,
true,
3140 interpolate_eta, interpolate_pt));
3143 true,
true,
true,
true,
3144 interpolate_eta, interpolate_pt));
3147 true,
true,
true,
true,
3148 interpolate_eta, interpolate_pt));
3150 throw std::runtime_error(
"particle not valid");
3160 throw std::runtime_error(
"particle not valid");
3166 std::as_const(*m_G4OverAFII_electron).GetXaxis()->FindBin(
eta));
3174 double aeta = std::abs(
eta);
3175 if (aeta < 3.3 || aeta > 4.9)
3179 std::as_const(*m_G4OverFrSh).GetXaxis()->FindBin(aeta));
3186 double varSF)
const {
3194 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(
eta);
3203 int ieta = std::as_const(*m_zeeNom_data2023).GetXaxis()->FindBin(
eta);
3209 int ieta = std::as_const(*m_zeeNom_data2022).GetXaxis()->FindBin(
eta);
3218 runnumber <= 341649 && runnumber >= 324320) {
3219 int ieta = std::as_const(*m_zeeNom_data2017).GetXaxis()->FindBin(
eta);
3226 int ieta = std::as_const(*m_zeeNom_data2016).GetXaxis()->FindBin(
eta);
3235 runnumber < 322817 && runnumber >= 297000) {
3236 int ieta = std::as_const(*m_zeeNom_data2016).GetXaxis()->FindBin(
eta);
3242 int ieta = std::as_const(*m_zeeNom_data2016).GetXaxis()->FindBin(
eta);
3247 int ieta = std::as_const(*m_zeeNom_data2015).GetXaxis()->FindBin(
eta);
3252 int ieta = std::as_const(*m_zeeNom_data2018).GetXaxis()->FindBin(
eta);
3257 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(
eta);
3275 int ieta = std::as_const(*m_zeeNom_data2015).GetXaxis()->FindBin(
eta);
3302 else if (
eta > -3.2)
3310 const double uA2MeV_correction =
3324 if (eta < -2.5 and eta > -3.2)
3341 else if (
eta > -3.2)
3400 double stat_error =
h->GetBinError(
h->FindFixBin(
eta));
3402 stat_error = stat_error / sqrt(
h->GetNbinsX());
3429 value -= 0.4E-2 * varSF;
3432 int ieta = std::as_const(*m_zeePhys).GetXaxis()->FindBin(
eta);
3437 int ieta = std::as_const(*m_zeePhys).GetXaxis()->FindBin(
eta);
3451 const double aeta = std::abs(
eta);
3456 }
else if (aeta > 1.45 and aeta < 3.2) {
3467 const double aeta = std::abs(
eta);
3470 if (aeta > 2.5 and aeta < 3.2) {
3483 value += qsum(0.05
E-2, 0.02
E-2) *
3490 int ieta = std::as_const(*m_zeeNom).GetXaxis()->FindBin(
eta);
3498 ieta = std::as_const(*m_zeePhys).GetXaxis()->FindBin(
eta);
3512 const double aeta = std::abs(
eta);
3513 double data_mc_difference = 0.;
3516 if ((aeta > 1.72) or (aeta < 1.4)) {
3521 data_mc_difference = 15
E-2;
3525 if ((aeta > 1.6) or (aeta < 1.4)) {
3529 else if (aeta < 1.46) {
3530 data_mc_difference = 1
E-2;
3532 else if (aeta < 1.52) {
3533 data_mc_difference = 3
E-2;
3536 data_mc_difference = 4.3E-2;
3540 const double em_scale = 2.4E-2;
3541 const double mbias = 1
E-2;
3542 const double laser = 4
E-2;
3544 return std::sqrt(data_mc_difference * data_mc_difference +
3545 em_scale * em_scale + mbias * mbias + laser * laser);
3569 double ETGeV =
energy / cosh(cl_eta) / 1E3;
3570 double wstot_pT_data_p0 = 0.;
3571 double wstot_pT_data_p1 = 0.;
3572 double wstot_pT_MC_p0 = 0.;
3573 double wstot_pT_MC_p1 = 0.;
3575 double wstot_40_data =
3578 double wstot_40_MC =
3601 double wstot_pT_data = 0.;
3602 double wstot_pT_MC = 0.;
3614 wstot_pT_data = wstot_pT_data_p0 + wstot_pT_data_p1 / sqrt(ETGeV);
3615 wstot_pT_MC = wstot_pT_MC_p0 + wstot_pT_MC_p1 / sqrt(ETGeV);
3617 value = 2 *
A / 91.2 * (wstot_pT_data - wstot_40_data) -
3618 2 * B / 91.2 * (wstot_pT_MC - wstot_40_MC);
3628 double varSF)
const {
3636 double nearestEta = cl_eta;
3666 const double aeta = std::abs(cl_eta);
3674 else if (iLayer == 1) {
3701 const double aeta = std::abs(cl_eta);
3703 if (aeta >= 1.37 and aeta < 2.5) {
3729 const double aeta = std::abs(cl_eta);
3731 if (aeta >= 1.37 and aeta < 2.5) {
3757 const double aeta = std::abs(cl_eta);
3758 if (aeta >= 2.4 and aeta < 2.5) {
3770 const double aeta = std::abs(cl_eta);
3774 else if (aeta <= 1.5) {
3777 else if (aeta <= 2.5) {
3783 return value * varSF;
3789 const double aeta = std::abs(cl_eta);
3809 const int ieta =
axis->FindFixBin(aeta) - 1;
3810 if (ieta >= 0 and ieta < graphs->GetSize()) {
3812 const double ETMeV =
energy / cosh(cl_eta);
3813 value =
static_cast<TF1*
>(
graphs->At(ieta))->Eval(ETMeV);
3815 const double ETGeV =
energy / cosh(cl_eta) / 1E3;
3816 value =
static_cast<TGraph*
>(
graphs->At(ieta))->Eval(ETGeV);
3824 int iLayer,
double cl_eta,
double energy,
3829 if (iLayer == 6 && std::abs(cl_eta) >= 2.47)
3831 double aeta = std::abs(cl_eta);
3832 double ET =
energy / cosh(cl_eta);
3842 if (iLayer == 0 && aeta >= 1.82)
3850 if (ieta >= 0 and ieta < m_psElectronGraphs->GetSize()) {
3853 }
else if (iLayer == 1) {
3856 if (ieta >= 0 and ieta < m_s12ElectronGraphs->GetSize()) {
3859 }
else if (iLayer == 6) {
3862 if (ieta >= 0 && ieta < m_EaccElectronGraphs->GetSize()) {
3872 if (ieta >= 0 and ieta < m_psUnconvertedGraphs->GetSize()) {
3876 }
else if (iLayer == 1) {
3879 if (ieta >= 0 and ieta < m_s12UnconvertedGraphs->GetSize()) {
3882 }
else if (iLayer == 6) {
3885 if (ieta >= 0 && ieta < m_EaccUnconvertedGraphs->GetSize()) {
3895 if (ieta >= 0 and ieta < m_psConvertedGraphs->GetSize()) {
3899 }
else if (iLayer == 1) {
3902 if (ieta >= 0 and ieta < m_s12ConvertedGraphs->GetSize()) {
3905 }
else if (iLayer == 6) {
3908 if (ieta >= 0 && ieta < m_EaccConvertedGraphs->GetSize()) {
3909 if (ET < 10000. && (aeta < 1.2 || (aeta >= 1.59 && aeta < 1.73))) {
3941 double aeta = std::abs(cl_eta);
4044 double varSF)
const {
4054 if (std::abs(cl_eta) < 2.)
4068 double DAlphaDXID, DAlphaDXCryo, DAlphaDXCalo, DAlphaDXGp;
4069 DAlphaDXID = DAlphaDXCryo = DAlphaDXCalo = DAlphaDXGp = 0;
4097 value = -DAlphaDXGp;
4124 value = DeltaX * (DAlphaDXID - DAlphaDXCryo);
4126 value = DeltaX * DAlphaDXCryo;
4128 value = DeltaX * DAlphaDXCalo;
4130 return value * varSF;
4135 double cl_eta,
double ET)
const {
4190 double aeta = std::abs(cl_eta);
4191 int ieta = hmat->GetXaxis()->FindBin(aeta);
4193 int ipt = hmat->GetYaxis()->FindBin(ET);
4194 double ptBin = hmat->GetYaxis()->GetBinCenter(ipt);
4202 pt2 = hmat->GetYaxis()->GetBinCenter(i2);
4206 pt1 = hmat->GetYaxis()->GetBinCenter(i1);
4210 int nbins = hmat->GetYaxis()->GetNbins();
4212 if (i1 >= 1 && i1 <
nbins) {
4213 double v1 = hmat->GetBinContent(ieta, i1);
4214 double v2 = hmat->GetBinContent(ieta, i2);
4215 value = (v1 * (pt2 - ET) +
v2 * (ET - pt1)) / (pt2 - pt1);
4221 value = hmat->GetBinContent(ieta, ipt);
4231 double varSF)
const {
4234 double ET =
energy / cosh(cl_eta) /
GeV;
4251 if (std::abs(cl_eta) < 2.)
4259 if (std::abs(cl_eta) > 1.52 &&
4283 double DAlphaDXGp, DAlphaDXID, DAlphaDXCryo, DAlphaDXCalo;
4307 ->GetFunction(
"fNonLin")
4310 ->GetFunction(
"fNonLin")
4313 ->GetFunction(
"fNonLin")
4316 ->GetFunction(
"fNonLin")
4327 value = -DAlphaDXGp;
4364 value = DeltaX * (DAlphaDXID - DAlphaDXCryo);
4366 value = DeltaX * DAlphaDXCryo;
4368 value = DeltaX * DAlphaDXCalo;
4370 return value * varSF;
4378 double aeta = std::abs(cl_eta);
4405 return alpha * varSF;
4426 double aeta = std::abs(cl_eta);
4442 double etGeV =
et /
GeV;
4443 double alpha = 0, dalpha = 0;
4457 std::pair<double, double>
p =
4486 return alpha * varSF;
4490 const TH1&
hh,
double aeta,
double et,
bool useInterp)
const {
4494 int ibeta =
hh.GetXaxis()->FindBin(aeta);
4495 int nbpT =
hh.GetYaxis()->GetNbins();
4496 int ibpT =
hh.GetYaxis()->FindBin(
et);
4497 bool isOUFlow =
false;
4501 }
else if (ibpT == 0) {
4506 double pTp =
hh.GetYaxis()->GetBinCenter(ibpT), pTn = pTp;
4507 if (!useInterp || isOUFlow || (ibpT == nbpT &&
et > pTp) ||
4508 (ibpT == 1 &&
et < pTp))
4509 alpha =
hh.GetBinContent(ibeta, ibpT);
4511 int jp = ibpT, jn = ibpT - 1;
4516 pTp =
hh.GetYaxis()->GetBinCenter(jp);
4518 pTn =
hh.GetYaxis()->GetBinCenter(jn);
4520 double aPos =
hh.GetBinContent(ibeta, jp);
4521 double aNeg =
hh.GetBinContent(ibeta, jn);
4522 alpha = (aPos * (
et - pTn) + aNeg * (pTp -
et)) / (pTp - pTn);
4524 << aNeg <<
" alpha = " <<
alpha);
4526 double dalpha =
hh.GetBinError(ibeta, ibpT);
4528 return std::make_pair(
alpha, dalpha);
4536 double aeta = std::abs(cl_eta);
4539 double ET =
energy / std::cosh(cl_eta);
4601 return alpha * varSF;
4605 const TH2& conv_hist,
double aeta,
double ET) {
4608 int ieta = conv_hist.GetXaxis()->FindBin(aeta);
4610 int ipt = conv_hist.GetYaxis()->FindBin(ET);
4611 double ptBin = conv_hist.GetYaxis()->GetBinCenter(ipt);
4619 pt2 = conv_hist.GetYaxis()->GetBinCenter(i2);
4623 pt1 = conv_hist.GetYaxis()->GetBinCenter(i1);
4627 int nbins = conv_hist.GetYaxis()->GetNbins();
4629 if (i1 >= 1 && i1 <
nbins) {
4630 double v1 = conv_hist.GetBinContent(ieta, i1);
4631 double v2 = conv_hist.GetBinContent(ieta, i2);
4632 value = (v1 * (pt2 - ET) +
v2 * (ET - pt1)) / (pt2 - pt1);
4638 value = conv_hist.GetBinContent(ieta, ipt);
4645 double cl_eta,
double energy,
double eraw,
4652 const double delta =
4689 alpha = pedestal / eraw;
4693 return alpha * varSF;
4700 double pedestal = 0.;
4701 double aeta = std::abs(cl_eta);
4708 else if (iLayer == 1)
4710 else if (iLayer == 2)
4712 else if (iLayer == 3)
4718 else if (iLayer == 2)
4719 pedestal *= 15. / 21.;
4726 return pedestal * varSF;
4731 return std::abs(cl_eta) >= 1.35 && std::abs(cl_eta) <= 1.55;
4736 double newEta = cl_eta;
4741 if (newEta >= 1.35 && newEta <= 1.45)
4743 if (newEta >= 1.45 && newEta <= 1.55)
4746 if (newEta >= -1.55 && newEta <= -1.45)
4748 if (newEta >= -1.45 && newEta <= -1.35)
4783 pileupNoise = sqrt(avgmu) * (60. + 40. *
log(
et / 10000.) /
log(5.));
4790 if (std::abs(
eta) < 1.4)
4799 double&
resolution,
double& resolution_error,
double& resolution_error_up,
4800 double& resolution_error_down,
int resol_type,
bool fast)
const {
4815 (pileupNoise * pileupNoise) / (
et *
et);
4818 double_t sum_sigma_resolution2 = 0.;
4819 double sum_deltaDown = 0.;
4820 double sum_deltaUp = 0.;
4822 for (
int isys = 0; isys < 11; isys++) {
4824 if (syst_mask & (1 << isys)) {
4827 double sigma2up = 0.;
4828 double sigma2down = 0.;
4832 double d1 = (smearingZ + esmearingZ) * (smearingZ + esmearingZ) -
4833 smearingZ * smearingZ;
4834 double d2 = smearingZ * smearingZ -
4835 (smearingZ - esmearingZ) * (smearingZ - esmearingZ);
4836 double d = 0.5 * (
d1 +
d2);
4841 std::format(
"sys resolution Zsmearing: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4847 3, 40000. * cosh(
eta),
eta, resol_type);
4848 double deltaSigma2 = (1.1 * resolutionZ) * (1.1 * resolutionZ) -
4849 resolutionZ * resolutionZ;
4850 double resolution1 =
4852 sigma2up = (1.1 * resolution1) * (1.1 * resolution1) -
4853 resolution1 * resolution1 - deltaSigma2;
4854 deltaSigma2 = (0.9 * resolutionZ) * (0.9 * resolutionZ) -
4855 resolutionZ * resolutionZ;
4856 sigma2down = (0.9 * resolution1) * (0.9 * resolution1) -
4857 resolution1 * resolution1 - deltaSigma2;
4858 sigma2 = 0.5 * (sigma2up - sigma2down);
4860 std::format(
"sys resolution intrinsic: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4864 else if (isys == 2) {
4867 sigma2 = sigmaA * sigmaA;
4869 sigma2down = -1. * sigma2;
4871 std::format(
"sys resolution configA ID material: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4876 else if (isys == 3) {
4877 if (std::abs(
eta) < 1.45) {
4880 sigma2 = 0.5 * sigmaM * sigmaM;
4884 sigma2down = -1. * sigma2;
4886 std::format(
"sys resolution presampler-layer1: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4891 else if (isys == 4) {
4892 if (std::abs(
eta) > 1.52 && std::abs(
eta) < 1.82) {
4899 sigma2down = -1. * sigma2;
4901 std::format(
"sys resolution barrel-endcap gap: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4906 else if (isys == 5) {
4909 sigma2 = 0.5 * sigmaEL * sigmaEL;
4911 sigma2down = -1. * sigma2;
4913 std::format(
"sys resolution cryostat area: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4918 else if (isys == 6) {
4920 double sigmaPileUp = 0.;
4932 sqrt(1.1 * 1.1 - 1.0) *
4934 sigmaPileUp = deltaNoise /
et;
4935 sigmaZ = deltaNoise / 40000.;
4944 double deltaPileupNoise = 100.;
4945 if (std::abs(
eta) >= 1.4 && std::abs(
eta) < 1.8)
4946 deltaPileupNoise = 200.;
4947 double scaleNcells = 1;
4949 scaleNcells = sqrt(3. / 5.);
4951 sigmaPileUp = deltaPileupNoise * scaleNcells /
et;
4953 deltaPileupNoise / (40000.);
4957 sigma2down = -1. * sigma2;
4962 else if (isys == 7 && std::abs(
eta) < 1.5 &&
4980 sigma2 = sigmaE * sigmaE;
4982 sigma2down = -1. * sigma2;
4984 std::format(
"sys resolution ibl material: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
4988 else if (isys == 8 && std::abs(
eta) > 1.5 &&
5007 sigma2 = 2.3 * sigmaE * sigmaE;
5009 sigma2down = -1. * sigma2;
5011 std::format(
"sys resolution pp0 material: {:.7f} {:.7f} {:.7f}", sigma2, sigma2up, sigma2down));
5017 else if (isys == 9 &&
5020 const double ptGeV =
et / 1
e3;
5021 bool interpolate_eta =
false;
5022 bool interpolate_pt =
false;
5025 interpolate_pt =
true;
5029 true,
true,
true,
true,
5030 interpolate_eta, interpolate_pt);
5031 if (std::abs(
eta)>=1.3 and std::abs(
eta)<=1.35 and
5035 ptGeV,
true,
true, interpolate_pt), 2);
5039 ptGeV,
true,
true,
true,
true,
5040 interpolate_eta, interpolate_pt);
5041 if (std::abs(
eta)>=1.3 and std::abs(
eta)<=1.35 and
5044 ptGeV,
true,
true, interpolate_pt), 2);
5048 ptGeV,
true,
true,
true,
true,
5049 interpolate_eta, interpolate_pt);
5050 if (std::abs(
eta)>=1.3 and std::abs(
eta)<=1.35 and
5053 ptGeV,
true,
true, interpolate_pt), 2);
5055 sigma2up = -1. * sigma2;
5057 sigma2down = sigma2;
5062 double d1 = (smearingZ + esmearingOFC) * (smearingZ + esmearingOFC) -
5063 smearingZ * smearingZ;
5064 double d2 = smearingZ * smearingZ -
5065 (smearingZ - esmearingOFC) * (smearingZ - esmearingOFC);
5066 double d = 0.5 * (
d1 +
d2);
5087 if ((resolution2 + sigma2up) > 0.)
5088 rr1 = sqrt(resolution2 + sigma2up);
5090 if ((resolution2 + sigma2down) > 0.)
5091 rr2 = sqrt(resolution2 +
5093 double deltaSigma_sys;
5099 sum_sigma_resolution2 += deltaSigma_sys * deltaSigma_sys;
5101 if ((resolution2 + sigma2up) > 0.)
5102 rr1 = sqrt(resolution2 + sigma2up);
5108 if ((resolution2 + sigma2down) > 0.)
5109 rr2 = sqrt(resolution2 + sigma2down);
5113 ATH_MSG_VERBOSE(
"relative resolution change Down " << deltaSigmaDown);
5115 sum_deltaUp += deltaSigmaUp;
5116 sum_deltaDown += deltaSigmaDown;
5121 resolution_error = sqrt(sum_sigma_resolution2) *
5124 resolution_error_up = sum_deltaUp *
resolution;
5125 resolution_error_down = sum_deltaDown *
resolution;
5129 <<
" Resolution Error (MeV): " << resolution_error <<
" down "
5130 << resolution_error_down <<
" up " << resolution_error_up
5131 <<
" Z smearing " << smearingZ <<
" +- " << esmearingZ
5132 <<
" using mask " << syst_mask);
5143 return "topoClusterThresUp";
5145 return "topoClusterThresDown";
5147 return "MomentumUp";
5149 return "MomentumDown";
5153 return "ZeeStatDown";
5157 return "ZeeSystDown";
5161 return "ZeePhysDown";
5165 return "ZeeAllDown";
5167 return "LArCalibUp";
5169 return "LArCalibDown";
5171 return "LArUnconvCalibUp";
5173 return "LArUnconvCalibDown";
5175 return "LArElecCalibUp";
5177 return "LArElecCalibDown";
5179 return "LArCalibExtra2015PreUp";
5181 return "LArCalibExtra2015PreDown";
5183 return "LArElecUnconvUp";
5185 return "LArElecUnconvDown";
5203 return "S12ExtraLastEtaBinRun2Up";
5205 return "S12ExtraLastEtaBinRun2Down";
5213 return "MatCryoDown";
5217 return "MatCaloDown";
5221 return "L1GainDown";
5225 return "L2GainDown";
5227 return "L2LowGainDown";
5229 return "L2LowGainUp";
5231 return "L2MediumGainDown";
5233 return "L2MediumGainUp";
5237 return "ADCLinDown";
5239 return "LeakageElecUp";
5241 return "LeakageElecDown";
5243 return "ConvRecoUp";
5245 return "ConvRecoDown";
5251 return "LeakageUnconvUp";
5253 return "LeakageUnconvDown";
5255 return "LeakageConvUp";
5257 return "LeakageConvDown";
5259 return "ConvEfficiencyUp";
5261 return "ConvEfficiencyDown";
5263 return "ConvFakeRateUp";
5265 return "ConvFakeRateDown";
5267 return "ConvRadiusUp";
5269 return "ConvRadiusDown";
5271 return "PedestalUp";
5273 return "PedestalDown";
5279 return "AllCorrelatedUp";
5281 return "AllCorrelatedDown";
5283 return "LArTemperature2015PreUp";
5285 return "LArTemperature2015PreDown";
5287 return "LArTemperature2016PreUp";
5289 return "LArTemperature2016PreDown";
5291 return "E4ScintillatorUp";
5293 return "E4ScintillatorDown";
5297 return "MatPP0Down";
5301 return "Wtots1Down";
5303 return "LastScaleVariation";
5309 return "EXTRARUN3PREUp";
5311 return "EXTRARUN3PREDown";
5313 return "PSEXTRARUN3Up";
5315 return "PSEXTRARUN3Down";
5317 return "S12EXTRARUN3Up";
5319 return "S12EXTRARUN3Down";
5321 return "L2MediumGainEXTRARUN3Up";
5323 return "L2MediumGainEXTRARUN3Down";
5325 return "L2LowGainEXTRARUN3Up";
5327 return "L2LowGainEXTRARUN3Down";
5337 return "Resolution::None";
5339 return "Resolution::Nominal";
5341 return "Resolution::AllDown";
5343 return "Resolution::AllUp";
5345 return "Resolution::ZSmearingUp";
5347 return "Resolution::ZSmearingDown";
5349 return "Resolution::SamplingTermUp";
5351 return "Resolution::SamplingTermDown";
5353 return "Resolution::MaterialUp";
5355 return "Resolution::MaterialDown";
5357 return "Resolution::MaterialUp";
5359 return "Resolution::MaterialDown";
5361 return "Resolution::MaterialUp";
5363 return "Resolution::MaterialDown";
5365 return "Resolution::MaterialUp";
5367 return "Resolution::MaterialDown";
5369 return "Resolution::PileUpUp";
5371 return "Resolution::PileUpDown";
5373 return "Resolution::MaterialPP0Up";
5375 return "Resolution::MaterialPP0Down";
5377 return "Resolution::MaterialIBLUp";
5379 return "Resolution::MaterialIBLDown";
5381 return "Resolution::afUp";
5383 return "Resolution::afDown";
5385 return "Resolution::OFCUp";
5387 return "Resolution::OFCDown";
5389 return "LastResolutionVariation";
5391 return "Resolution::Unknown";
5396 const auto ieta = std::as_const(*m_zeeSyst).GetXaxis()->FindFixBin(
eta);
5397 auto value_histo =
m_zeeSyst->GetBinContent(ieta);
5403 const auto ieta = std::as_const(*m_zeeSystOFC).GetXaxis()->FindFixBin(
eta);
5410 return *std::as_const(*m_zeeNom).GetXaxis();