From b740052e728859f64cf9921a2fcd45b46b8f0da5 Mon Sep 17 00:00:00 2001 From: jdevivi <devivie@lpsc.in2p3.fr> Date: Fri, 24 Jun 2022 16:17:27 +0200 Subject: [PATCH] putting Elena\'s numbers for energy bias due to photon misclassificatio data/MV diff + cleaning for more readability (?) --- .../egammaEnergyCorrectionTool.h | 10 +- .../systematics_S12_2022.def | 3 +- .../Root/egammaEnergyCorrectionTool.cxx | 683 ++++++++++-------- .../data/egammaEnergyCorrectionData.root | Bin 713351 -> 713351 bytes 4 files changed, 393 insertions(+), 303 deletions(-) diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/ElectronPhotonFourMomentumCorrection/egammaEnergyCorrectionTool.h b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/ElectronPhotonFourMomentumCorrection/egammaEnergyCorrectionTool.h index 638ebcea7e8..96f966a2993 100644 --- a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/ElectronPhotonFourMomentumCorrection/egammaEnergyCorrectionTool.h +++ b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/ElectronPhotonFourMomentumCorrection/egammaEnergyCorrectionTool.h @@ -22,13 +22,8 @@ #include "PATCore/PATCoreEnums.h" #include <AsgTools/AsgMessaging.h> - // ROOT includes #include "TRandom3.h" -//#include "TList.h" -//#include "TFile.h" -//#include "TGraphErrors.h" -#include "TSystem.h" // Forward declarations class eg_resolution; @@ -39,7 +34,6 @@ class linearity_ADC; class TH1; class TH2; class TAxis; -class TFile; class TList; namespace egGain { class GainTool; // run1 tool @@ -185,6 +179,8 @@ namespace egEnergyCorr { // ... Conversion efficiency (-> vary unconverted photon calib), fake rate (-> vary converted photon calib) ConvEfficiencyUp, ConvEfficiencyDown, ConvFakeRateUp, ConvFakeRateDown, ConvRadiusUp, ConvRadiusDown, + // ... in R21, 2022, Precision : NP is correlated between conv and unconv, let's call it ConvReco + ConvRecoUp, ConvRecoDown, AllUp, AllDown, AllCorrelatedUp, AllCorrelatedDown, @@ -484,8 +480,6 @@ namespace AtlasRoot { private: - - std::unique_ptr<TFile> m_rootFile; std::string m_rootFileName; mutable TRandom3 m_random3; diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/ElectronPhotonFourMomentumCorrection/systematics_S12_2022.def b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/ElectronPhotonFourMomentumCorrection/systematics_S12_2022.def index cd90e647e1f..89cc4263179 100644 --- a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/ElectronPhotonFourMomentumCorrection/systematics_S12_2022.def +++ b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/ElectronPhotonFourMomentumCorrection/systematics_S12_2022.def @@ -13,6 +13,5 @@ SYSMACRO(EG_SCALE_L2GAIN, 1, std::vector<double>(), egEnergyCorr: SYSMACRO(EG_SCALE_PEDESTAL, 1, std::vector<double>(), egEnergyCorr::Scale::PedestalUp, egEnergyCorr::Scale::PedestalDown) SYSMACRO(PH_SCALE_LEAKAGEUNCONV, 1, std::vector<double>(), egEnergyCorr::Scale::LeakageUnconvUp, egEnergyCorr::Scale::LeakageUnconvDown) SYSMACRO(PH_SCALE_LEAKAGECONV, 1, std::vector<double>(), egEnergyCorr::Scale::LeakageConvUp, egEnergyCorr::Scale::LeakageConvDown) -SYSMACRO(PH_SCALE_CONVEFFICIENCY, 1, std::vector<double>(), egEnergyCorr::Scale::ConvEfficiencyUp, egEnergyCorr::Scale::ConvEfficiencyDown) -SYSMACRO(PH_SCALE_CONVFAKERATE, 1, std::vector<double>(), egEnergyCorr::Scale::ConvFakeRateUp, egEnergyCorr::Scale::ConvFakeRateDown) +SYSMACRO(PH_SCALE_CONVRECO, 1, std::vector<double>(), egEnergyCorr::Scale::ConvRecoUp, egEnergyCorr::Scale::ConvRecoDown) SYSMACRO(PH_SCALE_CONVRADIUS, 1, std::vector<double>(), egEnergyCorr::Scale::ConvRadiusUp, egEnergyCorr::Scale::ConvRadiusDown) diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/Root/egammaEnergyCorrectionTool.cxx b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/Root/egammaEnergyCorrectionTool.cxx index fdb2ffe4239..9d2253d29aa 100644 --- a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/Root/egammaEnergyCorrectionTool.cxx +++ b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/Root/egammaEnergyCorrectionTool.cxx @@ -17,6 +17,7 @@ #include "TF1.h" #include "TFile.h" #include "TList.h" +#include "TSystem.h" #include "TGraphErrors.h" #include "ElectronPhotonFourMomentumCorrection/egammaEnergyCorrectionTool.h" @@ -27,19 +28,8 @@ #include "ElectronPhotonFourMomentumCorrection/GainUncertainty.h" #include "ElectronPhotonFourMomentumCorrection/linearity_ADC.h" - #include "PathResolver/PathResolver.h" -inline double qsum(double x, double y) { return std::hypot(x, y); } - -template<typename T> -T* get_object(TFile& file, const std::string& name) -{ - T* obj = dynamic_cast<T*>(file.Get(name.c_str())); - if (not obj) { throw std::runtime_error("object " + name + " not found in file " + std::string(file.GetName())); } - return obj; -} - inline double getValueHistoAt(const TH1& histo, double xvalue, bool use_lastbin_overflow=false, bool use_firstbin_underflow=false) @@ -144,6 +134,7 @@ namespace AtlasRoot { // Load the ROOT filea const std::unique_ptr<char[]> fname(gSystem->ExpandPathName(m_rootFileName.c_str())); + std::unique_ptr<TFile> m_rootFile; m_rootFile.reset(TFile::Open( fname.get(), "READ" )); if ( !m_rootFile ) { @@ -200,12 +191,12 @@ namespace AtlasRoot { m_begRunNumber = 177531; m_endRunNumber = 194382; - - // mc11d : correct MSc in G4; new geometry // Final Run1 calibration scheme - } else if ( m_esmodel==egEnergyCorr::es2011d || m_esmodel==egEnergyCorr::es2011dMedium || m_esmodel==egEnergyCorr::es2011dTight ) { + } else if ( m_esmodel==egEnergyCorr::es2011d || + m_esmodel==egEnergyCorr::es2011dMedium || + m_esmodel==egEnergyCorr::es2011dTight ) { m_use_new_resolution_model = true; m_resolution_tool.reset(new eg_resolution("run1")); m_aPSNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2011d/alphaPS_uncor"))); m_aPSNom->SetDirectory(nullptr); @@ -396,7 +387,8 @@ namespace AtlasRoot { m_e1hg_tool.reset(new e1hg_systematics()); } - else if (m_esmodel == egEnergyCorr::es2015PRE or m_esmodel == egEnergyCorr::es2015cPRE) { + else if (m_esmodel == egEnergyCorr::es2015PRE or + m_esmodel == egEnergyCorr::es2015cPRE) { m_use_etaCalo_scales = true; m_use_new_resolution_model = true; m_resolution_tool.reset( new eg_resolution("run2_pre")) ; @@ -460,7 +452,8 @@ namespace AtlasRoot { m_e1hg_tool.reset(new e1hg_systematics()); } - else if (m_esmodel == egEnergyCorr::es2015PRE_res_improved or m_esmodel == egEnergyCorr::es2015cPRE_res_improved) { + else if (m_esmodel == egEnergyCorr::es2015PRE_res_improved or + m_esmodel == egEnergyCorr::es2015cPRE_res_improved) { m_use_etaCalo_scales = true; m_use_new_resolution_model = true; m_resolution_tool.reset(new eg_resolution("run2_pre")); @@ -655,77 +648,95 @@ namespace AtlasRoot { m_use_temp_correction201516 = true; } - else if (m_esmodel == egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or m_esmodel == egEnergyCorr::es2017_summer_improved - or m_esmodel == egEnergyCorr::es2017_summer_final or m_esmodel == egEnergyCorr::es2015_5TeV or m_esmodel == egEnergyCorr::es2017_R21_PRE - or m_esmodel == egEnergyCorr::es2017_R21_v0 or m_esmodel == egEnergyCorr::es2017_R21_v1 - or m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 or m_esmodel == egEnergyCorr::es2018_R21_v0 or m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 - or m_esmodel == egEnergyCorr::es2018_R21_v1 or m_esmodel == egEnergyCorr::es2022_R21_Precision) {//add release 21 here for now + else if (m_esmodel == egEnergyCorr::es2017 or + m_esmodel == egEnergyCorr::es2017_summer or + m_esmodel == egEnergyCorr::es2017_summer_improved or + m_esmodel == egEnergyCorr::es2017_summer_final or + m_esmodel == egEnergyCorr::es2015_5TeV or + m_esmodel == egEnergyCorr::es2017_R21_PRE or + m_esmodel == egEnergyCorr::es2017_R21_v0 or + m_esmodel == egEnergyCorr::es2017_R21_v1 or + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 or + m_esmodel == egEnergyCorr::es2018_R21_v0 or + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 or + m_esmodel == egEnergyCorr::es2018_R21_v1 or + m_esmodel == egEnergyCorr::es2022_R21_Precision) { //add release 21 here for now + m_use_etaCalo_scales = true; m_use_new_resolution_model = true; - if (m_esmodel == egEnergyCorr::es2017_R21_v1 || m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || m_esmodel == egEnergyCorr::es2018_R21_v0 ||m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || m_esmodel == egEnergyCorr::es2018_R21_v1 || m_esmodel == egEnergyCorr::es2022_R21_Precision) + if (m_esmodel == egEnergyCorr::es2017_R21_v1 || + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || + m_esmodel == egEnergyCorr::es2018_R21_v0 || + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || + m_esmodel == egEnergyCorr::es2018_R21_v1 || + m_esmodel == egEnergyCorr::es2022_R21_Precision) m_resolution_tool.reset(new eg_resolution("run2_R21_v1")); else m_resolution_tool.reset(new eg_resolution("run2_pre")); - - if(m_esmodel == egEnergyCorr::es2017_summer_final or - m_esmodel == egEnergyCorr::es2017_R21_v0 or m_esmodel == egEnergyCorr::es2017_R21_v1 or - m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 or m_esmodel == egEnergyCorr::es2018_R21_v0 or m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 ){ - m_aPSNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/alphaPS_uncor"))); m_aPSNom->SetDirectory(nullptr); - m_daPSb12.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/dalphaPS_b12"))); m_daPSb12->SetDirectory(nullptr); - m_daPSCor.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/dalphaPS_cor"))); m_daPSCor->SetDirectory(nullptr); - m_aS12Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/alphaS12_uncor"))); m_aS12Nom->SetDirectory(nullptr); - m_daS12Cor.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/dalphaS12_cor"))); m_daS12Cor->SetDirectory(nullptr); - } - else if (m_esmodel == egEnergyCorr::es2018_R21_v1){ - m_aPSNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/alphaPS_uncor"))); m_aPSNom->SetDirectory(nullptr); - m_daPSb12.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/dalphaPS_b12"))); m_daPSb12->SetDirectory(nullptr); - m_daPSCor.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/dalphaPS_cor"))); m_daPSCor->SetDirectory(nullptr); - m_aS12Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v1/alphaS12_uncor"))); m_aS12Nom->SetDirectory(nullptr); - m_daS12Cor.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/dalphaS12_cor"))); m_daS12Cor->SetDirectory(nullptr); - } - else if (m_esmodel == egEnergyCorr::es2022_R21_Precision){ - m_aPSNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2022_R21_Precision/alphaPS_uncor"))); m_aPSNom->SetDirectory(nullptr); - m_aS12Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2022_R21_Precision/alphaS12_uncor"))); m_aS12Nom->SetDirectory(nullptr); + + if (m_esmodel == egEnergyCorr::es2017_summer_final or + m_esmodel == egEnergyCorr::es2017_R21_v0 or + m_esmodel == egEnergyCorr::es2017_R21_v1 or + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 or + m_esmodel == egEnergyCorr::es2018_R21_v0 or + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0) { + m_aPSNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/alphaPS_uncor"))); m_aPSNom->SetDirectory(nullptr); + m_daPSb12.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/dalphaPS_b12"))); m_daPSb12->SetDirectory(nullptr); + m_daPSCor.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/dalphaPS_cor"))); m_daPSCor->SetDirectory(nullptr); + m_aS12Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/alphaS12_uncor"))); m_aS12Nom->SetDirectory(nullptr); + m_daS12Cor.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/dalphaS12_cor"))); m_daS12Cor->SetDirectory(nullptr); } - else{ - m_aPSNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/alphaPS_uncor"))); m_aPSNom->SetDirectory(nullptr); - m_daPSCor.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/dalphaPS_cor"))); m_daPSCor->SetDirectory(nullptr); - m_aS12Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/alphaS12_uncor"))); m_aS12Nom->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2018_R21_v1) { + m_aPSNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/alphaPS_uncor"))); m_aPSNom->SetDirectory(nullptr); + m_daPSb12.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/dalphaPS_b12"))); m_daPSb12->SetDirectory(nullptr); + m_daPSCor.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/dalphaPS_cor"))); m_daPSCor->SetDirectory(nullptr); + m_aS12Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v1/alphaS12_uncor"))); m_aS12Nom->SetDirectory(nullptr); m_daS12Cor.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/dalphaS12_cor"))); m_daS12Cor->SetDirectory(nullptr); } - m_trkSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/momentum_errSyst"))); m_trkSyst->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2022_R21_Precision) { + m_aPSNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2022_R21_Precision/alphaPS_uncor"))); m_aPSNom->SetDirectory(nullptr); + m_aS12Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2022_R21_Precision/alphaS12_uncor"))); m_aS12Nom->SetDirectory(nullptr); + } + else { + m_aPSNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/alphaPS_uncor"))); m_aPSNom->SetDirectory(nullptr); + m_daPSCor.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/dalphaPS_cor"))); m_daPSCor->SetDirectory(nullptr); + m_aS12Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/alphaS12_uncor"))); m_aS12Nom->SetDirectory(nullptr); + m_daS12Cor.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/dalphaS12_cor"))); m_daS12Cor->SetDirectory(nullptr); + } + m_trkSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2012c/momentum_errSyst"))); m_trkSyst->SetDirectory(nullptr); - if(m_esmodel == egEnergyCorr::es2017){ - m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017/alphaZee_errStat_period_2016"))); m_zeeNom->SetDirectory(nullptr); - m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); + if (m_esmodel == egEnergyCorr::es2017) { + m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017/alphaZee_errStat_period_2016"))); m_zeeNom->SetDirectory(nullptr); + m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); } - else if(m_esmodel == egEnergyCorr::es2017_summer or m_esmodel == egEnergyCorr::es2017_summer_improved){ - m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer/alphaZee_errStat_period_2016"))); m_zeeNom->SetDirectory(nullptr); - m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2017_summer or + m_esmodel == egEnergyCorr::es2017_summer_improved) { + m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer/alphaZee_errStat_period_2016"))); m_zeeNom->SetDirectory(nullptr); + m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); } - else if(m_esmodel == egEnergyCorr::es2017_summer_final){ - m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/alphaZee_errStat_period_2016"))); m_zeeNom->SetDirectory(nullptr); - m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2017_summer_final) { + m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/alphaZee_errStat_period_2016"))); m_zeeNom->SetDirectory(nullptr); + m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); } - else if(m_esmodel == egEnergyCorr::es2015_5TeV){ - m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2015_5TeV/alphaZee_errStat_period_2015"))); m_zeeNom->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2015_5TeV) { + m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2015_5TeV/alphaZee_errStat_period_2015"))); m_zeeNom->SetDirectory(nullptr); //Same histogram added twice for simplicity m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2015_5TeV/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); } else if (m_esmodel==egEnergyCorr::es2017_R21_v0) { - m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_v0/alphaZee_errStat_period_2017"))); m_zeeNom->SetDirectory(nullptr); + m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_v0/alphaZee_errStat_period_2017"))); m_zeeNom->SetDirectory(nullptr); m_zeeNom_data2016.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_v0/alphaZee_errStat_period_2016"))); m_zeeNom_data2016->SetDirectory(nullptr); m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_v0/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); } else if (m_esmodel==egEnergyCorr::es2017_R21_v1) { - m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_v1/alphaZee_errStat_period_2017"))); m_zeeNom->SetDirectory(nullptr); + m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_v1/alphaZee_errStat_period_2017"))); m_zeeNom->SetDirectory(nullptr); m_zeeNom_data2016.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_v1/alphaZee_errStat_period_2016"))); m_zeeNom_data2016->SetDirectory(nullptr); m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_v1/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); m_zeeFwdk.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_v1/alphaFwd_Finalk"))); m_zeeFwdk->SetDirectory(nullptr); m_zeeFwdb.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_v1/alphaFwd_Finalb"))); m_zeeFwdb->SetDirectory(nullptr); } else if (m_esmodel==egEnergyCorr::es2017_R21_ofc0_v1) { - m_zeeNom.reset(dynamic_cast<TH1*> (m_rootFile->Get("Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2017"))); m_zeeNom->SetDirectory(nullptr); + m_zeeNom.reset(dynamic_cast<TH1*> (m_rootFile->Get("Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2017"))); m_zeeNom->SetDirectory(nullptr); m_zeeNom_data2016.reset(dynamic_cast<TH1*> (m_rootFile->Get("Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2016"))); m_zeeNom_data2016->SetDirectory(nullptr); m_zeeNom_data2015.reset(dynamic_cast<TH1*> (m_rootFile->Get("Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); m_zeeNom_data2018.reset(dynamic_cast<TH1*> (m_rootFile->Get("Scales/es2017_R21_ofc0_v1/alphaZee_errStat_period_2018"))); m_zeeNom_data2018->SetDirectory(nullptr); @@ -734,22 +745,21 @@ namespace AtlasRoot { } else if (m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0){ // only 1 set of alpha for 13TEV 2018 and 2017 lowmu data (mu=2) dataset - m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_lowmu_v0/alphaZee_errStat"))); m_zeeNom->SetDirectory(nullptr); - m_zeeNom_data2017.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_lowmu_v0/alphaZee_errStat_5TeV"))); m_zeeNom_data2017->SetDirectory(nullptr); + m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_lowmu_v0/alphaZee_errStat"))); m_zeeNom->SetDirectory(nullptr); + m_zeeNom_data2017.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_lowmu_v0/alphaZee_errStat_5TeV"))); m_zeeNom_data2017->SetDirectory(nullptr); m_zeeFwdk.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaFwd_Finalk"))); m_zeeFwdk->SetDirectory(nullptr); m_zeeFwdb.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaFwd_Finalb"))); m_zeeFwdb->SetDirectory(nullptr); } - else if (m_esmodel == egEnergyCorr::es2018_R21_v0){ - - m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaZee_errStat_period_2018"))); m_zeeNom->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2018_R21_v0) { + m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaZee_errStat_period_2018"))); m_zeeNom->SetDirectory(nullptr); m_zeeNom_data2017.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaZee_errStat_period_2017"))); m_zeeNom_data2017->SetDirectory(nullptr); m_zeeNom_data2016.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaZee_errStat_period_2016"))); m_zeeNom_data2016->SetDirectory(nullptr); m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); m_zeeFwdk.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaFwd_Finalk"))); m_zeeFwdk->SetDirectory(nullptr); m_zeeFwdb.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaFwd_Finalb"))); m_zeeFwdb->SetDirectory(nullptr); } - else if (m_esmodel == egEnergyCorr::es2018_R21_v1 ) { - m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v1/alphaZee_errStat_period_2018"))); m_zeeNom->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2018_R21_v1) { + m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v1/alphaZee_errStat_period_2018"))); m_zeeNom->SetDirectory(nullptr); m_zeeNom_data2017.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v1/alphaZee_errStat_period_2017"))); m_zeeNom_data2017->SetDirectory(nullptr); m_zeeNom_data2016.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v1/alphaZee_errStat_period_2016"))); m_zeeNom_data2016->SetDirectory(nullptr); m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v1/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); @@ -758,7 +768,7 @@ namespace AtlasRoot { m_zeeFwdb.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaFwd_Finalb"))); m_zeeFwdb->SetDirectory(nullptr); } else if (m_esmodel == egEnergyCorr::es2022_R21_Precision) { - m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2022_R21_Precision/alphaZee_errStat_period_2018"))); m_zeeNom->SetDirectory(nullptr); + m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2022_R21_Precision/alphaZee_errStat_period_2018"))); m_zeeNom->SetDirectory(nullptr); m_zeeNom_data2017.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2022_R21_Precision/alphaZee_errStat_period_2017"))); m_zeeNom_data2017->SetDirectory(nullptr); m_zeeNom_data2016.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2022_R21_Precision/alphaZee_errStat_period_2016"))); m_zeeNom_data2016->SetDirectory(nullptr); m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2022_R21_Precision/alphaZee_errStat_period_2015"))); m_zeeNom_data2015->SetDirectory(nullptr); @@ -766,122 +776,131 @@ namespace AtlasRoot { m_zeeFwdk.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaFwd_Finalk"))); m_zeeFwdk->SetDirectory(nullptr); m_zeeFwdb.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaFwd_Finalb"))); m_zeeFwdb->SetDirectory(nullptr); } - - - else{ - m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_PRE/alphaZee_errStat_period_2016"))); m_zeeNom->SetDirectory(nullptr); + else { + m_zeeNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_PRE/alphaZee_errStat_period_2016"))); m_zeeNom->SetDirectory(nullptr); //SAME HISTO FOR 2015 FOR NOW m_zeeNom_data2015.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_PRE/alphaZee_errStat_period_2016"))); m_zeeNom_data2015->SetDirectory(nullptr); } - if(m_esmodel == egEnergyCorr::es2017){ - m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); + + if(m_esmodel == egEnergyCorr::es2017) { + m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); } - else if(m_esmodel == egEnergyCorr::es2017_summer_final){ + else if (m_esmodel == egEnergyCorr::es2017_summer_final) { m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); } - else if(m_esmodel == egEnergyCorr::es2015_5TeV){ - m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2015_5TeV/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2015_5TeV) { + m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2015_5TeV/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); } else if (m_esmodel == egEnergyCorr::es2017_R21_v0) { m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer_final/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); } else if (m_esmodel == egEnergyCorr::es2017_R21_v1) { - m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_v1/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); + m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_v1/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); } else if (m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1) { m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_R21_ofc0_v1/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); } - else if (m_esmodel == egEnergyCorr::es2018_R21_v0 or m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0) { - m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2018_R21_v0 or + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0) { + m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v0/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); } - else if (m_esmodel == egEnergyCorr::es2018_R21_v1 or m_esmodel == egEnergyCorr::es2022_R21_Precision) { - m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v1/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2018_R21_v1 or + m_esmodel == egEnergyCorr::es2022_R21_Precision) { + m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2018_R21_v1/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); } - else{ - m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); + else { + m_zeeSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Scales/es2017_summer/alphaZee_errSyst"))); m_zeeSyst->SetDirectory(nullptr); } m_uA2MeV_2015_first2weeks_correction = nullptr; if(m_esmodel == egEnergyCorr::es2017){ m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017/ctZee_errStat"))); m_resNom->SetDirectory(nullptr);} - else if(m_esmodel == egEnergyCorr::es2017_summer or m_esmodel == egEnergyCorr::es2017_summer_improved or m_esmodel == egEnergyCorr::es2015_5TeV){ + else if(m_esmodel == egEnergyCorr::es2017_summer or + m_esmodel == egEnergyCorr::es2017_summer_improved or + m_esmodel == egEnergyCorr::es2015_5TeV) { m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_summer/ctZee_errStat"))); m_resNom->SetDirectory(nullptr);} else if(m_esmodel == egEnergyCorr::es2017_summer_final) { - m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_summer_final/ctZee_errStat"))); m_resNom->SetDirectory(nullptr);} + m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_summer_final/ctZee_errStat"))); m_resNom->SetDirectory(nullptr);} else if (m_esmodel==egEnergyCorr::es2017_R21_v0) { - m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_R21_v0/ctZee_errStat"))); m_resNom->SetDirectory(nullptr);} + m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_R21_v0/ctZee_errStat"))); m_resNom->SetDirectory(nullptr);} else if (m_esmodel==egEnergyCorr::es2017_R21_v1) { m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_R21_v1/ctZee_errStat"))); m_resNom->SetDirectory(nullptr);} else if (m_esmodel==egEnergyCorr::es2017_R21_ofc0_v1) { - m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_R21_ofc0_v1/ctZee_errStat"))); m_resNom->SetDirectory(nullptr);} + m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_R21_ofc0_v1/ctZee_errStat"))); m_resNom->SetDirectory(nullptr);} else if (m_esmodel==egEnergyCorr::es2018_R21_v0) { m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2018_R21_v0/ctZee_errStat"))); m_resNom->SetDirectory(nullptr);} else if (m_esmodel==egEnergyCorr::es2018_R21_lowmu_v0) { - m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2018_R21_lowmu_v0/ctZee_errStat"))); m_resNom->SetDirectory(nullptr); + m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2018_R21_lowmu_v0/ctZee_errStat"))); m_resNom->SetDirectory(nullptr); m_resNom_datalowmu.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2018_R21_lowmu_v0/ctZee_errStat_5TeV"))); m_resNom_datalowmu->SetDirectory(nullptr);} else if (m_esmodel==egEnergyCorr::es2018_R21_v1) { m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2018_R21_v1/ctZee_errStat"))); m_resNom->SetDirectory(nullptr); } else if (m_esmodel == egEnergyCorr::es2022_R21_Precision) { - m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2022_R21_Precision/ctZee_errStat"))); m_resNom->SetDirectory(nullptr); } + m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2022_R21_Precision/ctZee_errStat"))); m_resNom->SetDirectory(nullptr); } else{ - m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_R21_PRE/ctZee_errStat"))); m_resNom->SetDirectory(nullptr); + m_resNom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_R21_PRE/ctZee_errStat"))); m_resNom->SetDirectory(nullptr); } - if(m_esmodel == egEnergyCorr::es2017){ - m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); + if (m_esmodel == egEnergyCorr::es2017) { + m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); } - else if(m_esmodel == egEnergyCorr::es2017_summer_final){ - m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_summer_final/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2017_summer_final) { + m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_summer_final/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); } - else if(m_esmodel == egEnergyCorr::es2015_5TeV){ - m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2015_5TeV/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2015_5TeV) { + m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2015_5TeV/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); } else if (m_esmodel == egEnergyCorr::es2017_R21_v0) { - m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_summer_final/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); + m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_summer_final/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); } else if (m_esmodel == egEnergyCorr::es2017_R21_v1) { m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_R21_v1/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); } else if (m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1) { - m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_R21_ofc0_v1/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); + m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_R21_ofc0_v1/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); } - else if (m_esmodel == egEnergyCorr::es2018_R21_v0 or m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 ) { + else if (m_esmodel == egEnergyCorr::es2018_R21_v0 or + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 ) { m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2018_R21_v0/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); } - else if (m_esmodel == egEnergyCorr::es2018_R21_v1 or m_esmodel == egEnergyCorr::es2022_R21_Precision) { + else if (m_esmodel == egEnergyCorr::es2018_R21_v1 or + m_esmodel == egEnergyCorr::es2022_R21_Precision) { m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2018_R21_v1/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); } - else{ + else { m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_summer/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); } //else{ //m_resSyst.reset( dynamic_cast< TH1* >( m_rootFile->Get("Resolution/es2017_summer_improved/ctZee_errSyst"))); m_resSyst->SetDirectory(nullptr); //} - m_pedestals_es2017.reset( dynamic_cast< TH1* >(m_rootFile->Get("Pedestals/es2017/pedestals"))); m_pedestals_es2017->SetDirectory(nullptr); + m_pedestals_es2017.reset( dynamic_cast< TH1* >(m_rootFile->Get("Pedestals/es2017/pedestals"))); m_pedestals_es2017->SetDirectory(nullptr); - m_dX_ID_Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/DX0_ConfigA"))); m_dX_ID_Nom->SetDirectory(nullptr); + m_dX_ID_Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/DX0_ConfigA"))); m_dX_ID_Nom->SetDirectory(nullptr); m_dX_IPPS_Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/Measured/DXerr_IPPS_NewG_errUncor"))); m_dX_IPPS_Nom->SetDirectory(nullptr); m_dX_IPPS_LAr.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/Measured/DXerr_IPPS_NewG_errLAr"))); m_dX_IPPS_LAr->SetDirectory(nullptr); m_dX_IPAcc_Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/Measured/DXerr_IPAcc_NewG_errUncor"))); m_dX_IPAcc_Nom->SetDirectory(nullptr); m_dX_IPAcc_LAr.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/Measured/DXerr_IPAcc_NewG_errLAr"))); m_dX_IPAcc_LAr->SetDirectory(nullptr); - m_dX_IPAcc_G4.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/Measured/DXerr_IPAcc_NewG_errG4"))); m_dX_IPAcc_G4->SetDirectory(nullptr); + m_dX_IPAcc_G4.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/Measured/DXerr_IPAcc_NewG_errG4"))); m_dX_IPAcc_G4->SetDirectory(nullptr); m_dX_IPAcc_GL1.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/Measured/DXerr_IPAcc_NewG_errGL1"))); m_dX_IPAcc_GL1->SetDirectory(nullptr); m_dX_PSAcc_Nom.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/Measured/DXerr_PSAcc_NewG_errUncor"))); m_dX_PSAcc_Nom->SetDirectory(nullptr); m_dX_PSAcc_LAr.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/Measured/DXerr_PSAcc_NewG_errLAr"))); m_dX_PSAcc_LAr->SetDirectory(nullptr); - m_dX_PSAcc_G4.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/Measured/DXerr_PSAcc_NewG_errG4"))); m_dX_PSAcc_G4->SetDirectory(nullptr); + m_dX_PSAcc_G4.reset( dynamic_cast< TH1* >( m_rootFile->Get("Material/Measured/DXerr_PSAcc_NewG_errG4"))); m_dX_PSAcc_G4->SetDirectory(nullptr); - m_convRadius.reset( dynamic_cast< TH1* >( m_rootFile->Get("Conversions/es2012c/convRadiusMigrations"))); m_convRadius->SetDirectory(nullptr); - if(m_esmodel == egEnergyCorr::es2017){ - m_convFakeRate.reset( dynamic_cast< TH1* >( m_rootFile->Get("Conversions/es2012c/convFakeRate"))); m_convFakeRate->SetDirectory(nullptr); - m_convRecoEfficiency.reset( dynamic_cast< TH1* >( m_rootFile->Get("Conversions/es2012c/convRecoEfficiency"))); m_convRecoEfficiency->SetDirectory(nullptr); + m_convRadius.reset( dynamic_cast< TH1* >( m_rootFile->Get("Conversions/es2012c/convRadiusMigrations"))); m_convRadius->SetDirectory(nullptr); + if (m_esmodel == egEnergyCorr::es2017) { + m_convFakeRate.reset( dynamic_cast< TH1* >( m_rootFile->Get("Conversions/es2012c/convFakeRate"))); m_convFakeRate->SetDirectory(nullptr); + m_convRecoEfficiency.reset( dynamic_cast< TH1* >( m_rootFile->Get("Conversions/es2012c/convRecoEfficiency"))); m_convRecoEfficiency->SetDirectory(nullptr); } - else{ - m_convFakeRate.reset( dynamic_cast< TH1* >( m_rootFile->Get("Conversions/es2017_summer/convFakeRate"))); m_convFakeRate->SetDirectory(nullptr); - m_convRecoEfficiency.reset( dynamic_cast< TH1* >( m_rootFile->Get("Conversions/es2017_summer/convRecoEfficiency"))); m_convRecoEfficiency->SetDirectory(nullptr); + else if (m_esmodel == egEnergyCorr::es2022_R21_Precision) { + m_convFakeRate.reset( dynamic_cast< TH1* >( m_rootFile->Get("Conversions/es2022_R21_Precision/convFakeRate"))); m_convFakeRate->SetDirectory(nullptr); + m_convRecoEfficiency.reset( dynamic_cast< TH1* >( m_rootFile->Get("Conversions/es2022_R21_Precision/convRecoEfficiency"))); m_convRecoEfficiency->SetDirectory(nullptr); + } + else { + m_convFakeRate.reset( dynamic_cast< TH1* >( m_rootFile->Get("Conversions/es2017_summer/convFakeRate"))); m_convFakeRate->SetDirectory(nullptr); + m_convRecoEfficiency.reset( dynamic_cast< TH1* >( m_rootFile->Get("Conversions/es2017_summer/convRecoEfficiency"))); m_convRecoEfficiency->SetDirectory(nullptr); } // TODO: change path when moving to calibarea @@ -901,7 +920,6 @@ namespace AtlasRoot { //similar case for wtots1 const std::string filename_wstot = PathResolverFindCalibFile("ElectronPhotonFourMomentumCorrection/v8/wstot_related_syst.root"); - TFile file_wstot(filename_wstot.c_str()); m_wstot_slope_A_data.reset( dynamic_cast< TH1* >( file_wstot.Get("A_data"))); m_wstot_slope_A_data->SetDirectory(nullptr); m_wstot_slope_B_MC.reset( dynamic_cast< TH1* >( file_wstot.Get("B_mc"))); m_wstot_slope_B_MC->SetDirectory(nullptr); @@ -921,8 +939,12 @@ namespace AtlasRoot { m_begRunNumber = 252604; m_endRunNumber = 314199; - if (m_esmodel == egEnergyCorr::es2017_R21_v1 || m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || - m_esmodel == egEnergyCorr::es2018_R21_v0 || m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || m_esmodel == egEnergyCorr::es2018_R21_v1 || m_esmodel == egEnergyCorr::es2022_R21_Precision) { + if (m_esmodel == egEnergyCorr::es2017_R21_v1 || + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || + m_esmodel == egEnergyCorr::es2018_R21_v0 || + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || + m_esmodel == egEnergyCorr::es2018_R21_v1 || + m_esmodel == egEnergyCorr::es2022_R21_Precision) { m_G4OverAFII_resolution_electron.reset( dynamic_cast< TH2* >( m_rootFile->Get("FastSim/es2017_v1/resol_Af2ToG4_elec_rel21"))); m_G4OverAFII_resolution_unconverted.reset( dynamic_cast< TH2* >( m_rootFile->Get("FastSim/es2017_v1/resol_Af2ToG4_unco_rel21"))); m_G4OverAFII_resolution_converted.reset( dynamic_cast< TH2* >( m_rootFile->Get("FastSim/es2017_v1/resol_Af2ToG4_conv_rel21"))); @@ -945,8 +967,10 @@ namespace AtlasRoot { m_gain_tool = nullptr; std::string gain_tool_run_2_filename; - if (m_esmodel == egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or - m_esmodel == egEnergyCorr::es2017_R21_PRE or m_esmodel == egEnergyCorr::es2015_5TeV ){ + if (m_esmodel == egEnergyCorr::es2017 or + m_esmodel == egEnergyCorr::es2017_summer or + m_esmodel == egEnergyCorr::es2017_R21_PRE or + m_esmodel == egEnergyCorr::es2015_5TeV) { gain_tool_run_2_filename = PathResolverFindCalibFile("ElectronPhotonFourMomentumCorrection/v11/gain_uncertainty_specialRun.root"); } else if (m_esmodel == egEnergyCorr::es2022_R21_Precision) { @@ -963,9 +987,9 @@ namespace AtlasRoot { m_use_temp_correction201215 = false; m_use_temp_correction201516 = false; - } + } // end rel21 settings - else if ( m_esmodel==egEnergyCorr::es2015_day0_3percent ) { + else if (m_esmodel==egEnergyCorr::es2015_day0_3percent ) { m_use_new_resolution_model = true; m_resolution_tool.reset(new eg_resolution("run2_pre")); @@ -1026,11 +1050,23 @@ namespace AtlasRoot { } - if (m_esmodel == egEnergyCorr::es2015cPRE or m_esmodel == egEnergyCorr::es2015cPRE_res_improved or - m_esmodel == egEnergyCorr::es2015c_summer or m_esmodel == egEnergyCorr::es2016PRE or m_esmodel == egEnergyCorr::es2017 - or m_esmodel == egEnergyCorr::es2017_summer or m_esmodel == egEnergyCorr::es2017_summer_improved or m_esmodel == egEnergyCorr::es2017_summer_final - or m_esmodel == egEnergyCorr::es2017_R21_v0 or m_esmodel == egEnergyCorr::es2017_R21_v1 or m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 - or m_esmodel == egEnergyCorr::es2017_R21_PRE or m_esmodel == egEnergyCorr::es2015_5TeV or m_esmodel == egEnergyCorr::es2018_R21_v0 or m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 or m_esmodel == egEnergyCorr::es2018_R21_v1 or m_esmodel == egEnergyCorr::es2022_R21_Precision) + if (m_esmodel == egEnergyCorr::es2015cPRE or + m_esmodel == egEnergyCorr::es2015cPRE_res_improved or + m_esmodel == egEnergyCorr::es2015c_summer or + m_esmodel == egEnergyCorr::es2016PRE or + m_esmodel == egEnergyCorr::es2017 or + m_esmodel == egEnergyCorr::es2017_summer or + m_esmodel == egEnergyCorr::es2017_summer_improved or + m_esmodel == egEnergyCorr::es2017_summer_final or + m_esmodel == egEnergyCorr::es2017_R21_v0 or + m_esmodel == egEnergyCorr::es2017_R21_v1 or + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 or + m_esmodel == egEnergyCorr::es2017_R21_PRE or + m_esmodel == egEnergyCorr::es2015_5TeV or + m_esmodel == egEnergyCorr::es2018_R21_v0 or + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 or + m_esmodel == egEnergyCorr::es2018_R21_v1 or + m_esmodel == egEnergyCorr::es2022_R21_Precision) { // E4 systematics m_E4ElectronEtaBins.reset( dynamic_cast< TAxis* >( m_rootFile->Get("E4Recalibration/v4/electron_eta_axis"))); @@ -1043,15 +1079,24 @@ namespace AtlasRoot { } // ... PS and S12 recalibration curves - if (m_esmodel == egEnergyCorr::es2015PRE or m_esmodel == egEnergyCorr::es2015PRE_res_improved or - m_esmodel == egEnergyCorr::es2015cPRE or m_esmodel == egEnergyCorr::es2015cPRE_res_improved or - m_esmodel == egEnergyCorr::es2015c_summer or m_esmodel == egEnergyCorr::es2016PRE or - m_esmodel == egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or - m_esmodel == egEnergyCorr::es2017_summer_improved or m_esmodel == egEnergyCorr::es2017_summer_final or - m_esmodel == egEnergyCorr::es2017_R21_v0 or m_esmodel == egEnergyCorr::es2017_R21_v1 or - m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 or m_esmodel == egEnergyCorr::es2017_R21_PRE or - m_esmodel == egEnergyCorr::es2015_5TeV or m_esmodel == egEnergyCorr::es2018_R21_v0 or - m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 or m_esmodel == egEnergyCorr::es2018_R21_v1) { + if (m_esmodel == egEnergyCorr::es2015PRE or + m_esmodel == egEnergyCorr::es2015PRE_res_improved or + m_esmodel == egEnergyCorr::es2015cPRE or + m_esmodel == egEnergyCorr::es2015cPRE_res_improved or + m_esmodel == egEnergyCorr::es2015c_summer or + m_esmodel == egEnergyCorr::es2016PRE or + m_esmodel == egEnergyCorr::es2017 or + m_esmodel == egEnergyCorr::es2017_summer or + m_esmodel == egEnergyCorr::es2017_summer_improved or + m_esmodel == egEnergyCorr::es2017_summer_final or + m_esmodel == egEnergyCorr::es2017_R21_v0 or + m_esmodel == egEnergyCorr::es2017_R21_v1 or + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 or + m_esmodel == egEnergyCorr::es2017_R21_PRE or + m_esmodel == egEnergyCorr::es2015_5TeV or + m_esmodel == egEnergyCorr::es2018_R21_v0 or + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 or + m_esmodel == egEnergyCorr::es2018_R21_v1) { m_psElectronEtaBins.reset( dynamic_cast< TAxis* >( m_rootFile->Get("PSRecalibration/es2015PRE/ElectronAxis"))); m_psElectronGraphs.reset( dynamic_cast< TList* >( m_rootFile->Get("PSRecalibration/es2015PRE/ElectronBiasPS")));m_psElectronGraphs->SetOwner(); @@ -1137,9 +1182,12 @@ namespace AtlasRoot { m_matElectronCstTerm.emplace_back(std::unique_ptr<TH1>( (TH1*) m_rootFile->Get("Material/electronCstTerm_ConfigGp") )); m_matElectronCstTerm.back()->SetDirectory(nullptr); - if (m_esmodel==egEnergyCorr::es2017_R21_v1 || m_esmodel==egEnergyCorr::es2017_R21_ofc0_v1 || - m_esmodel == egEnergyCorr::es2018_R21_v0 || m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || - m_esmodel == egEnergyCorr::es2018_R21_v1 or m_esmodel == egEnergyCorr::es2022_R21_Precision) { + if (m_esmodel == egEnergyCorr::es2017_R21_v1 or + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 or + m_esmodel == egEnergyCorr::es2018_R21_v0 or + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 or + m_esmodel == egEnergyCorr::es2018_R21_v1 or + m_esmodel == egEnergyCorr::es2022_R21_Precision) { // update dX0 plots for distorted geometry for case A, EL, FMX and N m_matX0Additions.emplace_back(std::unique_ptr<TH1>( (TH1*) m_rootFile->Get("Material_rel21/DX0_ConfigA") )); m_matX0Additions.back()->SetDirectory(nullptr); @@ -1180,12 +1228,14 @@ namespace AtlasRoot { mat->SetOwner(); } - // ... new material distortions from release 21 parameterizations - if (m_esmodel==egEnergyCorr::es2017_R21_v1 || m_esmodel==egEnergyCorr::es2017_R21_ofc0_v1 || - m_esmodel == egEnergyCorr::es2018_R21_v0 || m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || - m_esmodel == egEnergyCorr::es2018_R21_v1 || m_esmodel == egEnergyCorr::es2022_R21_Precision ) { + if (m_esmodel == egEnergyCorr::es2017_R21_v1 || + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || + m_esmodel == egEnergyCorr::es2018_R21_v0 || + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || + m_esmodel == egEnergyCorr::es2018_R21_v1 || + m_esmodel == egEnergyCorr::es2022_R21_Precision) { m_electronBias_ConfigA.reset( dynamic_cast< TH2* >( m_rootFile->Get("Material_rel21/electronBias_ConfigA"))); m_electronBias_ConfigA->SetDirectory(nullptr); m_electronBias_ConfigEpLp.reset( dynamic_cast< TH2* >( m_rootFile->Get("Material_rel21/electronBias_ConfigEpLp"))); m_electronBias_ConfigEpLp->SetDirectory(nullptr); m_electronBias_ConfigFpMX.reset( dynamic_cast< TH2* >( m_rootFile->Get("Material_rel21/electronBias_ConfigFpMX"))); m_electronBias_ConfigFpMX->SetDirectory(nullptr); @@ -1206,28 +1256,35 @@ namespace AtlasRoot { m_convertedBias_ConfigPP0.reset( dynamic_cast< TH2* >( m_rootFile->Get("Material_rel21/convertedBias_ConfigPP0"))); m_convertedBias_ConfigPP0->SetDirectory(nullptr); } - - // ... Fastsim to Fullsim corrections - if (m_esmodel == egEnergyCorr::es2015PRE or m_esmodel == egEnergyCorr::es2015PRE_res_improved or - m_esmodel == egEnergyCorr::es2015cPRE or m_esmodel == egEnergyCorr::es2015cPRE_res_improved or - m_esmodel == egEnergyCorr::es2015c_summer or m_esmodel == egEnergyCorr::es2016PRE) { + if (m_esmodel == egEnergyCorr::es2015PRE or + m_esmodel == egEnergyCorr::es2015PRE_res_improved or + m_esmodel == egEnergyCorr::es2015cPRE or + m_esmodel == egEnergyCorr::es2015cPRE_res_improved or + m_esmodel == egEnergyCorr::es2015c_summer or + m_esmodel == egEnergyCorr::es2016PRE) { m_G4OverAFII_electron.reset( dynamic_cast< TH1* >( m_rootFile->Get("FastSim/es2015/el_scale_full_fast_peak_gaussian"))); m_G4OverAFII_electron->SetDirectory(nullptr); m_G4OverAFII_unconverted.reset( dynamic_cast< TH1* >( m_rootFile->Get("FastSim/es2015/ph_unconv_scale_full_fast_peak_gaussian"))); m_G4OverAFII_unconverted->SetDirectory(nullptr); m_G4OverAFII_converted.reset( dynamic_cast< TH1* >( m_rootFile->Get("FastSim/es2015/ph_conv_scale_full_fast_peak_gaussian"))); m_G4OverAFII_converted->SetDirectory(nullptr); } - else if (m_esmodel == egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or - m_esmodel == egEnergyCorr::es2017_summer_improved or m_esmodel == egEnergyCorr::es2017_summer_final or - m_esmodel == egEnergyCorr::es2017_R21_PRE or m_esmodel == egEnergyCorr::es2015_5TeV or + else if (m_esmodel == egEnergyCorr::es2017 or + m_esmodel == egEnergyCorr::es2017_summer or + m_esmodel == egEnergyCorr::es2017_summer_improved or + m_esmodel == egEnergyCorr::es2017_summer_final or + m_esmodel == egEnergyCorr::es2017_R21_PRE or + m_esmodel == egEnergyCorr::es2015_5TeV or m_esmodel == egEnergyCorr::es2017_R21_v0) { m_G4OverAFII_electron.reset( dynamic_cast< TH1* >( m_rootFile->Get("FastSim/es2017/el_scale_full_fast_peak_gaussian"))); m_G4OverAFII_electron->SetDirectory(nullptr); m_G4OverAFII_unconverted.reset( dynamic_cast< TH1* >( m_rootFile->Get("FastSim/es2017/ph_unconv_scale_full_fast_peak_gaussian"))); m_G4OverAFII_unconverted->SetDirectory(nullptr); m_G4OverAFII_converted.reset( dynamic_cast< TH1* >( m_rootFile->Get("FastSim/es2017/ph_conv_scale_full_fast_peak_gaussian"))); m_G4OverAFII_converted->SetDirectory(nullptr); } - else if (m_esmodel == egEnergyCorr::es2017_R21_v1 || m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || - m_esmodel == egEnergyCorr::es2018_R21_v0 || m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || - m_esmodel == egEnergyCorr::es2018_R21_v1 || m_esmodel == egEnergyCorr::es2022_R21_Precision) { + else if (m_esmodel == egEnergyCorr::es2017_R21_v1 || + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || + m_esmodel == egEnergyCorr::es2018_R21_v0 || + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || + m_esmodel == egEnergyCorr::es2018_R21_v1 || + m_esmodel == egEnergyCorr::es2022_R21_Precision) { m_G4OverAFII_electron_2D.reset( dynamic_cast< TH2* >( m_rootFile->Get("FastSim/es2017_v1/scale_Af2ToG4_elec_rel21"))); m_G4OverAFII_electron_2D->SetDirectory(nullptr); m_G4OverAFII_unconverted_2D.reset( dynamic_cast< TH2* >( m_rootFile->Get("FastSim/es2017_v1/scale_Af2ToG4_unco_rel21"))); m_G4OverAFII_unconverted_2D->SetDirectory(nullptr); m_G4OverAFII_converted_2D.reset( dynamic_cast< TH2* >( m_rootFile->Get("FastSim/es2017_v1/scale_Af2ToG4_conv_rel21"))); m_G4OverAFII_converted_2D->SetDirectory(nullptr); @@ -1235,17 +1292,22 @@ namespace AtlasRoot { else { // run 1 m_G4OverAFII_electron.reset( dynamic_cast< TH1* >( m_rootFile->Get("FastSim/hG4OverAF"))); m_G4OverAFII_electron->SetDirectory(nullptr); } - m_G4OverFrSh.reset( dynamic_cast< TH1* >( m_rootFile->Get("FastSim/hG4OverFS"))); m_G4OverFrSh->SetDirectory(nullptr); // ... Leakage systematics - if(m_esmodel != egEnergyCorr::es2017_summer and m_esmodel != egEnergyCorr::es2017_summer_improved and - m_esmodel != egEnergyCorr::es2017_summer_final and m_esmodel != egEnergyCorr::es2017_R21_PRE and - m_esmodel != egEnergyCorr::es2015_5TeV and m_esmodel != egEnergyCorr::es2017_R21_v0 and - m_esmodel != egEnergyCorr::es2017_R21_v1 and m_esmodel != egEnergyCorr::es2017_R21_ofc0_v1 and - m_esmodel != egEnergyCorr::es2018_R21_v0 and m_esmodel != egEnergyCorr::es2018_R21_lowmu_v0 and - m_esmodel != egEnergyCorr::es2018_R21_v1 and m_esmodel != egEnergyCorr::es2022_R21_Precision) { + if (m_esmodel != egEnergyCorr::es2017_summer and + m_esmodel != egEnergyCorr::es2017_summer_improved and + m_esmodel != egEnergyCorr::es2017_summer_final and + m_esmodel != egEnergyCorr::es2017_R21_PRE and + m_esmodel != egEnergyCorr::es2015_5TeV and + m_esmodel != egEnergyCorr::es2017_R21_v0 and + m_esmodel != egEnergyCorr::es2017_R21_v1 and + m_esmodel != egEnergyCorr::es2017_R21_ofc0_v1 and + m_esmodel != egEnergyCorr::es2018_R21_v0 and + m_esmodel != egEnergyCorr::es2018_R21_lowmu_v0 and + m_esmodel != egEnergyCorr::es2018_R21_v1 and + m_esmodel != egEnergyCorr::es2022_R21_Precision) { m_leakageConverted.reset( dynamic_cast< TH1* >( m_rootFile->Get("Leakage/LeakageDiffConverted"))); m_leakageUnconverted.reset( dynamic_cast< TH1* >( m_rootFile->Get("Leakage/LeakageDiffUnconverted"))); } @@ -1276,16 +1338,15 @@ namespace AtlasRoot { } - // User interface // universal compact interface to getCorrectedEnergy(...) - double egammaEnergyCorrectionTool::getCorrectedMomentum( PATCore::ParticleDataType::DataType dataType, - PATCore::ParticleType::Type ptype, - double momentum, - double trk_eta, - egEnergyCorr::Scale::Variation scaleVar, - double varSF ) const { + double egammaEnergyCorrectionTool::getCorrectedMomentum(PATCore::ParticleDataType::DataType dataType, + PATCore::ParticleType::Type ptype, + double momentum, + double trk_eta, + egEnergyCorr::Scale::Variation scaleVar, + double varSF) const { double correctedMomentum = momentum; double aeta = fabs(trk_eta); @@ -1305,18 +1366,18 @@ namespace AtlasRoot { // This method handles the main switches between data and the various MC flavours. // Called internally by getCorrectedEnergy(...) - double egammaEnergyCorrectionTool::getCorrectedEnergy( unsigned int runnumber, - PATCore::ParticleDataType::DataType dataType, - PATCore::ParticleType::Type ptype, - double cl_eta, - double cl_etaCalo, - double energy, - double energyS2, - double eraw, - egEnergyCorr::Scale::Variation scaleVar, - egEnergyCorr::Resolution::Variation resVar, - egEnergyCorr::Resolution::resolutionType resType, - double varSF ) const { + double egammaEnergyCorrectionTool::getCorrectedEnergy(unsigned int runnumber, + PATCore::ParticleDataType::DataType dataType, + PATCore::ParticleType::Type ptype, + double cl_eta, + double cl_etaCalo, + double energy, + double energyS2, + double eraw, + egEnergyCorr::Scale::Variation scaleVar, + egEnergyCorr::Resolution::Variation resVar, + egEnergyCorr::Resolution::resolutionType resType, + double varSF) const { double fullyCorrectedEnergy = energy; // Correct fast sim flavours @@ -1366,21 +1427,27 @@ namespace AtlasRoot { // AF2 systematics (this will not be in the sum of all other NP in the 1 NP model) if (dataType == PATCore::ParticleDataType::Fast && - (m_esmodel== egEnergyCorr::es2017_R21_v0 || m_esmodel== egEnergyCorr::es2017_R21_v1 || - m_esmodel== egEnergyCorr::es2017_R21_ofc0_v1 || m_esmodel == egEnergyCorr::es2018_R21_v0 || - m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || m_esmodel == egEnergyCorr::es2018_R21_v1 || + (m_esmodel == egEnergyCorr::es2017_R21_v0 || + m_esmodel == egEnergyCorr::es2017_R21_v1 || + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || + m_esmodel == egEnergyCorr::es2018_R21_v0 || + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || + m_esmodel == egEnergyCorr::es2018_R21_v1 || m_esmodel == egEnergyCorr::es2022_R21_Precision) ) { if (scaleVar==egEnergyCorr::Scale::af2Up or scaleVar==egEnergyCorr::Scale::af2Down) { double daAF2=0.; - if (m_esmodel== egEnergyCorr::es2017_R21_v0) { - if (scaleVar==egEnergyCorr::Scale::af2Up) daAF2 = 0.005; - if (scaleVar==egEnergyCorr::Scale::af2Down) daAF2 = -0.005; + if (m_esmodel == egEnergyCorr::es2017_R21_v0) { + if (scaleVar == egEnergyCorr::Scale::af2Up) daAF2 = 0.005; + if (scaleVar == egEnergyCorr::Scale::af2Down) daAF2 = -0.005; } - if (m_esmodel== egEnergyCorr::es2017_R21_v1 || m_esmodel== egEnergyCorr::es2017_R21_ofc0_v1 || - m_esmodel == egEnergyCorr::es2018_R21_v0 || m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || - m_esmodel == egEnergyCorr::es2018_R21_v1 || m_esmodel == egEnergyCorr::es2022_R21_Precision) { - if (scaleVar==egEnergyCorr::Scale::af2Up) daAF2 = 0.001; - if (scaleVar==egEnergyCorr::Scale::af2Down) daAF2 = -0.001; + if (m_esmodel == egEnergyCorr::es2017_R21_v1 || + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || + m_esmodel == egEnergyCorr::es2018_R21_v0 || + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || + m_esmodel == egEnergyCorr::es2018_R21_v1 || + m_esmodel == egEnergyCorr::es2022_R21_Precision) { + if (scaleVar == egEnergyCorr::Scale::af2Up) daAF2 = 0.001; + if (scaleVar == egEnergyCorr::Scale::af2Down) daAF2 = -0.001; } fullyCorrectedEnergy *= ( 1 + daAF2); } @@ -1448,7 +1515,7 @@ namespace AtlasRoot { //wtots1 contribution double daWtots1 = 0.; - if ((m_esmodel==egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or + if ((m_esmodel == egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or m_esmodel == egEnergyCorr::es2017_summer_improved or m_esmodel == egEnergyCorr::es2017_summer_final or m_esmodel == egEnergyCorr::es2017_R21_PRE or m_esmodel == egEnergyCorr::es2015_5TeV or m_esmodel == egEnergyCorr::es2017_R21_v0 or m_esmodel == egEnergyCorr::es2017_R21_v1 or @@ -1462,9 +1529,9 @@ namespace AtlasRoot { } // ... Presampler contribution - if( var==egEnergyCorr::Scale::PSUp || var==egEnergyCorr::Scale::PSDown || - var==egEnergyCorr::Scale::PSb12Up || var==egEnergyCorr::Scale::PSb12Down || - var==egEnergyCorr::Scale::LArElecUnconvUp || var==egEnergyCorr::Scale::LArElecUnconvDown ) { + if( var == egEnergyCorr::Scale::PSUp || var == egEnergyCorr::Scale::PSDown || + var == egEnergyCorr::Scale::PSb12Up || var == egEnergyCorr::Scale::PSb12Down || + var == egEnergyCorr::Scale::LArElecUnconvUp || var == egEnergyCorr::Scale::LArElecUnconvDown ) { daPS = getLayerUncertainty( 0, cl_eta, var, varSF ); linPS = getLayerNonLinearity( 0, cl_eta, energy, ptype ) @@ -1473,9 +1540,9 @@ namespace AtlasRoot { } // ... S1 / S2 contribution - if (var == egEnergyCorr::Scale::S12Up or var==egEnergyCorr::Scale::S12Down or - var == egEnergyCorr::Scale::LArCalibUp or var==egEnergyCorr::Scale::LArCalibDown or - var == egEnergyCorr::Scale::LArCalibExtra2015PreUp or var == egEnergyCorr::Scale::LArCalibExtra2015PreDown or + if (var == egEnergyCorr::Scale::S12Up or var == egEnergyCorr::Scale::S12Down or + var == egEnergyCorr::Scale::LArCalibUp or var == egEnergyCorr::Scale::LArCalibDown or + var == egEnergyCorr::Scale::LArCalibExtra2015PreUp or var == egEnergyCorr::Scale::LArCalibExtra2015PreDown or var == egEnergyCorr::Scale::S12ExtraLastEtaBinRun2Up or var == egEnergyCorr::Scale::S12ExtraLastEtaBinRun2Down) { daS12 = getLayerUncertainty(1, cl_eta, var, varSF); @@ -1524,7 +1591,7 @@ namespace AtlasRoot { // L1 Gain switch contribution double daL1GainSwitch = 0.; - if ( var==egEnergyCorr::Scale::L1GainUp || var==egEnergyCorr::Scale::L1GainDown ) { + if (var == egEnergyCorr::Scale::L1GainUp || var == egEnergyCorr::Scale::L1GainDown) { int eg_e1hg_ptype; if( ptype==PATCore::ParticleType::Electron ) @@ -1537,24 +1604,23 @@ namespace AtlasRoot { return -1; daL1GainSwitch = m_e1hg_tool->getAlpha(eg_e1hg_ptype, energy, cl_eta, true); - if( var==egEnergyCorr::Scale::L1GainDown ) + if( var == egEnergyCorr::Scale::L1GainDown ) daL1GainSwitch = -daL1GainSwitch; } - // L2 Gain switch contribution double daL2GainSwitch = 0.; - if ( var==egEnergyCorr::Scale::L2GainUp || var==egEnergyCorr::Scale::L2GainDown ) { + if (var == egEnergyCorr::Scale::L2GainUp || var == egEnergyCorr::Scale::L2GainDown) { if (m_gain_tool) { // recipe for run1 if (!(fabs(cl_eta) < 1.52 and fabs(cl_eta) > 1.37) and fabs(cl_eta) < 2.4) { - double evar = m_gain_tool->CorrectionGainTool(cl_eta, energy/GeV, energyS2/GeV, ptype); - double meanES2 = m_zeeES2Profile->GetBinContent(m_zeeES2Profile->FindBin(cl_eta)); // in GeV already - double eref = m_gain_tool->CorrectionGainTool(cl_eta, meanE/GeV, meanES2, PATCore::ParticleType::Electron ); - daL2GainSwitch = evar/energy - eref/meanE; - if( var==egEnergyCorr::Scale::L2GainDown ) - daL2GainSwitch = -daL2GainSwitch; + double evar = m_gain_tool->CorrectionGainTool(cl_eta, energy/GeV, energyS2/GeV, ptype); + double meanES2 = m_zeeES2Profile->GetBinContent(m_zeeES2Profile->FindBin(cl_eta)); // in GeV already + double eref = m_gain_tool->CorrectionGainTool(cl_eta, meanE/GeV, meanES2, PATCore::ParticleType::Electron ); + daL2GainSwitch = evar/energy - eref/meanE; + if( var==egEnergyCorr::Scale::L2GainDown ) + daL2GainSwitch = -daL2GainSwitch; } } else if (m_gain_tool_run2) { // recipe for run 2, see ATLASEG-44 @@ -1611,16 +1677,19 @@ namespace AtlasRoot { double daConvSyst = getAlphaConvSyst(cl_eta, energy, ptype, var, varSF); // topo cluster threshold systematics for release 21 - double daTopoCluster=0; - if ((var==egEnergyCorr::Scale::topoClusterThresUp || var==egEnergyCorr::Scale::topoClusterThresDown) && - (m_esmodel== egEnergyCorr::es2017_R21_v0 || m_esmodel== egEnergyCorr::es2017_R21_v1 || - m_esmodel== egEnergyCorr::es2017_R21_ofc0_v1 || m_esmodel == egEnergyCorr::es2018_R21_v0 || - m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || m_esmodel == egEnergyCorr::es2018_R21_v1 || - m_esmodel == egEnergyCorr::es2022_R21_Precision)) { - static const double Et0 = 10000.; - // Effect taken as 10**-3/(Et/10GeV) - order of magniture from https://indico.cern.ch/event/669895/contributions/2745266/attachments/1535612/2405452/slides.pdf - if (var==egEnergyCorr::Scale::topoClusterThresUp) daTopoCluster = 1e-3*(1./(Et/Et0)-1./(meanET/Et0)); - if (var==egEnergyCorr::Scale::topoClusterThresDown) daTopoCluster = -1e-3*(1./(Et/Et0)-1./(meanET/Et0)); + double daTopoCluster = 0; + if ((var == egEnergyCorr::Scale::topoClusterThresUp || var == egEnergyCorr::Scale::topoClusterThresDown) && + (m_esmodel == egEnergyCorr::es2017_R21_v0 || + m_esmodel == egEnergyCorr::es2017_R21_v1 || + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || + m_esmodel == egEnergyCorr::es2018_R21_v0 || + m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || + m_esmodel == egEnergyCorr::es2018_R21_v1 || + m_esmodel == egEnergyCorr::es2022_R21_Precision)) { + static const double Et0 = 10000.; + // Effect taken as 10**-3/(Et/10GeV) - order of magniture from https://indico.cern.ch/event/669895/contributions/2745266/attachments/1535612/2405452/slides.pdf + if (var == egEnergyCorr::Scale::topoClusterThresUp) daTopoCluster = 1e-3*(1./(Et/Et0)-1./(meanET/Et0)); + if (var == egEnergyCorr::Scale::topoClusterThresDown) daTopoCluster = -1e-3*(1./(Et/Et0)-1./(meanET/Et0)); } // ADC non linearity correction. 30% of the effect from https://indico.cern.ch/event/1001455/contributions/4205636/attachments/2179584/3681315/ADC-linearity-28jan2021.pdf ? @@ -1634,7 +1703,7 @@ namespace AtlasRoot { ATH_MSG_ERROR("trying to compute ADC correction systematic, but no tool for doing it has been instantiated, setting sys to 0"); daADCLin = 0.; } - if (var==egEnergyCorr::Scale::ADCLinDown) + if (var == egEnergyCorr::Scale::ADCLinDown) daADCLin *= -1; } @@ -1660,7 +1729,6 @@ namespace AtlasRoot { } - // returns alpha_var - alpha_nom, for systematic variations. double egammaEnergyCorrectionTool::getAlphaUncertainty(long int runnumber, @@ -1947,7 +2015,7 @@ namespace AtlasRoot { } double sign = 1.; - if (value==egEnergyCorr::Resolution::AllDown || value==egEnergyCorr::Resolution::ZSmearingDown || + if (value==egEnergyCorr::Resolution::AllDown || value==egEnergyCorr::Resolution::ZSmearingDown || value==egEnergyCorr::Resolution::SamplingTermDown || value==egEnergyCorr::Resolution::MaterialIDDown || value==egEnergyCorr::Resolution::MaterialGapDown || value==egEnergyCorr::Resolution::MaterialCaloDown || value==egEnergyCorr::Resolution::MaterialCryoDown || value==egEnergyCorr::Resolution::PileUpDown || @@ -1959,12 +2027,11 @@ namespace AtlasRoot { double resolution_error_up; double resolution_error_down; - getResolution_systematics(eg_resolution_ptype, energy, eta, etaCalo, isys, resolution, resolution_error, resolution_error_up, resolution_error_down, resType, dataType == PATCore::ParticleDataType::Fast); // total resolution uncertainty - if (value==egEnergyCorr::Resolution::AllUp || value==egEnergyCorr::Resolution::AllDown) { + if (value == egEnergyCorr::Resolution::AllUp || value == egEnergyCorr::Resolution::AllDown) { resolution_error = resolution_error / resolution * sign; } else { if (sign==1) resolution_error= resolution_error_up/resolution; @@ -2018,9 +2085,9 @@ namespace AtlasRoot { egEnergyCorr::Resolution::resolutionType resType) const { int eg_resolution_ptype; - if (ptype == PATCore::ParticleType::Electron) eg_resolution_ptype = 0; - else if (ptype==PATCore::ParticleType::UnconvertedPhoton) eg_resolution_ptype = 1; - else if (ptype==PATCore::ParticleType::ConvertedPhoton) eg_resolution_ptype = 2; + if (ptype == PATCore::ParticleType::Electron) eg_resolution_ptype = 0; + else if (ptype == PATCore::ParticleType::UnconvertedPhoton) eg_resolution_ptype = 1; + else if (ptype == PATCore::ParticleType::ConvertedPhoton) eg_resolution_ptype = 2; else { ATH_MSG_FATAL("cannot understand particle type"); return -1; @@ -2062,21 +2129,21 @@ namespace AtlasRoot { double ratio_IQR_full_fast = 1.; const double ptGeV = energy / cosh(cl_eta) / 1E3; - if ( m_esmodel == egEnergyCorr::es2017_R21_v1 || m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || - m_esmodel == egEnergyCorr::es2018_R21_v0 || m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || - m_esmodel == egEnergyCorr::es2018_R21_v1 || m_esmodel == egEnergyCorr::es2022_R21_Precision) { + if (m_esmodel == egEnergyCorr::es2017_R21_v1 || m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || + m_esmodel == egEnergyCorr::es2018_R21_v0 || m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 || + m_esmodel == egEnergyCorr::es2018_R21_v1 || m_esmodel == egEnergyCorr::es2022_R21_Precision) { // // for es2017_R21_v1, histograms contain directly values of deltaSigma**2 of relative energy resolution (FastSIm-FulSim) so need to subtract this value to get the sigma**2 of FastSim - if(ptype == PATCore::ParticleType::Electron) sig2 -= getValueHistAt(*m_G4OverAFII_resolution_electron,cl_eta,ptGeV,true,true,true,true); - if (ptype == PATCore::ParticleType::UnconvertedPhoton) sig2 -= getValueHistAt(*m_G4OverAFII_resolution_unconverted,cl_eta,ptGeV,true,true,true,true); - if (ptype == PATCore::ParticleType::ConvertedPhoton) sig2 -= getValueHistAt(*m_G4OverAFII_resolution_converted,cl_eta,ptGeV,true,true,true,true); + if (ptype == PATCore::ParticleType::Electron) sig2 -= getValueHistAt(*m_G4OverAFII_resolution_electron,cl_eta,ptGeV,true,true,true,true); + if (ptype == PATCore::ParticleType::UnconvertedPhoton) sig2 -= getValueHistAt(*m_G4OverAFII_resolution_unconverted,cl_eta,ptGeV,true,true,true,true); + if (ptype == PATCore::ParticleType::ConvertedPhoton) sig2 -= getValueHistAt(*m_G4OverAFII_resolution_converted,cl_eta,ptGeV,true,true,true,true); if (sig2<0.) sig2=0.; } else { - if (ptype == PATCore::ParticleType::Electron) { ratio_IQR_full_fast = getValueHistAt(*m_G4OverAFII_resolution_electron, ptGeV, cl_eta, true, false); } + if (ptype == PATCore::ParticleType::Electron) { ratio_IQR_full_fast = getValueHistAt(*m_G4OverAFII_resolution_electron, ptGeV, cl_eta, true, false); } else if (ptype == PATCore::ParticleType::UnconvertedPhoton) { ratio_IQR_full_fast = getValueHistAt(*m_G4OverAFII_resolution_unconverted, ptGeV, cl_eta, true, false); } - else if (ptype == PATCore::ParticleType::ConvertedPhoton) { ratio_IQR_full_fast = getValueHistAt(*m_G4OverAFII_resolution_converted, ptGeV, cl_eta, true, false); } + else if (ptype == PATCore::ParticleType::ConvertedPhoton) { ratio_IQR_full_fast = getValueHistAt(*m_G4OverAFII_resolution_converted, ptGeV, cl_eta, true, false); } sig2 /= ratio_IQR_full_fast * ratio_IQR_full_fast; } @@ -2220,14 +2287,14 @@ namespace AtlasRoot { m_esmodel == egEnergyCorr::es2018_R21_v1 || m_esmodel == egEnergyCorr::es2022_R21_Precision) { // // in es02017_R21_v1 : AF2 to FullSim correction is in a 2D eta-Pt histogram - if (ptype == PATCore::ParticleType::Electron) { return (1.+getValueHistAt(*m_G4OverAFII_electron_2D, aeta,ptGeV,true,true,true,true)); } - else if (ptype == PATCore::ParticleType::ConvertedPhoton) { return (1.+getValueHistAt(*m_G4OverAFII_converted_2D, aeta,ptGeV,true,true,true,true)); } + if (ptype == PATCore::ParticleType::Electron) { return (1.+getValueHistAt(*m_G4OverAFII_electron_2D, aeta,ptGeV,true,true,true,true)); } + else if (ptype == PATCore::ParticleType::ConvertedPhoton) { return (1.+getValueHistAt(*m_G4OverAFII_converted_2D, aeta,ptGeV,true,true,true,true)); } else if (ptype == PATCore::ParticleType::UnconvertedPhoton) { return (1.+getValueHistAt(*m_G4OverAFII_unconverted_2D, aeta,ptGeV,true,true,true,true)); } else { throw std::runtime_error("particle not valid"); } } else { - if (ptype == PATCore::ParticleType::Electron) { return getValueHistoAt(*m_G4OverAFII_electron, aeta); } - else if (ptype == PATCore::ParticleType::ConvertedPhoton) { return getValueHistoAt(*m_G4OverAFII_converted, aeta); } + if (ptype == PATCore::ParticleType::Electron) { return getValueHistoAt(*m_G4OverAFII_electron, aeta); } + else if (ptype == PATCore::ParticleType::ConvertedPhoton) { return getValueHistoAt(*m_G4OverAFII_converted, aeta); } else if (ptype == PATCore::ParticleType::UnconvertedPhoton) { return getValueHistoAt(*m_G4OverAFII_unconverted, aeta); } else { throw std::runtime_error("particle not valid"); } } @@ -2274,7 +2341,8 @@ namespace AtlasRoot { // low mu data 2017 5TeV differnet scale if (m_esmodel == egEnergyCorr::es2018_R21_lowmu_v0 && runnumber<=341184 && runnumber>=340634) { - int ieta = m_zeeNom_data2017->GetXaxis()->FindBin(eta); value = m_zeeNom_data2017->GetBinContent(ieta); + int ieta = m_zeeNom_data2017->GetXaxis()->FindBin(eta); + value = m_zeeNom_data2017->GetBinContent(ieta); } // for es2017_R21_v0 different set of scales for 2017, 2016 and 2015 data @@ -2305,7 +2373,7 @@ namespace AtlasRoot { value = m_zeeNom_data2018->GetBinContent(ieta); } - if ((m_esmodel==egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or + if ((m_esmodel == egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or m_esmodel == egEnergyCorr::es2017_summer_improved or m_esmodel == egEnergyCorr::es2017_summer_final or m_esmodel == egEnergyCorr::es2015_5TeV or m_esmodel == egEnergyCorr::es2017_R21_v0 or m_esmodel == egEnergyCorr::es2017_R21_v1 or m_esmodel == egEnergyCorr::es2018_R21_v0 or @@ -2385,8 +2453,8 @@ namespace AtlasRoot { runnumber < 297000){ h=((TH1*) m_zeeNom_data2015.get()); // special for 2015 with es2017 } - if ( (m_esmodel== egEnergyCorr::es2017_R21_v0 || m_esmodel== egEnergyCorr::es2017_R21_v1 || - m_esmodel== egEnergyCorr::es2017_R21_ofc0_v1 || m_esmodel == egEnergyCorr::es2018_R21_v0 || + if ( (m_esmodel == egEnergyCorr::es2017_R21_v0 || m_esmodel== egEnergyCorr::es2017_R21_v1 || + m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 || m_esmodel == egEnergyCorr::es2018_R21_v0 || m_esmodel == egEnergyCorr::es2018_R21_v1 || m_esmodel == egEnergyCorr::es2022_R21_Precision ) && runnumber>=297000 && runnumber<322817){ h = m_zeeNom_data2016.get(); // 2016 data @@ -2458,7 +2526,8 @@ namespace AtlasRoot { // special case for es2016PRE (extrapolation from 2015) const double sign = (var == egEnergyCorr::Scale::LArTemperature2016PreUp) ? 1 : -1; // temp + pileup - value += qsum(0.05E-2, 0.02E-2) * sign; // Guillaume email 23/05/2016 + 26/5/2016 + static constexpr double ivalue = std::hypot(0.05E-2, 0.02E-2); + value += ivalue * sign; // Guillaume email 23/05/2016 + 26/5/2016 } @@ -2610,16 +2679,22 @@ namespace AtlasRoot { else if( iLayer==1 ) { // use cl_eta - if (var == egEnergyCorr::Scale::S12Up && m_aS12Nom) { value = m_aS12Nom->GetBinError(m_aS12Nom->FindBin(cl_eta)); } - else if (var == egEnergyCorr::Scale::S12Down && m_aS12Nom) { value = -m_aS12Nom->GetBinError(m_aS12Nom->FindBin(cl_eta)); } - else if (var == egEnergyCorr::Scale::LArCalibUp && m_daS12Cor) { value = m_daS12Cor->GetBinContent(m_daS12Cor->FindBin(cl_eta)); } + if (var == egEnergyCorr::Scale::S12Up && m_aS12Nom) { value = m_aS12Nom->GetBinError(m_aS12Nom->FindBin(cl_eta)); } + else if (var == egEnergyCorr::Scale::S12Down && m_aS12Nom) { value = -m_aS12Nom->GetBinError(m_aS12Nom->FindBin(cl_eta)); } + else if (var == egEnergyCorr::Scale::LArCalibUp && m_daS12Cor) { value = m_daS12Cor->GetBinContent(m_daS12Cor->FindBin(cl_eta)); } else if (var == egEnergyCorr::Scale::LArCalibDown && m_daS12Cor) { value = -m_daS12Cor->GetBinContent( m_daS12Cor->FindBin(cl_eta)); } else if (var == egEnergyCorr::Scale::LArCalibExtra2015PreUp and - (m_esmodel == egEnergyCorr::es2015PRE or m_esmodel == egEnergyCorr::es2015PRE_res_improved or - m_esmodel == egEnergyCorr::es2015cPRE or m_esmodel == egEnergyCorr::es2015cPRE_res_improved or - m_esmodel == egEnergyCorr::es2015c_summer or m_esmodel == egEnergyCorr::es2016PRE or m_esmodel == egEnergyCorr::es2017 - or m_esmodel == egEnergyCorr::es2017_summer or m_esmodel == egEnergyCorr::es2017_summer_improved or m_esmodel == egEnergyCorr::es2017_R21_PRE - or m_esmodel == egEnergyCorr::es2015_5TeV)) { + (m_esmodel == egEnergyCorr::es2015PRE or + m_esmodel == egEnergyCorr::es2015PRE_res_improved or + m_esmodel == egEnergyCorr::es2015cPRE or + m_esmodel == egEnergyCorr::es2015cPRE_res_improved or + m_esmodel == egEnergyCorr::es2015c_summer or + m_esmodel == egEnergyCorr::es2016PRE or + m_esmodel == egEnergyCorr::es2017 or + m_esmodel == egEnergyCorr::es2017_summer or + m_esmodel == egEnergyCorr::es2017_summer_improved or + m_esmodel == egEnergyCorr::es2017_R21_PRE or + m_esmodel == egEnergyCorr::es2015_5TeV)) { // special case for es2015PRE and also for es2015c_summer and also for es2017 // numbers from Lydia and Christophe, // https://indico.cern.ch/event/395345/contribution/2/material/slides/0.pdf @@ -2628,8 +2703,10 @@ namespace AtlasRoot { const double aeta = std::abs(cl_eta); //endcap if ( aeta >= 1.37 and aeta < 2.5){ - if ( m_esmodel == egEnergyCorr::es2017_summer or m_esmodel == egEnergyCorr::es2017_summer_improved or - m_esmodel == egEnergyCorr::es2017_R21_PRE or m_esmodel == egEnergyCorr::es2015_5TeV) value = 5.0E-2; + if ( m_esmodel == egEnergyCorr::es2017_summer or + m_esmodel == egEnergyCorr::es2017_summer_improved or + m_esmodel == egEnergyCorr::es2017_R21_PRE or + m_esmodel == egEnergyCorr::es2015_5TeV) value = 5.0E-2; else value = 1.5E-2; } else{//barrel @@ -2638,29 +2715,39 @@ namespace AtlasRoot { } } else if (var == egEnergyCorr::Scale::LArCalibExtra2015PreDown and - (m_esmodel == egEnergyCorr::es2015PRE or m_esmodel == egEnergyCorr::es2015PRE_res_improved or - m_esmodel == egEnergyCorr::es2015cPRE or m_esmodel == egEnergyCorr::es2015cPRE_res_improved or - m_esmodel == egEnergyCorr::es2015c_summer or m_esmodel == egEnergyCorr::es2016PRE or - m_esmodel == egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or - m_esmodel == egEnergyCorr::es2017_summer_improved or m_esmodel == egEnergyCorr::es2017_R21_PRE or + (m_esmodel == egEnergyCorr::es2015PRE or + m_esmodel == egEnergyCorr::es2015PRE_res_improved or + m_esmodel == egEnergyCorr::es2015cPRE or + m_esmodel == egEnergyCorr::es2015cPRE_res_improved or + m_esmodel == egEnergyCorr::es2015c_summer or + m_esmodel == egEnergyCorr::es2016PRE or + m_esmodel == egEnergyCorr::es2017 or + m_esmodel == egEnergyCorr::es2017_summer or + m_esmodel == egEnergyCorr::es2017_summer_improved or + m_esmodel == egEnergyCorr::es2017_R21_PRE or m_esmodel == egEnergyCorr::es2015_5TeV)) { const double aeta = std::abs(cl_eta); //endcap if ( aeta >= 1.37 and aeta < 2.5){ - if ( m_esmodel == egEnergyCorr::es2017_summer or m_esmodel == egEnergyCorr::es2017_summer_improved or - m_esmodel == egEnergyCorr::es2017_R21_PRE or m_esmodel == egEnergyCorr::es2015_5TeV) value = -5.0E-2; + if ( m_esmodel == egEnergyCorr::es2017_summer or + m_esmodel == egEnergyCorr::es2017_summer_improved or + m_esmodel == egEnergyCorr::es2017_R21_PRE or + m_esmodel == egEnergyCorr::es2015_5TeV) value = -5.0E-2; else value = -1.5E-2; } else{//barrel - if (m_esmodel == egEnergyCorr::es2017_summer_improved or m_esmodel == egEnergyCorr::es2015_5TeV) value = -2.5E-2; + if (m_esmodel == egEnergyCorr::es2017_summer_improved or + m_esmodel == egEnergyCorr::es2015_5TeV) value = -2.5E-2; else value = -1.5E-2; } } else if (var == egEnergyCorr::Scale::S12ExtraLastEtaBinRun2Up or var == egEnergyCorr::Scale::S12ExtraLastEtaBinRun2Down) { // special large sys for run2 in the last eta-bin in es2017, see ATLASEG-42 - if (m_esmodel == egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or - m_esmodel == egEnergyCorr::es2017_summer_improved or m_esmodel == egEnergyCorr::es2017_R21_PRE or + if (m_esmodel == egEnergyCorr::es2017 or + m_esmodel == egEnergyCorr::es2017_summer or + m_esmodel == egEnergyCorr::es2017_summer_improved or + m_esmodel == egEnergyCorr::es2017_R21_PRE or m_esmodel == egEnergyCorr::es2015_5TeV) { const double aeta = std::abs(cl_eta); if (aeta >= 2.4 and aeta < 2.5) { @@ -2672,7 +2759,6 @@ namespace AtlasRoot { } - return value * varSF; } @@ -3073,7 +3159,7 @@ double egammaEnergyCorrectionTool::getMaterialEffect(egEnergyCorr::Geometry geo, if( (ptype!=PATCore::ParticleType::Electron && (m_esmodel != egEnergyCorr::es2017_R21_v1 && m_esmodel != egEnergyCorr::es2017_R21_ofc0_v1 && m_esmodel != egEnergyCorr::es2018_R21_v0 && m_esmodel != egEnergyCorr::es2018_R21_lowmu_v0 && - m_esmodel !=egEnergyCorr::es2018_R21_v1 && m_esmodel != egEnergyCorr::es2022_R21_Precision) ) || + m_esmodel != egEnergyCorr::es2018_R21_v1 && m_esmodel != egEnergyCorr::es2022_R21_Precision) ) || var==egEnergyCorr::Scale::Nominal ) return value; @@ -3326,33 +3412,46 @@ double egammaEnergyCorrectionTool::getMaterialEffect(egEnergyCorr::Geometry geo, return std::make_pair(alpha,dalpha); } - double egammaEnergyCorrectionTool::getAlphaConvSyst(double cl_eta, double energy, PATCore::ParticleType::Type ptype, - egEnergyCorr::Scale::Variation var, double varSF) const { + double egammaEnergyCorrectionTool::getAlphaConvSyst(double cl_eta, double energy, + PATCore::ParticleType::Type ptype, + egEnergyCorr::Scale::Variation var, + double varSF) const { double alpha = 0.; - double aeta = fabs(cl_eta); - double ET = energy/cosh(cl_eta)/GeV; + double aeta = fabs(cl_eta); + // If the acceptance cut is on etaS2, cluster eta might be above... + if (aeta > 2.37) + aeta = 2.36; + double ET = energy/cosh(cl_eta); - if( var==egEnergyCorr::Scale::Nominal || ptype==PATCore::ParticleType::Electron ) + if (var == egEnergyCorr::Scale::Nominal || ptype == PATCore::ParticleType::Electron) return alpha; - if( ptype==PATCore::ParticleType::UnconvertedPhoton ) { + if (ptype == PATCore::ParticleType::UnconvertedPhoton) { - if( var==egEnergyCorr::Scale::ConvEfficiencyUp ) + if (var == egEnergyCorr::Scale::ConvEfficiencyUp) alpha = m_convRecoEfficiency->GetBinContent( m_convRecoEfficiency->FindBin(aeta) ); - else if( var==egEnergyCorr::Scale::ConvEfficiencyDown ) + else if (var == egEnergyCorr::Scale::ConvEfficiencyDown) alpha = -m_convRecoEfficiency->GetBinContent( m_convRecoEfficiency->FindBin(aeta) ); + else if (var == egEnergyCorr::Scale::ConvRecoUp) + alpha = m_convRecoEfficiency->GetBinContent( m_convRecoEfficiency->FindBin(aeta,ET) ); + else if (var == egEnergyCorr::Scale::ConvRecoDown) + alpha = -m_convRecoEfficiency->GetBinContent( m_convRecoEfficiency->FindBin(aeta,ET) ); - } else if( ptype==PATCore::ParticleType::ConvertedPhoton ) { + } else if (ptype==PATCore::ParticleType::ConvertedPhoton) { - if( var==egEnergyCorr::Scale::ConvFakeRateUp ) + if (var == egEnergyCorr::Scale::ConvFakeRateUp) alpha = m_convFakeRate->GetBinContent( m_convFakeRate->FindBin(aeta) ); - else if( var==egEnergyCorr::Scale::ConvFakeRateDown ) + else if (var == egEnergyCorr::Scale::ConvFakeRateDown) alpha = -m_convFakeRate->GetBinContent( m_convFakeRate->FindBin(aeta) ); - else if( var==egEnergyCorr::Scale::ConvRadiusUp ) - alpha = m_convRadius->GetBinContent( m_convRadius->FindBin(aeta, ET) ); - else if( var==egEnergyCorr::Scale::ConvRadiusDown ) - alpha = -m_convRadius->GetBinContent( m_convRadius->FindBin(aeta, ET) ); + else if (var == egEnergyCorr::Scale::ConvRecoUp) + alpha = m_convFakeRate->GetBinContent( m_convFakeRate->FindBin(aeta,ET) ); + else if (var == egEnergyCorr::Scale::ConvRecoDown) + alpha = -m_convFakeRate->GetBinContent( m_convFakeRate->FindBin(aeta,ET) ); + else if (var == egEnergyCorr::Scale::ConvRadiusUp) + alpha = m_convRadius->GetBinContent( m_convRadius->FindBin(aeta, ET/GeV) ); + else if (var == egEnergyCorr::Scale::ConvRadiusDown) + alpha = -m_convRadius->GetBinContent( m_convRadius->FindBin(aeta, ET/GeV) ); } @@ -3360,8 +3459,11 @@ double egammaEnergyCorrectionTool::getMaterialEffect(egEnergyCorr::Geometry geo, } - double egammaEnergyCorrectionTool::getAlphaPedestal(double cl_eta, double energy, double eraw, PATCore::ParticleType::Type ptype, bool isRef, - egEnergyCorr::Scale::Variation var, double varSF) const { + double egammaEnergyCorrectionTool::getAlphaPedestal(double cl_eta, double energy, double eraw, + PATCore::ParticleType::Type ptype, + bool isRef, + egEnergyCorr::Scale::Variation var, + double varSF) const { double alpha = 0.; if (var == egEnergyCorr::Scale::PedestalUp || var == egEnergyCorr::Scale::PedestalDown) { if (m_esmodel == egEnergyCorr::es2017) { @@ -3383,14 +3485,11 @@ double egammaEnergyCorrectionTool::getMaterialEffect(egEnergyCorr::Geometry geo, // observed pedestal corrected as a systematic on MC for now. // TODO : correct for it in the data - - double pedestal = getLayerPedestal(cl_eta, ptype, 0, var, varSF) + getLayerPedestal(cl_eta, ptype, 1, var, varSF) + getLayerPedestal(cl_eta, ptype, 2, var, varSF) + getLayerPedestal(cl_eta, ptype, 3, var, varSF); - if( isRef ) alpha = pedestal/energy*1.06; // approximate average ratio between calibrated and raw else @@ -3626,7 +3725,7 @@ double egammaEnergyCorrectionTool::getMaterialEffect(egEnergyCorr::Geometry geo, // systematics from material in IBL+PP0 for barrel if (isys==7 && fabs(eta)<1.5 && - (m_esmodel==egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or + (m_esmodel == egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or m_esmodel == egEnergyCorr::es2017_summer_improved or m_esmodel == egEnergyCorr::es2017_summer_final or m_esmodel == egEnergyCorr::es2015_5TeV or m_esmodel == egEnergyCorr::es2017_R21_v0 or m_esmodel == egEnergyCorr::es2017_R21_v1 or m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 or @@ -3641,7 +3740,7 @@ double egammaEnergyCorrectionTool::getMaterialEffect(egEnergyCorr::Geometry geo, // systematics from material in IBL+PP0 for end-cap if (isys==8 && fabs(eta)>1.5 && - (m_esmodel==egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or + (m_esmodel == egEnergyCorr::es2017 or m_esmodel == egEnergyCorr::es2017_summer or m_esmodel == egEnergyCorr::es2017_summer_improved or m_esmodel == egEnergyCorr::es2017_summer_final or m_esmodel == egEnergyCorr::es2015_5TeV or m_esmodel == egEnergyCorr::es2017_R21_v0 or m_esmodel == egEnergyCorr::es2017_R21_v1 or m_esmodel == egEnergyCorr::es2017_R21_ofc0_v1 or @@ -3779,6 +3878,8 @@ double egammaEnergyCorrectionTool::getMaterialEffect(egEnergyCorr::Geometry geo, case egEnergyCorr::Scale::ConvEfficiencyDown: return "ConvEfficiencyDown"; case egEnergyCorr::Scale::ConvFakeRateUp: return "ConvFakeRateUp"; case egEnergyCorr::Scale::ConvFakeRateDown: return "ConvFakeRateDown"; + case egEnergyCorr::Scale::ConvRecoUp: return "ConvRecoUp"; + case egEnergyCorr::Scale::ConvRecoDown: return "ConvRecoDown"; case egEnergyCorr::Scale::ConvRadiusUp: return "ConvRadiusUp"; case egEnergyCorr::Scale::ConvRadiusDown: return "ConvRadiusDown"; case egEnergyCorr::Scale::PedestalUp: return "PedestalUp"; @@ -3833,13 +3934,11 @@ double egammaEnergyCorrectionTool::getMaterialEffect(egEnergyCorr::Geometry geo, } } - double egammaEnergyCorrectionTool::get_ZeeSyst(double eta) const { - const auto ieta = m_zeeSyst->GetXaxis()->FindFixBin(eta); - auto value_histo = m_zeeSyst->GetBinContent(ieta); - - return value_histo; + const int ieta = m_zeeSyst->GetXaxis()->FindFixBin(eta); + + return m_zeeSyst->GetBinContent(ieta); } const TAxis& egammaEnergyCorrectionTool::get_ZeeStat_eta_axis() const @@ -3847,6 +3946,4 @@ double egammaEnergyCorrectionTool::getMaterialEffect(egEnergyCorr::Geometry geo, return *m_zeeNom->GetXaxis(); } - - } // egRescaler diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/data/egammaEnergyCorrectionData.root b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/data/egammaEnergyCorrectionData.root index d974c5d1e96b442efab6a3a6c6e480689971bb4a..eeb578eb5ef1ba3922a385d81b5258a2525bb75b 100644 GIT binary patch delta 2375 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 delta 2343 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 NhxU#MxAu+-ky8ZEc%J|O -- GitLab