35 flags = AthConfigFlags()
37 flags.addFlag(
'Trigger.doLVL1',
lambda prevFlags: prevFlags.Input.isMC,
38 help=
'enable L1 simulation')
40 flags.addFlag(
'Trigger.doHLT',
False,
41 help=
'run HLT selection algorithms')
43 flags.addFlag(
"Trigger.forceEnableAllChains",
lambda prevFlags: prevFlags.GeoModel.Run >= LHCPeriod.Run4,
44 help=
'always enable all configured chains (for testing). Currently enabled by default for Run 4.')
46 flags.addFlag(
"Trigger.disableL1ConsistencyChecker",
False,
47 help=
'force disabling the L1 ConsistencyChecker')
49 flags.addFlag(
'Trigger.enableL0Muon',
50 lambda prevFlags: prevFlags.GeoModel.Run >= LHCPeriod.Run4,
51 help=
'enable Run-4+ L0 Muon simulation or decoding')
53 flags.addFlag(
'Trigger.enableL1MuonPhase1',
lambda prevFlags:
54 (
not prevFlags.Trigger.enableL0Muon)
and
55 prevFlags.Trigger.EDMVersion >= 3
or prevFlags.Detector.EnableMM
or prevFlags.Detector.EnablesTGC,
56 help=
'enable Run-3 LVL1 muon decoding')
58 flags.addFlag(
'Trigger.enableL1CaloPhase1',
lambda prevFlags:
59 prevFlags.Trigger.EDMVersion >= 3
or prevFlags.GeoModel.Run >= LHCPeriod.Run3,
60 help=
'enable Phase-1 LVL1 calo simulation and/or decoding for Run-3+')
62 flags.addFlag(
'Trigger.enableL1TopoDump',
False,
63 help=
'enable L1Topo simulation to write inputs to txt file')
65 flags.addFlag(
'Trigger.enableL1TopoBWSimulation',
True,
66 help=
'enable bitwise L1Topo simulation')
68 flags.addFlag(
'Trigger.enableL1CaloLegacy',
lambda prevFlags:
69 not (
not prevFlags.Input.isMC
and prevFlags.Trigger.doHLT),
70 help=
'enable Run-2 L1Calo simulation and/or decoding')
73 flags.addFlag(
'Trigger.L0MuonSim.doEmulation',
74 lambda prevFlags: prevFlags.Trigger.enableL0Muon
and
75 prevFlags.Input.isMC
and
76 'TruthParticleContainer' in prevFlags.Input.Collections,
77 help=
'Emulate the L0Muon trigger TOBs from smeared truth muon particles')
80 flags.addFlag(
'Trigger.L1MuonSim.EmulateNSW',
False,
81 help=
'enable emulation tool for NSW-TGC coincidence')
83 flags.addFlag(
'Trigger.L1MuonSim.doMMTrigger',
True,
84 help=
'enable NSW MM trigger')
86 flags.addFlag(
'Trigger.L1MuonSim.doPadTrigger',
True,
87 help=
'enable NSW sTGC pad trigger')
89 flags.addFlag(
'Trigger.L1MuonSim.doStripTrigger',
False,
90 help=
'enable NSW sTGC strip trigger')
92 flags.addFlag(
'Trigger.L1MuonSim.WriteNSWDebugNtuple',
False,
93 help=
'enable Storing NSW debug Ntuple')
95 flags.addFlag(
'Trigger.L1MuonSim.WriteMMBranches',
False,
96 help=
'enable storing of Micromega branches in NSW debug Ntuple')
98 flags.addFlag(
'Trigger.L1MuonSim.WritesTGCBranches',
False,
99 help=
'enable storing of TGC branches in NSW debug Ntuple')
101 flags.addFlag(
'Trigger.L1MuonSim.NSWVetoMode',
True,
102 help=
'enable the veto mode of the NSW-TGC coincidence')
104 flags.addFlag(
'Trigger.L1MuonSim.doBIS78',
True,
105 help=
'enable TGC-RPC BIS78 coincidence')
107 flags.addFlag(
'Trigger.L1MuonSim.CondDBOffline',
'OFLCOND-MC16-SDR-RUN2-04',
108 help=
'offline CondDB tag for RPC/TGC coincidence window in rerunLVL1 on data')
110 flags.addFlag(
'Trigger.L1MuonSim.RPCNBX',
lambda prevFlags:
111 8
if prevFlags.Input.isMC
else 4,
112 help=
'Number of bunch crossings in RPC readout')
114 flags.addFlag(
'Trigger.L1MuonSim.RPCNBCZ',
lambda prevFlags:
115 3
if prevFlags.Input.isMC
else 1,
116 help=
'Nominal BC for RPC readout')
120 flags.addFlag(
'Trigger.doID',
True,
121 help=
'enable Inner Detector')
123 flags.addFlag(
'Trigger.doMuon',
True,
124 help=
'enable muon systems')
126 flags.addFlag(
'Trigger.doCalo',
True,
127 help=
'enable calorimeters')
129 flags.addFlag(
'Trigger.doZDC',
False,
130 help=
'enable ZDC system')
132 flags.addFlag(
'Trigger.ZdcLUT',
'TrigT1ZDC/zdcRun3T1LUT_v2_08_08_2023.json',
133 help=
'path to Run3 ZDC LUT')
136 flags.addFlag(
'Trigger.doTRT',
False)
139 flags.addFlag(
'Trigger.TRT.TTCMultiplicity', 4)
142 flags.addFlag(
'Trigger.TRT.maskedChipsFile',
'TrigT1TRT/fastORmaskedChips.json')
145 flags.addFlag(
'Trigger.doValidationMonitoring',
False,
146 help=
'enable additional validation histograms')
148 flags.addFlag(
'Trigger.doRuntimeNaviVal',
False,
149 help=(
'Check validity of each Decision objects in the entire decision tree (CPU expensive). '
150 'Also enable per-step decision printouts.'))
152 flags.addFlag(
'Trigger.ROBPrefetchingOptions',
153 [ROBPrefetching.InitialRoI, ROBPrefetching.StepRoI, ROBPrefetching.TauCoreLargeRoI],
154 help=
'select ROB prefetching types, empty list disables prefetching')
157 """Determine Trigger EDM version based on the input file."""
158 _log = logging.getLogger(
'TriggerConfigFlags.EDMVersion')
162 if flags.Input.Format
is Format.BS:
163 _log.debug(
"Input format is ByteStream")
165 if not any(flags.Input.Files)
and flags.Common.isOnline:
166 _log.info(
"Online reconstruction, no input file. Return default EDMVersion=%d", default_version)
167 return default_version
169 from TrigEDMConfig.Utils
import getEDMVersionFromBS
171 log.error(
"Failed to import TrigEDMConfig, analysing ByteStream files is not possible in this release!")
177 return version
if version
is not None else default_version
181 _log.debug(
"Input format is POOL -- determine from input file collections")
182 collections = flags.Input.Collections
183 if "HLTResult_EF" in collections:
184 _log.info(
"Determined EDMVersion to be 1, because HLTResult_EF found in POOL file")
186 elif "TrigNavigation" in collections:
187 _log.info(
"Determined EDMVersion to be 2, because TrigNavigation found in POOL file")
189 elif flags.Trigger.doHLT:
190 if flags.GeoModel.Run >= LHCPeriod.Run4:
191 _log.info(
"Determined EDMVersion to be 4, because we're now running the trigger and GeoModel.Run >= 4")
194 _log.info(
"Determined EDMVersion to be 3, because we're now running the trigger")
196 elif any(
"HLTNav_Summary" in s
for s
in collections):
197 if flags.GeoModel.Run >= LHCPeriod.Run4:
198 _log.info(
"Determined EDMVersion to be 4, because HLTNav_Summary.* found in POOL file and GeoModel.Run >= 4")
201 _log.info(
"Determined EDMVersion to be 3, because HLTNav_Summary.* found in POOL file")
203 elif not flags.Input.Collections:
206 _log.warning(
"All input files seem to be empty, cannot determine EDM version. Guessing EDMVersion=3")
209 _log.info(
"Could not determine EDM version from the input file. Return default EDMVersion=%d",
211 return default_version
213 flags.addFlag(
'Trigger.EDMVersion',
lambda prevFlags:
EDMVersion(prevFlags),
214 help=
'Trigger EDM version (determined by input file or set to the version to be produced)')
216 flags.addFlag(
'Trigger.doEDMVersionConversion',
False,
217 help=
'convert Run-1&2 EDM to Run-3 EDM')
219 flags.addFlag(
'Trigger.doxAODConversion',
True,
220 help=(
'convert Run-1 EDM to xAOD'))
222 flags.addFlag(
'Trigger.doOnlineNavigationCompactification',
True,
223 help=
'enable trigger Navigation compactification into a single collection')
225 flags.addFlag(
'Trigger.doNavigationSlimming',
True,
226 help=
'enable Navigation slimming for RAWtoXYZ or AODtoDAOD transforms')
228 flags.addFlag(
'Trigger.derivationsExtraChains', [],
229 help=
'list of chains which should be considered for trigger-matching in addition to those from the TriggerAPI when running derivations')
232 flags.addFlag(
'Trigger.CostMonitoring.doCostMonitoring',
True,
233 help=
'enable cost monitoring')
235 flags.addFlag(
'Trigger.CostMonitoring.chain',
'HLT_noalg_CostMonDS_L1All',
236 help=
'Cost monitoring chain name')
238 flags.addFlag(
'Trigger.CostMonitoring.outputCollection',
'HLT_TrigCostContainer',
239 help=
'Cost monitoring output collection name')
241 flags.addFlag(
'Trigger.CostMonitoring.monitorAllEvents',
False,
242 help=
'enable Cost monitoring for all events')
244 flags.addFlag(
'Trigger.CostMonitoring.monitorROBs',
True,
245 help=
'enable Cost monitoring of ROB accesses')
248 flags.addFlag(
'Trigger.L1.doMuon',
True,
249 help=
'enable L1Muon ByteStream conversion/simulation')
251 flags.addFlag(
'Trigger.L1.doMuonTopoInputs',
True,
252 help=
'enable ByteStream conversion/simulation of MUCTPI Topo TOBs')
254 flags.addFlag(
'Trigger.L1.doCalo',
True,
255 help=
'enable L1Calo ByteStream conversion/simulation')
257 flags.addFlag(
'Trigger.L1.doCaloInputs',
lambda prevFlags:
258 prevFlags.Trigger.L1.doCalo
and prevFlags.Trigger.enableL1CaloPhase1
and not prevFlags.Trigger.doHLT,
259 help=
'enable L1Calo Input ([ejg]Towers) ByteStream conversion/simulation')
261 flags.addFlag(
'Trigger.L1.doeFex',
lambda prevFlags:
262 prevFlags.Trigger.L1.doCalo
and prevFlags.Trigger.enableL1CaloPhase1,
263 help=
'enable eFEX ByteStream conversion/simulation')
265 flags.addFlag(
'Trigger.L1.Menu.doeFexBDTTau',
True,
266 help=
'set BDT tau algorithm as the active one for eFEX when constructing L1 menus')
268 flags.addFlag(
'Trigger.L1.dojFex',
lambda prevFlags:
269 prevFlags.Trigger.L1.doCalo
and prevFlags.Trigger.enableL1CaloPhase1,
270 help=
'enable jFEX ByteStream conversion/simulation')
272 flags.addFlag(
'Trigger.L1.dogFex',
lambda prevFlags:
273 prevFlags.Trigger.L1.doCalo
and prevFlags.Trigger.enableL1CaloPhase1,
274 help=
'enable gFEX ByteStream conversion/simulation')
276 flags.addFlag(
'Trigger.L1.L1CaloSuperCellContainerName',
lambda prevFlags:
277 "EmulatedSCell" if prevFlags.GeoModel.Run
is LHCPeriod.Run2
else "SCell",
278 help=
'name of SuperCell container')
280 flags.addFlag(
'Trigger.L1.doTopo',
True,
281 help=
'enable L1Topo ByteStream conversion/simulation (steering both legacy and phase-1 Topo)')
283 flags.addFlag(
'Trigger.L1.doTopoPhase1',
lambda prevFlags:
284 prevFlags.Trigger.L1.doTopo
and prevFlags.Trigger.enableL1CaloPhase1,
285 help=
'control Phase-I L1Topo simulation even if L1.doTopo is True')
287 flags.addFlag(
'Trigger.L1.doGlobal',
lambda prevFlags: prevFlags.GeoModel.Run >= LHCPeriod.Run4,
288 help=
'enable L0Global ByteStream conversion/simulation')
290 flags.addFlag(
'Trigger.L1.doCTP',
True,
291 help=
'enable CTP ByteStream conversion/simulation')
293 flags.addFlag(
'Trigger.L1.Menu.doHeavyIonTobThresholds',
lambda prevFlags:
294 'HI' in prevFlags.Trigger.triggerMenuSetup,
295 help=
'modify min-pt-to-Topo threshold for TOBs to HI values')
297 flags.addFlag(
'Trigger.L1.errorOnMissingTOB',
True,
298 help=
'Set to true to enable strict-mode which will generate an ERROR on missing (non-overflow) TOB events in HLT-seeding from L1')
301 flags.addFlag(
'Trigger.Online.partitionName', os.getenv(
'TDAQ_PARTITION')
or '',
302 help=
'partition name used to determine online vs offline BS result writing')
304 flags.addFlag(
'Trigger.Online.isPartition',
lambda prevFlags: len(prevFlags.Trigger.Online.partitionName)>0,
305 help=
'check if job is running in a partition (i.e. partition name is not empty)')
307 flags.addFlag(
'Trigger.Online.useOnlineTHistSvc',
False,
308 help=
'use online THistSvc')
310 flags.addFlag(
'Trigger.Online.useOnlineWebdaqHistSvc',
False,
311 help=
'use online Webdaq HistSvc')
313 flags.addFlag(
'Trigger.Online.BFieldAutoConfig',
True,
314 help=
'auto-configure magnetic field from currents in IS')
316 flags.addFlag(
'Trigger.writeBS',
False,
317 help=
'enable bytestream writing of trigger information')
319 flags.addFlag(
'Trigger.doTransientByteStream',
lambda prevFlags:
320 True if prevFlags.Input.Format
is Format.POOL
and prevFlags.Trigger.doCalo
else False,
321 help=
'create transient BS (for running on MC RDO with clients that require BS inputs)')
323 flags.addFlag(
'Trigger.AODEDMSet',
lambda flags:
'AODSLIM' if flags.Input.isMC
else 'AODFULL',
324 help=
'list of EDM objects to be written to AOD')
326 flags.addFlag(
'Trigger.ESDEDMSet',
'ESD',
327 help=
'list of EDM objects to be written to ESD')
329 flags.addFlag(
'Trigger.ExtraEDMList', [],
330 help=
'list of extra EDM objects to be stored (for testing). Supported features: Add new items. Add extra decorations to existing Aux. Add additional output targets.')
332 def __availableRecoMetadata(flags):
333 systems = [
'L1',
'HLT']
335 if not any(flags.Input.Files)
and flags.Common.isOnline:
338 elif flags.Trigger.doHLT:
339 raise RuntimeError(
'Trigger.availableRecoMetadata is ill-defined if Trigger.doHLT==True')
341 elif flags.Input.Format
is Format.BS:
342 from TrigConfigSvc.TriggerConfigAccess
import getKeysFromCool
344 return ( ([
'L1']
if 'L1PSK' in keys
else []) +
345 ([
'HLT']
if 'HLTPSK' in keys
else []) )
348 return systems
if flags.Trigger.triggerConfig ==
'INFILE' else []
350 flags.addFlag(
'Trigger.availableRecoMetadata',
lambda flags: __availableRecoMetadata(flags),
351 help=
"list of enabled trigger sub-systems in reconstruction: ['L1,'HLT']")
353 flags.addFlag(
"Trigger.decodeHLT",
True,
354 help=
'enable decoding of HLT trigger decision/result in reconstruction')
356 flags.addFlag(
"Trigger.DecisionMakerValidation.Execute",
True,
357 help=
'run trigger decision validation algorithm in reconstruction')
359 flags.addFlag(
"Trigger.DecisionMakerValidation.ErrorMode",
True,
360 help=
'emit an ERROR (or WARNING) in case of trigger decision validation failure')
363 def __triggerConfig(flags):
364 _log = logging.getLogger(
'TriggerConfigFlags.triggerConfig')
365 if flags.Common.isOnline
and not flags.Trigger.doHLT:
367 _log.debug(
"Autoconfigured default value for running reconstruction inside Point 1: 'DB'")
369 elif flags.Input.Format
is Format.BS:
370 from glob
import glob
371 hasLocal =
True if (glob(
"HLTMenu*.json")
and glob(
"L1Menu*.json")
and glob(
"HLTPrescales*.json")
and glob(
"L1Prescales*.json")
and glob(
"HLTMonitoring*.json")
and glob(
"BunchGroupSet*.json"))
else False
372 if flags.Trigger.doHLT:
374 _log.debug(
"Autoconfigured default value for running the trigger on data: 'FILE'")
380 _log.debug(
"Autoconfigured default value for running reconstruction with a pre-supplied set of trigger configuration JSON files: 'FILE'")
382 elif flags.GeoModel.Run >= LHCPeriod.Run3:
384 _log.debug(
"Autoconfigured default value for reconstruction of Run 3 data: 'DB'")
388 _log.debug(
"Autoconfigured default value for reconstruction of Run 1 or Run 2 data: 'FILE'")
391 from AthenaConfiguration.AutoConfigFlags
import GetFileMD
395 hasTrigMeta = (
"metadata_items" in md
and any((
'TriggerMenu' in key)
for key
in md[
"metadata_items"].
keys()))
398 _log.debug(
"Autoconfigured default value to read trigger configuration data from the input file: 'INFILE'")
402 _log.debug(
"Autoconfigured default value to read trigger configuration data from disk for MC production: 'FILE'")
405 flags.addFlag(
'Trigger.triggerConfig',
lambda flags: __triggerConfig(flags),
406 help=
'Trigger configuration source (https://twiki.cern.ch/twiki/bin/view/Atlas/TriggerConfigFlag)')
408 flags.addFlag(
'Trigger.triggerMenuSetup',
lambda flags:
'MC_pp_run3_v1_BulkMCProd_prescale' if flags.GeoModel.Run
is LHCPeriod.Run3
else 'MC_pp_run4_v1_BulkMCProd_prescale',
409 help=
'name of the trigger menu')
411 flags.addFlag(
'Trigger.generateMenuDiagnostics',
False,
412 help=
'print debug output from control flow generation')
414 flags.addFlag(
'Trigger.fastMenuGeneration',
True,
415 help=
'avoid re-merging CAs that were already seen once')
417 flags.addFlag(
'Trigger.disableCPS',
False,
418 help=
'disable coherent prescale sets (for testing with small menu)')
420 flags.addFlag(
'Trigger.enableEndOfEventProcessing',
True,
421 help=
'enable execution of extra algorithms for accepted events')
423 flags.addFlag(
'Trigger.doCFEmulationTest',
False,
424 help=
'enable run Control Flow Emulation test')
429 if doTriggerRecoFlags:
433 flags.Trigger.disableCPS =
lambda prevFlags: prevFlags.Trigger.selectChains
or len(prevFlags.Trigger.enabledSignatures)==1