diff --git a/PhysicsAnalysis/SUSYPhys/SUSYTools/Root/SUSYObjDef_xAOD.cxx b/PhysicsAnalysis/SUSYPhys/SUSYTools/Root/SUSYObjDef_xAOD.cxx index d3bfae5c14b3297218568506bb6fbe960eacff63..6c3a41eb4695f6fe3f72c6449f496bfc435c5be9 100644 --- a/PhysicsAnalysis/SUSYPhys/SUSYTools/Root/SUSYObjDef_xAOD.cxx +++ b/PhysicsAnalysis/SUSYPhys/SUSYTools/Root/SUSYObjDef_xAOD.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ // Local include(s): @@ -215,6 +215,7 @@ SUSYObjDef_xAOD::SUSYObjDef_xAOD( const std::string& name ) m_elez0(-99.), m_elebaselined0sig(-99.), m_elebaselinez0(-99), + m_eleAllowRun3TrigSFFallback(false), // m_muBaselinePt(-99.), m_muBaselineEta(-99.), @@ -552,6 +553,7 @@ SUSYObjDef_xAOD::SUSYObjDef_xAOD( const std::string& name ) declareProperty( "EleCrackVeto", m_eleCrackVeto); declareProperty( "EleForceNoId", m_force_noElId ); declareProperty( "EleEffMapFilePath", m_eleEffMapFilePath); + declareProperty( "EleAllowRun3TrigSFFallback", m_eleAllowRun3TrigSFFallback); //MUONS declareProperty( "MuonBaselinePt", m_muBaselinePt); @@ -1334,6 +1336,7 @@ StatusCode SUSYObjDef_xAOD::readConfig() m_conf_to_prop["Ele.CrackVeto"] = "EleCrackVeto"; m_conf_to_prop["EleBaseline.CrackVeto"] = "EleBaselineCrackVeto"; m_conf_to_prop["Ele.ForceNoId"] = "EleForceNoId"; + m_conf_to_prop["Ele.AllowRun3TrigSFFallback"] = "EleAllowRun3TrigSFFallback"; m_conf_to_prop["Muon.ForceNoId"] = "MuonForceNoId"; m_conf_to_prop["Muon.TTVASF"] = "MuonTTVASF"; m_conf_to_prop["Muon.passedHighPt"] = "MuonRequireHighPtCuts"; @@ -1398,6 +1401,7 @@ StatusCode SUSYObjDef_xAOD::readConfig() configFromFile(m_eleConfigBaseline, "EleBaseline.Config", rEnv, "None"); configFromFile(m_eleBaselineCrackVeto, "EleBaseline.CrackVeto", rEnv, false); configFromFile(m_force_noElId, "Ele.ForceNoId", rEnv, false); + // configFromFile(m_elePt, "Ele.Et", rEnv, 25000.); configFromFile(m_eleEta, "Ele.Eta", rEnv, 2.47); @@ -1421,6 +1425,8 @@ StatusCode SUSYObjDef_xAOD::readConfig() configFromFile(m_EG_corrFNList, "Ele.EffCorrFNList", rEnv, "None"); configFromFile(m_electronTriggerSFStringSingle, "Ele.TriggerSFStringSingle", rEnv, "SINGLE_E_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_2018_e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0"); configFromFile(m_eleEffMapFilePath, "Ele.EffMapFilePath", rEnv, "ElectronEfficiencyCorrection/2015_2025/rel22.2/2022_Summer_Prerecom_v1/map4.txt"); + configFromFile(m_eleAllowRun3TrigSFFallback, "Ele.AllowRun3TrigSFFallback", rEnv, false); + configFromFile(m_trig2015combination_singleLep, "Trig.Singlelep2015", rEnv, "e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose || mu20_iloose_L1MU15_OR_mu50"); configFromFile(m_trig2016combination_singleLep, "Trig.Singlelep2016", rEnv, "e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0 || mu26_ivarmedium_OR_mu50"); configFromFile(m_trig2017combination_singleLep, "Trig.Singlelep2017", rEnv, "e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0 || mu26_ivarmedium_OR_mu50"); diff --git a/PhysicsAnalysis/SUSYPhys/SUSYTools/Root/SUSYToolsInit.cxx b/PhysicsAnalysis/SUSYPhys/SUSYTools/Root/SUSYToolsInit.cxx index 35ec6b6574f539baac83b7756c334bb1c977eee6..716a8d411dd68b7faf36d11f17ebe976e51fbc22 100644 --- a/PhysicsAnalysis/SUSYPhys/SUSYTools/Root/SUSYToolsInit.cxx +++ b/PhysicsAnalysis/SUSYPhys/SUSYTools/Root/SUSYToolsInit.cxx @@ -312,6 +312,7 @@ StatusCode SUSYObjDef_xAOD::SUSYToolsInit() ATH_CHECK( m_jetTruthLabelingTool.setProperty("TruthParticleContainerName", "TruthParticles") ); ATH_CHECK( m_jetTruthLabelingTool.setProperty("TruthBosonContainerName", "TruthBoson") ); // Set this if you are using a TRUTH3 style truth boson container ATH_CHECK( m_jetTruthLabelingTool.setProperty("TruthTopQuarkContainerName", "TruthTop") ); // Set this if you are using a TRUTH3 style truth top quark container + ATH_CHECK( m_jetTruthLabelingTool.setProperty("OutputLevel", this->msg().level()) ); ATH_CHECK( m_jetTruthLabelingTool.retrieve() ); } else if (m_jetTruthLabelingTool.isUserConfigured()) ATH_CHECK(m_jetTruthLabelingTool.retrieve()); @@ -695,6 +696,7 @@ StatusCode SUSYObjDef_xAOD::SUSYToolsInit() m_muonLRTORTool.setTypeAndName("CP::MuonLRTOverlapRemovalTool/"+toolName); ATH_CHECK( m_muonLRTORTool.setProperty("overlapStrategy", CP::IMuonLRTOverlapRemovalTool::defaultStrategy) ); if (m_isRun3) ATH_CHECK( m_muonLRTORTool.setProperty("UseRun3WP", true )); + ATH_CHECK( m_muonLRTORTool.setProperty("OutputLevel", this->msg().level()) ); ATH_CHECK( m_muonLRTORTool.retrieve() ); } else ATH_CHECK( m_muonLRTORTool.retrieve() ); @@ -1086,17 +1088,39 @@ StatusCode SUSYObjDef_xAOD::SUSYToolsInit() //single lepton + if(m_isRun3 && eleId.find("LooseBLayer") != std::string::npos) ATH_MSG_WARNING("Replacing 'LooseBLayer' with 'Loose' for Electron ID while configuring single-ele trigger SF using: " << m_eleEffMapFilePath); std::string triggerEleID = m_isRun3? TString(eleId).ReplaceAll("LooseBLayer", "Loose").Data() : eleId; + std::string triggerEleIso= m_eleIso_WP; + + // This is an hack to work with ElectronEfficiencyCorrection/2015_2025/rel22.2/2022_Summer_Prerecom_v1/map4.txt to allow + + if(m_isRun3 && m_eleAllowRun3TrigSFFallback){ + bool pass_isRun3TrigSFFallback = true; + if (triggerEleID.find("Medium") != std::string::npos && triggerEleIso.find("Loose") != std::string::npos) {triggerEleID = "Loose";} + else if (triggerEleID.find("Medium") != std::string::npos && triggerEleIso.find("Tight") != std::string::npos) {triggerEleID = "Tight"; triggerEleIso = "Tight_VarRad";} + else if (triggerEleID.find("Medium") != std::string::npos && triggerEleIso.find("HighPtCaloOnly") != std::string::npos) {triggerEleID = "Tight"; triggerEleIso = "Tight_VarRad";} + else if (triggerEleID.find("Tight") != std::string::npos && triggerEleIso.find("Loose") != std::string::npos) {triggerEleID = "Loose";} + else if (triggerEleID.find("Tight") != std::string::npos && triggerEleIso.find("Tight") != std::string::npos) {triggerEleIso= "Tight_VarRad";} + else if (triggerEleID.find("Tight") != std::string::npos && triggerEleIso.find("HighPtCaloOnly") != std::string::npos) {triggerEleID = "Tight"; triggerEleIso = "Tight_VarRad";} + else if (triggerEleID.find("Loose") != std::string::npos && triggerEleIso.find("Tight") != std::string::npos) {triggerEleID = "Loose"; triggerEleIso = "Loose_VarRad";} + else if (triggerEleID.find("Loose") != std::string::npos && triggerEleIso.find("HighPtCaloOnly") != std::string::npos) {triggerEleID = "Loose"; triggerEleIso = "Loose_VarRad";} + else {pass_isRun3TrigSFFallback=false;} + if(pass_isRun3TrigSFFallback){ + ATH_MSG_INFO(" ************** This is only for testing/studying purpose! ************** "); + ATH_MSG_INFO(" ************** For official recommendation, please get in contact with the SUSY Bkg Forum ************** "); + ATH_MSG_INFO("In the current map ("<<m_eleEffMapFilePath<<"), the only supported Electron ID working-points supported for Electron Trigger Scale Factor are 'Loose_Loose_VarRad' and 'Tight_Tight_VarRad' "); + ATH_MSG_INFO("Only for single-lepton trigger scale factor, fall back to Electron ID: -> "<< triggerEleID << " with Isolation: " << triggerEleIso); + } + } - if(m_isRun3 && eleId.find("LooseBLayer") != std::string::npos) ATH_MSG_WARNING("Replacing 'LooseBLayer' with 'Loose' for Electron ID while configuring single-ele trigger SF using: " << m_eleEffMapFilePath); - ATH_MSG_INFO("eSF_keys: " << m_electronTriggerSFStringSingle<< "_"<<triggerEleID<<"_"<<m_eleIso_WP); - std::string triggerEleIso(""); - if (std::find(eSF_keys.begin(), eSF_keys.end(), m_electronTriggerSFStringSingle+"_"+triggerEleID+"_"+m_eleIso_WP) != eSF_keys.end()){ + ATH_MSG_INFO("eSF_keys: " << m_electronTriggerSFStringSingle<< "_"<<triggerEleID<<"_"<<triggerEleIso); + + if (std::find(eSF_keys.begin(), eSF_keys.end(), m_electronTriggerSFStringSingle+"_"+triggerEleID+"_"+triggerEleIso) != eSF_keys.end()){ triggerEleIso = m_eleIso_WP; - } else if (std::find(eSF_keys.begin(), eSF_keys.end(), m_electronTriggerSFStringSingle+"_"+triggerEleID+"_"+m_el_iso_fallback[m_eleIso_WP]) != eSF_keys.end()){ + } else if (std::find(eSF_keys.begin(), eSF_keys.end(), m_electronTriggerSFStringSingle+"_"+triggerEleID+"_"+m_el_iso_fallback[triggerEleIso]) != eSF_keys.end()){ //--- Check to see if the only issue is an unknown isolation working point - triggerEleIso = m_el_iso_fallback[m_eleIso_WP]; + triggerEleIso = m_el_iso_fallback[triggerEleIso]; ATH_MSG_WARNING("(AsgElectronEfficiencyCorrectionTool_trig_singleLep_*) Your selected electron Iso WP (" << m_eleIso_WP << ") does not have trigger SFs defined. Falling back to " diff --git a/PhysicsAnalysis/SUSYPhys/SUSYTools/SUSYTools/SUSYObjDef_xAOD.h b/PhysicsAnalysis/SUSYPhys/SUSYTools/SUSYTools/SUSYObjDef_xAOD.h index 2f8d24c2b7ccd81e871e2cc632a47b26d37f9775..82ba1ffd5c46afe673007fd93667b1a88c8570bc 100644 --- a/PhysicsAnalysis/SUSYPhys/SUSYTools/SUSYTools/SUSYObjDef_xAOD.h +++ b/PhysicsAnalysis/SUSYPhys/SUSYTools/SUSYTools/SUSYObjDef_xAOD.h @@ -678,6 +678,8 @@ namespace ST { double m_elebaselinez0; std::string m_eleEffMapFilePath; std::string m_eleEffMapFilePathRun2; + bool m_eleAllowRun3TrigSFFallback; + double m_muBaselinePt; double m_muBaselineEta;