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";
276#ifndef XAOD_STANDALONE
285 ATH_MSG_ERROR(
"Error while reading large-R config file : " << WConfigPath );
286 return StatusCode::FAILURE;
288 else ATH_MSG_DEBUG(
"Successfully read large-R config file : " << WConfigPath );
303#ifndef XAOD_STANDALONE
312 ATH_MSG_ERROR(
"Error while reading large-R config file : " << ZConfigPath );
313 return StatusCode::FAILURE;
315 else ATH_MSG_DEBUG(
"Successfully read large-R config file : " << ZConfigPath );
330#ifndef XAOD_STANDALONE
339 ATH_MSG_ERROR(
"Error while reading large-R config file : " << TopConfigPath );
340 return StatusCode::FAILURE;
342 else ATH_MSG_DEBUG(
"Successfully read large-R config file : " << TopConfigPath );
389 if(jetdef !=
"AntiKt4EMPFlow"){
390 ATH_MSG_WARNING(
"Jet Uncertaintes recommendations only exist for PFlow jets, falling back to AntiKt4EMPFlow");
391 jetdef =
"AntiKt4EMPFlow";
393 toolName =
"JetUncertaintiesTool_" + jetdef;
407 ATH_MSG_INFO(
"Set up Jet PD Smear Uncertainty tool...");
412 if(jetdef !=
"AntiKt4EMPFlow"){
413 ATH_MSG_WARNING(
"Jet Uncertaintes recommendations only exist for PFlow jets, falling back to AntiKt4EMPFlow");
414 jetdef =
"AntiKt4EMPFlow";
416 toolName =
"JetUncertaintiesPDSmearTool_" + jetdef;
423 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.");
424 return StatusCode::FAILURE;
435 ATH_MSG_DEBUG(
"Do not retrieve the jet PD Smearing tool if it is not configured");
449 ATH_MSG_WARNING(
"Uncertainties for large-R jets in mc23 and fast simulation not yet available; be aware uncertainties might be not complete!");
451 toolName =
"JetUncertaintiesTool_" +
m_fatJets;
462 std::vector<std::string> shift_vars = {};
466 auto pos =
temp.find(
',');
467 shift_vars.push_back(
temp.substr(0, pos));
468 if (pos == std::string::npos)
474 while (!
temp.empty() );
486 ATH_MSG_INFO(
"Set up Jet PD Smear Uncertainty tool...");
488 toolName =
"JetUncertaintiesPDSmearTool_" +
m_fatJets;
493 if (
m_fatJetUncConfig.find(
"SimpleJER") != std::string::npos && JERUncPDsmearing){
494 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.");
495 return StatusCode::FAILURE;
506 ATH_MSG_DEBUG(
"Do not retrieve the jet PD Smearing tool if it is not configured");
515 toolName =
"FFJetSmearingTool_" +
m_fatJets;
528 ATH_MSG_INFO(
"The following uncertainties have been defined for the m_fatjetFFSmearingTool");
535 ATH_MSG_INFO(
" Won't initialise Wtagger uncertainty tool for fat jets until we get rec for UFO");
550 ATH_MSG_INFO(
" Won't initialise Ztagger uncertainty tool for fat jets until we get rec for UFO");
565 ATH_MSG_INFO(
" Won't initialise top-tagger uncertainty tool for fat jets until we get rec for UFO");
593 toolName =
"JetCleaningTool";
605 toolName =
"PileupLabelingTool";
609 #ifndef XAOD_STANDALONE
621 toolName =
"JvtMomentTool";
624 #ifndef XAOD_STANDALONE
637 toolName =
"NNJvtMomentTool";
640 #ifndef XAOD_STANDALONE
652 toolName =
"NNJvtSelectionTool";
666 toolName =
"NNJvtEfficiencyTool";
680 toolName =
"fJvtSelectionTool";
694 toolName =
"fJvtEfficiencyTool";
710 std::string muQualBaseline =
"";
712 case xAOD::Muon::VeryLoose: muQualBaseline =
"VeryLoose";
713 ATH_MSG_WARNING(
"No muon scale factors are available for VeryLoose working point.");
715 case xAOD::Muon::Loose: muQualBaseline =
"Loose";
break;
716 case xAOD::Muon::Medium: muQualBaseline =
"Medium";
break;
717 case xAOD::Muon::Tight: muQualBaseline =
"Tight";
break;
718 case 4: muQualBaseline =
"HighPt";
break;
719 case 5: muQualBaseline =
"LowPt";
break;
720 case 6: muQualBaseline =
"LowPtMVA";
break;
721 case 7: muQualBaseline =
"HighPt3Layers";
break;
724 return StatusCode::FAILURE;
735 m_muonCalibTool.setTypeAndName(
"CP::MuonCalibTool/ST_MuonCalibrationTool");
741 if (IdBaselineInt == 4) {
752 toolName =
"MuonSelectionTool_Baseline_" + muQualBaseline;
758 ") that is tighter than the signal cut (" <<
m_muEta <<
"). Please check your config." );
759 return StatusCode::FAILURE;
763 if (IdBaselineInt == 6){
766 }
else if (IdBaselineInt == 7){
775 std::string muQual =
"";
777 case xAOD::Muon::VeryLoose: muQual =
"VeryLoose";
778 ATH_MSG_WARNING(
"No muon scale factors are available for VeryLoose working point.");
780 case xAOD::Muon::Loose: muQual =
"Loose";
break;
781 case xAOD::Muon::Medium: muQual =
"Medium";
break;
782 case xAOD::Muon::Tight: muQual =
"Tight";
break;
783 case 4: muQual =
"HighPt";
break;
784 case 5: muQual =
"LowPt";
break;
785 case 6: muQual =
"LowPtMVA";
break;
786 case 7: muQual =
"HighPt3Layers";
break;
788 ATH_MSG_ERROR(
"Invalid muon working point provided: " <<
m_muId <<
". Cannot initialise!");
789 return StatusCode::FAILURE;
794 toolName =
"MuonSelectionTool_" + muQual;
802 }
else if (IdInt == 7){
812 toolName =
"MuonSelectionHighPtTool_" + muQual;
825 toolName =
"MuonLRTOverlapRemovalTool";
826 m_muonLRTORTool.setTypeAndName(
"CP::MuonLRTOverlapRemovalTool/"+toolName);
837 std::string MuonCP_Run2_TightFix =
"";
839 MuonCP_Run2_TightFix = (
m_muId == xAOD::Muon::Tight) ?
"220725_Preliminary_r22run2" :
"230213_Preliminary_r22run2_loosefix";
842 toolName =
"MuonEfficiencyScaleFactors_" + muQual;
852 toolName =
"MuonEfficiencyScaleFactorsBMHighPt_" + muQual;
862 ATH_MSG_WARNING(
"Requested TTVA SFs without d0sig and z0 cuts. Disabling scale factors as they will not make sense.");
867 toolName =
"MuonTTVAEfficiencyScaleFactors";
880 toolName =
"MuonIsolationScaleFactors_" +
m_muIso_WP;
886 <<
") does not have SFs defined. Will try to find an appropriate fall-back.");
891 <<
" is not supported, and does not have SFs available. Falling back to "
893 <<
" for SF determination.");
895 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! ***");
896 return StatusCode::FAILURE;
916 <<
") does not have SFs defined. Will try to find an appropriate fall-back.");
921 <<
" is not supported, and does not have SFs available. Falling back to "
922 << tmp_muIsoHighPt_WP
923 <<
" for SF determination.");
925 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! ***");
926 return StatusCode::FAILURE;
944 toolName =
"MuonTriggerScaleFactors_" + muQual;
946 if ( muQual==
"LowPt" ) {
947 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!");
970 toolName =
"EleSelLikelihood_" +
m_eleId;
972 if (
m_eleId.find(
"DNN") != std::string::npos) {
980 ATH_MSG_INFO(
"Overriding specified Ele.Id working point in favour of configuration file");
984 return StatusCode::FAILURE;
987 ATH_MSG_WARNING(
" ****************************************************************************");
989 ATH_MSG_WARNING(
" These may be used for loose electron CRs but no scale factors are provided.");
990 ATH_MSG_WARNING(
" ****************************************************************************");
1012 ATH_MSG_INFO(
"Overriding specified EleBaseline.Id working point in favour of configuration file");
1016 return StatusCode::FAILURE;
1029 toolName =
"ElectronLRTOverlapRemovalTool";
1030 m_elecLRTORTool.setTypeAndName(
"CP::ElectronLRTOverlapRemovalTool/"+toolName);
1046 return StatusCode::FAILURE;
1060 return StatusCode::FAILURE;
1075 m_deadHVTool.setTypeAndName(
"AsgDeadHVCellRemovalTool/deadHVTool");
1093 ATH_MSG_INFO(
"Running on Run2 samples; Using egamma SF tools from R21 map ");
1097 toolName =
"AsgElectronEfficiencyCorrectionTool_reco";
1108 std::string eleId = TString(
m_eleId).ReplaceAll(
"AndBLayer",
"BLayer").ReplaceAll(
"LLH",
"").Data();
1110 if (
m_eleId.find(
"DNN") != std::string::npos) {
1111 eleId = TString(eleId).ReplaceAll(
"DNNnoCF",
"").ReplaceAll(
"DNN",
"").ReplaceAll(
"Loose",
"LooseBLayer").Data();
1112 ATH_MSG_WARNING(
"Electron DNN ID working point " <<
m_eleId <<
" doesn't have SFs yet, fall back to " << eleId);
1116 toolName =
"AsgElectronEfficiencyCorrectionTool_id_" +
m_eleId;
1120 std::map<std::string,std::string> corrFNList;
1123 std::string WP = WP_fname.substr(0,WP_fname.find(
":"));
1124 std::string fname = WP_fname.substr(WP_fname.find(
":")+1);
1125 corrFNList[WP] = fname;
1126 ATH_MSG_WARNING(
"Correction file list defined for WP " << WP <<
": " << fname <<
"." );
1127 ATH_MSG_WARNING(
"Will use correction file rather than central map file." );
1132 std::string EleIso(
"");
1133 if (std::find(eSF_keys.begin(), eSF_keys.end(), eleId+
"_"+
m_eleIso_WP) != eSF_keys.end()){
1138 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_iso_*) Your selected electron Iso WP ("
1140 <<
") does not have iso SFs defined. Falling back to "
1142 <<
" for SF calculations");
1146 return StatusCode::FAILURE;
1149 toolName =
"AsgElectronEfficiencyCorrectionTool_iso_" +
m_eleId + EleIso;
1152 if ( (!
m_EG_corrFNList.empty()) && corrFNList.find(EleIso)!=corrFNList.end() ) {
1159 ATH_MSG_WARNING(
"(" << toolName <<
") Your electron Iso WP: " << EleIso<<
" is no longer supported. This will almost certainly cause a crash now.");
1171 if (!
isData() && ((EleIso.find(
"TightTrackOnly_VarRad")!=std::string::npos)||
1172 (EleIso.find(
"TightTrackOnly_FixedRad")!=std::string::npos)||
1173 (EleIso.find(
"Tight_VarRad")!=std::string::npos)||
1174 (EleIso.find(
"Loose_VarRad")!=std::string::npos))) {
1175 if (
isAtlfast())
ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool/"+toolName+
"). Your selected electron Iso WP (" + EleIso +
") don't have AFII SF. Falling back to FullSim");
1188 std::string EleIsohighPt(
"");
1189 if (std::find(eSF_keys.begin(), eSF_keys.end(), eleId+
"_"+
m_eleIsoHighPt_WP) != eSF_keys.end()){
1194 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_iso_*) Your selected high-pT electron Iso WP ("
1196 <<
") does not have iso SFs defined. Falling back to "
1198 <<
" for SF calculations");
1202 return StatusCode::FAILURE;
1205 toolName =
"AsgElectronEfficiencyCorrectionTool_isoHigPt_" +
m_eleId + EleIsohighPt;
1208 if ( (!
m_EG_corrFNList.empty()) && corrFNList.find(EleIsohighPt)!=corrFNList.end() ) {
1216 ATH_MSG_WARNING(
"(" << toolName <<
") Your electron high-pt Iso WP: " << EleIsohighPt <<
" is no longer supported. This will almost certainly cause a crash now.");
1237 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);
1238 std::string triggerEleID =
m_isRun3? TString(eleId).ReplaceAll(
"LooseBLayer",
"Loose").Data() : eleId;
1244 bool pass_isRun3TrigSFFallback =
true;
1245 if (triggerEleID.find(
"Medium") != std::string::npos && triggerEleIso.find(
"Loose") != std::string::npos) {triggerEleID =
"LooseBLayer";}
1246 else if (triggerEleID.find(
"Medium") != std::string::npos && triggerEleIso.find(
"Tight") != std::string::npos) {triggerEleID =
"Tight"; triggerEleIso =
"Tight_VarRad";}
1247 else if (triggerEleID.find(
"Medium") != std::string::npos && triggerEleIso.find(
"HighPtCaloOnly") != std::string::npos) {triggerEleID =
"Tight"; triggerEleIso =
"Tight_VarRad";}
1248 else if (triggerEleID.find(
"Tight") != std::string::npos && triggerEleIso.find(
"Loose") != std::string::npos) {triggerEleID =
"LooseBLayer";}
1249 else if (triggerEleID.find(
"Tight") != std::string::npos && triggerEleIso.find(
"Tight") != std::string::npos) {triggerEleIso=
"Tight_VarRad";}
1250 else if (triggerEleID.find(
"Tight") != std::string::npos && triggerEleIso.find(
"HighPtCaloOnly") != std::string::npos) {triggerEleID =
"Tight"; triggerEleIso =
"Tight_VarRad";}
1251 else if (triggerEleID.find(
"Loose") != std::string::npos && triggerEleIso.find(
"Tight") != std::string::npos) {triggerEleID =
"LooseBLayer"; triggerEleIso =
"Loose_VarRad";}
1252 else if (triggerEleID.find(
"Loose") != std::string::npos && triggerEleIso.find(
"HighPtCaloOnly") != std::string::npos) {triggerEleID =
"LooseBLayer"; triggerEleIso =
"Loose_VarRad";}
1253 else {pass_isRun3TrigSFFallback=
false;}
1254 if(pass_isRun3TrigSFFallback){
1255 ATH_MSG_INFO(
" ************** This is only for testing/studying purpose! ************** ");
1256 ATH_MSG_INFO(
" ************** For official recommendation, please get in contact with the SUSY Bkg Forum ************** ");
1257 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' ");
1258 ATH_MSG_INFO(
"Only for single-lepton trigger scale factor, fall back to Electron ID: -> "<< triggerEleID <<
" with Isolation: " << triggerEleIso);
1270 auto next_pos = [&](
size_t self) {
1271 size_t next = std::string::npos;
1274 if (p23 > self && p23 < next) next = p23;
1275 if (p24 > self && p24 < next) next = p24;
1277 else if (self == p23) {
1278 if (p22 > self && p22 < next) next = p22;
1279 if (p24 > self && p24 < next) next = p24;
1281 else if (self == p24) {
1282 if (p22 > self && p22 < next) next = p22;
1283 if (p23 > self && p23 < next) next = p23;
1288 std::string SFStringSingle22=
"";
1289 std::string SFStringSingle23=
"";
1290 std::string SFStringSingle24=
"";
1298 std::string* toks[] = { &SFStringSingle22, &SFStringSingle23, &SFStringSingle24 };
1299 for (
auto t : toks) {
1300 while (!t->empty() && t->back() ==
'_') t->pop_back();
1307 ATH_MSG_WARNING(
"Unknown or unsupported mcCampaign for Run 3: " <<
m_mcCampaign <<
". Please contact the SUSY Bkg Forum for assistance.");
1308 ATH_MSG_WARNING(
"Falling back to 2024 trigger SFs for single-electron triggers.");
1321 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_trig_singleLep_*) Your selected electron Iso WP ("
1323 <<
") does not have trigger SFs defined. Falling back to "
1325 <<
" for SF calculations");
1329 return StatusCode::FAILURE;
1332 toolName =
"AsgElectronEfficiencyCorrectionTool_trig_singleLep_" + triggerEleID;
1348 toolName =
"AsgElectronEfficiencyCorrectionTool_trigEff_singleLep_" + triggerEleID;
1365 std::map<std::string,std::string> electronTriggerSFMapMixedLepton {
1367 {
"e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose,e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0",
m_electronTriggerSFStringSingle},
1368 {
"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"},
1369 {
"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"},
1370 {
"e17_lhloose,e17_lhloose_nod0",
"MULTI_L_2015_e17_lhloose_2016_2018_e17_lhloose_nod0"},
1371 {
"e12_lhloose,e12_lhloose_nod0",
"MULTI_L_2015_e12_lhloose_2016_2018_e12_lhloose_nod0"},
1372 {
"e7_lhmedium,e7_lhmedium_nod0",
"MULTI_L_2015_e7_lhmedium_2016_2018_e7_lhmedium_nod0"},
1373 {
"e9_lhloose,e9_lhloose_nod0,e12_lhvloose_nod0_L1EM10VH",
"TRI_E_2015_e9_lhloose_2016_e9_lhloose_nod0_2017_2018_e12_lhvloose_nod0_L1EM10VH"}
1379 if (triglist_2017to2018.find(
"2e17_lhvloose_nod0_L12EM15VHI") != std::string::npos) {
1380 electronTriggerSFMapMixedLepton[
"e17_lhvloose_nod0_L1EM15VHI"] =
"DI_E_2015_e12_lhloose_L1EM10VH_2016_e17_lhvloose_nod0_2017_2018_e17_lhvloose_nod0_L1EM15VHI";
1383 std::string triggerMixedEleIso(
"");
1385 for(
auto const& item : electronTriggerSFMapMixedLepton){
1387 if (std::find(eSF_keys.begin(), eSF_keys.end(), item.second+
"_"+eleId+
"_"+
m_eleIso_WP) != eSF_keys.end()){
1392 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_trig_mixLep_*) Your selected electron Iso WP ("
1394 <<
") does not have trigger SFs defined. Falling back to "
1395 << triggerMixedEleIso
1396 <<
" for SF calculations");
1398 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! ***");
1399 return StatusCode::FAILURE;
1402 ATH_MSG_VERBOSE (
"Selected WP: " << item.second <<
"_" << eleId <<
"_" << triggerMixedEleIso);
1404 toolName =
"AsgElectronEfficiencyCorrectionTool_trig_mixLep_" + (item.first).substr(0,8) +
m_eleId;
1407 ATH_CHECK( t_sf->setProperty(
"TriggerKey", item.second) );
1408 ATH_CHECK( t_sf->setProperty(
"IdKey", eleId) );
1409 ATH_CHECK( t_sf->setProperty(
"IsoKey", triggerMixedEleIso) );
1414 ATH_CHECK( t_sf->setProperty(
"OutputLevel", this->msg().level()) );
1417 #ifndef XAOD_STANDALONE
1423 toolName =
"AsgElectronEfficiencyCorrectionTool_trigEff_mixLep_" + (item.first).substr(0,8) +
m_eleId;
1426 ATH_CHECK( t_eff->setProperty(
"TriggerKey",
"Eff_"+item.second) );
1427 ATH_CHECK( t_eff->setProperty(
"IdKey", eleId) );
1428 ATH_CHECK( t_eff->setProperty(
"IsoKey", triggerMixedEleIso) );
1433 ATH_CHECK( t_eff->setProperty(
"OutputLevel", this->msg().level()) );
1436 #ifndef XAOD_STANDALONE
1444 else ATH_MSG_WARNING(
"*** THE ELECTRON TRIGGER SF MIXED AND SF DILEP ARE CURRENTY NOT SUPPORTED IN RUN3 ***");
1446 ATH_MSG_WARNING(
"*** THE ELECTRON CHARGE FLIP SF ARE CURRENTY NOT SUPPORTED ***");
1490 photonIso_forTrigSF =
"TightCaloOnly";
1492 photonIso_forTrigSF = TString(
m_photonIso_WP).ReplaceAll(
"FixedCut",
"").Data();
1504 std::map<std::string,std::string> diphotonTriggerSFMapAsymmetric {
1506 {
"g25_loose,g25_medium_L1EM20VH",
"DI_PH_2015_g25_loose_2016_g25_loose_2017_g25_medium_L1EM20VH_2018_g25_medium_L1EM20VH"},
1507 {
"g35_loose,g35_medium_L1EM20VH",
"DI_PH_2015_g35_loose_2016_g35_loose_2017_g35_medium_L1EM20VH_2018_g35_medium_L1EM20VH"},
1510 for(
auto const& item : diphotonTriggerSFMapAsymmetric){
1512 toolName =
"AsgPhotonEfficiencyCorrectionTool_trigSF_asymm_diphoton_" + (item.first).substr(0,9) + photonIso_forTrigSF;
1514 ATH_CHECK( ph_trigSF->setProperty(
"MapFilePath",
"PhotonEfficiencyCorrection/2015_2018/rel21.2/Summer2020_Rec_v1/map3.txt") );
1515 ATH_CHECK( ph_trigSF->setProperty(
"IsoKey", photonIso_forTrigSF) );
1516 ATH_CHECK( ph_trigSF->setProperty(
"TriggerKey", item.second) );
1517 ATH_CHECK( ph_trigSF->setProperty(
"ForceDataType", 1) );
1518 ATH_CHECK( ph_trigSF->setProperty(
"OutputLevel", this->msg().level()) );
1521 #ifndef XAOD_STANDALONE
1527 toolName =
"AsgPhotonEfficiencyCorrectionTool_trigEff_asymm_diphoton_" + (item.first).substr(0,9) + photonIso_forTrigSF;
1529 ATH_CHECK( ph_trigEff->setProperty(
"MapFilePath",
"PhotonEfficiencyCorrection/2015_2018/rel21.2/Summer2020_Rec_v1/map3.txt") );
1530 ATH_CHECK( ph_trigEff->setProperty(
"IsoKey", photonIso_forTrigSF) );
1531 ATH_CHECK( ph_trigEff->setProperty(
"TriggerKey",
"Eff_"+item.second) );
1532 ATH_CHECK( ph_trigEff->setProperty(
"ForceDataType", 1) );
1533 ATH_CHECK( ph_trigEff->setProperty(
"OutputLevel", this->msg().level()) );
1536 #ifndef XAOD_STANDALONE
1586 m_egammaCalibTool.setTypeAndName(
"CP::EgammaCalibrationAndSmearingTool/EgammaCalibrationAndSmearingTool");
1592 ATH_MSG_WARNING(
"Forcing EgcalibTool to use calibrations for full simulation" );
1611 std::string inputfile =
"";
1613 else if (
m_tauId ==
"rnn001") inputfile =
"SUSYTools/tau_selection_rnn001.conf";
1614 else if (
m_tauId ==
"VeryLoose") inputfile =
"SUSYTools/tau_selection_veryloose.conf";
1615 else if (
m_tauId ==
"Loose") inputfile =
"SUSYTools/tau_selection_loose.conf";
1616 else if (
m_tauId ==
"Medium") inputfile =
"SUSYTools/tau_selection_medium.conf";
1617 else if (
m_tauId ==
"Tight") inputfile =
"SUSYTools/tau_selection_tight.conf";
1620 return StatusCode::FAILURE;
1625 ATH_MSG_ERROR(
"Error while reading tau config file : " << inputfile );
1626 return StatusCode::FAILURE;
1628 else ATH_MSG_DEBUG(
"Successfully read tau config file : " << inputfile );
1635 toolName =
"TauSelectionTool_" +
m_tauId;
1636 m_tauSelTool.setTypeAndName(
"TauAnalysisTools::TauSelectionTool/"+toolName);
1644 std::string inputfile =
"";
1646 else if (
m_tauIdBaseline ==
"rnn001") inputfile =
"SUSYTools/tau_selection_rnn001.conf";
1647 else if (
m_tauIdBaseline ==
"VeryLoose") inputfile =
"SUSYTools/tau_selection_veryloose.conf";
1648 else if (
m_tauIdBaseline ==
"Loose") inputfile =
"SUSYTools/tau_selection_loose.conf";
1649 else if (
m_tauIdBaseline ==
"Medium") inputfile =
"SUSYTools/tau_selection_medium.conf";
1650 else if (
m_tauIdBaseline ==
"Tight") inputfile =
"SUSYTools/tau_selection_tight.conf";
1653 return StatusCode::FAILURE;
1668 toolName =
"TauEffTool_" +
m_tauId;
1669 m_tauEffTool.setTypeAndName(
"TauAnalysisTools::TauEfficiencyCorrectionsTool/"+toolName);
1671 std::vector<int> correction_types;
1674 ANA_MSG_DEBUG(
"Found JetIDWP in tau config file : " << jetIDWP );
1682 ATH_MSG_ERROR(
"Invalid Tau ID in tau config file " << jetIDWP);
1683 return StatusCode::FAILURE;
1686 correction_types.insert(correction_types.end(), {TauAnalysisTools::EfficiencyCorrectionType::SFRecoHadTau,
1687 TauAnalysisTools::EfficiencyCorrectionType::SFJetIDHadTau});
1691 ANA_MSG_DEBUG(
"Found EleIDWP in tau config file : " << eleIDWP );
1692 int ele_id_lvl = -1;
1697 ATH_MSG_INFO(
"No or invalid Ele OR in tau config file " << eleIDWP <<
" will not apply SFs for electro veto" );
1700 if (ele_id_lvl != -1 )
1701 correction_types.insert(correction_types.end(), {TauAnalysisTools::EfficiencyCorrectionType::SFEleIDHadTau,
1702 TauAnalysisTools::EfficiencyCorrectionType::SFEleIDElectron});
1728 return StatusCode::FAILURE;
1733 {
"HLT_tau25_medium1_tracktwo",
"HLT_tau25_medium1_tracktwo"},
1734 {
"HLT_tau35_medium1_tracktwo",
"HLT_tau35_medium1_tracktwo"},
1735 {
"HLT_tau50L1TAU12_medium1_tracktwo",
"HLT_tau50_medium1_tracktwo_L1TAU12"},
1736 {
"HLT_tau60_medium1_tracktwo",
"HLT_tau60_medium1_tracktwo"},
1737 {
"HLT_tau80L1TAU60_medium1_tracktwo",
"HLT_tau80_medium1_tracktwo_L1TAU60"},
1738 {
"HLT_tau125_medium1_tracktwo",
"HLT_tau125_medium1_tracktwo"},
1739 {
"HLT_tau160_medium1_tracktwo",
"HLT_tau160_medium1_tracktwo"},
1740 {
"HLT_tau160L1TAU100_medium1_tracktwo",
"HLT_tau160_medium1_tracktwo_L1TAU100"},
1742 {
"HLT_tau25_medium1_tracktwoEF",
"HLT_tau25_medium1_tracktwoEF"},
1743 {
"HLT_tau35_medium1_tracktwoEF",
"HLT_tau35_medium1_tracktwoEF"},
1744 {
"HLT_tau60_medium1_tracktwoEF",
"HLT_tau60_medium1_tracktwoEF"},
1745 {
"HLT_tau80L1TAU60_medium1_tracktwoEF",
"HLT_tau80_medium1_tracktwoEF_L1TAU60"},
1746 {
"HLT_tau160L1TAU100_medium1_tracktwoEF",
"HLT_tau160_medium1_tracktwoEF_L1TAU100"},
1752 {
"HLT_tau25_mediumRNN_tracktwoMVA",
"HLT_tau25_mediumRNN_tracktwoMVA"},
1753 {
"HLT_tau35_mediumRNN_tracktwoMVA",
"HLT_tau35_mediumRNN_tracktwoMVA"},
1755 {
"HLT_tau160_mediumRNN_tracktwoMVA",
"HLT_tau160_mediumRNN_tracktwoMVA_L1TAU100"},
1757 {
"HLT_tau160_mediumRNN_tracktwoMVA",
"HLT_tau160_mediumRNN_tracktwoMVA_L1eTAU140"}
1762 toolName =
"TauTrigEffTool_" +
m_tauId +
"_" + trigger.first;
1764 ATH_CHECK( tau_trigSF->setProperty(
"EfficiencyCorrectionTypes", std::vector<int>({TauAnalysisTools::SFTriggerHadTau})) );
1765 ATH_CHECK( tau_trigSF->setProperty(
"TriggerName", trigger.first) );
1766 ATH_CHECK( tau_trigSF->setProperty(
"JetIDLevel", iTauID) );
1767 ATH_CHECK( tau_trigSF->setProperty(
"OutputLevel", this->msg().level()) );
1771 else {
ATH_CHECK( tau_trigSF->setProperty(
"Campaign",
"mc20") );}
1781 m_tauSmearingTool.setTypeAndName(
"TauAnalysisTools::TauSmearingTool/TauSmearingTool");
1796 m_tauTruthMatch.setTypeAndName(
"TauAnalysisTools::TauTruthMatchingTool/TauTruthMatch");
1811 std::string jetcollBTag = jetcoll;
1812 if (jetcoll ==
"AntiKt4LCTopoJets") {
1813 ATH_MSG_WARNING(
" *** HACK *** Treating LCTopoJets jets as EMTopo -- use at your own risk!");
1814 jetcollBTag =
"AntiKt4EMTopoJets";
1820 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"));
1824 if (jetcollBTag.find(
"AntiKt4EMTopoJets") == std::string::npos && jetcollBTag.find(
"AntiKt4EMPFlowJets")==std::string::npos) {
1825 ATH_MSG_WARNING(
"** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1826 return StatusCode::FAILURE;
1831 m_btagSelTool.setTypeAndName(
"BTaggingSelectionTool/"+toolName);
1846 if (jetcoll !=
"AntiKt4EMTopoJets" && jetcoll !=
"AntiKt4EMPFlowJets") {
1847 ATH_MSG_WARNING(
"** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1848 return StatusCode::FAILURE;
1851 toolName =
"BTagSelOR_" + jetcollBTag +
m_orBtagWP;
1867 const std::string& BTagColl_TrkJet = trkjetcoll;
1871 ATH_MSG_INFO(
"TrackJet collection set to None: disabling btagging for TrackJets.");
1875 if (trkjetcoll.find(
"AntiKt2PV0TrackJets")==std::string::npos && trkjetcoll.find(
"AntiKtVR30Rmax4Rmin02TrackJets")==std::string::npos) {
1876 ATH_MSG_WARNING(
"** Only AntiKt2PV0TrackJets and AntiKtVR30Rmax4Rmin02TrackJets are supported with FTAG scale factors!");
1877 return StatusCode::FAILURE;
1899 std::string MCshowerID;
1901 ATH_MSG_ERROR(
"Error! m_showerType=-1, which is an error case for FTAG MC/MC SFs." );
1902 return StatusCode::FAILURE;
1906 MCshowerID=
"default";
1916 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1920 MCshowerID=
"default";
1924 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";
1937 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!");
1938 MCshowerID =
"700660";
1941 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1945 MCshowerID=
"default";
1951 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!");
1952 MCshowerID =
"700660";
1955 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1959 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!");
1960 MCshowerID=
"default";
1965 if (jetcoll !=
"AntiKt4EMTopoJets" && jetcoll !=
"AntiKt4EMPFlowJets") {
1966 ATH_MSG_WARNING(
"** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1967 return StatusCode::FAILURE;
1971 m_btagEffTool.setTypeAndName(
"BTaggingEfficiencyTool/"+toolName);
1995 if (trkjetcoll.find(
"AntiKt2PV0TrackJets")==std::string::npos && trkjetcoll.find(
"AntiKtVR30Rmax4Rmin02TrackJets")==std::string::npos) {
1996 ATH_MSG_WARNING(
"** Only AntiKt2PV0TrackJets and AntiKtVR30Rmax4Rmin02TrackJets are supported with FTAG scale factors!");
1997 return StatusCode::FAILURE;
2000 toolName =
"BTagSF_" + trkjetcoll;
2028 m_metMaker.setTypeAndName(
"met::METMaker/METMaker_ST_"+toolName);
2053 m_metSystTool.setTypeAndName(
"met::METSystematicsTool/METSystTool");
2057 ATH_MSG_ERROR(
"Can only have CST *or* TST configured for MET maker. Please unset either METDoCaloSyst or METDoTrkSyst in your config file" );
2058 return StatusCode::FAILURE;
2082 m_metSignif.setTypeAndName(
"met::METSignificance/metSignificance_"+jetname);
2083#ifndef XAOD_STANDALONE
2087 if(jetname !=
"AntiKt4EMPFlow")
2088 ATH_MSG_WARNING(
"METSignificance recommendations only exist for AntiKt4EMPFlow jets, falling back to this.");
2105 if (IdBaselineInt == 4)
2113 if(jetname !=
"AntiKt4EMPFlow")
2114 ATH_MSG_WARNING(
"METSignificance recommendations only exist for AntiKt4EMPFlow jets, falling back to this.");
2117 ATH_CHECK(
m_metSignif.setProperty(
"JetCalibConfig",
"JES_data2017_2016_2015_Recommendation_PFlow_Aug2018_rel21.config") );
2118 ATH_CHECK(
m_metSignif.setProperty(
"JetCalibSequence",
"JetArea_Residual_EtaJES_GSC_Smear") );
2136 m_trigDecTool.setTypeAndName(
"Trig::TrigDecisionTool/TrigDecisionTool");
2144#ifndef XAOD_STANDALONE
2148 m_trigConfTool.setTypeAndName(
"TrigConf::xAODConfigTool/xAODConfigTool");
2167 m_trigMatchingTool.setTypeAndName(
"Trig::MatchFromCompositeTool/TrigMatchFromCompositeTool");
2191 std::string no2e17(
"");
2201 ATH_MSG_DEBUG(
"TrigGlobalEfficiencyCorrectionTool/TrigGlobal_diLep: no2e17 trigger string: " << no2e17 );
2203 std::map<std::string,std::string> triggers_diLep;
2207 triggers_diLep[
"326834-328393"] = no2e17;
2226 std::string no2e17(
"");
2236 ATH_MSG_DEBUG(
"TrigGlobalEfficiencyCorrectionTool/TrigGlobal_multiLep: no2e17 trigger string: " << no2e17 );
2238 std::map<std::string,std::string> triggers_multiLep;
2242 triggers_multiLep[
"326834-328393"] = no2e17;
2279 m_isoCorrTool.setTypeAndName(
"CP::IsolationCorrectionTool/IsoCorrTool");
2285 ATH_CHECK(
m_isoCorrTool.setProperty(
"CorrFile",
"IsolationCorrections/v6/isolation_ptcorrections_rel22_mc20.root") );
2294 m_isoTool.setTypeAndName(
"CP::IsolationSelectionTool/IsoTool");
2320 m_isoHighPtTool.setTypeAndName(
"CP::IsolationSelectionTool/IsoHighPtTool");
2332 m_isoCloseByTool.setTypeAndName(
"CP::IsolationCloseByCorrectionTool/IsoCloseByTool");
2343#ifndef XAOD_ANALYSIS
2356 std::string suffix =
"";
2360 std::string toolName =
"ORTool" + suffix;
2361 ATH_MSG_INFO(
"SUSYTools: Autoconfiguring " << toolName);
2405 m_orToolbox.tauJetORT.setTypeAndName(
"ORUtils::TauJetOverlapTool/" + orFlags.
masterName +
".TauJetORT");
2484 m_pmgSHnjetWeighter.setTypeAndName(
"PMGTools::PMGSherpa22VJetsWeightTool/PMGSHVjetReweighter");
2504 return StatusCode::SUCCESS;