116 ATH_MSG_FATAL(
"You must set the DataSource property to Data, FullSim or AtlfastII !!");
117 ATH_MSG_FATAL(
"Expect segfaults if you're not checking status codes, which you should be !!");
118 return StatusCode::FAILURE;
122 ATH_MSG_INFO(
"SUSYTools subtools already created. Ignoring this call.");
123 ATH_MSG_INFO(
"Note: No longer necessary to explicitly call SUSYToolsInit. Will avoid creating tools again.");
124 return StatusCode::SUCCESS;
132 std::vector<std::string> file_conf;
138 std::vector<std::string> file_ilumi;
144 m_prwTool.setTypeAndName(
"CP::PileupReweightingTool/PrwTool");
164 m_LRTuncTool.setTypeAndName(
"InDet::InclusiveTrackFilterTool/LRTUncTool");
168 ATH_MSG_WARNING(
"Please note that current ID recommendations only cover mc23a and not (yet) mc23d/e!");
169 ATH_CHECK(
m_LRTuncTool.setProperty(
"calibFileLRTEff",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/LargeD0TrackingRecommendations_mc23a.root") );
172 ATH_CHECK(
m_LRTuncTool.setProperty(
"calibFileLRTEff",
"InDetTrackSystematicsTools/CalibData_24.0_2023-v00/LargeD0TrackingRecommendations_20230824.root") );
175 ATH_MSG_INFO(
"Using user-configured LRT uncertainty tool");
179 std::string toolName;
181 std::string jetname,jetcoll,fatjetcoll;
188 jetcoll = jetname +
"Jets";
191 toolName =
"JetCalibTool_" + jetname;
193 std::string JES_config_file, calibseq;
197 return StatusCode::FAILURE;
202 ATH_MSG_WARNING(
"Jet JES/JER recommendations currently not available for fast sim in Run 3, falling back to full sim version");
207 JES_config_file = JESconfig;
211 std::string insitu(
"_Insitu");
212 auto found = calibseq.find(insitu);
213 if(found != std::string::npos){
214 calibseq.erase(found, insitu.length());
220 ATH_MSG_ERROR(
"JMS calibration is not supported yet for R22. Please modify your settings.");
221 return StatusCode::FAILURE;
239 if(fatjetcoll ==
"AnalysisLargeRJets") {
240 ATH_MSG_DEBUG(
"Fall back to calibration for AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets, original name for AnalysisLargeRJets");
241 fatjetcoll =
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets";
243 if (fatjetcoll.size()>3)fatjetcoll.erase(fatjetcoll.size()-4,4);
245 toolName =
"JetFatCalibTool_" +
m_fatJets;
251 if(
isData()) jesCalibSeqFat +=
"_Insitu";
273#ifndef XAOD_STANDALONE
282 ATH_MSG_ERROR(
"Error while reading large-R config file : " << WConfigPath );
283 return StatusCode::FAILURE;
285 else ATH_MSG_DEBUG(
"Successfully read large-R config file : " << WConfigPath );
298#ifndef XAOD_STANDALONE
307 ATH_MSG_ERROR(
"Error while reading large-R config file : " << ZConfigPath );
308 return StatusCode::FAILURE;
310 else ATH_MSG_DEBUG(
"Successfully read large-R config file : " << ZConfigPath );
323#ifndef XAOD_STANDALONE
332 ATH_MSG_ERROR(
"Error while reading large-R config file : " << TopConfigPath );
333 return StatusCode::FAILURE;
335 else ATH_MSG_DEBUG(
"Successfully read large-R config file : " << TopConfigPath );
383 if(jetdef !=
"AntiKt4EMPFlow"){
384 ATH_MSG_WARNING(
"Jet Uncertaintes recommendations only exist for PFlow jets, falling back to AntiKt4EMPFlow");
385 jetdef =
"AntiKt4EMPFlow";
387 toolName =
"JetUncertaintiesTool_" + jetdef;
401 ATH_MSG_INFO(
"Set up Jet PD Smear Uncertainty tool...");
406 if(jetdef !=
"AntiKt4EMPFlow"){
407 ATH_MSG_WARNING(
"Jet Uncertaintes recommendations only exist for PFlow jets, falling back to AntiKt4EMPFlow");
408 jetdef =
"AntiKt4EMPFlow";
410 toolName =
"JetUncertaintiesPDSmearTool_" + jetdef;
417 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.");
418 return StatusCode::FAILURE;
429 ATH_MSG_DEBUG(
"Do not retrieve the jet PD Smearing tool if it is not configured");
443 ATH_MSG_WARNING(
"Uncertainties for large-R jets in mc23 and fast simulation not yet available; be aware uncertainties might be not complete!");
445 toolName =
"JetUncertaintiesTool_" +
m_fatJets;
456 std::vector<std::string> shift_vars = {};
460 auto pos = temp.find(
',');
461 shift_vars.push_back(temp.substr(0, pos));
462 if (pos == std::string::npos)
465 temp = temp.substr(pos + 1);
468 while (!temp.empty() );
480 ATH_MSG_INFO(
"Set up Jet PD Smear Uncertainty tool...");
482 toolName =
"JetUncertaintiesPDSmearTool_" +
m_fatJets;
487 if (
m_fatJetUncConfig.find(
"SimpleJER") != std::string::npos && JERUncPDsmearing){
488 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.");
489 return StatusCode::FAILURE;
500 ATH_MSG_DEBUG(
"Do not retrieve the jet PD Smearing tool if it is not configured");
509 toolName =
"FFJetSmearingTool_" +
m_fatJets;
522 ATH_MSG_INFO(
"The following uncertainties have been defined for the m_fatjetFFSmearingTool");
529 ATH_MSG_INFO(
" Won't initialise Wtagger uncertainty tool for fat jets until we get rec for UFO");
544 ATH_MSG_INFO(
" Won't initialise Ztagger uncertainty tool for fat jets until we get rec for UFO");
559 ATH_MSG_INFO(
" Won't initialise top-tagger uncertainty tool for fat jets until we get rec for UFO");
587 toolName =
"JetCleaningTool";
599 toolName =
"PileupLabelingTool";
603 #ifndef XAOD_STANDALONE
615 toolName =
"JvtMomentTool";
618 #ifndef XAOD_STANDALONE
631 toolName =
"NNJvtMomentTool";
634 #ifndef XAOD_STANDALONE
646 toolName =
"NNJvtSelectionTool";
660 toolName =
"NNJvtEfficiencyTool";
674 toolName =
"fJvtSelectionTool";
688 toolName =
"fJvtEfficiencyTool";
704 std::string muQualBaseline =
"";
706 case static_cast<int>(xAOD::Muon::Quality::VeryLoose): muQualBaseline =
"VeryLoose";
707 ATH_MSG_WARNING(
"No muon scale factors are available for VeryLoose working point.");
709 case static_cast<int>(xAOD::Muon::Quality::Loose): muQualBaseline =
"Loose";
break;
710 case static_cast<int>(xAOD::Muon::Quality::Medium): muQualBaseline =
"Medium";
break;
711 case static_cast<int>(xAOD::Muon::Quality::Tight): muQualBaseline =
"Tight";
break;
712 case 4: muQualBaseline =
"HighPt";
break;
713 case 5: muQualBaseline =
"LowPt";
break;
714 case 6: muQualBaseline =
"LowPtMVA";
break;
715 case 7: muQualBaseline =
"HighPt3Layers";
break;
718 return StatusCode::FAILURE;
729 m_muonCalibTool.setTypeAndName(
"CP::MuonCalibTool/ST_MuonCalibrationTool");
735 if (IdBaselineInt == 4) {
746 toolName =
"MuonSelectionTool_Baseline_" + muQualBaseline;
752 ") that is tighter than the signal cut (" <<
m_muEta <<
"). Please check your config." );
753 return StatusCode::FAILURE;
757 if (IdBaselineInt == 6){
760 }
else if (IdBaselineInt == 7){
769 std::string muQual =
"";
771 case static_cast<int>(xAOD::Muon::Quality::VeryLoose): muQual =
"VeryLoose";
772 ATH_MSG_WARNING(
"No muon scale factors are available for VeryLoose working point.");
774 case static_cast<int>(xAOD::Muon::Quality::Loose): muQual =
"Loose";
break;
775 case static_cast<int>(xAOD::Muon::Quality::Medium): muQual =
"Medium";
break;
776 case static_cast<int>(xAOD::Muon::Quality::Tight): muQual =
"Tight";
break;
777 case 4: muQual =
"HighPt";
break;
778 case 5: muQual =
"LowPt";
break;
779 case 6: muQual =
"LowPtMVA";
break;
780 case 7: muQual =
"HighPt3Layers";
break;
782 ATH_MSG_ERROR(
"Invalid muon working point provided: " <<
m_muId <<
". Cannot initialise!");
783 return StatusCode::FAILURE;
788 toolName =
"MuonSelectionTool_" + muQual;
796 }
else if (IdInt == 7){
806 toolName =
"MuonSelectionHighPtTool_" + muQual;
819 toolName =
"MuonLRTOverlapRemovalTool";
820 m_muonLRTORTool.setTypeAndName(
"CP::MuonLRTOverlapRemovalTool/"+toolName);
831 std::string MuonCP_Run2_TightFix =
"";
833 MuonCP_Run2_TightFix = (
m_muId ==
static_cast<int>(xAOD::Muon::Quality::Tight)) ?
"220725_Preliminary_r22run2" :
"230213_Preliminary_r22run2_loosefix";
836 toolName =
"MuonEfficiencyScaleFactors_" + muQual;
846 toolName =
"MuonEfficiencyScaleFactorsBMHighPt_" + muQual;
856 ATH_MSG_WARNING(
"Requested TTVA SFs without d0sig and z0 cuts. Disabling scale factors as they will not make sense.");
861 toolName =
"MuonTTVAEfficiencyScaleFactors";
874 toolName =
"MuonIsolationScaleFactors_" +
m_muIso_WP;
880 <<
") does not have SFs defined. Will try to find an appropriate fall-back.");
885 <<
" is not supported, and does not have SFs available. Falling back to "
887 <<
" for SF determination.");
889 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! ***");
890 return StatusCode::FAILURE;
910 <<
") does not have SFs defined. Will try to find an appropriate fall-back.");
915 <<
" is not supported, and does not have SFs available. Falling back to "
916 << tmp_muIsoHighPt_WP
917 <<
" for SF determination.");
919 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! ***");
920 return StatusCode::FAILURE;
938 toolName =
"MuonTriggerScaleFactors_" + muQual;
940 if ( muQual==
"LowPt" ) {
941 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!");
965 toolName =
"EleSelLikelihood_" +
m_eleId;
967 if (
m_eleId.find(
"DNN") != std::string::npos) {
975 ATH_MSG_INFO(
"Overriding specified Ele.Id working point in favour of configuration file");
979 return StatusCode::FAILURE;
982 ATH_MSG_WARNING(
" ****************************************************************************");
984 ATH_MSG_WARNING(
" These may be used for loose electron CRs but no scale factors are provided.");
985 ATH_MSG_WARNING(
" ****************************************************************************");
1007 ATH_MSG_INFO(
"Overriding specified EleBaseline.Id working point in favour of configuration file");
1011 return StatusCode::FAILURE;
1024 toolName =
"ElectronLRTOverlapRemovalTool";
1025 m_elecLRTORTool.setTypeAndName(
"CP::ElectronLRTOverlapRemovalTool/"+toolName);
1041 return StatusCode::FAILURE;
1055 return StatusCode::FAILURE;
1070 m_deadHVTool.setTypeAndName(
"AsgDeadHVCellRemovalTool/deadHVTool");
1089 ATH_MSG_INFO(
"Running on Run2 samples; Using egamma SF tools from R21 map for trigger");
1092 ATH_MSG_INFO(
"Running on Run3 samples; Using different egamma SF tools map for trigger");
1096 toolName =
"AsgElectronEfficiencyCorrectionTool_reco";
1108 std::string eleId = TString(
m_eleId).ReplaceAll(
"AndBLayer",
"BLayer").ReplaceAll(
"LLH",
"LH").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(
"(CP::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(
"(CP::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.");
1239 std::string triggerEleID =
m_isRun3? TString(eleId).ReplaceAll(
"LooseBLayer",
"Loose").ReplaceAll(
"LH",
"").Data() : TString(eleId).ReplaceAll(
"LH",
"").Data();
1245 bool pass_isRun3TrigSFFallback =
true;
1246 if (triggerEleID.find(
"Medium") != std::string::npos && triggerEleIso.find(
"Loose") != std::string::npos) {triggerEleID =
"LooseBLayer";}
1247 else if (triggerEleID.find(
"Medium") != std::string::npos && triggerEleIso.find(
"Tight") != std::string::npos) {triggerEleID =
"Tight"; triggerEleIso =
"Tight_VarRad";}
1248 else if (triggerEleID.find(
"Medium") != std::string::npos && triggerEleIso.find(
"HighPtCaloOnly") != std::string::npos) {triggerEleID =
"Tight"; triggerEleIso =
"Tight_VarRad";}
1249 else if (triggerEleID.find(
"Tight") != std::string::npos && triggerEleIso.find(
"Loose") != std::string::npos) {triggerEleID =
"LooseBLayer";}
1250 else if (triggerEleID.find(
"Tight") != std::string::npos && triggerEleIso.find(
"Tight") != std::string::npos) {triggerEleIso=
"Tight_VarRad";}
1251 else if (triggerEleID.find(
"Tight") != std::string::npos && triggerEleIso.find(
"HighPtCaloOnly") != std::string::npos) {triggerEleID =
"Tight"; triggerEleIso =
"Tight_VarRad";}
1252 else if (triggerEleID.find(
"Loose") != std::string::npos && triggerEleIso.find(
"Tight") != std::string::npos) {triggerEleID =
"LooseBLayer"; triggerEleIso =
"Loose_VarRad";}
1253 else if (triggerEleID.find(
"Loose") != std::string::npos && triggerEleIso.find(
"HighPtCaloOnly") != std::string::npos) {triggerEleID =
"LooseBLayer"; triggerEleIso =
"Loose_VarRad";}
1254 else {pass_isRun3TrigSFFallback=
false;}
1255 if(pass_isRun3TrigSFFallback){
1256 ATH_MSG_INFO(
" ************** This is only for testing/studying purpose! ************** ");
1257 ATH_MSG_INFO(
" ************** For official recommendation, please get in contact with the SUSY Bkg Forum ************** ");
1258 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' ");
1259 ATH_MSG_INFO(
"Only for single-lepton trigger scale factor, fall back to Electron ID: -> "<< triggerEleID <<
" with Isolation: " << triggerEleIso);
1271 auto next_pos = [&](
size_t self) {
1272 size_t next = std::string::npos;
1275 if (p23 > self && p23 < next) next = p23;
1276 if (p24 > self && p24 < next) next = p24;
1278 else if (self == p23) {
1279 if (p22 > self && p22 < next) next = p22;
1280 if (p24 > self && p24 < next) next = p24;
1282 else if (self == p24) {
1283 if (p22 > self && p22 < next) next = p22;
1284 if (p23 > self && p23 < next) next = p23;
1289 std::string SFStringSingle22=
"";
1290 std::string SFStringSingle23=
"";
1291 std::string SFStringSingle24=
"";
1299 std::string* toks[] = { &SFStringSingle22, &SFStringSingle23, &SFStringSingle24 };
1300 for (
auto t : toks) {
1301 while (!t->empty() && t->back() ==
'_') t->pop_back();
1308 ATH_MSG_WARNING(
"Unknown or unsupported mcCampaign for Run 3: " <<
m_mcCampaign <<
". Please contact the SUSY Bkg Forum for assistance.");
1309 ATH_MSG_WARNING(
"Falling back to 2024 trigger SFs for single-electron triggers.");
1317 if (std::find(eSF_keys_trigger.begin(), eSF_keys_trigger.end(),
m_electronTriggerSFStringSingle+
"_"+triggerEleID+
"_"+triggerEleIso) != eSF_keys_trigger.end()){
1322 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_trig_singleLep_*) Your selected electron Iso WP ("
1324 <<
") does not have trigger SFs defined. Falling back to "
1326 <<
" for SF calculations");
1330 return StatusCode::FAILURE;
1333 toolName =
"AsgElectronEfficiencyCorrectionTool_trig_singleLep_" + triggerEleID;
1349 toolName =
"AsgElectronEfficiencyCorrectionTool_trigEff_singleLep_" + triggerEleID;
1366 std::map<std::string,std::string> electronTriggerSFMapMixedLepton {
1368 {
"e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose,e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0",
m_electronTriggerSFStringSingle},
1369 {
"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"},
1370 {
"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"},
1371 {
"e17_lhloose,e17_lhloose_nod0",
"MULTI_L_2015_e17_lhloose_2016_2018_e17_lhloose_nod0"},
1372 {
"e12_lhloose,e12_lhloose_nod0",
"MULTI_L_2015_e12_lhloose_2016_2018_e12_lhloose_nod0"},
1373 {
"e7_lhmedium,e7_lhmedium_nod0",
"MULTI_L_2015_e7_lhmedium_2016_2018_e7_lhmedium_nod0"},
1374 {
"e9_lhloose,e9_lhloose_nod0,e12_lhvloose_nod0_L1EM10VH",
"TRI_E_2015_e9_lhloose_2016_e9_lhloose_nod0_2017_2018_e12_lhvloose_nod0_L1EM10VH"}
1380 if (triglist_2017to2018.find(
"2e17_lhvloose_nod0_L12EM15VHI") != std::string::npos) {
1381 electronTriggerSFMapMixedLepton[
"e17_lhvloose_nod0_L1EM15VHI"] =
"DI_E_2015_e12_lhloose_L1EM10VH_2016_e17_lhvloose_nod0_2017_2018_e17_lhvloose_nod0_L1EM15VHI";
1384 std::string triggerMixedEleIso(
"");
1386 for(
auto const& item : electronTriggerSFMapMixedLepton){
1388 if (std::find(eSF_keys_trigger.begin(), eSF_keys_trigger.end(), item.second+
"_"+triggerEleID+
"_"+
m_eleIso_WP) != eSF_keys_trigger.end()){
1390 }
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()){
1393 ATH_MSG_WARNING(
"(AsgElectronEfficiencyCorrectionTool_trig_mixLep_*) Your selected electron Iso WP ("
1395 <<
") does not have trigger SFs defined. Falling back to "
1396 << triggerMixedEleIso
1397 <<
" for SF calculations");
1399 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! ***");
1400 return StatusCode::FAILURE;
1403 ATH_MSG_VERBOSE (
"Selected WP: " << item.second <<
"_" << triggerEleID <<
"_" << triggerMixedEleIso);
1405 toolName =
"AsgElectronEfficiencyCorrectionTool_trig_mixLep_" + (item.first).substr(0,8) +
m_eleId;
1408 ATH_CHECK( t_sf->setProperty(
"TriggerKey", item.second) );
1409 ATH_CHECK( t_sf->setProperty(
"IdKey", triggerEleID) );
1410 ATH_CHECK( t_sf->setProperty(
"IsoKey", triggerMixedEleIso) );
1415 ATH_CHECK( t_sf->setProperty(
"OutputLevel", this->msg().level()) );
1418 #ifndef XAOD_STANDALONE
1424 toolName =
"AsgElectronEfficiencyCorrectionTool_trigEff_mixLep_" + (item.first).substr(0,8) +
m_eleId;
1427 ATH_CHECK( t_eff->setProperty(
"TriggerKey",
"Eff_"+item.second) );
1428 ATH_CHECK( t_eff->setProperty(
"IdKey", triggerEleID) );
1429 ATH_CHECK( t_eff->setProperty(
"IsoKey", triggerMixedEleIso) );
1434 ATH_CHECK( t_eff->setProperty(
"OutputLevel", this->msg().level()) );
1437 #ifndef XAOD_STANDALONE
1445 else ATH_MSG_WARNING(
"*** THE ELECTRON TRIGGER SF MIXED AND SF DILEP ARE CURRENTY NOT SUPPORTED IN RUN3 ***");
1447 ATH_MSG_WARNING(
"*** THE ELECTRON CHARGE FLIP SF ARE CURRENTY NOT SUPPORTED ***");
1463 ATH_CHECK(
m_photonEfficiencySFTool.setProperty(
"MapFilePath",
"PhotonEfficiencyCorrection/2015_2025/rel22.2/2026_Run3Consolidated_Recommendation_v1/map0.txt") );
1476 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") );
1491 photonIso_forTrigSF =
"TightCaloOnly";
1493 photonIso_forTrigSF = TString(
m_photonIso_WP).ReplaceAll(
"FixedCut",
"").Data();
1505 std::map<std::string,std::string> diphotonTriggerSFMapAsymmetric {
1507 {
"g25_loose,g25_medium_L1EM20VH",
"DI_PH_2015_g25_loose_2016_g25_loose_2017_g25_medium_L1EM20VH_2018_g25_medium_L1EM20VH"},
1508 {
"g35_loose,g35_medium_L1EM20VH",
"DI_PH_2015_g35_loose_2016_g35_loose_2017_g35_medium_L1EM20VH_2018_g35_medium_L1EM20VH"},
1511 for(
auto const& item : diphotonTriggerSFMapAsymmetric){
1513 toolName =
"AsgPhotonEfficiencyCorrectionTool_trigSF_asymm_diphoton_" + (item.first).substr(0,9) + photonIso_forTrigSF;
1515 ATH_CHECK( ph_trigSF->setProperty(
"MapFilePath",
"PhotonEfficiencyCorrection/2015_2018/rel21.2/Summer2020_Rec_v1/map3.txt") );
1516 ATH_CHECK( ph_trigSF->setProperty(
"IsoKey", photonIso_forTrigSF) );
1517 ATH_CHECK( ph_trigSF->setProperty(
"TriggerKey", item.second) );
1518 ATH_CHECK( ph_trigSF->setProperty(
"ForceDataType", 1) );
1519 ATH_CHECK( ph_trigSF->setProperty(
"OutputLevel", this->msg().level()) );
1522 #ifndef XAOD_STANDALONE
1528 toolName =
"AsgPhotonEfficiencyCorrectionTool_trigEff_asymm_diphoton_" + (item.first).substr(0,9) + photonIso_forTrigSF;
1530 ATH_CHECK( ph_trigEff->setProperty(
"MapFilePath",
"PhotonEfficiencyCorrection/2015_2018/rel21.2/Summer2020_Rec_v1/map3.txt") );
1531 ATH_CHECK( ph_trigEff->setProperty(
"IsoKey", photonIso_forTrigSF) );
1532 ATH_CHECK( ph_trigEff->setProperty(
"TriggerKey",
"Eff_"+item.second) );
1533 ATH_CHECK( ph_trigEff->setProperty(
"ForceDataType", 1) );
1534 ATH_CHECK( ph_trigEff->setProperty(
"OutputLevel", this->msg().level()) );
1537 #ifndef XAOD_STANDALONE
1587 m_egammaCalibTool.setTypeAndName(
"CP::EgammaCalibrationAndSmearingTool/EgammaCalibrationAndSmearingTool");
1593 ATH_MSG_WARNING(
"Forcing EgcalibTool to use calibrations for full simulation" );
1615 return StatusCode::FAILURE;
1624 toolName =
"TauSelectionTool_" +
m_tauId;
1625 m_tauSelTool.setTypeAndName(
"TauAnalysisTools::TauSelectionTool/"+toolName);
1644 ANA_MSG_DEBUG(
"Found JetIDWP in tau config file : " << jetIDWP );
1657 ATH_MSG_ERROR(
"Invalid Tau ID in tau config file " << jetIDWP);
1658 return StatusCode::FAILURE;
1662 ANA_MSG_DEBUG(
"Found EleIDWP in tau config file : " << eleIDWP );
1663 int ele_id_lvl = -1;
1668 ATH_MSG_INFO(
"No or invalid Ele OR in tau config file " << eleIDWP <<
" will not apply SFs for electro veto" );
1671 ATH_MSG_WARNING(
"EleOR with Tight TauID is currently not supported, please discuss with TauCP!");
1674 int jet_id_lvl_fb = jet_id_lvl;
1677 ATH_MSG_WARNING(
"Configuring fallback RNN ID SF for GNTau config, do not use in production!");
1686 toolName =
"TauEffTool_" +
m_tauId;
1687 m_tauEffTool.setTypeAndName(
"TauAnalysisTools::TauEfficiencyCorrectionsTool/"+toolName);
1689 std::vector<int> correction_types;
1691 correction_types.insert(correction_types.end(), {TauAnalysisTools::EfficiencyCorrectionType::SFRecoHadTau,
1692 TauAnalysisTools::EfficiencyCorrectionType::SFJetIDHadTau});
1695 if (ele_id_lvl != -1 )
1696 correction_types.insert(correction_types.end(), {TauAnalysisTools::EfficiencyCorrectionType::SFEleIDHadTau,
1697 TauAnalysisTools::EfficiencyCorrectionType::SFEleIDElectron});
1718 {
"HLT_tau25_medium1_tracktwo",
"HLT_tau25_medium1_tracktwo"},
1719 {
"HLT_tau35_medium1_tracktwo",
"HLT_tau35_medium1_tracktwo"},
1720 {
"HLT_tau50L1TAU12_medium1_tracktwo",
"HLT_tau50_medium1_tracktwo_L1TAU12"},
1721 {
"HLT_tau60_medium1_tracktwo",
"HLT_tau60_medium1_tracktwo"},
1722 {
"HLT_tau80L1TAU60_medium1_tracktwo",
"HLT_tau80_medium1_tracktwo_L1TAU60"},
1723 {
"HLT_tau125_medium1_tracktwo",
"HLT_tau125_medium1_tracktwo"},
1724 {
"HLT_tau160_medium1_tracktwo",
"HLT_tau160_medium1_tracktwo"},
1725 {
"HLT_tau160L1TAU100_medium1_tracktwo",
"HLT_tau160_medium1_tracktwo_L1TAU100"},
1727 {
"HLT_tau25_medium1_tracktwoEF",
"HLT_tau25_medium1_tracktwoEF"},
1728 {
"HLT_tau35_medium1_tracktwoEF",
"HLT_tau35_medium1_tracktwoEF"},
1729 {
"HLT_tau60_medium1_tracktwoEF",
"HLT_tau60_medium1_tracktwoEF"},
1730 {
"HLT_tau80L1TAU60_medium1_tracktwoEF",
"HLT_tau80_medium1_tracktwoEF_L1TAU60"},
1731 {
"HLT_tau160L1TAU100_medium1_tracktwoEF",
"HLT_tau160_medium1_tracktwoEF_L1TAU100"},
1739 {
"HLT_tau25_mediumRNN_tracktwoMVA",
"HLT_tau25_mediumRNN_tracktwoMVA"},
1740 {
"HLT_tau35_mediumRNN_tracktwoMVA",
"HLT_tau35_mediumRNN_tracktwoMVA"},
1742 {
"HLT_tau160_mediumRNN_tracktwoMVA",
"HLT_tau160_mediumRNN_tracktwoMVA_L1TAU100"},
1744 {
"HLT_tau160_mediumRNN_tracktwoMVA",
"HLT_tau160_mediumRNN_tracktwoMVA_L1eTAU140"}
1749 toolName =
"TauTrigEffTool_" +
m_tauId +
"_" + trigger.first;
1751 ATH_CHECK( tau_trigSF->setProperty(
"EfficiencyCorrectionTypes", std::vector<int>({TauAnalysisTools::SFTriggerHadTau})) );
1752 ATH_CHECK( tau_trigSF->setProperty(
"TriggerName", trigger.first) );
1753 ATH_CHECK( tau_trigSF->setProperty(
"JetIDLevel", jet_id_lvl_fb) );
1754 ATH_CHECK( tau_trigSF->setProperty(
"EleIDLevel", ele_id_lvl) );
1755 ATH_CHECK( tau_trigSF->setProperty(
"OutputLevel", this->msg().level()) );
1759 else {
ATH_CHECK( tau_trigSF->setProperty(
"Campaign",
"mc20") );}
1769 m_tauSmearingTool.setTypeAndName(
"TauAnalysisTools::TauSmearingTool/TauSmearingTool");
1784 m_tauTruthMatch.setTypeAndName(
"TauAnalysisTools::TauTruthMatchingTool/TauTruthMatch");
1799 std::string jetcollBTag = jetcoll;
1800 if (jetcoll ==
"AntiKt4LCTopoJets") {
1801 ATH_MSG_WARNING(
" *** HACK *** Treating LCTopoJets jets as EMTopo -- use at your own risk!");
1802 jetcollBTag =
"AntiKt4EMTopoJets";
1808 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"));
1812 if (jetcollBTag.find(
"AntiKt4EMTopoJets") == std::string::npos && jetcollBTag.find(
"AntiKt4EMPFlowJets")==std::string::npos) {
1813 ATH_MSG_WARNING(
"** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1814 return StatusCode::FAILURE;
1819 m_btagSelTool.setTypeAndName(
"BTaggingSelectionTool/"+toolName);
1834 if (jetcoll !=
"AntiKt4EMTopoJets" && jetcoll !=
"AntiKt4EMPFlowJets") {
1835 ATH_MSG_WARNING(
"** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1836 return StatusCode::FAILURE;
1839 toolName =
"BTagSelOR_" + jetcollBTag +
m_orBtagWP;
1855 const std::string& BTagColl_TrkJet = trkjetcoll;
1859 ATH_MSG_INFO(
"TrackJet collection set to None: disabling btagging for TrackJets.");
1863 if (trkjetcoll.find(
"AntiKt2PV0TrackJets")==std::string::npos && trkjetcoll.find(
"AntiKtVR30Rmax4Rmin02TrackJets")==std::string::npos) {
1864 ATH_MSG_WARNING(
"** Only AntiKt2PV0TrackJets and AntiKtVR30Rmax4Rmin02TrackJets are supported with FTAG scale factors!");
1865 return StatusCode::FAILURE;
1887 std::string MCshowerID;
1889 ATH_MSG_ERROR(
"Error! m_showerType=-1, which is an error case for FTAG MC/MC SFs." );
1890 return StatusCode::FAILURE;
1894 MCshowerID=
"default";
1904 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1908 MCshowerID=
"default";
1912 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1917 MCshowerID=
"default";
1925 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!");
1926 MCshowerID =
"700660";
1929 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1933 MCshowerID=
"default";
1939 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!");
1940 MCshowerID =
"700660";
1943 ATH_MSG_WARNING(
"Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1947 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!");
1948 MCshowerID=
"default";
1953 if (jetcoll !=
"AntiKt4EMTopoJets" && jetcoll !=
"AntiKt4EMPFlowJets") {
1954 ATH_MSG_WARNING(
"** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1955 return StatusCode::FAILURE;
1959 m_btagEffTool.setTypeAndName(
"BTaggingEfficiencyTool/"+toolName);
1983 if (trkjetcoll.find(
"AntiKt2PV0TrackJets")==std::string::npos && trkjetcoll.find(
"AntiKtVR30Rmax4Rmin02TrackJets")==std::string::npos) {
1984 ATH_MSG_WARNING(
"** Only AntiKt2PV0TrackJets and AntiKtVR30Rmax4Rmin02TrackJets are supported with FTAG scale factors!");
1985 return StatusCode::FAILURE;
1988 toolName =
"BTagSF_" + trkjetcoll;
2019 m_metMaker.setTypeAndName(
"met::METMaker/METMaker_ST_"+toolName);
2044 m_metSystTool.setTypeAndName(
"met::METSystematicsTool/METSystTool");
2048 ATH_MSG_ERROR(
"Can only have CST *or* TST configured for MET maker. Please unset either METDoCaloSyst or METDoTrkSyst in your config file" );
2049 return StatusCode::FAILURE;
2073 m_metSignif.setTypeAndName(
"met::METSignificance/metSignificance_"+jetname);
2074#ifndef XAOD_STANDALONE
2078 if(jetname !=
"AntiKt4EMPFlow")
2079 ATH_MSG_WARNING(
"METSignificance recommendations only exist for AntiKt4EMPFlow jets, falling back to this.");
2096 if (IdBaselineInt == 4)
2104 if(jetname !=
"AntiKt4EMPFlow")
2105 ATH_MSG_WARNING(
"METSignificance recommendations only exist for AntiKt4EMPFlow jets, falling back to this.");
2108 ATH_CHECK(
m_metSignif.setProperty(
"JetCalibConfig",
"JES_data2017_2016_2015_Recommendation_PFlow_Aug2018_rel21.config") );
2109 ATH_CHECK(
m_metSignif.setProperty(
"JetCalibSequence",
"JetArea_Residual_EtaJES_GSC_Smear") );
2127 m_trigDecTool.setTypeAndName(
"Trig::TrigDecisionTool/TrigDecisionTool");
2135#ifndef XAOD_STANDALONE
2139 m_trigConfTool.setTypeAndName(
"TrigConf::xAODConfigTool/xAODConfigTool");
2158 m_trigMatchingTool.setTypeAndName(
"Trig::MatchFromCompositeTool/TrigMatchFromCompositeTool");
2182 std::string no2e17(
"");
2192 ATH_MSG_DEBUG(
"TrigGlobalEfficiencyCorrectionTool/TrigGlobal_diLep: no2e17 trigger string: " << no2e17 );
2194 std::map<std::string,std::string> triggers_diLep;
2198 triggers_diLep[
"326834-328393"] = no2e17;
2217 std::string no2e17(
"");
2227 ATH_MSG_DEBUG(
"TrigGlobalEfficiencyCorrectionTool/TrigGlobal_multiLep: no2e17 trigger string: " << no2e17 );
2229 std::map<std::string,std::string> triggers_multiLep;
2233 triggers_multiLep[
"326834-328393"] = no2e17;
2270 m_isoCorrTool.setTypeAndName(
"CP::IsolationCorrectionTool/IsoCorrTool");
2276 ATH_CHECK(
m_isoCorrTool.setProperty(
"CorrFile",
"IsolationCorrections/v6/isolation_ptcorrections_rel22_mc20.root") );
2285 m_isoTool.setTypeAndName(
"CP::IsolationSelectionTool/IsoTool");
2311 m_isoHighPtTool.setTypeAndName(
"CP::IsolationSelectionTool/IsoHighPtTool");
2323 m_isoCloseByTool.setTypeAndName(
"CP::IsolationCloseByCorrectionTool/IsoCloseByTool");
2334#ifndef XAOD_ANALYSIS
2347 std::string suffix =
"";
2351 std::string toolName =
"ORTool" + suffix;
2352 ATH_MSG_INFO(
"SUSYTools: Autoconfiguring " << toolName);
2369 orFlags.outputPassValue =
true;
2372 orFlags.doEleEleOR =
true;
2373 }
else orFlags.doEleEleOR =
false;
2374 orFlags.doElectrons =
true;
2375 orFlags.doMuons =
true;
2376 orFlags.doJets =
true;
2396 m_orToolbox.tauJetORT.setTypeAndName(
"ORUtils::TauJetOverlapTool/" + orFlags.masterName +
".TauJetORT");
2475 m_pmgSHnjetWeighter.setTypeAndName(
"PMGTools::PMGSherpa22VJetsWeightTool/PMGSHVjetReweighter");
2495 return StatusCode::SUCCESS;