ATLAS Offline Software
Chains.py
Go to the documentation of this file.
1 #
2 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 #
4 
5 # NB: this file is autogenerated, do not edit directly
6 
7 class Chains:
8  def get_menu_dict(self):
9  d = {}
10 
11  d["electron"] = {
12  "chains": [
13  'HLT_e26_idperf_loose_L1eEM26M',
14  'HLT_e26_idperf_tight_L1eEM26M',
15  'HLT_e28_idperf_loose_L1eEM28M',
16 
17  'HLT_e5_idperf_tight_L1eEM5',
18  'HLT_e5_idperf_tight_nogsf_L1eEM5',
19 
20  ],
21  "signature": ['Egamma'],
22  "menu": ''
23  }
24 
25  d["electronTnP"] = {
26  "chains": [
27  'HLT_e26_idperf_loose_L1eEM26M',
28  'HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1eEM26M',
29  'HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1eEM26M',
30  'HLT_e28_idperf_loose_L1eEM28M',
31 
32  ],
33  "signature": ['Egamma'],
34  "menu": ''
35  }
36 
37  d["electronLRT"] = {
38  "chains": [
39  'HLT_e20_idperf_loose_lrtloose_L1eEM18L',
40  'HLT_e26_lhtight_ivarloose_e30_lhloose_nopix_lrtmedium_probe_L1eEM26M',
41  'HLT_e26_lhtight_ivarloose_e5_idperf_loose_lrtloose_probe_L1eEM26M',
42  'HLT_e30_idperf_loose_lrtloose_L1eEM26M',
43  'HLT_e30_lhloose_nopix_lrtmedium_probe_g25_medium_L1eEM24L',
44  'HLT_e5_idperf_loose_lrtloose_probe_g25_medium_L1eEM24L',
45 
46  ],
47  "signature": ['Egamma'],
48  "menu": ''
49  }
50 
51  d["muon"] = {
52  "chains": [
53  'HLT_mu24_idperf_L1MU14FCH',
54  'HLT_mu26_ivarperf_L1MU14FCH',
55 
56  'HLT_mu4_mu4_idperf_1invmAB5_L12MU3VF',
57  'HLT_mu6_idperf_L1MU5VF',
58 
59  ],
60  "signature": ['Muon'],
61  "menu": ''
62  }
63 
64  d["muonTnP"] = {
65  "chains": [
66  'HLT_mu14_mu14_idtp_idZmumu_L12MU8F',
67  'HLT_mu24_idperf_L1MU14FCH',
68 
69  ],
70  "signature": ['Muon'],
71  "menu": ''
72  }
73 
74  d["muonLRT"] = {
75  "chains": [
76  'HLT_mu20_LRT_idperf_L1MU14FCH',
77  'HLT_mu24_idperf_L1MU14FCH',
78 
79  ],
80  "signature": ['Muon'],
81  "menu": ''
82  }
83 
84  d["tau"] = {
85  "chains": [
86  'HLT_tau25_idperf_tracktwoMVA_L1cTAU20M',
87 
88  ],
89  "signature": ['Tau'],
90  "menu": ''
91  }
92 
93  d["tauLRT"] = {
94  "chains": [
95  'HLT_tau25_idperf_trackLRT_L1cTAU20M',
96  'HLT_tau25_idperf_tracktwoLLP_L1cTAU20M',
97 
98  ],
99  "signature": ['Tau'],
100  "menu": 'Dev_pp_run3_v1'
101  }
102 
103  d["FSLRT"] = {
104  "chains": [
105  'HLT_fslrt0_L1jJ160',
106 
107  ],
108  "signature": ['UnconventionalTracking'],
109  "menu": 'Dev_pp_run3_v1'
110  }
111 
112  d["bjet"] = {
113  "chains": [
114  'HLT_j20_roiftf_preselj20_L1RD0_FILLED',
115  'HLT_j45_0eta290_020jvt_boffperf_pf_ftf_L1jJ50',
116  'HLT_j80_0eta290_020jvt_boffperf_pf_ftf_L1jJ90',
117 
118  ],
119  "signature": ["Bjet"],
120  "menu": ''
121  }
122 
123  d["fsjet"] = {
124  "chains": [
125  'HLT_j45_0eta290_020jvt_boffperf_pf_ftf_L1jJ50',
126  'HLT_j45_pf_ftf_preselj20_L1jJ40',
127  'HLT_j80_0eta290_020jvt_boffperf_pf_ftf_L1jJ90',
128 
129  ],
130  "signature": ["Jet"],
131  "menu": ''
132  }
133 
134  d["minbias"] = {
135  "chains": [
136  'HLT_mb_sptrk_L1RD0_FILLED',
137 
138  ],
139  "signature": ["MinBias"],
140  "menu": 'PhysicsP1_pp_lowMu_run3_v1'
141  }
142 
143  d["minbiaspix"] = {
144  "chains": [
145  'HLT_mb_pixsptrk_nototpix20_q2_L1VjTE10',
146 
147  ],
148  "signature": ["MinBias"],
149  "menu": 'Dev_HI_run3_v1'
150 # "menu": 'PhysicsP1_HI_run3_v1'
151  }
152 
153  d["cosmic"] = {
154  "chains": [
155  'HLT_mu4_cosmic_L1MU3V_EMPTY',
156 
157  ],
158  "signature": ['Muon','Cosmic',],
159  "menu": 'Cosmic_run3_v1'
160  }
161 
162  d["bphys"] = {
163  "chains": [
164  'HLT_2mu4_bBmumux_BsmumuPhi_L12MU3V',
165  'HLT_mu11_mu6_bBmumux_Bidperf_L1MU8VF_2MU5VF',
166 
167  ],
168  "signature": ['Muon','Bphysics',],
169  "menu": ''
170  }
171 
172  return d
173 
174  def get_values(self, slice_names: list, prop: str) -> set:
175  values = set()
176  d = self.get_menu_dict()
177 
178  for sn in slice_names:
179  if sn not in d:
180  raise RuntimeError("Undefined slice name {}".format(sn))
181  cfg = d[sn]
182 
183  if prop in cfg:
184  values.update(cfg[prop])
185 
186  return values
187 
188  def get_flag_str(self, slice_names: list, prop: str, flag_name: str) -> str:
189  values = self.get_values(slice_names, prop)
190 
191  cs = ["'{}'".format(v) for v in values]
192  return "flags.Trigger.{0}=[{1}]".format(flag_name, ",".join(cs))
193 
194  def get_selectChains_flag(self, slice_names: list) -> str:
195  return self.get_flag_str(slice_names, "chains", "selectChains")
196 
197  def get_enabledSignatures_flag(self, slice_names: list) -> str:
198  return self.get_flag_str(slice_names, "signature", "enabledSignatures")
199 
200  def get_menu_flag(self, slice_names: list) -> str:
201  d = self.get_menu_dict()
202  values = set()
203 
204  for sn in slice_names:
205  cfg = d[sn]
206 
207  if(cfg["menu"] == ''):
208  continue
209 
210  values.add(cfg["menu"])
211 
212  if(len(values) > 1):
213  raise RuntimeError("Multiple menus specified, configured slices {0} conflict between {1}".format(slice_names, values))
214 
215  if(len(values) == 0):
216  return ""
217 
218  return "flags.Trigger.triggerMenuSetup='{}'".format(list(values)[0])
219 
220  def get_compiled_flag_str(self, slice_names: list) -> str:
221  flags = []
222  flags.append(self.get_flag_str(slice_names, "chains", "selectChains"))
223  flags.append(self.get_flag_str(slice_names, "signature", "enabledSignatures"))
224 
225  mf = self.get_menu_flag(slice_names)
226 
227  if(mf != ''):
228  flags.append(mf)
229 
230  extra = self.get_values(slice_names, "extra")
231  flags += extra
232 
233  return ";".join(flags)
234 
235 if __name__ == "__main__":
236  c = Chains()
237 
238  print(c.get_selectChains_flag(["muon", "cosmic"]))
239  print(c.get_enabledSignatures_flag(["muon", "cosmic"]))
240  print(c.get_menu_flag(["muon", "cosmic"]))
python.Chains.Chains.get_flag_str
str get_flag_str(self, list slice_names, str prop, str flag_name)
Definition: Chains.py:188
vtune_athena.format
format
Definition: vtune_athena.py:14
python.Chains.Chains
Definition: Chains.py:7
python.Chains.Chains.get_menu_dict
def get_menu_dict(self)
Definition: Chains.py:8
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
python.Chains.Chains.get_enabledSignatures_flag
str get_enabledSignatures_flag(self, list slice_names)
Definition: Chains.py:197
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
python.Chains.Chains.get_menu_flag
str get_menu_flag(self, list slice_names)
Definition: Chains.py:200
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
python.Chains.Chains.get_compiled_flag_str
str get_compiled_flag_str(self, list slice_names)
Definition: Chains.py:220
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.Chains.Chains.get_values
set get_values(self, list slice_names, str prop)
Definition: Chains.py:174
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
python.Chains.Chains.get_selectChains_flag
str get_selectChains_flag(self, list slice_names)
Definition: Chains.py:194