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 typing
import Optional
9 from functools
import cache
12 log = logging.getLogger(
'TrigConfigSvcCfg')
18 return l1menu_generated._hasRun
19 except AttributeError:
20 l1menu_generated._hasRun =
True
26 from TrigConfStorage.TriggerCoolUtil
import TriggerCoolUtil
27 db = TriggerCoolUtil.GetConnection(
'CONDBR2' if runNumber > 230000
else 'COMP200')
28 runRange = [[(runNumber,lumiBlock), (runNumber,lumiBlock)]]
29 d = {key: value
for key, value
in TriggerCoolUtil.getHLTConfigKeys(db, runRange)[runNumber].
items()
if key
in [
"SMK",
"DB"]}
30 for (hltpsk, firstlb, lastlb)
in TriggerCoolUtil.getHLTPrescaleKeys(db, runRange)[runNumber][
'HLTPSK2']:
31 if firstlb<=lumiBlock
and lumiBlock<=lastlb:
34 for (l1psk, firstlb, lastlb)
in TriggerCoolUtil.getL1ConfigKeys(db, runRange)[runNumber][
'LVL1PSK']:
35 if firstlb<=lumiBlock
and lumiBlock<=lastlb:
38 for (bgsk, firstlb, lastlb)
in TriggerCoolUtil.getBunchGroupKey(db, runRange)[runNumber][
'BGKey']:
39 if firstlb<=lumiBlock
and lumiBlock<=lastlb:
44 msg = f
"Did not find an L1 PSK for run {runNumber} and lumi block {lumiBlock} in COOL"
46 raise RuntimeError(msg)
48 msg = f
"Did not find an HLT PSK for run {runNumber} and lumi block {lumiBlock} in COOL"
50 raise RuntimeError(msg)
52 msg = f
"Did not find a bunch group set key for run {runNumber} and lumi block {lumiBlock} in COOL"
54 raise RuntimeError(msg)
55 log.info(
"Extracted the following info for run %d and lumi block %d from COOL: %r", runNumber, lumiBlock, d)
61 """Retrieve Run-2 trigger configuration from the DB and save as Run3 .JSON files"""
65 log.error(
"L1 menu has already been generated")
68 log.info(
"Configuring Run-1&2 to Run-3 configuration metadata conversion")
70 triggerDBKeys[
'DB'] =
'TRIGGERDB' if run > 230000
else 'TRIGGERDB_RUN1'
72 cmd =
"TrigConfReadWrite -i {DB} {SMK},{L1PSK},{HLTPSK},{BGSK} -o r3json > Run3ConfigFetchJSONFiles.log".
format(**triggerDBKeys)
73 log.info(
"Running command '%s'", cmd)
74 filesFetchStatus = subprocess.run(cmd, shell=
True)
75 assert filesFetchStatus.returncode == 0,
"TrigConfReadWrite failed to fetch JSON files"
83 source, dbconn, keys = (flags.Trigger.triggerConfig+
":::").
split(
":")[:3]
84 smk,l1psk,hltpsk,bgsk = (keys+
",,,").
split(
",")[:4]
86 smk, l1psk, hltpsk, bgsk = (
int(k)
if k!=
"" else None for k
in (smk, l1psk, hltpsk, bgsk))
88 if source ==
"DB" and (smk
is None or l1psk
is None or hltpsk
is None or bgsk
is None):
89 runNumber = flags.Input.RunNumbers[0]
90 lbNumber = flags.Input.LumiBlockNumbers[0]
93 if dbconn
in [
"TRIGGERDB_RUN3",
"TRIGGERDBDEV1_I8",
"TRIGGERDBDEV1",
"TRIGGERDBDEV2"]:
105 "SOURCE" : source.upper(),
116 return "/TRIGGER/LVL1/Lvl1ConfigKey <tag>HEAD</tag>"
120 return "/TRIGGER/HLT/PrescaleKey <tag>HEAD</tag>"
124 """Do JSON menu conversion for Run-1&2 data"""
125 return flags.Input.Files
and flags.Trigger.EDMVersion
in [1, 2]
and not flags.Input.isMC
129 """Return base name for menu files"""
131 from PyUtils.Helpers
import release_metadata
162 return 'HLTJobOptions.json'
166 from TriggerMenuMT.L1.Base.PrescaleHelper
import getCutFromPrescale
169 with open(menuFN,
'r')
as fh:
171 pso = {
'filetype':
'l1prescale',
172 'name': data[
'name'],
174 ps = pso[
'cutValues']
176 ps = prescales[name]
if prescales
and name
in prescales
else 1
177 pso[
'cutValues'][name] = {
180 'info': f
'prescale: {ps}'
184 with open(psFN,
'w')
as outfile:
185 json.dump(pso, outfile, indent = 4)
186 log.info(
"Generated default L1 prescale set %s", outfile.name)
191 log.error(
"L1 menu has already been generated")
194 log.info(
"Generating L1 menu %s", flags.Trigger.triggerMenuSetup)
195 from TriggerMenuMT.L1.L1MenuConfig
import L1MenuConfig
196 l1cfg = L1MenuConfig(flags)
207 log.info(
"Configure LVL1ConfigSvc" )
210 l1ConfigSvc = CompFactory.getComp(
"TrigConf::LVL1ConfigSvc")(
"LVL1ConfigSvc")
212 if cfg[
"SOURCE"] ==
"FILE":
216 lb = flags.Input.LumiBlockNumbers[0])
217 l1ConfigSvc.SMK = dbKeys[
'SMK']
219 l1ConfigSvc.InputType =
"FILE"
222 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 )
223 elif cfg[
"SOURCE"] ==
"DB":
224 l1ConfigSvc.InputType =
"DB"
225 l1ConfigSvc.L1JsonFileName =
""
226 l1ConfigSvc.HLTJsonFileName =
""
227 l1ConfigSvc.TriggerDB = cfg[
"DBCONN"]
228 l1ConfigSvc.SMK = cfg[
"SMK"]
229 log.info(
"For run 3 style menu access configured LVL1ConfigSvc with InputType='DB', SMK %d", cfg[
'SMK'] )
231 acc.addService( l1ConfigSvc, create=
True )
239 log.info(
"Configure HLTConfigSvc" )
241 hltConfigSvc = CompFactory.getComp(
"TrigConf::HLTConfigSvc")(
"HLTConfigSvc")
243 if cfg[
"SOURCE"] ==
"FILE":
247 lb = flags.Input.LumiBlockNumbers[0])
248 hltConfigSvc.SMK = dbKeys[
'SMK']
250 hltConfigSvc.InputType =
"FILE"
254 log.info(
"Configured HLTConfigSvc with InputType='FILE', HLTJsonFileName=%s and MonitoringJsonFileName=%s (and L1, used to compute MC-SMK:%s)",
255 hltConfigSvc.HLTJsonFileName, hltConfigSvc.MonitoringJsonFileName, hltConfigSvc.L1JsonFileName)
256 elif cfg[
"SOURCE"] ==
"DB":
257 hltConfigSvc.InputType =
"DB"
258 hltConfigSvc.L1JsonFileName =
""
259 hltConfigSvc.HLTJsonFileName =
""
260 hltConfigSvc.MonitoringJsonFileName =
""
261 hltConfigSvc.TriggerDB = cfg[
"DBCONN"]
262 hltConfigSvc.SMK = cfg[
"SMK"]
263 log.info(
"For run 3 style menu access configured HLTConfigSvc with InputType='DB' and SMK %d", cfg[
'SMK'] )
264 acc.addService( hltConfigSvc, create=
True )
279 log.info(
"Setting up L1PrescaleCondAlg")
281 TrigConf__L1PrescaleCondAlg = CompFactory.getComp(
"TrigConf::L1PrescaleCondAlg")
282 l1PrescaleCondAlg = TrigConf__L1PrescaleCondAlg(
"L1PrescaleCondAlg")
285 l1PrescaleCondAlg.Source = tc[
"SOURCE"]
286 if flags.Common.isOnline:
287 from IOVDbSvc.IOVDbSvcConfig
import addFolders
290 if tc[
"SOURCE"] ==
"COOL":
291 l1PrescaleCondAlg.TriggerDB = tc[
"DBCONN"]
292 elif tc[
"SOURCE"] ==
"DB":
293 l1PrescaleCondAlg.TriggerDB = tc[
"DBCONN"]
294 l1PrescaleCondAlg.L1Psk = tc[
"L1PSK"]
295 elif tc[
"SOURCE"] ==
"FILE":
300 lb = flags.Input.LumiBlockNumbers[0])
301 l1PrescaleCondAlg.L1Psk = dbKeys[
'L1PSK']
303 raise RuntimeError(
"trigger configuration flag 'trigConfig' starts with %s, which is not understood" % tc[
"SOURCE"])
304 acc.addCondAlgo(l1PrescaleCondAlg)
309 log.info(
"Setting up BunchGroupCondAlg")
311 TrigConf__BunchGroupCondAlg = CompFactory.getComp(
"TrigConf::BunchGroupCondAlg")
312 bunchGroupCondAlg = TrigConf__BunchGroupCondAlg(
"TrigConf__BunchGroupCondAlg")
315 bunchGroupCondAlg.Source = tc[
"SOURCE"]
316 if tc[
"SOURCE"] ==
"COOL":
317 bunchGroupCondAlg.TriggerDB = tc[
"DBCONN"]
318 elif tc[
"SOURCE"] ==
"DB":
319 bunchGroupCondAlg.TriggerDB = tc[
"DBCONN"]
320 bunchGroupCondAlg.BGSK = tc[
"BGSK"]
321 elif tc[
"SOURCE"] ==
"FILE":
326 lb = flags.Input.LumiBlockNumbers[0])
327 bunchGroupCondAlg.BGSK = dbKeys[
'BGSK']
329 raise RuntimeError(
"trigger configuration flag 'trigConfig' starts with %s, which is not understood" % tc[
"SOURCE"])
330 acc.addCondAlgo(bunchGroupCondAlg)
335 log.info(
"Setting up HLTPrescaleCondAlg")
337 hltPrescaleCondAlg = CompFactory.getComp(
"TrigConf::HLTPrescaleCondAlg")(
"HLTPrescaleCondAlg")
340 hltPrescaleCondAlg.Source = tc[
"SOURCE"]
341 if flags.Common.isOnline
or tc[
"SOURCE"]==
"COOL":
342 from IOVDbSvc.IOVDbSvcConfig
import addFolders
344 className =
"AthenaAttributeList",
345 extensible = flags.Trigger.Online.isPartition))
347 if tc[
"SOURCE"] ==
"COOL":
348 hltPrescaleCondAlg.TriggerDB = tc[
"DBCONN"]
349 elif tc[
"SOURCE"] ==
"DB":
350 hltPrescaleCondAlg.TriggerDB = tc[
"DBCONN"]
351 hltPrescaleCondAlg.HLTPsk = tc[
"HLTPSK"]
352 elif tc[
"SOURCE"] ==
"FILE":
357 lb = flags.Input.LumiBlockNumbers[0])
358 hltPrescaleCondAlg.HLTPsk = dbKeys[
'HLTPSK']
360 raise RuntimeError(
"trigger configuration flag 'trigConfig' starts with %s, which is not understood" % tc[
"SOURCE"])
361 acc.addCondAlgo(hltPrescaleCondAlg)
365 if __name__ ==
"__main__":
372 l1menu_generated._hasRun =
False
375 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
377 flags.Trigger.EDMVersion = 3
378 from AthenaConfiguration.TestDefaults
import defaultTestFiles
379 flags.Input.Files = defaultTestFiles.RAW_RUN2
384 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
386 from AthenaConfiguration.TestDefaults
import defaultTestFiles
387 flags.Input.Files = defaultTestFiles.RAW_RUN2
393 for k,v
in {
"SMK" : 2749,
"L1PSK" : 23557,
"HLTPSK" : 17824,
"BGSK" : 2181}.
items():
394 assert k
in keys,
"Missing key {}".
format(k)
395 assert v == keys[k],
"Wrong value {}".
format(v)
397 unittest.main(verbosity=2)