117 ATH_MSG_FATAL(
"You must set the DataSource property to Data, FullSim or AtlfastII !!");
118 ATH_MSG_FATAL(
"Expect segfaults if you're not checking status codes, which you should be !!");
119 return StatusCode::FAILURE;
123 ATH_MSG_INFO(
"SUSYTools subtools already created. Ignoring this call.");
124 ATH_MSG_INFO(
"Note: No longer necessary to explicitly call SUSYToolsInit. Will avoid creating tools again.");
125 return StatusCode::SUCCESS;
133 std::vector<std::string> file_conf;
139 std::vector<std::string> file_ilumi;
145 m_prwTool.setTypeAndName(
"CP::PileupReweightingTool/PrwTool");
165 m_LRTuncTool.setTypeAndName(
"InDet::InclusiveTrackFilterTool/LRTUncTool");
169 ATH_MSG_WARNING(
"Please note that current ID recommendations only cover mc23a and not (yet) mc23d/e!");
170 ATH_CHECK(
m_LRTuncTool.setProperty(
"calibFileLRTEff",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/LargeD0TrackingRecommendations_mc23a.root") );
173 ATH_CHECK(
m_LRTuncTool.setProperty(
"calibFileLRTEff",
"InDetTrackSystematicsTools/CalibData_24.0_2023-v00/LargeD0TrackingRecommendations_20230824.root") );
176 ATH_MSG_INFO(
"Using user-configured LRT uncertainty tool");
180 std::string toolName;
182 std::string jetname,jetcoll,fatjetcoll;
189 jetcoll = jetname +
"Jets";
192 toolName =
"JetCalibTool_" + jetname;
194 std::string JES_config_file, calibseq;
198 return StatusCode::FAILURE;
203 ATH_MSG_WARNING(
"Jet JES/JER recommendations currently not available for fast sim in Run 3, falling back to full sim version");
208 JES_config_file = JESconfig;
212 std::string insitu(
"_Insitu");
213 auto found = calibseq.find(insitu);
214 if(found != std::string::npos){
215 calibseq.erase(found, insitu.length());
221 ATH_MSG_ERROR(
"JMS calibration is not supported yet for R22. Please modify your settings.");
222 return StatusCode::FAILURE;
240 if(fatjetcoll ==
"AnalysisLargeRJets") {
241 ATH_MSG_DEBUG(
"Fall back to calibration for AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets, original name for AnalysisLargeRJets");
242 fatjetcoll =
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets";
244 if (fatjetcoll.size()>3)fatjetcoll.erase(fatjetcoll.size()-4,4);
246 toolName =
"JetFatCalibTool_" +
m_fatJets;
252 if(
isData()) jesCalibSeqFat +=
"_Insitu";
274#ifndef XAOD_STANDALONE
283 ATH_MSG_ERROR(
"Error while reading large-R config file : " << WConfigPath );
284 return StatusCode::FAILURE;
286 else ATH_MSG_DEBUG(
"Successfully read large-R config file : " << WConfigPath );
299#ifndef XAOD_STANDALONE
308 ATH_MSG_ERROR(
"Error while reading large-R config file : " << ZConfigPath );
309 return StatusCode::FAILURE;
311 else ATH_MSG_DEBUG(
"Successfully read large-R config file : " << ZConfigPath );
324#ifndef XAOD_STANDALONE
333 ATH_MSG_ERROR(
"Error while reading large-R config file : " << TopConfigPath );
334 return StatusCode::FAILURE;
336 else ATH_MSG_DEBUG(
"Successfully read large-R config file : " << TopConfigPath );
379 if(jetdef !=
"AntiKt4EMPFlow"){
380 ATH_MSG_WARNING(
"Jet Uncertaintes recommendations only exist for PFlow jets, falling back to AntiKt4EMPFlow");
381 jetdef =
"AntiKt4EMPFlow";
383 toolName =
"JetUncertaintiesTool_" + jetdef;
397 ATH_MSG_INFO(
"Set up Jet PD Smear Uncertainty tool...");
402 if(jetdef !=
"AntiKt4EMPFlow"){
403 ATH_MSG_WARNING(
"Jet Uncertaintes recommendations only exist for PFlow jets, falling back to AntiKt4EMPFlow");
404 jetdef =
"AntiKt4EMPFlow";
406 toolName =
"JetUncertaintiesPDSmearTool_" + jetdef;
413 ATH_MSG_ERROR(
"You are trying to use the SimpleJER set, with PDsmearing. There is no functionality for this. Please fix your config file. Either run with PDSmear set to false, or run with the AllJER or FullJER sets.");
414 return StatusCode::FAILURE;
425 ATH_MSG_DEBUG(
"Do not retrieve the jet PD Smearing tool if it is not configured");
439 ATH_MSG_WARNING(
"Uncertainties for large-R jets in mc23 and fast simulation not yet available; be aware uncertainties might be not complete!");
441 toolName =
"JetUncertaintiesTool_" +
m_fatJets;
452 std::vector<std::string> shift_vars = {};
456 auto pos =
temp.find(
',');
457 shift_vars.push_back(
temp.substr(0, pos));
458 if (pos == std::string::npos)
464 while (!
temp.empty() );
476 ATH_MSG_INFO(
"Set up Jet PD Smear Uncertainty tool...");
478 toolName =
"JetUncertaintiesPDSmearTool_" +
m_fatJets;
483 if (
m_fatJetUncConfig.find(
"SimpleJER") != std::string::npos && JERUncPDsmearing){
484 ATH_MSG_ERROR(
"You are trying to use the SimpleJER set, with PDsmearing. There is no functionality for this. Please fix your config file. Either run with PDSmear set to false, or run with the AllJER or FullJER sets.");
485 return StatusCode::FAILURE;
496 ATH_MSG_DEBUG(
"Do not retrieve the jet PD Smearing tool if it is not configured");
505 toolName =
"FFJetSmearingTool_" +
m_fatJets;
518 ATH_MSG_INFO(
"The following uncertainties have been defined for the m_fatjetFFSmearingTool");
525 ATH_MSG_INFO(
" Won't initialise Wtagger uncertainty tool for fat jets until we get rec for UFO");
540 ATH_MSG_INFO(
" Won't initialise Ztagger uncertainty tool for fat jets until we get rec for UFO");
555 ATH_MSG_INFO(
" Won't initialise top-tagger uncertainty tool for fat jets until we get rec for UFO");
583 toolName =
"JetCleaningTool";
595 toolName =
"PileupLabelingTool";
599 #ifndef XAOD_STANDALONE
611 toolName =
"JvtMomentTool";
614 #ifndef XAOD_STANDALONE
627 toolName =
"NNJvtMomentTool";
630 #ifndef XAOD_STANDALONE
642 toolName =
"NNJvtSelectionTool";
656 toolName =
"NNJvtEfficiencyTool";
670 toolName =
"fJvtSelectionTool";
684 toolName =
"fJvtEfficiencyTool";
700 std::string muQualBaseline =
"";
702 case static_cast<int>(xAOD::Muon::Quality::VeryLoose): muQualBaseline =
"VeryLoose";
703 ATH_MSG_WARNING(
"No muon scale factors are available for VeryLoose working point.");
705 case static_cast<int>(xAOD::Muon::Quality::Loose): muQualBaseline =
"Loose";
break;
706 case static_cast<int>(xAOD::Muon::Quality::Medium): muQualBaseline =
"Medium";
break;
707 case static_cast<int>(xAOD::Muon::Quality::Tight): muQualBaseline =
"Tight";
break;
708 case 4: muQualBaseline =
"HighPt";
break;
709 case 5: muQualBaseline =
"LowPt";
break;
710 case 6: muQualBaseline =
"LowPtMVA";
break;
711 case 7: muQualBaseline =
"HighPt3Layers";
break;
714 return StatusCode::FAILURE;
725 m_muonCalibTool.setTypeAndName(
"CP::MuonCalibTool/ST_MuonCalibrationTool");
731 if (IdBaselineInt == 4) {
742 toolName =
"MuonSelectionTool_Baseline_" + muQualBaseline;
748 ") that is tighter than the signal cut (" <<
m_muEta <<
"). Please check your config." );
749 return StatusCode::FAILURE;
753 if (IdBaselineInt == 6){
756 }
else if (IdBaselineInt == 7){
765 std::string muQual =
"";
767 case static_cast<int>(xAOD::Muon::Quality::VeryLoose): muQual =
"VeryLoose";
768 ATH_MSG_WARNING(
"No muon scale factors are available for VeryLoose working point.");
770 case static_cast<int>(xAOD::Muon::Quality::Loose): muQual =
"Loose";
break;
771 case static_cast<int>(xAOD::Muon::Quality::Medium): muQual =
"Medium";
break;
772 case static_cast<int>(xAOD::Muon::Quality::Tight): muQual =
"Tight";
break;
773 case 4: muQual =
"HighPt";
break;
774 case 5: muQual =
"LowPt";
break;
775 case 6: muQual =
"LowPtMVA";
break;
776 case 7: muQual =
"HighPt3Layers";
break;
778 ATH_MSG_ERROR(
"Invalid muon working point provided: " <<
m_muId <<
". Cannot initialise!");
779 return StatusCode::FAILURE;
784 toolName =
"MuonSelectionTool_" + muQual;
792 }
else if (IdInt == 7){
802 toolName =
"MuonSelectionHighPtTool_" + muQual;
815 toolName =
"MuonLRTOverlapRemovalTool";
816 m_muonLRTORTool.setTypeAndName(
"CP::MuonLRTOverlapRemovalTool/"+toolName);
827 std::string MuonCP_Run2_TightFix =
"";
829 MuonCP_Run2_TightFix = (
m_muId ==
static_cast<int>(xAOD::Muon::Quality::Tight)) ?
"220725_Preliminary_r22run2" :
"230213_Preliminary_r22run2_loosefix";
832 toolName =
"MuonEfficiencyScaleFactors_" + muQual;
842 toolName =
"MuonEfficiencyScaleFactorsBMHighPt_" + muQual;
852 ATH_MSG_WARNING(
"Requested TTVA SFs without d0sig and z0 cuts. Disabling scale factors as they will not make sense.");
857 toolName =
"MuonTTVAEfficiencyScaleFactors";
870 toolName =
"MuonIsolationScaleFactors_" +
m_muIso_WP;
876 <<
") does not have SFs defined. Will try to find an appropriate fall-back.");
881 <<
" is not supported, and does not have SFs available. Falling back to "
883 <<
" for SF determination.");
885 ATH_MSG_ERROR(
"*** The muon isolation WP you selected (" <<
m_muIso_WP <<
") is not currentely supported, and no known fall-back option for SFs exists. Sorry! ***");
886 return StatusCode::FAILURE;
906 <<
") does not have SFs defined. Will try to find an appropriate fall-back.");
911 <<
" is not supported, and does not have SFs available. Falling back to "
912 << tmp_muIsoHighPt_WP
913 <<
" for SF determination.");
915 ATH_MSG_ERROR(
"*** The muon isolation WP you selected (" <<
m_muIsoHighPt_WP <<
") is not currentely supported, and no known fall-back option for SFs exists. Sorry! ***");
916 return StatusCode::FAILURE;
934 toolName =
"MuonTriggerScaleFactors_" + muQual;
936 if ( muQual==
"LowPt" ) {
937 ATH_MSG_WARNING(
"You're using the LowPt muon selection, which is not supported yet in terms of muon trigger scale facorts. TEMPORAIRLY configuring the muonTriggerSFTool for Medium muons. Beware!");
961 toolName =
"EleSelLikelihood_" +
m_eleId;
963 if (
m_eleId.find(
"DNN") != std::string::npos) {
971 ATH_MSG_INFO(
"Overriding specified Ele.Id working point in favour of configuration file");
975 return StatusCode::FAILURE;
978 ATH_MSG_WARNING(
" ****************************************************************************");
980 ATH_MSG_WARNING(
" These may be used for loose electron CRs but no scale factors are provided.");
981 ATH_MSG_WARNING(
" ****************************************************************************");
1003 ATH_MSG_INFO(
"Overriding specified EleBaseline.Id working point in favour of configuration file");
1007 return StatusCode::FAILURE;
1020 toolName =
"ElectronLRTOverlapRemovalTool";
1021 m_elecLRTORTool.setTypeAndName(
"CP::ElectronLRTOverlapRemovalTool/"+toolName);
1037 return StatusCode::FAILURE;
1051 return StatusCode::FAILURE;
1066 m_deadHVTool.setTypeAndName(
"AsgDeadHVCellRemovalTool/deadHVTool");
1085 ATH_MSG_INFO(
"Running on Run2 samples; Using egamma SF tools from R21 map for trigger");
1088 ATH_MSG_INFO(
"Running on Run3 samples; Using different egamma SF tools map for trigger");
1092 toolName =
"AsgElectronEfficiencyCorrectionTool_reco";
1104 std::string eleId = TString(
m_eleId).ReplaceAll(
"AndBLayer",
"BLayer").ReplaceAll(
"LLH",
"LH").Data();
1106 if (
m_eleId.find(
"DNN") != std::string::npos) {
1107 eleId = TString(eleId).ReplaceAll(
"DNNnoCF",
"").ReplaceAll(
"DNN",
"").ReplaceAll(
"Loose",
"LooseBLayer").Data();
1108 ATH_MSG_WARNING(
"Electron DNN ID working point " <<
m_eleId <<
" doesn't have SFs yet, fall back to " << eleId);
1112 toolName =
"AsgElectronEfficiencyCorrectionTool_id_" +
m_eleId;
1116 std::map<std::string,std::string> corrFNList;
1119 std::string WP = WP_fname.substr(0,WP_fname.find(
":"));
1120 std::string fname = WP_fname.substr(WP_fname.find(
":")+1);
1121 corrFNList[WP] = fname;
1122 ATH_MSG_WARNING(
"Correction file list defined for WP " << WP <<
": " << fname <<
"." );
1123 ATH_MSG_WARNING(
"Will use correction file rather than central map file." );
1128 std::string EleIso(
"");
1129 if (std::find(eSF_keys.begin(), eSF_keys.end(), eleId+
"_"+
m_eleIso_WP) != eSF_keys.end()){
1134 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_iso_*) Your selected electron Iso WP ("
1136 <<
") does not have iso SFs defined. Falling back to "
1138 <<
" for SF calculations");
1142 return StatusCode::FAILURE;
1145 toolName =
"AsgElectronEfficiencyCorrectionTool_iso_" +
m_eleId + EleIso;
1148 if ( (!
m_EG_corrFNList.empty()) && corrFNList.find(EleIso)!=corrFNList.end() ) {
1155 ATH_MSG_WARNING(
"(" << toolName <<
") Your electron Iso WP: " << EleIso<<
" is no longer supported. This will almost certainly cause a crash now.");
1167 if (!
isData() && ((EleIso.find(
"TightTrackOnly_VarRad")!=std::string::npos)||
1168 (EleIso.find(
"TightTrackOnly_FixedRad")!=std::string::npos)||
1169 (EleIso.find(
"Tight_VarRad")!=std::string::npos)||
1170 (EleIso.find(
"Loose_VarRad")!=std::string::npos))) {
1171 if (
isAtlfast())
ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool/"+toolName+
"). Your selected electron Iso WP (" + EleIso +
") don't have AFII SF. Falling back to FullSim");
1184 std::string EleIsohighPt(
"");
1185 if (std::find(eSF_keys.begin(), eSF_keys.end(), eleId+
"_"+
m_eleIsoHighPt_WP) != eSF_keys.end()){
1190 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_iso_*) Your selected high-pT electron Iso WP ("
1192 <<
") does not have iso SFs defined. Falling back to "
1194 <<
" for SF calculations");
1198 return StatusCode::FAILURE;
1201 toolName =
"AsgElectronEfficiencyCorrectionTool_isoHigPt_" +
m_eleId + EleIsohighPt;
1204 if ( (!
m_EG_corrFNList.empty()) && corrFNList.find(EleIsohighPt)!=corrFNList.end() ) {
1212 ATH_MSG_WARNING(
"(" << toolName <<
") Your electron high-pt Iso WP: " << EleIsohighPt <<
" is no longer supported. This will almost certainly cause a crash now.");
1235 std::string triggerEleID =
m_isRun3? TString(eleId).ReplaceAll(
"LooseBLayer",
"Loose").ReplaceAll(
"LH",
"").Data() : TString(eleId).ReplaceAll(
"LH",
"").Data();
1241 bool pass_isRun3TrigSFFallback =
true;
1242 if (triggerEleID.find(
"Medium") != std::string::npos && triggerEleIso.find(
"Loose") != std::string::npos) {triggerEleID =
"LooseBLayer";}
1243 else if (triggerEleID.find(
"Medium") != std::string::npos && triggerEleIso.find(
"Tight") != std::string::npos) {triggerEleID =
"Tight"; triggerEleIso =
"Tight_VarRad";}
1244 else if (triggerEleID.find(
"Medium") != std::string::npos && triggerEleIso.find(
"HighPtCaloOnly") != std::string::npos) {triggerEleID =
"Tight"; triggerEleIso =
"Tight_VarRad";}
1245 else if (triggerEleID.find(
"Tight") != std::string::npos && triggerEleIso.find(
"Loose") != std::string::npos) {triggerEleID =
"LooseBLayer";}
1246 else if (triggerEleID.find(
"Tight") != std::string::npos && triggerEleIso.find(
"Tight") != std::string::npos) {triggerEleIso=
"Tight_VarRad";}
1247 else if (triggerEleID.find(
"Tight") != std::string::npos && triggerEleIso.find(
"HighPtCaloOnly") != std::string::npos) {triggerEleID =
"Tight"; triggerEleIso =
"Tight_VarRad";}
1248 else if (triggerEleID.find(
"Loose") != std::string::npos && triggerEleIso.find(
"Tight") != std::string::npos) {triggerEleID =
"LooseBLayer"; triggerEleIso =
"Loose_VarRad";}
1249 else if (triggerEleID.find(
"Loose") != std::string::npos && triggerEleIso.find(
"HighPtCaloOnly") != std::string::npos) {triggerEleID =
"LooseBLayer"; triggerEleIso =
"Loose_VarRad";}
1250 else {pass_isRun3TrigSFFallback=
false;}
1251 if(pass_isRun3TrigSFFallback){
1252 ATH_MSG_INFO(
" ************** This is only for testing/studying purpose! ************** ");
1253 ATH_MSG_INFO(
" ************** For official recommendation, please get in contact with the SUSY Bkg Forum ************** ");
1254 ATH_MSG_INFO(
"In the current map ("<<
m_eleEffMapFilePathTriggerRun3<<
"), the only supported Electron ID working-points supported for Electron Trigger Scale Factor are 'Loose_Loose_VarRad' and 'Tight_Tight_VarRad' ");
1255 ATH_MSG_INFO(
"Only for single-lepton trigger scale factor, fall back to Electron ID: -> "<< triggerEleID <<
" with Isolation: " << triggerEleIso);
1267 auto next_pos = [&](
size_t self) {
1268 size_t next = std::string::npos;
1271 if (p23 > self && p23 < next) next = p23;
1272 if (p24 > self && p24 < next) next = p24;
1274 else if (self == p23) {
1275 if (p22 > self && p22 < next) next = p22;
1276 if (p24 > self && p24 < next) next = p24;
1278 else if (self == p24) {
1279 if (p22 > self && p22 < next) next = p22;
1280 if (p23 > self && p23 < next) next = p23;
1285 std::string SFStringSingle22=
"";
1286 std::string SFStringSingle23=
"";
1287 std::string SFStringSingle24=
"";
1295 std::string* toks[] = { &SFStringSingle22, &SFStringSingle23, &SFStringSingle24 };
1296 for (
auto t : toks) {
1297 while (!t->empty() && t->back() ==
'_') t->pop_back();
1304 ATH_MSG_WARNING(
"Unknown or unsupported mcCampaign for Run 3: " <<
m_mcCampaign <<
". Please contact the SUSY Bkg Forum for assistance.");
1305 ATH_MSG_WARNING(
"Falling back to 2024 trigger SFs for single-electron triggers.");
1313 if (std::find(eSF_keys_trigger.begin(), eSF_keys_trigger.end(),
m_electronTriggerSFStringSingle+
"_"+triggerEleID+
"_"+triggerEleIso) != eSF_keys_trigger.end()){
1318 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_trig_singleLep_*) Your selected electron Iso WP ("
1320 <<
") does not have trigger SFs defined. Falling back to "
1322 <<
" for SF calculations");
1326 return StatusCode::FAILURE;
1329 toolName =
"AsgElectronEfficiencyCorrectionTool_trig_singleLep_" + triggerEleID;
1345 toolName =
"AsgElectronEfficiencyCorrectionTool_trigEff_singleLep_" + triggerEleID;
1362 std::map<std::string,std::string> electronTriggerSFMapMixedLepton {
1364 {
"e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose,e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0",
m_electronTriggerSFStringSingle},
1365 {
"e24_lhvloose_nod0_L1EM20VH,e17_lhvloose_nod0,e12_lhloose_L1EM10VH",
"DI_E_2015_e12_lhloose_L1EM10VH_2016_e17_lhvloose_nod0_2017_2018_e24_lhvloose_nod0_L1EM20VH"},
1366 {
"e26_lhmedium_nod0_L1EM22VHI,e26_lhmedium_nod0",
"MULTI_L_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_e26_lhmedium_nod0_L1EM22VHI_2017_2018_e26_lhmedium_nod0"},
1367 {
"e17_lhloose,e17_lhloose_nod0",
"MULTI_L_2015_e17_lhloose_2016_2018_e17_lhloose_nod0"},
1368 {
"e12_lhloose,e12_lhloose_nod0",
"MULTI_L_2015_e12_lhloose_2016_2018_e12_lhloose_nod0"},
1369 {
"e7_lhmedium,e7_lhmedium_nod0",
"MULTI_L_2015_e7_lhmedium_2016_2018_e7_lhmedium_nod0"},
1370 {
"e9_lhloose,e9_lhloose_nod0,e12_lhvloose_nod0_L1EM10VH",
"TRI_E_2015_e9_lhloose_2016_e9_lhloose_nod0_2017_2018_e12_lhvloose_nod0_L1EM10VH"}
1376 if (triglist_2017to2018.find(
"2e17_lhvloose_nod0_L12EM15VHI") != std::string::npos) {
1377 electronTriggerSFMapMixedLepton[
"e17_lhvloose_nod0_L1EM15VHI"] =
"DI_E_2015_e12_lhloose_L1EM10VH_2016_e17_lhvloose_nod0_2017_2018_e17_lhvloose_nod0_L1EM15VHI";
1380 std::string triggerMixedEleIso(
"");
1382 for(
auto const& item : electronTriggerSFMapMixedLepton){
1384 if (std::find(eSF_keys_trigger.begin(), eSF_keys_trigger.end(), item.second+
"_"+triggerEleID+
"_"+
m_eleIso_WP) != eSF_keys_trigger.end()){
1386 }
else if (std::find(eSF_keys_trigger.begin(), eSF_keys_trigger.end(), item.second+
"_"+triggerEleID+
"_"+
m_el_iso_fallback[
m_eleIso_WP]) != eSF_keys_trigger.end()){
1389 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_trig_mixLep_*) Your selected electron Iso WP ("
1391 <<
") does not have trigger SFs defined. Falling back to "
1392 << triggerMixedEleIso
1393 <<
" for SF calculations");
1395 ATH_MSG_ERROR(
"*** THE MIXED ELECTRON TRIGGER SF YOU SELECTED (" << item.second <<
") GOT NO SUPPORT FOR YOUR ID+ISO WPs (" <<
m_eleId <<
"+" <<
m_eleIso_WP <<
"). The fallback options failed as well sorry! ***");
1396 return StatusCode::FAILURE;
1399 ATH_MSG_VERBOSE (
"Selected WP: " << item.second <<
"_" << triggerEleID <<
"_" << triggerMixedEleIso);
1401 toolName =
"AsgElectronEfficiencyCorrectionTool_trig_mixLep_" + (item.first).substr(0,8) +
m_eleId;
1404 ATH_CHECK( t_sf->setProperty(
"TriggerKey", item.second) );
1405 ATH_CHECK( t_sf->setProperty(
"IdKey", triggerEleID) );
1406 ATH_CHECK( t_sf->setProperty(
"IsoKey", triggerMixedEleIso) );
1411 ATH_CHECK( t_sf->setProperty(
"OutputLevel", this->msg().level()) );
1414 #ifndef XAOD_STANDALONE
1420 toolName =
"AsgElectronEfficiencyCorrectionTool_trigEff_mixLep_" + (item.first).substr(0,8) +
m_eleId;
1423 ATH_CHECK( t_eff->setProperty(
"TriggerKey",
"Eff_"+item.second) );
1424 ATH_CHECK( t_eff->setProperty(
"IdKey", triggerEleID) );
1425 ATH_CHECK( t_eff->setProperty(
"IsoKey", triggerMixedEleIso) );
1430 ATH_CHECK( t_eff->setProperty(
"OutputLevel", this->msg().level()) );
1433 #ifndef XAOD_STANDALONE
1441 else ATH_MSG_WARNING(
"*** THE ELECTRON TRIGGER SF MIXED AND SF DILEP ARE CURRENTY NOT SUPPORTED IN RUN3 ***");
1443 ATH_MSG_WARNING(
"*** THE ELECTRON CHARGE FLIP SF ARE CURRENTY NOT SUPPORTED ***");
1459 ATH_CHECK(
m_photonEfficiencySFTool.setProperty(
"MapFilePath",
"PhotonEfficiencyCorrection/2015_2025/rel22.2/2026_Run3Consolidated_Recommendation_v1/map0.txt") );
1472 ATH_CHECK(
m_photonIsolationSFTool.setProperty(
"MapFilePath",
m_isRun3 ?
"PhotonEfficiencyCorrection/2015_2025/rel22.2/2022_Summer_Prerecom_v1/map1.txt" :
"PhotonEfficiencyCorrection/2015_2025/rel22.2/2022_Summer_Prerecom_v1/map0.txt") );
1487 photonIso_forTrigSF =
"TightCaloOnly";
1489 photonIso_forTrigSF = TString(
m_photonIso_WP).ReplaceAll(
"FixedCut",
"").Data();
1501 std::map<std::string,std::string> diphotonTriggerSFMapAsymmetric {
1503 {
"g25_loose,g25_medium_L1EM20VH",
"DI_PH_2015_g25_loose_2016_g25_loose_2017_g25_medium_L1EM20VH_2018_g25_medium_L1EM20VH"},
1504 {
"g35_loose,g35_medium_L1EM20VH",
"DI_PH_2015_g35_loose_2016_g35_loose_2017_g35_medium_L1EM20VH_2018_g35_medium_L1EM20VH"},
1507 for(
auto const& item : diphotonTriggerSFMapAsymmetric){
1509 toolName =
"AsgPhotonEfficiencyCorrectionTool_trigSF_asymm_diphoton_" + (item.first).substr(0,9) + photonIso_forTrigSF;
1511 ATH_CHECK( ph_trigSF->setProperty(
"MapFilePath",
"PhotonEfficiencyCorrection/2015_2018/rel21.2/Summer2020_Rec_v1/map3.txt") );
1512 ATH_CHECK( ph_trigSF->setProperty(
"IsoKey", photonIso_forTrigSF) );
1513 ATH_CHECK( ph_trigSF->setProperty(
"TriggerKey", item.second) );
1514 ATH_CHECK( ph_trigSF->setProperty(
"ForceDataType", 1) );
1515 ATH_CHECK( ph_trigSF->setProperty(
"OutputLevel", this->msg().level()) );
1518 #ifndef XAOD_STANDALONE
1524 toolName =
"AsgPhotonEfficiencyCorrectionTool_trigEff_asymm_diphoton_" + (item.first).substr(0,9) + photonIso_forTrigSF;
1526 ATH_CHECK( ph_trigEff->setProperty(
"MapFilePath",
"PhotonEfficiencyCorrection/2015_2018/rel21.2/Summer2020_Rec_v1/map3.txt") );
1527 ATH_CHECK( ph_trigEff->setProperty(
"IsoKey", photonIso_forTrigSF) );
1528 ATH_CHECK( ph_trigEff->setProperty(
"TriggerKey",
"Eff_"+item.second) );
1529 ATH_CHECK( ph_trigEff->setProperty(
"ForceDataType", 1) );
1530 ATH_CHECK( ph_trigEff->setProperty(
"OutputLevel", this->msg().level()) );
1533 #ifndef XAOD_STANDALONE
1583 m_egammaCalibTool.setTypeAndName(
"CP::EgammaCalibrationAndSmearingTool/EgammaCalibrationAndSmearingTool");
1589 ATH_MSG_WARNING(
"Forcing EgcalibTool to use calibrations for full simulation" );
1611 return StatusCode::FAILURE;
1620 toolName =
"TauSelectionTool_" +
m_tauId;
1621 m_tauSelTool.setTypeAndName(
"TauAnalysisTools::TauSelectionTool/"+toolName);
1640 ANA_MSG_DEBUG(
"Found JetIDWP in tau config file : " << jetIDWP );
1653 ATH_MSG_ERROR(
"Invalid Tau ID in tau config file " << jetIDWP);
1654 return StatusCode::FAILURE;
1658 ANA_MSG_DEBUG(
"Found EleIDWP in tau config file : " << eleIDWP );
1659 int ele_id_lvl = -1;
1664 ATH_MSG_INFO(
"No or invalid Ele OR in tau config file " << eleIDWP <<
" will not apply SFs for electro veto" );
1667 ATH_MSG_WARNING(
"EleOR with Tight TauID is currently not supported, please discuss with TauCP!");
1670 int jet_id_lvl_fb = jet_id_lvl;
1673 ATH_MSG_WARNING(
"Configuring fallback RNN ID SF for GNTau config, do not use in production!");
1682 toolName =
"TauEffTool_" +
m_tauId;
1683 m_tauEffTool.setTypeAndName(
"TauAnalysisTools::TauEfficiencyCorrectionsTool/"+toolName);
1685 std::vector<int> correction_types;
1687 correction_types.insert(correction_types.end(), {TauAnalysisTools::EfficiencyCorrectionType::SFRecoHadTau,
1688 TauAnalysisTools::EfficiencyCorrectionType::SFJetIDHadTau});
1691 if (ele_id_lvl != -1 )
1692 correction_types.insert(correction_types.end(), {TauAnalysisTools::EfficiencyCorrectionType::SFEleIDHadTau,
1693 TauAnalysisTools::EfficiencyCorrectionType::SFEleIDElectron});
1714 {
"HLT_tau25_medium1_tracktwo",
"HLT_tau25_medium1_tracktwo"},
1715 {
"HLT_tau35_medium1_tracktwo",
"HLT_tau35_medium1_tracktwo"},
1716 {
"HLT_tau50L1TAU12_medium1_tracktwo",
"HLT_tau50_medium1_tracktwo_L1TAU12"},
1717 {
"HLT_tau60_medium1_tracktwo",
"HLT_tau60_medium1_tracktwo"},
1718 {
"HLT_tau80L1TAU60_medium1_tracktwo",
"HLT_tau80_medium1_tracktwo_L1TAU60"},
1719 {
"HLT_tau125_medium1_tracktwo",
"HLT_tau125_medium1_tracktwo"},
1720 {
"HLT_tau160_medium1_tracktwo",
"HLT_tau160_medium1_tracktwo"},
1721 {
"HLT_tau160L1TAU100_medium1_tracktwo",
"HLT_tau160_medium1_tracktwo_L1TAU100"},
1723 {
"HLT_tau25_medium1_tracktwoEF",
"HLT_tau25_medium1_tracktwoEF"},
1724 {
"HLT_tau35_medium1_tracktwoEF",
"HLT_tau35_medium1_tracktwoEF"},
1725 {
"HLT_tau60_medium1_tracktwoEF",
"HLT_tau60_medium1_tracktwoEF"},
1726 {
"HLT_tau80L1TAU60_medium1_tracktwoEF",
"HLT_tau80_medium1_tracktwoEF_L1TAU60"},
1727 {
"HLT_tau160L1TAU100_medium1_tracktwoEF",
"HLT_tau160_medium1_tracktwoEF_L1TAU100"},
1735 {
"HLT_tau25_mediumRNN_tracktwoMVA",
"HLT_tau25_mediumRNN_tracktwoMVA"},
1736 {
"HLT_tau35_mediumRNN_tracktwoMVA",
"HLT_tau35_mediumRNN_tracktwoMVA"},
1738 {
"HLT_tau160_mediumRNN_tracktwoMVA",
"HLT_tau160_mediumRNN_tracktwoMVA_L1TAU100"},
1740 {
"HLT_tau160_mediumRNN_tracktwoMVA",
"HLT_tau160_mediumRNN_tracktwoMVA_L1eTAU140"}
1745 toolName =
"TauTrigEffTool_" +
m_tauId +
"_" + trigger.first;
1747 ATH_CHECK( tau_trigSF->setProperty(
"EfficiencyCorrectionTypes", std::vector<int>({TauAnalysisTools::SFTriggerHadTau})) );
1748 ATH_CHECK( tau_trigSF->setProperty(
"TriggerName", trigger.first) );
1749 ATH_CHECK( tau_trigSF->setProperty(
"JetIDLevel", jet_id_lvl_fb) );
1750 ATH_CHECK( tau_trigSF->setProperty(
"EleIDLevel", ele_id_lvl) );
1751 ATH_CHECK( tau_trigSF->setProperty(
"OutputLevel", this->msg().level()) );
1755 else {
ATH_CHECK( tau_trigSF->setProperty(
"Campaign",
"mc20") );}
1765 m_tauSmearingTool.setTypeAndName(
"TauAnalysisTools::TauSmearingTool/TauSmearingTool");
1780 m_tauTruthMatch.setTypeAndName(
"TauAnalysisTools::TauTruthMatchingTool/TauTruthMatch");
1795 std::string jetcollBTag = jetcoll;
1796 if (jetcoll ==
"AntiKt4LCTopoJets") {
1797 ATH_MSG_WARNING(
" *** HACK *** Treating LCTopoJets jets as EMTopo -- use at your own risk!");
1798 jetcollBTag =
"AntiKt4EMTopoJets";
1804 ATH_MSG_WARNING(
"You are using a "<<(!
m_isRun3 ?
"Run3":
"Run2")<<
" CDI file while running on "<<(!
m_isRun3 ?
"Run2":
"Run3")<<
" sample; Please updates your CDI file to the correct version for "<<(!
m_isRun3 ?
"Run2":
"Run3"));
1808 if (jetcollBTag.find(
"AntiKt4EMTopoJets") == std::string::npos && jetcollBTag.find(
"AntiKt4EMPFlowJets")==std::string::npos) {
1809 ATH_MSG_WARNING(
"** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1810 return StatusCode::FAILURE;
1815 m_btagSelTool.setTypeAndName(
"BTaggingSelectionTool/"+toolName);
1830 if (jetcoll !=
"AntiKt4EMTopoJets" && jetcoll !=
"AntiKt4EMPFlowJets") {
1831 ATH_MSG_WARNING(
"** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1832 return StatusCode::FAILURE;
1835 toolName =
"BTagSelOR_" + jetcollBTag +
m_orBtagWP;
1851 const std::string& BTagColl_TrkJet = trkjetcoll;
1855 ATH_MSG_INFO(
"TrackJet collection set to None: disabling btagging for TrackJets.");
1859 if (trkjetcoll.find(
"AntiKt2PV0TrackJets")==std::string::npos && trkjetcoll.find(
"AntiKtVR30Rmax4Rmin02TrackJets")==std::string::npos) {
1860 ATH_MSG_WARNING(
"** Only AntiKt2PV0TrackJets and AntiKtVR30Rmax4Rmin02TrackJets are supported with FTAG scale factors!");
1861 return StatusCode::FAILURE;
1883 std::string MCshowerID;
1885 ATH_MSG_ERROR(
"Error! m_showerType=-1, which is an error case for FTAG MC/MC SFs." );
1886 return StatusCode::FAILURE;
1890 MCshowerID=
"default";
1900 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1904 MCshowerID=
"default";
1908 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1913 MCshowerID=
"default";
1921 ATH_MSG_WARNING(
"Unknown Sherpa version detected! Using FTAG MC-MC SFs for Sherpa 2.2.11-2.2.16. Please check if these are applicable for this sample!");
1922 MCshowerID =
"700660";
1925 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1929 MCshowerID=
"default";
1935 ATH_MSG_WARNING(
"Unknown Sherpa version detected! Using FTAG MC-MC SFs for Sherpa 2.2.11-2.2.16. Please check if these are applicable for this sample!");
1936 MCshowerID =
"700660";
1939 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1943 ATH_MSG_WARNING(
"Unknown b-tagger detected! Only DL1dv01 and GN2v01 are supported. Falling back to default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1944 MCshowerID=
"default";
1949 if (jetcoll !=
"AntiKt4EMTopoJets" && jetcoll !=
"AntiKt4EMPFlowJets") {
1950 ATH_MSG_WARNING(
"** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1951 return StatusCode::FAILURE;
1955 m_btagEffTool.setTypeAndName(
"BTaggingEfficiencyTool/"+toolName);
1979 if (trkjetcoll.find(
"AntiKt2PV0TrackJets")==std::string::npos && trkjetcoll.find(
"AntiKtVR30Rmax4Rmin02TrackJets")==std::string::npos) {
1980 ATH_MSG_WARNING(
"** Only AntiKt2PV0TrackJets and AntiKtVR30Rmax4Rmin02TrackJets are supported with FTAG scale factors!");
1981 return StatusCode::FAILURE;
1984 toolName =
"BTagSF_" + trkjetcoll;
2015 m_metMaker.setTypeAndName(
"met::METMaker/METMaker_ST_"+toolName);
2040 m_metSystTool.setTypeAndName(
"met::METSystematicsTool/METSystTool");
2044 ATH_MSG_ERROR(
"Can only have CST *or* TST configured for MET maker. Please unset either METDoCaloSyst or METDoTrkSyst in your config file" );
2045 return StatusCode::FAILURE;
2069 m_metSignif.setTypeAndName(
"met::METSignificance/metSignificance_"+jetname);
2070#ifndef XAOD_STANDALONE
2074 if(jetname !=
"AntiKt4EMPFlow")
2075 ATH_MSG_WARNING(
"METSignificance recommendations only exist for AntiKt4EMPFlow jets, falling back to this.");
2092 if (IdBaselineInt == 4)
2100 if(jetname !=
"AntiKt4EMPFlow")
2101 ATH_MSG_WARNING(
"METSignificance recommendations only exist for AntiKt4EMPFlow jets, falling back to this.");
2104 ATH_CHECK(
m_metSignif.setProperty(
"JetCalibConfig",
"JES_data2017_2016_2015_Recommendation_PFlow_Aug2018_rel21.config") );
2105 ATH_CHECK(
m_metSignif.setProperty(
"JetCalibSequence",
"JetArea_Residual_EtaJES_GSC_Smear") );
2123 m_trigDecTool.setTypeAndName(
"Trig::TrigDecisionTool/TrigDecisionTool");
2131#ifndef XAOD_STANDALONE
2135 m_trigConfTool.setTypeAndName(
"TrigConf::xAODConfigTool/xAODConfigTool");
2154 m_trigMatchingTool.setTypeAndName(
"Trig::MatchFromCompositeTool/TrigMatchFromCompositeTool");
2178 std::string no2e17(
"");
2188 ATH_MSG_DEBUG(
"TrigGlobalEfficiencyCorrectionTool/TrigGlobal_diLep: no2e17 trigger string: " << no2e17 );
2190 std::map<std::string,std::string> triggers_diLep;
2194 triggers_diLep[
"326834-328393"] = no2e17;
2213 std::string no2e17(
"");
2223 ATH_MSG_DEBUG(
"TrigGlobalEfficiencyCorrectionTool/TrigGlobal_multiLep: no2e17 trigger string: " << no2e17 );
2225 std::map<std::string,std::string> triggers_multiLep;
2229 triggers_multiLep[
"326834-328393"] = no2e17;
2266 m_isoCorrTool.setTypeAndName(
"CP::IsolationCorrectionTool/IsoCorrTool");
2272 ATH_CHECK(
m_isoCorrTool.setProperty(
"CorrFile",
"IsolationCorrections/v6/isolation_ptcorrections_rel22_mc20.root") );
2281 m_isoTool.setTypeAndName(
"CP::IsolationSelectionTool/IsoTool");
2307 m_isoHighPtTool.setTypeAndName(
"CP::IsolationSelectionTool/IsoHighPtTool");
2319 m_isoCloseByTool.setTypeAndName(
"CP::IsolationCloseByCorrectionTool/IsoCloseByTool");
2330#ifndef XAOD_ANALYSIS
2343 std::string suffix =
"";
2347 std::string toolName =
"ORTool" + suffix;
2348 ATH_MSG_INFO(
"SUSYTools: Autoconfiguring " << toolName);
2392 m_orToolbox.tauJetORT.setTypeAndName(
"ORUtils::TauJetOverlapTool/" + orFlags.
masterName +
".TauJetORT");
2471 m_pmgSHnjetWeighter.setTypeAndName(
"PMGTools::PMGSherpa22VJetsWeightTool/PMGSHVjetReweighter");
2491 return StatusCode::SUCCESS;