248def Run1Run2BSExtractionCfg( flags ):
249 """Configures Trigger data from BS extraction """
250 from SGComps.AddressRemappingConfig import InputRenameCfg
251
252 acc = ComponentAccumulator()
253 extr = CompFactory.TrigBSExtraction()
254 robIDMap = {}
255
256
257 extr.ExtraOutputs.add(("TrigBSExtractionOutput", "StoreGateSvc+TrigBSExtractionOutput"))
258
259 if flags.Trigger.decodeHLT:
260
261 if flags.Trigger.EDMVersion == 1 and flags.Trigger.doxAODConversion:
262 extr.BStoxAOD = acc.popToolsAndMerge( Run1xAODConversionCfg(flags) )
263
264 serialiserTool = CompFactory.TrigTSerializer()
265 acc.addPublicTool(serialiserTool)
266 extr.NavigationForL2 = CompFactory.HLT.Navigation("NavigationForL2",
267 ClassesFromPayloadIgnore = ["TrigPassBits#passbits"])
268
269 extr.Navigation = CompFactory.HLT.Navigation("Navigation")
270 from TrigEDMConfig.TriggerEDM import getEDMLibraries
271 extr.Navigation.Dlls = getEDMLibraries()
272 from TrigEDMConfig.TriggerEDM import getPreregistrationList
273 extr.Navigation.ClassesToPreregister = getPreregistrationList(flags.Trigger.EDMVersion, flags.Trigger.doxAODConversion)
274 from eformat import helper as efh
275
276 if flags.Trigger.EDMVersion == 1:
277 acc.merge(InputRenameCfg("HLT::HLTResult", "HLTResult_L2", "HLTResult_L2_BS"))
278 acc.merge(InputRenameCfg("HLT::HLTResult", "HLTResult_EF", "HLTResult_EF_BS"))
279 robIDMap[
"HLTResult_L2_BS"] = efh.SourceIdentifier(efh.SubDetector.TDAQ_LVL2, 0).
code()
280 robIDMap[
"HLTResult_EF_BS"] = efh.SourceIdentifier(efh.SubDetector.TDAQ_EVENT_FILTER, 0).
code()
281 extr.L2ResultKeyIn = "HLTResult_L2_BS"
282 extr.L2ResultKeyOut = "HLTResult_L2"
283 extr.HLTResultKeyIn = "HLTResult_EF_BS"
284 extr.HLTResultKeyOut = "HLTResult_EF"
285 else:
286 acc.merge(InputRenameCfg("HLT::HLTResult", "HLTResult_HLT", "HLTResult_HLT_BS"))
287 robIDMap[
"HLTResult_HLT_BS"] = efh.SourceIdentifier(efh.SubDetector.TDAQ_HLT, 0).
code()
288 extr.HLTResultKeyIn = "HLTResult_HLT_BS"
289 extr.HLTResultKeyOut = "HLTResult_HLT"
290
291
292 if flags.Trigger.EDMVersion == 2:
293 stream = flags.Input.TriggerStream
294 if stream.startswith('calibration_DataScouting_'):
295 ds_tag = '_'.join(stream.split('_')[1:3])
296 ds_id = int(stream.split('_')[2])
297 acc.merge(InputRenameCfg("HLT::HLTResult", ds_tag, ds_tag+"_BS"))
298 robIDMap[ds_tag+
"_BS"] = efh.SourceIdentifier(efh.SubDetector.TDAQ_HLT, ds_id).
code()
299 extr.DSResultKeysIn += [ ds_tag+"_BS" ]
300 extr.DSResultKeysOut += [ ds_tag ]
301
302 else:
303 log.info("Will not schedule real HLT bytestream extraction, instead EDM gap filling is running")
304
305
306 extr.HLTResultKeyIn = ""
307 extr.HLTResultKeyOut = ""
308
309 HLTResults = [ f"HLT::HLTResult/{k}" for k in robIDMap.keys() ]
310 acc.addService( CompFactory.ByteStreamAddressProviderSvc( TypeNames = HLTResults) )
311
312 from TrigEDMConfig.TriggerEDM import getTPList
313 acc.addPublicTool( CompFactory.TrigSerTPTool(TPMap = getTPList((flags.Trigger.EDMVersion))) )
314
315 acc.addPublicTool( CompFactory.TrigSerializeConvHelper(doTP = True) )
316
317 acc.addPublicTool( CompFactory.HLT.HLTResultByteStreamTool(HLTResultRobIdMap = robIDMap))
318
319 acc.addEventAlgo(extr)
320
321 return acc
322