3 from AthenaCommon.Logging
import logging
4 from AthenaConfiguration.ComponentFactory
import CompFactory
5 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
6 from AthenaConfiguration.AccumulatorCache
import AccumulatorCache
8 from functools
import cache
11 log = logging.getLogger(
'TrigConfigSvcCfg')
17 return l1menu_generated._hasRun
18 except AttributeError:
19 l1menu_generated._hasRun =
True
25 from TrigConfStorage.TriggerCoolUtil
import TriggerCoolUtil
26 db = TriggerCoolUtil.GetConnection(
'CONDBR2' if runNumber > 230000
else 'COMP200')
27 runRange = [[(runNumber,lumiBlock), (runNumber,lumiBlock)]]
28 d = {key: value
for key, value
in TriggerCoolUtil.getHLTConfigKeys(db, runRange)[runNumber].
items()
if key
in [
"SMK",
"DB"]}
29 for (hltpsk, firstlb, lastlb)
in TriggerCoolUtil.getHLTPrescaleKeys(db, runRange)[runNumber][
'HLTPSK2']:
30 if firstlb<=lumiBlock
and lumiBlock<=lastlb:
33 for (l1psk, firstlb, lastlb)
in TriggerCoolUtil.getL1ConfigKeys(db, runRange)[runNumber][
'LVL1PSK']:
34 if firstlb<=lumiBlock
and lumiBlock<=lastlb:
37 for (bgsk, firstlb, lastlb)
in TriggerCoolUtil.getBunchGroupKey(db, runRange)[runNumber][
'BGKey']:
38 if firstlb<=lumiBlock
and lumiBlock<=lastlb:
43 msg = f
"Did not find an L1 PSK for run {runNumber} and lumi block {lumiBlock} in COOL"
45 raise RuntimeError(msg)
47 msg = f
"Did not find an HLT PSK for run {runNumber} and lumi block {lumiBlock} in COOL"
49 raise RuntimeError(msg)
51 msg = f
"Did not find a bunch group set key for run {runNumber} and lumi block {lumiBlock} in COOL"
53 raise RuntimeError(msg)
54 log.info(
"Extracted the following info for run %d and lumi block %d from COOL: %r", runNumber, lumiBlock, d)
60 """Retrieve Run-2 trigger configuration from the DB and save as Run3 .JSON files"""
64 log.error(
"L1 menu has already been generated")
67 log.info(
"Configuring Run-1&2 to Run-3 configuration metadata conversion")
69 triggerDBKeys[
'DB'] =
'TRIGGERDB' if run > 230000
else 'TRIGGERDB_RUN1'
71 cmd =
"TrigConfReadWrite -i {DB} {SMK},{L1PSK},{HLTPSK},{BGSK} -o r3json > Run3ConfigFetchJSONFiles.log".
format(**triggerDBKeys)
72 log.info(
"Running command '%s'", cmd)
73 filesFetchStatus = subprocess.run(cmd, shell=
True)
74 assert filesFetchStatus.returncode == 0,
"TrigConfReadWrite failed to fetch JSON files"
82 source, dbconn, keys = (flags.Trigger.triggerConfig+
":::").
split(
":")[:3]
83 smk,l1psk,hltpsk,bgsk = (keys+
",,,").
split(
",")[:4]
85 smk, l1psk, hltpsk, bgsk = (
int(k)
if k!=
"" else None for k
in (smk, l1psk, hltpsk, bgsk))
87 if source ==
"DB" and (smk
is None or l1psk
is None or hltpsk
is None or bgsk
is None):
88 runNumber = flags.Input.RunNumbers[0]
89 lbNumber = flags.Input.LumiBlockNumbers[0]
92 if dbconn
in [
"TRIGGERDB_RUN3",
"TRIGGERDBDEV1_I8",
"TRIGGERDBDEV1",
"TRIGGERDBDEV2"]:
104 "SOURCE" : source.upper(),
115 return "/TRIGGER/LVL1/Lvl1ConfigKey <tag>HEAD</tag>"
119 return "/TRIGGER/HLT/PrescaleKey <tag>HEAD</tag>"
123 """Do JSON menu conversion for Run-1&2 data"""
124 return flags.Input.Files
and flags.Trigger.EDMVersion
in [1, 2]
and not flags.Input.isMC
128 """Return base name for menu files"""
130 from PyUtils.Helpers
import release_metadata
161 return 'HLTJobOptions.json'
167 with open(menuFN,
'r')
as fh:
169 pso = {
'filetype':
'l1prescale',
170 'name': data[
'name'],
172 ps = pso[
'cutValues']
174 ps[name] = {
"cut": 1,
176 "info":
"prescale: 1"}
179 with open(psFN,
'w')
as outfile:
180 json.dump(pso, outfile, indent = 4)
181 log.info(
"Generated default L1 prescale set %s", outfile.name)
186 log.error(
"L1 menu has already been generated")
189 log.info(
"Generating L1 menu %s", flags.Trigger.triggerMenuSetup)
190 from TriggerMenuMT.L1.L1MenuConfig
import L1MenuConfig
191 l1cfg = L1MenuConfig(flags)
202 log.info(
"Configure LVL1ConfigSvc" )
205 l1ConfigSvc = CompFactory.getComp(
"TrigConf::LVL1ConfigSvc")(
"LVL1ConfigSvc")
207 if cfg[
"SOURCE"] ==
"FILE":
211 lb = flags.Input.LumiBlockNumbers[0])
212 l1ConfigSvc.SMK = dbKeys[
'SMK']
214 l1ConfigSvc.InputType =
"FILE"
217 log.info(
"For run 3 style menu access configured LVL1ConfigSvc with InputType='FILE', L1JsonFileName=%s (and HLT, used to compute SMK:%s) ", l1ConfigSvc.L1JsonFileName, l1ConfigSvc.HLTJsonFileName )
218 elif cfg[
"SOURCE"] ==
"DB":
219 l1ConfigSvc.InputType =
"DB"
220 l1ConfigSvc.L1JsonFileName =
""
221 l1ConfigSvc.HLTJsonFileName =
""
222 l1ConfigSvc.TriggerDB = cfg[
"DBCONN"]
223 l1ConfigSvc.SMK = cfg[
"SMK"]
224 log.info(
"For run 3 style menu access configured LVL1ConfigSvc with InputType='DB', SMK %d", cfg[
'SMK'] )
226 acc.addService( l1ConfigSvc, create=
True )
234 log.info(
"Configure HLTConfigSvc" )
236 hltConfigSvc = CompFactory.getComp(
"TrigConf::HLTConfigSvc")(
"HLTConfigSvc")
238 if cfg[
"SOURCE"] ==
"FILE":
242 lb = flags.Input.LumiBlockNumbers[0])
243 hltConfigSvc.SMK = dbKeys[
'SMK']
245 hltConfigSvc.InputType =
"FILE"
249 log.info(
"Configured HLTConfigSvc with InputType='FILE', HLTJsonFileName=%s and MonitoringJsonFileName=%s (and L1, used to compute MC-SMK:%s)",
250 hltConfigSvc.HLTJsonFileName, hltConfigSvc.MonitoringJsonFileName, hltConfigSvc.L1JsonFileName)
251 elif cfg[
"SOURCE"] ==
"DB":
252 hltConfigSvc.InputType =
"DB"
253 hltConfigSvc.L1JsonFileName =
""
254 hltConfigSvc.HLTJsonFileName =
""
255 hltConfigSvc.MonitoringJsonFileName =
""
256 hltConfigSvc.TriggerDB = cfg[
"DBCONN"]
257 hltConfigSvc.SMK = cfg[
"SMK"]
258 log.info(
"For run 3 style menu access configured HLTConfigSvc with InputType='DB' and SMK %d", cfg[
'SMK'] )
259 acc.addService( hltConfigSvc, create=
True )
273 log.info(
"Setting up L1PrescaleCondAlg")
275 TrigConf__L1PrescaleCondAlg = CompFactory.getComp(
"TrigConf::L1PrescaleCondAlg")
276 l1PrescaleCondAlg = TrigConf__L1PrescaleCondAlg(
"L1PrescaleCondAlg")
279 l1PrescaleCondAlg.Source = tc[
"SOURCE"]
280 if flags.Common.isOnline:
281 from IOVDbSvc.IOVDbSvcConfig
import addFolders
284 if tc[
"SOURCE"] ==
"COOL":
285 l1PrescaleCondAlg.TriggerDB = tc[
"DBCONN"]
286 elif tc[
"SOURCE"] ==
"DB":
287 l1PrescaleCondAlg.TriggerDB = tc[
"DBCONN"]
288 l1PrescaleCondAlg.L1Psk = tc[
"L1PSK"]
289 elif tc[
"SOURCE"] ==
"FILE":
294 lb = flags.Input.LumiBlockNumbers[0])
295 l1PrescaleCondAlg.L1Psk = dbKeys[
'L1PSK']
297 raise RuntimeError(
"trigger configuration flag 'trigConfig' starts with %s, which is not understood" % tc[
"SOURCE"])
298 acc.addCondAlgo(l1PrescaleCondAlg)
302 log.info(
"Setting up BunchGroupCondAlg")
304 TrigConf__BunchGroupCondAlg = CompFactory.getComp(
"TrigConf::BunchGroupCondAlg")
305 bunchGroupCondAlg = TrigConf__BunchGroupCondAlg(
"TrigConf__BunchGroupCondAlg")
308 bunchGroupCondAlg.Source = tc[
"SOURCE"]
309 if tc[
"SOURCE"] ==
"COOL":
310 bunchGroupCondAlg.TriggerDB = tc[
"DBCONN"]
311 elif tc[
"SOURCE"] ==
"DB":
312 bunchGroupCondAlg.TriggerDB = tc[
"DBCONN"]
313 bunchGroupCondAlg.BGSK = tc[
"BGSK"]
314 elif tc[
"SOURCE"] ==
"FILE":
319 lb = flags.Input.LumiBlockNumbers[0])
320 bunchGroupCondAlg.BGSK = dbKeys[
'BGSK']
322 raise RuntimeError(
"trigger configuration flag 'trigConfig' starts with %s, which is not understood" % tc[
"SOURCE"])
323 acc.addCondAlgo(bunchGroupCondAlg)
328 log.info(
"Setting up HLTPrescaleCondAlg")
330 hltPrescaleCondAlg = CompFactory.getComp(
"TrigConf::HLTPrescaleCondAlg")(
"HLTPrescaleCondAlg")
333 hltPrescaleCondAlg.Source = tc[
"SOURCE"]
334 if flags.Common.isOnline
or tc[
"SOURCE"]==
"COOL":
335 from IOVDbSvc.IOVDbSvcConfig
import addFolders
337 className =
"AthenaAttributeList",
338 extensible = flags.Trigger.Online.isPartition))
340 if tc[
"SOURCE"] ==
"COOL":
341 hltPrescaleCondAlg.TriggerDB = tc[
"DBCONN"]
342 elif tc[
"SOURCE"] ==
"DB":
343 hltPrescaleCondAlg.TriggerDB = tc[
"DBCONN"]
344 hltPrescaleCondAlg.HLTPsk = tc[
"HLTPSK"]
345 elif tc[
"SOURCE"] ==
"FILE":
350 lb = flags.Input.LumiBlockNumbers[0])
351 hltPrescaleCondAlg.HLTPsk = dbKeys[
'HLTPSK']
353 raise RuntimeError(
"trigger configuration flag 'trigConfig' starts with %s, which is not understood" % tc[
"SOURCE"])
354 acc.addCondAlgo(hltPrescaleCondAlg)
358 if __name__ ==
"__main__":
365 l1menu_generated._hasRun =
False
368 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
370 flags.Trigger.EDMVersion = 3
371 from AthenaConfiguration.TestDefaults
import defaultTestFiles
372 flags.Input.Files = defaultTestFiles.RAW_RUN2
377 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
379 from AthenaConfiguration.TestDefaults
import defaultTestFiles
380 flags.Input.Files = defaultTestFiles.RAW_RUN2
386 for k,v
in {
"SMK" : 2749,
"L1PSK" : 23557,
"HLTPSK" : 17824,
"BGSK" : 2181}.
items():
387 assert k
in keys,
"Missing key {}".
format(k)
388 assert v == keys[k],
"Wrong value {}".
format(v)
390 unittest.main(verbosity=2)