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 xAOD::Muon::VeryLoose: muQualBaseline =
"VeryLoose";
703 ATH_MSG_WARNING(
"No muon scale factors are available for VeryLoose working point.");
705 case xAOD::Muon::Loose: muQualBaseline =
"Loose";
break;
706 case xAOD::Muon::Medium: muQualBaseline =
"Medium";
break;
707 case xAOD::Muon::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 xAOD::Muon::VeryLoose: muQual =
"VeryLoose";
768 ATH_MSG_WARNING(
"No muon scale factors are available for VeryLoose working point.");
770 case xAOD::Muon::Loose: muQual =
"Loose";
break;
771 case xAOD::Muon::Medium: muQual =
"Medium";
break;
772 case xAOD::Muon::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 == xAOD::Muon::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");
1084 ATH_MSG_INFO(
"Running on Run2 samples; Using egamma SF tools from R21 map ");
1088 toolName =
"AsgElectronEfficiencyCorrectionTool_reco";
1099 std::string eleId = TString(
m_eleId).ReplaceAll(
"AndBLayer",
"BLayer").ReplaceAll(
"LLH",
"").Data();
1101 if (
m_eleId.find(
"DNN") != std::string::npos) {
1102 eleId = TString(eleId).ReplaceAll(
"DNNnoCF",
"").ReplaceAll(
"DNN",
"").ReplaceAll(
"Loose",
"LooseBLayer").Data();
1103 ATH_MSG_WARNING(
"Electron DNN ID working point " <<
m_eleId <<
" doesn't have SFs yet, fall back to " << eleId);
1107 toolName =
"AsgElectronEfficiencyCorrectionTool_id_" +
m_eleId;
1111 std::map<std::string,std::string> corrFNList;
1114 std::string WP = WP_fname.substr(0,WP_fname.find(
":"));
1115 std::string fname = WP_fname.substr(WP_fname.find(
":")+1);
1116 corrFNList[WP] = fname;
1117 ATH_MSG_WARNING(
"Correction file list defined for WP " << WP <<
": " << fname <<
"." );
1118 ATH_MSG_WARNING(
"Will use correction file rather than central map file." );
1123 std::string EleIso(
"");
1124 if (std::find(eSF_keys.begin(), eSF_keys.end(), eleId+
"_"+
m_eleIso_WP) != eSF_keys.end()){
1129 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_iso_*) Your selected electron Iso WP ("
1131 <<
") does not have iso SFs defined. Falling back to "
1133 <<
" for SF calculations");
1137 return StatusCode::FAILURE;
1140 toolName =
"AsgElectronEfficiencyCorrectionTool_iso_" +
m_eleId + EleIso;
1143 if ( (!
m_EG_corrFNList.empty()) && corrFNList.find(EleIso)!=corrFNList.end() ) {
1150 ATH_MSG_WARNING(
"(" << toolName <<
") Your electron Iso WP: " << EleIso<<
" is no longer supported. This will almost certainly cause a crash now.");
1162 if (!
isData() && ((EleIso.find(
"TightTrackOnly_VarRad")!=std::string::npos)||
1163 (EleIso.find(
"TightTrackOnly_FixedRad")!=std::string::npos)||
1164 (EleIso.find(
"Tight_VarRad")!=std::string::npos)||
1165 (EleIso.find(
"Loose_VarRad")!=std::string::npos))) {
1166 if (
isAtlfast())
ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool/"+toolName+
"). Your selected electron Iso WP (" + EleIso +
") don't have AFII SF. Falling back to FullSim");
1179 std::string EleIsohighPt(
"");
1180 if (std::find(eSF_keys.begin(), eSF_keys.end(), eleId+
"_"+
m_eleIsoHighPt_WP) != eSF_keys.end()){
1185 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_iso_*) Your selected high-pT electron Iso WP ("
1187 <<
") does not have iso SFs defined. Falling back to "
1189 <<
" for SF calculations");
1193 return StatusCode::FAILURE;
1196 toolName =
"AsgElectronEfficiencyCorrectionTool_isoHigPt_" +
m_eleId + EleIsohighPt;
1199 if ( (!
m_EG_corrFNList.empty()) && corrFNList.find(EleIsohighPt)!=corrFNList.end() ) {
1207 ATH_MSG_WARNING(
"(" << toolName <<
") Your electron high-pt Iso WP: " << EleIsohighPt <<
" is no longer supported. This will almost certainly cause a crash now.");
1228 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);
1229 std::string triggerEleID =
m_isRun3? TString(eleId).ReplaceAll(
"LooseBLayer",
"Loose").Data() : eleId;
1235 bool pass_isRun3TrigSFFallback =
true;
1236 if (triggerEleID.find(
"Medium") != std::string::npos && triggerEleIso.find(
"Loose") != std::string::npos) {triggerEleID =
"LooseBLayer";}
1237 else if (triggerEleID.find(
"Medium") != std::string::npos && triggerEleIso.find(
"Tight") != std::string::npos) {triggerEleID =
"Tight"; triggerEleIso =
"Tight_VarRad";}
1238 else if (triggerEleID.find(
"Medium") != std::string::npos && triggerEleIso.find(
"HighPtCaloOnly") != std::string::npos) {triggerEleID =
"Tight"; triggerEleIso =
"Tight_VarRad";}
1239 else if (triggerEleID.find(
"Tight") != std::string::npos && triggerEleIso.find(
"Loose") != std::string::npos) {triggerEleID =
"LooseBLayer";}
1240 else if (triggerEleID.find(
"Tight") != std::string::npos && triggerEleIso.find(
"Tight") != std::string::npos) {triggerEleIso=
"Tight_VarRad";}
1241 else if (triggerEleID.find(
"Tight") != std::string::npos && triggerEleIso.find(
"HighPtCaloOnly") != std::string::npos) {triggerEleID =
"Tight"; triggerEleIso =
"Tight_VarRad";}
1242 else if (triggerEleID.find(
"Loose") != std::string::npos && triggerEleIso.find(
"Tight") != std::string::npos) {triggerEleID =
"LooseBLayer"; triggerEleIso =
"Loose_VarRad";}
1243 else if (triggerEleID.find(
"Loose") != std::string::npos && triggerEleIso.find(
"HighPtCaloOnly") != std::string::npos) {triggerEleID =
"LooseBLayer"; triggerEleIso =
"Loose_VarRad";}
1244 else {pass_isRun3TrigSFFallback=
false;}
1245 if(pass_isRun3TrigSFFallback){
1246 ATH_MSG_INFO(
" ************** This is only for testing/studying purpose! ************** ");
1247 ATH_MSG_INFO(
" ************** For official recommendation, please get in contact with the SUSY Bkg Forum ************** ");
1248 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' ");
1249 ATH_MSG_INFO(
"Only for single-lepton trigger scale factor, fall back to Electron ID: -> "<< triggerEleID <<
" with Isolation: " << triggerEleIso);
1261 auto next_pos = [&](
size_t self) {
1262 size_t next = std::string::npos;
1265 if (p23 > self && p23 < next) next = p23;
1266 if (p24 > self && p24 < next) next = p24;
1268 else if (self == p23) {
1269 if (p22 > self && p22 < next) next = p22;
1270 if (p24 > self && p24 < next) next = p24;
1272 else if (self == p24) {
1273 if (p22 > self && p22 < next) next = p22;
1274 if (p23 > self && p23 < next) next = p23;
1279 std::string SFStringSingle22=
"";
1280 std::string SFStringSingle23=
"";
1281 std::string SFStringSingle24=
"";
1289 std::string* toks[] = { &SFStringSingle22, &SFStringSingle23, &SFStringSingle24 };
1290 for (
auto t : toks) {
1291 while (!t->empty() && t->back() ==
'_') t->pop_back();
1298 ATH_MSG_WARNING(
"Unknown or unsupported mcCampaign for Run 3: " <<
m_mcCampaign <<
". Please contact the SUSY Bkg Forum for assistance.");
1299 ATH_MSG_WARNING(
"Falling back to 2024 trigger SFs for single-electron triggers.");
1312 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_trig_singleLep_*) Your selected electron Iso WP ("
1314 <<
") does not have trigger SFs defined. Falling back to "
1316 <<
" for SF calculations");
1320 return StatusCode::FAILURE;
1323 toolName =
"AsgElectronEfficiencyCorrectionTool_trig_singleLep_" + triggerEleID;
1339 toolName =
"AsgElectronEfficiencyCorrectionTool_trigEff_singleLep_" + triggerEleID;
1356 std::map<std::string,std::string> electronTriggerSFMapMixedLepton {
1358 {
"e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose,e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0",
m_electronTriggerSFStringSingle},
1359 {
"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"},
1360 {
"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"},
1361 {
"e17_lhloose,e17_lhloose_nod0",
"MULTI_L_2015_e17_lhloose_2016_2018_e17_lhloose_nod0"},
1362 {
"e12_lhloose,e12_lhloose_nod0",
"MULTI_L_2015_e12_lhloose_2016_2018_e12_lhloose_nod0"},
1363 {
"e7_lhmedium,e7_lhmedium_nod0",
"MULTI_L_2015_e7_lhmedium_2016_2018_e7_lhmedium_nod0"},
1364 {
"e9_lhloose,e9_lhloose_nod0,e12_lhvloose_nod0_L1EM10VH",
"TRI_E_2015_e9_lhloose_2016_e9_lhloose_nod0_2017_2018_e12_lhvloose_nod0_L1EM10VH"}
1370 if (triglist_2017to2018.find(
"2e17_lhvloose_nod0_L12EM15VHI") != std::string::npos) {
1371 electronTriggerSFMapMixedLepton[
"e17_lhvloose_nod0_L1EM15VHI"] =
"DI_E_2015_e12_lhloose_L1EM10VH_2016_e17_lhvloose_nod0_2017_2018_e17_lhvloose_nod0_L1EM15VHI";
1374 std::string triggerMixedEleIso(
"");
1376 for(
auto const& item : electronTriggerSFMapMixedLepton){
1378 if (std::find(eSF_keys.begin(), eSF_keys.end(), item.second+
"_"+eleId+
"_"+
m_eleIso_WP) != eSF_keys.end()){
1383 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_trig_mixLep_*) Your selected electron Iso WP ("
1385 <<
") does not have trigger SFs defined. Falling back to "
1386 << triggerMixedEleIso
1387 <<
" for SF calculations");
1389 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! ***");
1390 return StatusCode::FAILURE;
1393 ATH_MSG_VERBOSE (
"Selected WP: " << item.second <<
"_" << eleId <<
"_" << triggerMixedEleIso);
1395 toolName =
"AsgElectronEfficiencyCorrectionTool_trig_mixLep_" + (item.first).substr(0,8) +
m_eleId;
1398 ATH_CHECK( t_sf->setProperty(
"TriggerKey", item.second) );
1399 ATH_CHECK( t_sf->setProperty(
"IdKey", eleId) );
1400 ATH_CHECK( t_sf->setProperty(
"IsoKey", triggerMixedEleIso) );
1405 ATH_CHECK( t_sf->setProperty(
"OutputLevel", this->msg().level()) );
1408 #ifndef XAOD_STANDALONE
1414 toolName =
"AsgElectronEfficiencyCorrectionTool_trigEff_mixLep_" + (item.first).substr(0,8) +
m_eleId;
1417 ATH_CHECK( t_eff->setProperty(
"TriggerKey",
"Eff_"+item.second) );
1418 ATH_CHECK( t_eff->setProperty(
"IdKey", eleId) );
1419 ATH_CHECK( t_eff->setProperty(
"IsoKey", triggerMixedEleIso) );
1424 ATH_CHECK( t_eff->setProperty(
"OutputLevel", this->msg().level()) );
1427 #ifndef XAOD_STANDALONE
1435 else ATH_MSG_WARNING(
"*** THE ELECTRON TRIGGER SF MIXED AND SF DILEP ARE CURRENTY NOT SUPPORTED IN RUN3 ***");
1437 ATH_MSG_WARNING(
"*** THE ELECTRON CHARGE FLIP SF ARE CURRENTY NOT SUPPORTED ***");
1481 photonIso_forTrigSF =
"TightCaloOnly";
1483 photonIso_forTrigSF = TString(
m_photonIso_WP).ReplaceAll(
"FixedCut",
"").Data();
1495 std::map<std::string,std::string> diphotonTriggerSFMapAsymmetric {
1497 {
"g25_loose,g25_medium_L1EM20VH",
"DI_PH_2015_g25_loose_2016_g25_loose_2017_g25_medium_L1EM20VH_2018_g25_medium_L1EM20VH"},
1498 {
"g35_loose,g35_medium_L1EM20VH",
"DI_PH_2015_g35_loose_2016_g35_loose_2017_g35_medium_L1EM20VH_2018_g35_medium_L1EM20VH"},
1501 for(
auto const& item : diphotonTriggerSFMapAsymmetric){
1503 toolName =
"AsgPhotonEfficiencyCorrectionTool_trigSF_asymm_diphoton_" + (item.first).substr(0,9) + photonIso_forTrigSF;
1505 ATH_CHECK( ph_trigSF->setProperty(
"MapFilePath",
"PhotonEfficiencyCorrection/2015_2018/rel21.2/Summer2020_Rec_v1/map3.txt") );
1506 ATH_CHECK( ph_trigSF->setProperty(
"IsoKey", photonIso_forTrigSF) );
1507 ATH_CHECK( ph_trigSF->setProperty(
"TriggerKey", item.second) );
1508 ATH_CHECK( ph_trigSF->setProperty(
"ForceDataType", 1) );
1509 ATH_CHECK( ph_trigSF->setProperty(
"OutputLevel", this->msg().level()) );
1512 #ifndef XAOD_STANDALONE
1518 toolName =
"AsgPhotonEfficiencyCorrectionTool_trigEff_asymm_diphoton_" + (item.first).substr(0,9) + photonIso_forTrigSF;
1520 ATH_CHECK( ph_trigEff->setProperty(
"MapFilePath",
"PhotonEfficiencyCorrection/2015_2018/rel21.2/Summer2020_Rec_v1/map3.txt") );
1521 ATH_CHECK( ph_trigEff->setProperty(
"IsoKey", photonIso_forTrigSF) );
1522 ATH_CHECK( ph_trigEff->setProperty(
"TriggerKey",
"Eff_"+item.second) );
1523 ATH_CHECK( ph_trigEff->setProperty(
"ForceDataType", 1) );
1524 ATH_CHECK( ph_trigEff->setProperty(
"OutputLevel", this->msg().level()) );
1527 #ifndef XAOD_STANDALONE
1577 m_egammaCalibTool.setTypeAndName(
"CP::EgammaCalibrationAndSmearingTool/EgammaCalibrationAndSmearingTool");
1583 ATH_MSG_WARNING(
"Forcing EgcalibTool to use calibrations for full simulation" );
1605 return StatusCode::FAILURE;
1614 toolName =
"TauSelectionTool_" +
m_tauId;
1615 m_tauSelTool.setTypeAndName(
"TauAnalysisTools::TauSelectionTool/"+toolName);
1634 ANA_MSG_DEBUG(
"Found JetIDWP in tau config file : " << jetIDWP );
1647 ATH_MSG_ERROR(
"Invalid Tau ID in tau config file " << jetIDWP);
1648 return StatusCode::FAILURE;
1652 ANA_MSG_DEBUG(
"Found EleIDWP in tau config file : " << eleIDWP );
1653 int ele_id_lvl = -1;
1658 ATH_MSG_INFO(
"No or invalid Ele OR in tau config file " << eleIDWP <<
" will not apply SFs for electro veto" );
1661 ATH_MSG_WARNING(
"EleOR with Tight TauID is currently not supported, please discuss with TauCP!");
1664 int jet_id_lvl_fb = jet_id_lvl;
1667 ATH_MSG_WARNING(
"Configuring fallback RNN ID SF for GNTau config, do not use in production!");
1676 toolName =
"TauEffTool_" +
m_tauId;
1677 m_tauEffTool.setTypeAndName(
"TauAnalysisTools::TauEfficiencyCorrectionsTool/"+toolName);
1679 std::vector<int> correction_types;
1681 correction_types.insert(correction_types.end(), {TauAnalysisTools::EfficiencyCorrectionType::SFRecoHadTau,
1682 TauAnalysisTools::EfficiencyCorrectionType::SFJetIDHadTau});
1685 if (ele_id_lvl != -1 )
1686 correction_types.insert(correction_types.end(), {TauAnalysisTools::EfficiencyCorrectionType::SFEleIDHadTau,
1687 TauAnalysisTools::EfficiencyCorrectionType::SFEleIDElectron});
1708 {
"HLT_tau25_medium1_tracktwo",
"HLT_tau25_medium1_tracktwo"},
1709 {
"HLT_tau35_medium1_tracktwo",
"HLT_tau35_medium1_tracktwo"},
1710 {
"HLT_tau50L1TAU12_medium1_tracktwo",
"HLT_tau50_medium1_tracktwo_L1TAU12"},
1711 {
"HLT_tau60_medium1_tracktwo",
"HLT_tau60_medium1_tracktwo"},
1712 {
"HLT_tau80L1TAU60_medium1_tracktwo",
"HLT_tau80_medium1_tracktwo_L1TAU60"},
1713 {
"HLT_tau125_medium1_tracktwo",
"HLT_tau125_medium1_tracktwo"},
1714 {
"HLT_tau160_medium1_tracktwo",
"HLT_tau160_medium1_tracktwo"},
1715 {
"HLT_tau160L1TAU100_medium1_tracktwo",
"HLT_tau160_medium1_tracktwo_L1TAU100"},
1717 {
"HLT_tau25_medium1_tracktwoEF",
"HLT_tau25_medium1_tracktwoEF"},
1718 {
"HLT_tau35_medium1_tracktwoEF",
"HLT_tau35_medium1_tracktwoEF"},
1719 {
"HLT_tau60_medium1_tracktwoEF",
"HLT_tau60_medium1_tracktwoEF"},
1720 {
"HLT_tau80L1TAU60_medium1_tracktwoEF",
"HLT_tau80_medium1_tracktwoEF_L1TAU60"},
1721 {
"HLT_tau160L1TAU100_medium1_tracktwoEF",
"HLT_tau160_medium1_tracktwoEF_L1TAU100"},
1729 {
"HLT_tau25_mediumRNN_tracktwoMVA",
"HLT_tau25_mediumRNN_tracktwoMVA"},
1730 {
"HLT_tau35_mediumRNN_tracktwoMVA",
"HLT_tau35_mediumRNN_tracktwoMVA"},
1732 {
"HLT_tau160_mediumRNN_tracktwoMVA",
"HLT_tau160_mediumRNN_tracktwoMVA_L1TAU100"},
1734 {
"HLT_tau160_mediumRNN_tracktwoMVA",
"HLT_tau160_mediumRNN_tracktwoMVA_L1eTAU140"}
1739 toolName =
"TauTrigEffTool_" +
m_tauId +
"_" + trigger.first;
1741 ATH_CHECK( tau_trigSF->setProperty(
"EfficiencyCorrectionTypes", std::vector<int>({TauAnalysisTools::SFTriggerHadTau})) );
1742 ATH_CHECK( tau_trigSF->setProperty(
"TriggerName", trigger.first) );
1743 ATH_CHECK( tau_trigSF->setProperty(
"JetIDLevel", jet_id_lvl_fb) );
1744 ATH_CHECK( tau_trigSF->setProperty(
"EleIDLevel", ele_id_lvl) );
1745 ATH_CHECK( tau_trigSF->setProperty(
"OutputLevel", this->msg().level()) );
1749 else {
ATH_CHECK( tau_trigSF->setProperty(
"Campaign",
"mc20") );}
1759 m_tauSmearingTool.setTypeAndName(
"TauAnalysisTools::TauSmearingTool/TauSmearingTool");
1774 m_tauTruthMatch.setTypeAndName(
"TauAnalysisTools::TauTruthMatchingTool/TauTruthMatch");
1789 std::string jetcollBTag = jetcoll;
1790 if (jetcoll ==
"AntiKt4LCTopoJets") {
1791 ATH_MSG_WARNING(
" *** HACK *** Treating LCTopoJets jets as EMTopo -- use at your own risk!");
1792 jetcollBTag =
"AntiKt4EMTopoJets";
1798 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"));
1802 if (jetcollBTag.find(
"AntiKt4EMTopoJets") == std::string::npos && jetcollBTag.find(
"AntiKt4EMPFlowJets")==std::string::npos) {
1803 ATH_MSG_WARNING(
"** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1804 return StatusCode::FAILURE;
1809 m_btagSelTool.setTypeAndName(
"BTaggingSelectionTool/"+toolName);
1824 if (jetcoll !=
"AntiKt4EMTopoJets" && jetcoll !=
"AntiKt4EMPFlowJets") {
1825 ATH_MSG_WARNING(
"** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1826 return StatusCode::FAILURE;
1829 toolName =
"BTagSelOR_" + jetcollBTag +
m_orBtagWP;
1845 const std::string& BTagColl_TrkJet = trkjetcoll;
1849 ATH_MSG_INFO(
"TrackJet collection set to None: disabling btagging for TrackJets.");
1853 if (trkjetcoll.find(
"AntiKt2PV0TrackJets")==std::string::npos && trkjetcoll.find(
"AntiKtVR30Rmax4Rmin02TrackJets")==std::string::npos) {
1854 ATH_MSG_WARNING(
"** Only AntiKt2PV0TrackJets and AntiKtVR30Rmax4Rmin02TrackJets are supported with FTAG scale factors!");
1855 return StatusCode::FAILURE;
1877 std::string MCshowerID;
1879 ATH_MSG_ERROR(
"Error! m_showerType=-1, which is an error case for FTAG MC/MC SFs." );
1880 return StatusCode::FAILURE;
1884 MCshowerID=
"default";
1894 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1898 MCshowerID=
"default";
1902 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1907 MCshowerID=
"default";
1915 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!");
1916 MCshowerID =
"700660";
1919 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1923 MCshowerID=
"default";
1929 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!");
1930 MCshowerID =
"700660";
1933 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1937 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!");
1938 MCshowerID=
"default";
1943 if (jetcoll !=
"AntiKt4EMTopoJets" && jetcoll !=
"AntiKt4EMPFlowJets") {
1944 ATH_MSG_WARNING(
"** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1945 return StatusCode::FAILURE;
1949 m_btagEffTool.setTypeAndName(
"BTaggingEfficiencyTool/"+toolName);
1973 if (trkjetcoll.find(
"AntiKt2PV0TrackJets")==std::string::npos && trkjetcoll.find(
"AntiKtVR30Rmax4Rmin02TrackJets")==std::string::npos) {
1974 ATH_MSG_WARNING(
"** Only AntiKt2PV0TrackJets and AntiKtVR30Rmax4Rmin02TrackJets are supported with FTAG scale factors!");
1975 return StatusCode::FAILURE;
1978 toolName =
"BTagSF_" + trkjetcoll;
2009 m_metMaker.setTypeAndName(
"met::METMaker/METMaker_ST_"+toolName);
2034 m_metSystTool.setTypeAndName(
"met::METSystematicsTool/METSystTool");
2038 ATH_MSG_ERROR(
"Can only have CST *or* TST configured for MET maker. Please unset either METDoCaloSyst or METDoTrkSyst in your config file" );
2039 return StatusCode::FAILURE;
2063 m_metSignif.setTypeAndName(
"met::METSignificance/metSignificance_"+jetname);
2064#ifndef XAOD_STANDALONE
2068 if(jetname !=
"AntiKt4EMPFlow")
2069 ATH_MSG_WARNING(
"METSignificance recommendations only exist for AntiKt4EMPFlow jets, falling back to this.");
2086 if (IdBaselineInt == 4)
2094 if(jetname !=
"AntiKt4EMPFlow")
2095 ATH_MSG_WARNING(
"METSignificance recommendations only exist for AntiKt4EMPFlow jets, falling back to this.");
2098 ATH_CHECK(
m_metSignif.setProperty(
"JetCalibConfig",
"JES_data2017_2016_2015_Recommendation_PFlow_Aug2018_rel21.config") );
2099 ATH_CHECK(
m_metSignif.setProperty(
"JetCalibSequence",
"JetArea_Residual_EtaJES_GSC_Smear") );
2117 m_trigDecTool.setTypeAndName(
"Trig::TrigDecisionTool/TrigDecisionTool");
2125#ifndef XAOD_STANDALONE
2129 m_trigConfTool.setTypeAndName(
"TrigConf::xAODConfigTool/xAODConfigTool");
2148 m_trigMatchingTool.setTypeAndName(
"Trig::MatchFromCompositeTool/TrigMatchFromCompositeTool");
2172 std::string no2e17(
"");
2182 ATH_MSG_DEBUG(
"TrigGlobalEfficiencyCorrectionTool/TrigGlobal_diLep: no2e17 trigger string: " << no2e17 );
2184 std::map<std::string,std::string> triggers_diLep;
2188 triggers_diLep[
"326834-328393"] = no2e17;
2207 std::string no2e17(
"");
2217 ATH_MSG_DEBUG(
"TrigGlobalEfficiencyCorrectionTool/TrigGlobal_multiLep: no2e17 trigger string: " << no2e17 );
2219 std::map<std::string,std::string> triggers_multiLep;
2223 triggers_multiLep[
"326834-328393"] = no2e17;
2260 m_isoCorrTool.setTypeAndName(
"CP::IsolationCorrectionTool/IsoCorrTool");
2266 ATH_CHECK(
m_isoCorrTool.setProperty(
"CorrFile",
"IsolationCorrections/v6/isolation_ptcorrections_rel22_mc20.root") );
2275 m_isoTool.setTypeAndName(
"CP::IsolationSelectionTool/IsoTool");
2301 m_isoHighPtTool.setTypeAndName(
"CP::IsolationSelectionTool/IsoHighPtTool");
2313 m_isoCloseByTool.setTypeAndName(
"CP::IsolationCloseByCorrectionTool/IsoCloseByTool");
2324#ifndef XAOD_ANALYSIS
2337 std::string suffix =
"";
2341 std::string toolName =
"ORTool" + suffix;
2342 ATH_MSG_INFO(
"SUSYTools: Autoconfiguring " << toolName);
2386 m_orToolbox.tauJetORT.setTypeAndName(
"ORUtils::TauJetOverlapTool/" + orFlags.
masterName +
".TauJetORT");
2465 m_pmgSHnjetWeighter.setTypeAndName(
"PMGTools::PMGSherpa22VJetsWeightTool/PMGSHVjetReweighter");
2485 return StatusCode::SUCCESS;