25 Configures trigger data decoding
27 HLTResultMTByteStreamDecoderAlg -> TriggerEDMDeserialiserAlg
30 TrigBSExtraction -> TrigDecisionMaker -> DecisionConv to xAOD -> NavigationConv to xAOD
35 log.debug(
"TriggerRecoCfgData: Preparing the trigger handling of reconstruction of data")
36 acc = ComponentAccumulator()
37 acc.merge( ByteStreamReadCfg(flags) )
38 if flags.Trigger.L1.doMuon
or flags.Trigger.L1.doCalo
or flags.Trigger.L1.doTopo
or flags.Trigger.L1.doCTP:
39 acc.merge( L1TriggerByteStreamDecoderCfg(flags) )
42 acc.merge( metadataAcc )
45 if flags.Trigger.EDMVersion >= 3:
48 from TrigDecisionMaker.TrigDecisionMakerConfig
import Run3DecisionMakerCfg
49 acc.merge(Run3DecisionMakerCfg(flags))
51 if flags.Trigger.doNavigationSlimming:
52 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig
import TrigNavSlimmingMTCfg
53 acc.merge(TrigNavSlimmingMTCfg(flags))
56 elif flags.Trigger.EDMVersion == 2:
59 from TrigDecisionMaker.TrigDecisionMakerConfig
import Run1Run2DecisionMakerCfg
60 acc.merge (Run1Run2DecisionMakerCfg(flags) )
64 elif flags.Trigger.EDMVersion == 1:
65 raise RuntimeError(
"Run-1 trigger reconstruction is no longer supported")
67 raise RuntimeError(
"Invalid EDMVersion=%s " % flags.Trigger.EDMVersion)
70 if flags.Trigger.enableL1CaloLegacy:
71 from AnalysisTriggerAlgs.AnalysisTriggerAlgsConfig
import RoIBResultToxAODCfg
72 xRoIBResultAcc, _ = RoIBResultToxAODCfg(flags)
73 acc.merge( xRoIBResultAcc )
75 if flags.Input.Format
is Format.BS
and flags.Input.DataYear < 2024:
76 from L1TopoByteStream.L1TopoByteStreamConfig
import L1TopoRawDataContainerBSCnvCfg
77 acc.merge( L1TopoRawDataContainerBSCnvCfg(flags) )
78 topoEDM = [
'xAOD::L1TopoRawDataContainer#L1TopoRawData',
79 'xAOD::L1TopoRawDataAuxContainer#L1TopoRawDataAux.']
80 acc.merge(addToESD(flags, topoEDM))
81 acc.merge(addToAOD(flags, topoEDM))
89 Configures trigger MC handing during reconstruction
90 Note that a lot of the T0 handling of the trigger output for data is bundled into
91 the RDO to RDO_TRIG sub-step for MC, hence there is much less to do here for MC.
92 Notably: the xAOD::TrigDecision and all metadata should already be in the RDO_TRIG.
95 Propagation of Run 3 HLT collections from input RDO_TRIG to output POOL files.
96 Execution of Run-3 reconstruction-level trigger navigation slimming.
99 Propagation of Run 2 HLT collections from input RDO_TRIG to output POOL files.
100 Execution of Run 2 style reconstruction-level trigger navigation slimming.
101 Optional conversion of Run 2 navigation to Run 3 navigation.
102 Optional execution of Run 3 reconstruction-level trigger navigation slimming on conversion output.
105 No current workflows are able to run the Run 1 trigger MC simulation. Unsupported.
109 if flags.Input.Format
is Format.BS:
110 log.warning(
"TriggerRecoCfgMC does not currently support MC files encoded as bytestream. Switching off handling of trigger inputs.")
111 return ComponentAccumulator()
112 if flags.Trigger.EDMVersion == 1:
113 log.warning(
"TriggerRecoCfgMC does not currently support MC files with Run 1 trigger payload. Switching off handling of trigger inputs.")
114 return ComponentAccumulator()
116 log.debug(
"TriggerRecoCfgMC: Preparing the trigger handling of reconstruction of MC")
117 acc = ComponentAccumulator()
123 from TrigNavTools.NavConverterConfig
import NavConverterCfg
124 acc.merge(NavConverterCfg(flags))
127 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig
import TrigNavSlimmingMTCfg
128 acc.merge(TrigNavSlimmingMTCfg(flags))
135 """Sets up access to HLT, L1, BGRP, Monitoring, HLT PS and L1 PS JSON files from 'FILE' or 'DB', writes JSON to metaStore and keys to eventStore"""
136 acc = ComponentAccumulator()
138 if flags.Trigger.triggerConfig !=
'INFILE':
139 acc.merge( TrigConfigSvcCfg(flags) )
140 keyWriterTool = CompFactory.TrigConf.KeyWriterTool(
"KeyWriterToolOffline")
141 keyWriterOutput = str(keyWriterTool.ConfKeys)
142 acc.addEventAlgo( CompFactory.TrigConf.xAODMenuWriter(
"xAODMenuWriter", KeyWriterTool = keyWriterTool) )
143 return acc, keyWriterOutput
146 """Configures which trigger collections are recorded"""
147 acc = ComponentAccumulator()
150 if flags.Output.doWriteESD
is False and flags.Output.doWriteAOD
is False:
151 log.debug(
"TriggerEDMCfg: Nothing to do as both Output.doWriteAOD and Output.doWriteESD are False")
157 menuMetadata = [
"xAOD::TriggerMenuJsonContainer#*",
"xAOD::TriggerMenuJsonAuxContainer#*",]
158 if flags.Trigger.EDMVersion
in [1,2]:
159 menuMetadata += [
'xAOD::TriggerMenuAuxContainer#*',
'xAOD::TriggerMenuContainer#*',]
161 from TrigEDMConfig.TriggerEDM
import getLvl1ESDList, getLvl1AODList
162 acc.merge(addToESD(flags, edmDictToList(getLvl1ESDList())))
163 acc.merge(addToAOD(flags, edmDictToList(getLvl1AODList())))
165 edmVersion =
max(2, flags.Trigger.EDMVersion)
166 _TriggerESDList = getTriggerEDMList(flags, key=flags.Trigger.ESDEDMSet, runVersion=edmVersion)
167 _TriggerAODList = getTriggerEDMList(flags, key=flags.Trigger.AODEDMSet, runVersion=edmVersion)
168 log.debug(
"ESD EDM list: %s", _TriggerESDList)
169 log.debug(
"AOD EDM list: %s", _TriggerAODList)
175 not_in = [ element
for element
in _TriggerAODList
if element
not in _TriggerESDList ]
177 log.warning(
"In AOD list but not in ESD list: ")
180 log.info(
"AOD list is subset of ESD list - good.")
183 acc.merge(addToESD(flags, edmDictToList(_TriggerESDList), MetadataItemList = menuMetadata))
184 acc.merge(addToAOD(flags, edmDictToList(_TriggerAODList), MetadataItemList = menuMetadata))
186 log.info(
"AOD content set according to the AODEDMSet flag: %s and EDM version %d", flags.Trigger.AODEDMSet, flags.Trigger.EDMVersion)
188 if flags.Trigger.EDMVersion == 3
and not flags.Trigger.doOnlineNavigationCompactification
and not flags.Trigger.doNavigationSlimming:
189 nav = [
'xAOD::TrigCompositeContainer#HLTNav*',
'xAOD::TrigCompositeAuxContainer#HLTNav*',]
190 acc.merge(addToAOD(flags, nav))
191 acc.merge(addToESD(flags, nav))
194 if flags.Output.doWriteAOD
and flags.Trigger.EDMVersion == 2:
195 from TrigRoiConversion.TrigRoiConversionConfig
import RoiWriterCfg
196 acc.merge(RoiWriterCfg(flags))
201 """Configures legacy Run1/2 navigation slimming"""
202 acc = ComponentAccumulator()
204 if flags.Trigger.decodeHLT
is False:
205 log.debug(
"Run2Run1NavigationSlimmingCfg: Nothing to do as Trigger.decodeHLT is False")
208 if flags.Trigger.doNavigationSlimming
is False:
209 log.debug(
"Run2Run1NavigationSlimmingCfg: Nothing to do as Trigger.doNavigationSlimming is False")
212 if flags.Trigger.EDMVersion >= 3:
213 log.debug(
"Run2Run1NavigationSlimmingCfg: Nothing to do for EDMVersion >= 3.")
216 if flags.Trigger.ExtraEDMList:
217 log.warning(
"Run2Run1NavigationSlimmingCfg: ExtraEDMList only works for Run 3 and beyond")
220 return list(y.split(
'-')[0]
for x
in edm.values()
for y
in x)
221 from TrigNavTools.TrigNavToolsConfig
import TrigNavigationThinningSvcCfg
223 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
225 if flags.Output.doWriteAOD:
226 _TriggerAODList = getTriggerEDMList(flags, key=flags.Trigger.AODEDMSet)
227 thinningSvc = acc.getPrimaryAndMerge(TrigNavigationThinningSvcCfg(flags,
228 {
'name' :
'HLTNav_StreamAOD',
229 'mode' :
'cleanup_noreload',
230 'result' :
'HLTResult_HLT',
231 'features' : _flatten(_TriggerAODList)}))
232 acc.merge(OutputStreamCfg(flags,
"AOD", trigNavThinningSvc = thinningSvc))
234 if flags.Output.doWriteESD:
235 _TriggerESDList = getTriggerEDMList(flags, key=flags.Trigger.ESDEDMSet)
236 thinningSvc = acc.getPrimaryAndMerge(TrigNavigationThinningSvcCfg(flags,
237 {
'name' :
'HLTNav_StreamESD',
238 'mode' :
'cleanup_noreload',
239 'result' :
'HLTResult_HLT',
240 'features' : _flatten(_TriggerESDList)}))
241 acc.merge(OutputStreamCfg(flags,
"ESD", trigNavThinningSvc = thinningSvc))
247 """Configures Trigger data from BS extraction """
248 from SGComps.AddressRemappingConfig
import InputRenameCfg
250 acc = ComponentAccumulator()
251 extr = CompFactory.TrigBSExtraction()
255 extr.ExtraOutputs.add((
"TrigBSExtractionOutput",
"StoreGateSvc+TrigBSExtractionOutput"))
257 if flags.Trigger.decodeHLT:
258 from TrigEDMConfig.TriggerEDM
import getEDMLibraries, getPreregistrationList, getClassesToIgnore
259 serialiserTool = CompFactory.TrigTSerializer()
260 acc.addPublicTool(serialiserTool)
261 extr.Navigation = CompFactory.HLT.Navigation(
"Navigation")
262 extr.Navigation.Dlls = getEDMLibraries()
263 extr.Navigation.ClassesToPreregister = getPreregistrationList(flags.Trigger.EDMVersion, flags.Trigger.doxAODConversion)
264 extr.Navigation.ClassesFromPayloadIgnore = getClassesToIgnore(flags)
266 from eformat
import helper
as efh
268 if flags.Trigger.EDMVersion == 1:
269 raise RuntimeError(
"Run-1 trigger reconstruction is no longer supported")
271 acc.merge(InputRenameCfg(
"HLT::HLTResult",
"HLTResult_HLT",
"HLTResult_HLT_BS"))
272 robIDMap[
"HLTResult_HLT_BS"] = efh.SourceIdentifier(efh.SubDetector.TDAQ_HLT, 0).
code()
273 extr.HLTResultKeyIn =
"HLTResult_HLT_BS"
274 extr.HLTResultKeyOut =
"HLTResult_HLT"
277 if flags.Trigger.EDMVersion == 2:
278 stream = flags.Input.TriggerStream
279 if stream.startswith(
'calibration_DataScouting_'):
280 ds_tag =
'_'.join(stream.split(
'_')[1:3])
281 ds_id = int(stream.split(
'_')[2])
282 acc.merge(InputRenameCfg(
"HLT::HLTResult", ds_tag, ds_tag+
"_BS"))
283 robIDMap[ds_tag+
"_BS"] = efh.SourceIdentifier(efh.SubDetector.TDAQ_HLT, ds_id).
code()
284 extr.DSResultKeysIn += [ ds_tag+
"_BS" ]
285 extr.DSResultKeysOut += [ ds_tag ]
288 log.info(
"Will not schedule real HLT bytestream extraction, instead EDM gap filling is running")
291 extr.HLTResultKeyIn =
""
292 extr.HLTResultKeyOut =
""
294 HLTResults = [ f
"HLT::HLTResult/{k}" for k
in robIDMap ]
295 acc.addService( CompFactory.ByteStreamAddressProviderSvc( TypeNames = HLTResults) )
297 from TrigEDMConfig.TriggerEDM
import getTPList
298 acc.addPublicTool( CompFactory.TrigSerTPTool(TPMap = getTPList((flags.Trigger.EDMVersion))) )
300 acc.addPublicTool( CompFactory.TrigSerializeConvHelper(doTP =
True) )
302 acc.addPublicTool( CompFactory.HLT.HLTResultByteStreamTool(HLTResultRobIdMap = robIDMap))
304 acc.addEventAlgo(extr)
310 """Configures conversions BS -> HLTResultMT -> Collections """
311 acc = ComponentAccumulator()
313 if flags.Trigger.decodeHLT
is False:
314 log.debug(
"Run3TriggerBSUnpackingCfg: Nothing to do as Trigger.decodeHLT is False")
317 from AthenaCommon.CFElements
import seqAND
318 from TrigEDMConfig.DataScoutingInfo
import (
319 getDataScoutingStreams, getDataScoutingTypeFromStream,
320 getFullHLTResultID, getDataScoutingResultID,
322 from TriggerJobOpts.TriggerConfig
import triggerEDMGapFillerCfg
323 from TrigDecisionTool.TrigDecisionToolConfig
import getRun3NavigationContainerFromInput
327 if flags.Input.TriggerStream
in getDataScoutingStreams():
328 dstype = getDataScoutingTypeFromStream(flags.Input.TriggerStream)
330 log.info(f
'Configuring BS decoding/deserialisation of HLT result for \'{dstype}\' only')
331 ids_to_decode = [getDataScoutingResultID(dstype)]
332 id_to_deserialise = {dstype: getDataScoutingResultID(dstype)}
335 ids_to_decode = [getFullHLTResultID()]
336 id_to_deserialise = {
'': getFullHLTResultID()}
339 log.debug(
'Configuring BS decoding of all HLT results and deserialisation of full HLT')
340 partialHLT_streams = [
341 stream
for stream
in getDataScoutingStreams()
if stream.split(
'_')[1]
in flags.Input.ProcessingTags
343 partialHLT_dstypes = [
344 getDataScoutingTypeFromStream(stream)
for stream
in partialHLT_streams
347 getDataScoutingResultID(dstype)
for dstype
in partialHLT_dstypes
349 log.debug(f
'Configuring BS decoding and deserialisation of all HLT results: full HLT + {partialHLT_dstypes}')
351 ids_to_decode += partialHLT_dsids
353 id_to_deserialise.update({
354 dstype:dsid
for dstype,dsid
in zip(partialHLT_dstypes, partialHLT_dsids)
357 decoder = CompFactory.HLTResultMTByteStreamDecoderAlg(ModuleIdsToDecode=ids_to_decode)
358 acc.addSequence(seqAND(
"HLTDecodingSeq"))
359 acc.addEventAlgo( decoder,
"HLTDecodingSeq")
360 for dstype, id
in id_to_deserialise.items():
361 deserialiser = CompFactory.TriggerEDMDeserialiserAlg(
362 f
"TrigDeserialiser{dstype}",
367 deserialiser.ExtraOutputs.add((
'xAOD::TrigCompositeContainer' ,
'StoreGateSvc+DummyForGapFiller'))
369 deserialiser.SkipDuplicateRecords =
True
370 deserialiser.PermitMissingModule =
True
371 acc.addEventAlgo( deserialiser,
"HLTDecodingSeq")
376 gapFiller = triggerEDMGapFillerCfg(
377 flags, edmSet=[
'BS'],
378 extraInputs=[(
'xAOD::TrigCompositeContainer' ,
'StoreGateSvc+DummyForGapFiller')],
380 'xAOD::TrigCompositeContainer',
381 'StoreGateSvc+'+getRun3NavigationContainerFromInput(flags)
385 gapFiller = triggerEDMGapFillerCfg(flags, edmSet=[dstype])
386 acc.merge( gapFiller,
"HLTDecodingSeq" )
388 log.debug(
"Configured HLT result BS decoding sequence")