ATLAS Offline Software
BJetTriggerByYearContent.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
3 from Campaigns.Utils import getMCCampaign, Campaign
4 from PyUtils.Logging import logging
5 msg = logging.getLogger('BJetTriggerByYearContent')
6 msg.setLevel(logging.INFO)
7 
8 def getDataYear(flags):
9  if flags.Input.isMC:
10  campaign = getMCCampaign(flags.Input.Files)
11  dataYear = {
12  Campaign.MC20a: 2016, # prefer over 2015
13  Campaign.MC20d: 2017,
14  Campaign.MC20e: 2018,
15  Campaign.MC21a: 2022,
16  Campaign.MC23a: 2022,
17  Campaign.MC23c: 2023,
18  Campaign.MC23d: 2023,
19  Campaign.MC23e: 2024,
20  Campaign.MC23g: 2025,
21  Campaign.PhaseII: 2030,
22  }[campaign]
23  else:
24  dataYear = flags.Input.DataYear
25  return dataYear
26 
27 
29  if flags.Trigger.EDMVersion == 2:
30  triggerContent = [
31  "HLT_xAOD__BTaggingContainer_HLTBjetFex",
32  "HLT_xAOD__BTaggingContainer_HLTBjetFexAux.MV2c00_discriminant.MV2c10_discriminant.MV2c20_discriminant.BTagBtagToJetAssociator",
33  ]
34  jetCollections = {
35  2016: [
36  # Jet collections needed for HLT jet matching
37  "HLT_xAOD__JetContainer_a4tcemsubjesFS",
38  "HLT_xAOD__JetContainer_a4tcemsubjesFSAux.pt.eta.phi.m",
39  # B-jet collections needed for HLT jet matching
40  "HLT_xAOD__JetContainer_EFJet", # 2015
41  "HLT_xAOD__JetContainer_EFJetAux.pt.eta.phi.m",
42  "HLT_xAOD__JetContainer_SplitJet",
43  "HLT_xAOD__JetContainer_SplitJetAux.pt.eta.phi.m",
44  ],
45  2017: [
46  # Jet collections needed for HLT jet matching
47  "HLT_xAOD__JetContainer_a4tcemsubjesISFS",
48  "HLT_xAOD__JetContainer_a4tcemsubjesISFSAux.pt.eta.phi.m",
49  # B-jet collections needed for HLT jet matching
50  "HLT_xAOD__JetContainer_SplitJet", # For Btag->Split->GSC matching in 2017 and 2018, and low-pt 2b2j in 2018
51  "HLT_xAOD__JetContainer_SplitJetAux.pt.eta.phi.m",
52  "HLT_xAOD__JetContainer_GSCJet",
53  "HLT_xAOD__JetContainer_GSCJetAux.pt.eta.phi.m",
54  ],
55  }
56  jetCollections[2015] = jetCollections[2016]
57  jetCollections[2018] = jetCollections[2017]
58 
59  year = getDataYear(flags)
60  msg.debug(f'Configured b-jet trigger content for {year}')
61 
62  triggerContent += jetCollections[year]
63  return triggerContent
64  elif flags.Trigger.EDMVersion == 3:
65  triggerContent = [
66  "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_bJets",
67  "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_BTagging",
68  ]
69 
70  year = getDataYear(flags)
71  msg.debug(f'Configured Run 3 b-jet trigger content for {year}')
72 
73  btagstrs = []
74  btaggers = {
75  2022: ['DL1d20211216'],
76  2023: ['GN120220813'],
77  2024: ['GN220240122'],
78  2025: ['GN220240122'],
79  2026: ['GN220240122'],
80  }[year]
81  for btagger in btaggers:
82  btagstrs.append('.'.join([f'{btagger}_{p}' for p in ['pb','pc','pu']]))
83  jetstrs = btagstrs + ['pt', 'eta', 'phi', 'm']
84  btagvars = '.'.join(btagstrs)
85  jetvars = '.'.join(jetstrs)
86  triggerContent.append(f"HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_BTaggingAux.{btagvars}")
87  triggerContent.append(f"HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_bJetsAux.{jetvars}")
88  return triggerContent
89 
90  elif flags.Trigger.EDMVersion >= 4:
91  triggerContent = ["HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_bJets"]
92 
93  year = getDataYear(flags)
94  msg.debug(f'Configured Run 4 b-jet trigger content for {year}')
95 
96  jetstrs = ['pt', 'eta', 'phi', 'm']
97  btaggers = {
98  2030: ['GN220240122'], # Some day we'll have something amazing here
99  }[year]
100  for btagger in btaggers:
101  jetstrs.append('.'.join([f'{btagger}_{p}' for p in ['pb','pc','pu']]))
102  jetvars = '.'.join(jetstrs)
103  triggerContent.append(f"HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_bJetsAux.{jetvars}")
104  return triggerContent
105 
106  elif flags.Trigger.EDMVersion == -1:
107  # Allow for undefined trigger content -- no RDOtoRDOTrigger run
108  msg.debug('Received EDMVersion=-1: no trigger info available. Returning empty b-jet trigger content')
109  return []
110 
111  raise ValueError(f"Unsupported EDM version {flags.Trigger.EDMVersion} determined")
BJetTriggerByYearContent.getBJetTriggerContent
def getBJetTriggerContent(flags)
Definition: BJetTriggerByYearContent.py:28
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
BJetTriggerByYearContent.getDataYear
def getDataYear(flags)
Definition: BJetTriggerByYearContent.py:8
python.Utils.getMCCampaign
def getMCCampaign(files)
Definition: Tools/Campaigns/python/Utils.py:38