ATLAS Offline Software
L1TopoSimulationConfig.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4 from AthenaConfiguration.ComponentFactory import CompFactory
5 from AthenaMonitoringKernel.GenericMonitoringTool import GenericMonitoringTool
6 
8 
10 
11  from L1TopoSimulation.L1TopoInputHistograms import configureEMTauInputProviderHistograms, configureEnergyInputProviderHistograms, configureJetInputProviderHistograms
12  emtauProvider = CompFactory.LVL1.EMTauInputProvider("EMTauInputProvider")
13  emtauProvider.MonTool = GenericMonitoringTool(flags, 'MonTool')
14  emtauProvider.MonTool.HistPath = 'L1LegacyTopoSimulation/EMTauInputProvider'
15  configureEMTauInputProviderHistograms(emtauProvider, flags)
16  energyProvider = CompFactory.LVL1.EnergyInputProvider("EnergyInputProvider")
17  energyProvider.MonTool = GenericMonitoringTool(flags, 'MonTool')
18  energyProvider.MonTool.HistPath = 'L1LegacyTopoSimulation/EnergyInputProvider'
19  configureEnergyInputProviderHistograms(energyProvider, flags)
20  jetProvider = CompFactory.LVL1.JetInputProvider("JetInputProvider")
21  jetProvider.MonTool = GenericMonitoringTool(flags, 'MonTool')
22  jetProvider.MonTool.HistPath = 'L1LegacyTopoSimulation/JetInputProvider'
23  configureJetInputProviderHistograms(jetProvider, flags)
24 
25  topoSimAlg = CompFactory.LVL1.L1TopoSimulation("L1LegacyTopoSimulation",
26  EMTAUInputProvider = emtauProvider,
27  JetInputProvider = jetProvider,
28  EnergyInputProvider = energyProvider,
29  IsLegacyTopo = True,
30  InputDumpFile = "inputdump_legacy.txt",
31  EnableInputDump = flags.Trigger.enableL1TopoDump,
32  UseBitwise = flags.Trigger.enableL1TopoBWSimulation,
33  MonHistBaseDir = "L1/L1LegacyTopoAlgorithms"
34  )
35 
36  # No muon inputs to legacy Topo
37  topoSimAlg.MuonInputProvider.locationMuCTPItoL1Topo = ""
38  topoSimAlg.MuonInputProvider.locationMuCTPItoL1Topo1 = ""
39  topoSimAlg.MuonInputProvider.locationMuonRoI = ""
40  topoSimAlg.MuonInputProvider.locationMuonRoI1 = ""
41  topoSimAlg.MuonInputProvider.ROIBResultLocation = ""
42 
43  acc.addEventAlgo(topoSimAlg)
44  return acc
45 
46 def L1TopoSimulationCfg(flags, doMonitoring=True, readMuCTPI=False, name="L1TopoSimulation", deactivateL1TopoMuons=False, useMuonRoIs=False, useMuonDecoder=False, writeMuonRoIs = True):
47 
48  acc = ComponentAccumulator()
49 
50  decoderTools = []
51  maybeMissingRobs = []
52 
53  #Configure the MuonInputProvider
54  muProvider=""
55 
56  if flags.Trigger.L1.doMuon and not deactivateL1TopoMuons:
57  muProvider = CompFactory.LVL1.MuonInputProvider("MuonInputProvider")
58 
59  """
60  If muons coming from the decoding, we use MuonRoI, otherwise MuCTPIL1Topo
61  So here we should be adding proper flag for P1, and when input file is RAW
62  Simply, if muons are simulated, we will use MuCTPIL1Topo, if decoded MuonRoI
63  """
64 
65  if readMuCTPI:
66  muProvider.locationMuCTPItoL1Topo = ""
67  muProvider.locationMuCTPItoL1Topo1 = ""
68  muProvider.locationMuonRoI = "L1MuCTPItoL1TopoLocationFromMuonRoI"
69  muProvider.locationMuonRoI1 = "L1MuCTPItoL1TopoLocationFromMuonRoI1"
70  if useMuonRoIs:
71  muProvider.locationMuonRoI = "LVL1MuonRoIs"
72  muProvider.locationMuonRoI1 = "LVL1MuonRoIsBCp1"
73  else:
74  muProvider.locationMuonRoI = ""
75  muProvider.locationMuonRoI1 = ""
76 
77  #Configure the MuonRoiTools for the MIP
78  from TrigT1MuonRecRoiTool.TrigT1MuonRecRoiToolConfig import RPCRecRoiToolCfg, TGCRecRoiToolCfg
79  muProvider.RecRpcRoiTool = acc.popToolsAndMerge(RPCRecRoiToolCfg(flags))
80  muProvider.RecTgcRoiTool = acc.popToolsAndMerge(TGCRecRoiToolCfg(flags))
81 
82  if useMuonDecoder:
83  from MuonConfig.MuonBytestreamDecodeConfig import RpcBytestreamDecodeCfg,TgcBytestreamDecodeCfg
84  acc.merge(RpcBytestreamDecodeCfg(flags))
85  acc.merge(TgcBytestreamDecodeCfg(flags))
86  from TrigT1ResultByteStream.TrigT1ResultByteStreamConfig import MuonRoIByteStreamToolCfg
87  muonRoiTool = acc.popToolsAndMerge(MuonRoIByteStreamToolCfg(flags, name="L1MuonBSDecoderToolInL1Topo", writeBS=False, writeDecodedMuonRoIs = writeMuonRoIs))
88  decoderTools += [muonRoiTool]
89  #maybeMissingRobs += muonRoiTool.ROBIDs
90 
91  emtauProvider = ""
92  jetProvider = ""
93  energyProvider = ""
94 
95  if flags.Trigger.L1.doeFex:
96  emtauProvider = CompFactory.LVL1.eFexInputProvider("eFexInputProvider")
97  if flags.Trigger.L1.dojFex:
98  jetProvider = CompFactory.LVL1.jFexInputProvider("jFexInputProvider")
99  if flags.Trigger.L1.dogFex:
100  energyProvider = CompFactory.LVL1.gFexInputProvider("gFexInputProvider")
101 
102  controlHistSvc = CompFactory.LVL1.ControlHistSvc("ControlHistSvc")
103 
104  IsData = True
105  if flags.Input.isMC:
106  IsData = False
107 
108  from L1TopoByteStream.L1TopoByteStreamConfig import L1TopoPhase1ByteStreamToolCfg
109  l1topoBSTool = acc.popToolsAndMerge(L1TopoPhase1ByteStreamToolCfg(flags, "L1TopoBSDecoderTool"))
110  decoderTools += [l1topoBSTool]
111  maybeMissingRobs += l1topoBSTool.ROBIDs
112 
113  if IsData:
114  decoderAlg = CompFactory.L1TriggerByteStreamDecoderAlg(name="L1TriggerByteStreamDecoder",
115  DecoderTools=decoderTools,
116  MaybeMissingROBs=maybeMissingRobs)
117 
118  acc.addEventAlgo(decoderAlg, sequenceName='AthAlgSeq')
119 
120  if not flags.Trigger.enableL1CaloPhase1:
121  if (emtauProvider != ""):
122  emtauProvider.eFexEMRoIKey = ""
123  emtauProvider.eFexTauRoIKey = ""
124  if (jetProvider != ""):
125  jetProvider.jFexSRJetRoIKey = ""
126  jetProvider.jFexLRJetRoIKey = ""
127  jetProvider.jFexFwdElRoIKey = ""
128  jetProvider.jFexTauRoIKey = ""
129  jetProvider.jFexMETRoIKey = ""
130  jetProvider.jFexSumETRoIKey = ""
131  if (energyProvider != ""):
132  energyProvider.gFexSRJetRoIKey = ""
133  energyProvider.gFexLRJetRoIKey = ""
134  energyProvider.gMETComponentsJwojKey = ""
135  energyProvider.gMHTComponentsJwojKey = ""
136  energyProvider.gMETComponentsNoiseCutKey = ""
137  energyProvider.gMETComponentsRmsKey = ""
138  energyProvider.gScalarEJwojKey = ""
139 
140  topoSimAlg = CompFactory.LVL1.L1TopoSimulation(name,
141  MuonInputProvider = muProvider,
142  EMTAUInputProvider = emtauProvider,
143  JetInputProvider = jetProvider,
144  EnergyInputProvider = energyProvider,
145  ControlHistSvc = controlHistSvc, # if doMonitoring else "",
146  IsLegacyTopo = False,
147  doMonitoring = doMonitoring,
148  EnableInputDump = flags.Trigger.enableL1TopoDump,
149  UseBitwise = flags.Trigger.enableL1TopoBWSimulation
150  )
151  if name!="L1TopoSimulation":
152  topoSimAlg.MonHistBaseDir = "L1/OnlineL1TopoAlgorithms"
153 
154  acc.addEventAlgo(topoSimAlg)
155 
156 
157  if doMonitoring:
158  from L1TopoOnlineMonitoring import L1TopoOnlineMonitoringConfig as TopoMonConfig
159  if name=="L1TopoSimulation":
160  acc.addEventAlgo(TopoMonConfig.getL1TopoPhase1OnlineMonitor(flags,'L1/L1TopoSimDecisions',
161  doHwMon=IsData,doComp=IsData, doMultComp=IsData))
162  else:
163  acc.addEventAlgo(TopoMonConfig.getL1TopoPhase1OnlineMonitor(flags,'L1/OnlineL1TopoSimDecisions',
164  toolName=name+"_Monitor",
165  doHwMon=IsData,doComp=IsData, doMultComp=IsData))
166 
167  return acc
168 
169 def L1TopoSimulationStandaloneCfg(flags, outputEDM=[], doMuons = False, doMonitoring=True):
170 
171  acc = ComponentAccumulator()
172 
173  efex_provider_attr = ['eFexEMRoI','eFexTauRoI']
174  jfex_provider_attr = ['jFexSRJetRoI','jFexLRJetRoI','jFexFwdElRoI','jFexTauRoI','jFexMETRoI','jFexSumETRoI']
175  gfex_provider_attr = ['gFexSRJetRoI','gFexLRJetRoI', 'gScalarEJwoj','gMETComponentsJwoj','gMHTComponentsJwoj', 'gMETComponentsNoiseCut', 'gMETComponentsRms']
176  #Note: Unused container outputs from gFEX are:
177  #'gFexRhoRoI', 'gMSTComponentsJwoj', 'gScalarENoiseCut', 'gScalarERms'
178  #as compared with: https://gitlab.cern.ch/atlas/athena/-/blob/main/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXSysSim.h#L128-136
179 
180 
181  from L1TopoSimulation.L1TopoInputHistograms import configureMuonInputProviderHistograms, configureeFexInputProviderHistograms, configurejFexInputProviderHistograms, configuregFexInputProviderHistograms
182 
183  #Configure the MuonInputProvider
184  muProvider=""
185  if doMuons:
186  muProvider = CompFactory.LVL1.MuonInputProvider("MuonInputProvider")
187 
188  if flags.Trigger.L1.doMuonTopoInputs:
189  muProvider.locationMuCTPItoL1Topo = ""
190  muProvider.locationMuCTPItoL1Topo1 = ""
191  muProvider.locationMuonRoI = "L1MuCTPItoL1TopoLocationFromMuonRoI"
192  muProvider.locationMuonRoI1 = "L1MuCTPItoL1TopoLocationFromMuonRoI1"
193  else:
194  muProvider.locationMuonRoI = ""
195  muProvider.locationMuonRoI1 = ""
196 
197  #Configure the MuonRoiTools for the MIP
198  from TrigT1MuonRecRoiTool.TrigT1MuonRecRoiToolConfig import RPCRecRoiToolCfg, TGCRecRoiToolCfg
199  muProvider.RecRpcRoiTool = acc.popToolsAndMerge(RPCRecRoiToolCfg(flags))
200  muProvider.RecTgcRoiTool = acc.popToolsAndMerge(TGCRecRoiToolCfg(flags))
201  muProvider.MonTool = GenericMonitoringTool(flags, 'MonTool')
202  muProvider.MonTool.HistPath = 'L1TopoSimulation/MuonInputProvider'
203  configureMuonInputProviderHistograms(muProvider, flags)
204 
205 
206  efexProvider = CompFactory.LVL1.eFexInputProvider("eFexInputProvider")
207  efexProvider.MonTool = GenericMonitoringTool(flags, 'MonTool')
208  efexProvider.MonTool.HistPath = 'L1TopoSimulation/eFexInputProvider'
209  configureeFexInputProviderHistograms(efexProvider, flags)
210  jfexProvider = CompFactory.LVL1.jFexInputProvider("jFexInputProvider")
211  jfexProvider.MonTool = GenericMonitoringTool(flags, 'MonTool')
212  jfexProvider.MonTool.HistPath = 'L1TopoSimulation/jFexInputProvider'
213  configurejFexInputProviderHistograms(jfexProvider, flags)
214  gfexProvider = CompFactory.LVL1.gFexInputProvider("gFexInputProvider")
215  gfexProvider.MonTool = GenericMonitoringTool(flags, 'MonTool')
216  gfexProvider.MonTool.HistPath = 'L1TopoSimulation/gFexInputProvider'
217  configuregFexInputProviderHistograms(gfexProvider, flags)
218 
219  for attr in efex_provider_attr:
220  res = [x for x in outputEDM if attr in x]
221  if len(res)>0:
222  key = res[0].split('#')[1]
223  print (f'Key found for eFEX: {key}')
224  setattr(efexProvider,attr+'Key',key)
225  else:
226  setattr(efexProvider,attr+'Key','')
227 
228  for attr in jfex_provider_attr:
229  res = [x for x in outputEDM if attr in x]
230  if len(res)>0:
231  key = res[0].split('#')[1]
232  print (f'Key found for jFEX: {key}')
233  setattr(jfexProvider,attr+'Key',key)
234  else:
235  setattr(jfexProvider,attr+'Key','')
236 
237  for attr in gfex_provider_attr:
238  res = [x for x in outputEDM if attr in x]
239  if len(res)>0:
240  key = res[0].split('#')[1]
241  print (f'Key found for gFEX: {key}')
242  setattr(gfexProvider,attr+'Key',key)
243  else:
244  setattr(gfexProvider,attr+'Key','')
245 
246  topoSimAlg = CompFactory.LVL1.L1TopoSimulation("L1TopoSimulation",
247  MuonInputProvider = muProvider,
248  EMTAUInputProvider = efexProvider,
249  JetInputProvider = jfexProvider,
250  EnergyInputProvider = gfexProvider,
251  IsLegacyTopo = False,
252  doMonitoring = doMonitoring,
253  EnableInputDump = flags.Trigger.enableL1TopoDump,
254  UseBitwise = flags.Trigger.enableL1TopoBWSimulation
255  )
256 
257  acc.addEventAlgo(topoSimAlg)
258 
259  return acc
260 
261 if __name__ == '__main__':
262  from AthenaConfiguration.AllConfigFlags import initConfigFlags
263  from AthenaCommon.Logging import logging
264  from AthenaCommon.Constants import VERBOSE,DEBUG,WARNING,INFO
265  import argparse
266  from argparse import RawTextHelpFormatter
267  import sys
268  from libpyeformat_helper import SourceIdentifier, SubDetector
269 
270  log = logging.getLogger('runL1TopoSim')
271  log.setLevel(DEBUG)
272  algLogLevel = DEBUG
273 
274  parser = argparse.ArgumentParser("Running L1TopoSimulation standalone for the BS input", formatter_class=RawTextHelpFormatter)
275  parser.add_argument("-i","--inputs",nargs='*',action="store", dest="inputs", help="Inputs will be used in commands", required=True)
276  parser.add_argument("-m","--module",action="store", dest="module", help="Input modules wants to be simulated.",default="", required=False)
277  parser.add_argument("-bw","--useBitWise",action="store_true", dest="useBW", help="Run with L1Topo Bitwise simulation?",default=True, required=False)
278  parser.add_argument("-ifex","--doCaloInput",action="store_true", dest="doCaloInput", help="Decoding L1Calo inputs",default=False, required=False)
279  parser.add_argument("-fCtp","--forceCtp",action="store_true", dest="forceCtp", help="Force to CTP monitoring as primary in Sim/Hdw comparison.",default=False, required=False)
280  parser.add_argument("-hdwMon","--algoHdwMon",action="store_true", dest="algoHdwMon", help="Fill algorithm histograms based on hardware decision.",default=False, required=False)
281  parser.add_argument("-perfMon","--perfMonitoring",action="store_true", dest="perfmon", help="Enable performance monitoring",default=False, required=False)
282  parser.add_argument("-redoMenu","--rederiveMenu",action="store_true", dest="redoMenu", help="Will rederive the menu based in local code",default=False, required=False)
283  parser.add_argument("-l","--logLevel",action="store", dest="log", help="Log level.",default="warning", required=False)
284  parser.add_argument("-n","--nevent", type=int, action="store", dest="nevent", help="Maximum number of events will be executed.",default=0, required=False)
285  parser.add_argument("-s","--skipEvents", type=int, action="store", dest="skipEvents", help="How many events will be skipped.",default=0, required=False)
286  parser.add_argument("-d","--enableL1TopoDump", type=bool, action="store", dest="enableL1TopoDump", help="Whether to output events into inputdump.txt",default=False, required=False)
287  args = parser.parse_args()
288 
289  supportedSubsystems = ['Muons','jFex','eFex','gFex','Topo']
290  args_subsystem = args.module.split(',')
291  subsystem = list( set(args_subsystem) & set(supportedSubsystems) )
292  filename = args.inputs
293 
294  if len(subsystem)==0:
295  log.warning(f'subsystem not given or the given subsystem not supported with one of the: {supportedSubsystems}')
296 
297  if args.log == 'info': algLogLevel = INFO
298  if args.log == 'warning': algLogLevel = WARNING
299  if args.log == 'debug': algLogLevel = DEBUG
300  if args.log == 'verbose': algLogLevel = VERBOSE
301 
302  flags = initConfigFlags()
303 
304  flags.Exec.OutputLevel = algLogLevel
305  if(args.nevent > 0):
306  flags.Exec.MaxEvents = args.nevent
307  flags.Trigger.triggerMenuSetup = 'PhysicsP1_pp_run3_v1'
308  if args.redoMenu:
309  flags.Trigger.triggerConfig = 'FILE'
310  else:
311  flags.Trigger.triggerConfig = 'DB'
312  flags.Input.Files = args.inputs
313  flags.Concurrency.NumThreads = 1
314  flags.Concurrency.NumConcurrentEvents = 1
315  flags.Exec.SkipEvents = args.skipEvents
316  flags.Output.AODFileName = 'AOD.pool.root'
317  flags.Trigger.L1.doMuon = True
318  flags.Trigger.enableL1MuonPhase1 = True
319  flags.Trigger.L1.doMuonTopoInputs = True
320  flags.Trigger.enableL1TopoBWSimulation = args.useBW
321  flags.PerfMon.doFullMonMT = args.perfmon
322  flags.PerfMon.OutputJSON = 'perfmonmt_test.json'
323  flags.Trigger.enableL1TopoDump = args.enableL1TopoDump
324  from IOVDbSvc.IOVDbAutoCfgFlags import getLastGlobalTag
325  flags.IOVDb.GlobalTag = getLastGlobalTag(flags)
326 
327  if not flags.Input.isMC:
328  from AthenaConfiguration.TestDefaults import defaultGeometryTags
329  flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN2
330  flags.lock()
331 
332  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
333  acc = MainServicesCfg(flags)
334 
335  if args.perfmon:
336  from PerfMonComps.PerfMonCompsConfig import PerfMonMTSvcCfg
337  acc.merge(PerfMonMTSvcCfg(flags))
338 
339  from TriggerJobOpts.TriggerByteStreamConfig import ByteStreamReadCfg
340  acc.merge(ByteStreamReadCfg(flags, type_names=['CTP_RDO/CTP_RDO']))
341 
342  # Generate run3 L1 menu
343  from TrigConfigSvc.TrigConfigSvcCfg import L1ConfigSvcCfg,generateL1Menu
344  acc.merge(L1ConfigSvcCfg(flags))
345  if "data22" not in filename:
346  generateL1Menu(flags)
347 
348  # Produce xAOD L1 RoIs from RoIBResult
349  from AnalysisTriggerAlgs.AnalysisTriggerAlgsConfig import RoIBResultToxAODCfg
350  xRoIBResultAcc, xRoIBResultOutputs = RoIBResultToxAODCfg(flags)
351  acc.merge(xRoIBResultAcc)
352 
353  decoderTools = []
354  outputEDM = []
355  maybeMissingRobs = []
356 
357  from TrigT1ResultByteStream.TrigT1ResultByteStreamConfig import RoIBResultByteStreamToolCfg
358  roibResultTool = acc.popToolsAndMerge(RoIBResultByteStreamToolCfg(flags, name="RoIBResultBSDecoderTool", writeBS=False))
359  decoderTools += [roibResultTool]
360 
361  for module_id in roibResultTool.L1TopoModuleIds:
362  maybeMissingRobs.append(int(SourceIdentifier(SubDetector.TDAQ_CALO_TOPO_PROC, module_id)))
363 
364  for module_id in roibResultTool.JetModuleIds:
365  maybeMissingRobs.append(int(SourceIdentifier(SubDetector.TDAQ_CALO_JET_PROC_ROI, module_id)))
366 
367  for module_id in roibResultTool.EMModuleIds:
368  maybeMissingRobs.append(int(SourceIdentifier(SubDetector.TDAQ_CALO_CLUSTER_PROC_ROI, module_id)))
369 
370 
371  def addEDM(edmType, edmName):
372  auxType = edmType.replace('Container','AuxContainer')
373  return [f'{edmType}#{edmName}',
374  f'{auxType}#{edmName}Aux.']
375 
376  outputEDM += ['CTP_RDO#*']
377  outputEDM += ['ROIB::RoIBResult#*']
378 
379  outputEDM += addEDM('xAOD::JetEtRoI' , 'LVL1JetEtRoI')
380  outputEDM += addEDM('xAOD::JetRoIContainer' , 'LVL1JetRoIs')
381  outputEDM += addEDM('xAOD::EmTauRoIContainer', 'LVL1EmTauRoIs')
382  #different naming scheme of Aux branches and types for legacy EnergySumRoI (MET,sumET)
383  outputEDM += ["xAOD::EnergySumRoI#LVL1EnergySumRoI", "xAOD::EnergySumRoIAuxInfo#LVL1EnergySumRoIAux."]
384 
385  if 'Muons' in subsystem:
386  from MuonConfig.MuonBytestreamDecodeConfig import RpcBytestreamDecodeCfg,TgcBytestreamDecodeCfg
387  rpcdecodingAcc = RpcBytestreamDecodeCfg(flags)
388  acc.merge(rpcdecodingAcc)
389  tgcdecodingAcc = TgcBytestreamDecodeCfg(flags)
390  acc.merge(tgcdecodingAcc)
391 
392  from TrigT1ResultByteStream.TrigT1ResultByteStreamConfig import MuonRoIByteStreamToolCfg
393  muonRoiTool = acc.popToolsAndMerge(MuonRoIByteStreamToolCfg(flags, name="L1MuonBSDecoderTool", writeBS=False))
394  decoderTools += [muonRoiTool]
395  outputEDM += addEDM('xAOD::MuonRoIContainer' , '*')
396  maybeMissingRobs += muonRoiTool.ROBIDs
397 
398  if 'jFex' in subsystem:
399  from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig import jFexRoiByteStreamToolCfg,jFexInputByteStreamToolCfg
400  jFexTool = acc.popToolsAndMerge(jFexRoiByteStreamToolCfg(flags, 'jFexBSDecoder', writeBS=False))
401  decoderTools += [jFexTool]
402  outputEDM += addEDM('xAOD::jFexSRJetRoIContainer', jFexTool.jJRoIContainerWriteKey.Path)
403  outputEDM += addEDM('xAOD::jFexLRJetRoIContainer', jFexTool.jLJRoIContainerWriteKey.Path)
404  outputEDM += addEDM('xAOD::jFexTauRoIContainer' , jFexTool.jTauRoIContainerWriteKey.Path)
405  outputEDM += addEDM('xAOD::jFexFwdElRoIContainer', jFexTool.jEMRoIContainerWriteKey.Path)
406  outputEDM += addEDM('xAOD::jFexSumETRoIContainer', jFexTool.jTERoIContainerWriteKey.Path)
407  outputEDM += addEDM('xAOD::jFexMETRoIContainer' , jFexTool.jXERoIContainerWriteKey.Path)
408  maybeMissingRobs += jFexTool.ROBIDs
409  if args.doCaloInput:
410  jFexInputByteStreamTool = acc.popToolsAndMerge(jFexInputByteStreamToolCfg(flags, 'jFexInputBSDecoderTool', writeBS=False))
411  decoderTools += [jFexInputByteStreamTool]
412  outputEDM += addEDM('xAOD::jFexTowerContainer', jFexInputByteStreamTool.jTowersWriteKey.Path)
413  maybeMissingRobs += jFexInputByteStreamTool.ROBIDs
414 
415 
416  if 'eFex' in subsystem:
417  from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig import eFexByteStreamToolCfg
418  eFexTool = acc.popToolsAndMerge(eFexByteStreamToolCfg(flags, 'eFexBSDecoder', writeBS=False, decodeInputs=args.doCaloInput))
419  decoderTools += [eFexTool]
420  outputEDM += addEDM('xAOD::eFexEMRoIContainer', eFexTool.eEMContainerWriteKey.Path)
421  outputEDM += addEDM('xAOD::eFexTauRoIContainer', eFexTool.eTAUContainerWriteKey.Path)
422  if args.doCaloInput:
423  outputEDM += addEDM('xAOD::eFexTowerContainer', eFexTool.eTowerContainerWriteKey.Path)
424  maybeMissingRobs += eFexTool.ROBIDs
425 
426 
427  if 'gFex' in subsystem:
428  from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig import gFexByteStreamToolCfg,gFexInputByteStreamToolCfg
429  gFexTool = acc.popToolsAndMerge(gFexByteStreamToolCfg(flags, 'gFexBSDecoder', writeBS=False))
430  decoderTools += [gFexTool]
431  outputEDM += addEDM('xAOD::gFexJetRoIContainer', gFexTool.gFexRhoOutputContainerWriteKey.Path)
432  outputEDM += addEDM('xAOD::gFexJetRoIContainer', gFexTool.gFexSRJetOutputContainerWriteKey.Path)
433  outputEDM += addEDM('xAOD::gFexJetRoIContainer', gFexTool.gFexLRJetOutputContainerWriteKey.Path)
434  outputEDM += addEDM('xAOD::gFexGlobalRoIContainer', gFexTool.gScalarEJwojOutputContainerWriteKey.Path)
435  outputEDM += addEDM('xAOD::gFexGlobalRoIContainer', gFexTool.gMETComponentsJwojOutputContainerWriteKey.Path)
436  outputEDM += addEDM('xAOD::gFexGlobalRoIContainer', gFexTool.gMHTComponentsJwojOutputContainerWriteKey.Path)
437  outputEDM += addEDM('xAOD::gFexGlobalRoIContainer', gFexTool.gMSTComponentsJwojOutputContainerWriteKey.Path)
438  outputEDM += addEDM('xAOD::gFexGlobalRoIContainer', gFexTool.gMETComponentsNoiseCutOutputContainerWriteKey.Path)
439  outputEDM += addEDM('xAOD::gFexGlobalRoIContainer', gFexTool.gMETComponentsRmsOutputContainerWriteKey.Path)
440  outputEDM += addEDM('xAOD::gFexGlobalRoIContainer', gFexTool.gScalarENoiseCutOutputContainerWriteKey.Path)
441  outputEDM += addEDM('xAOD::gFexGlobalRoIContainer', gFexTool.gScalarERmsOutputContainerWriteKey.Path)
442  maybeMissingRobs += gFexTool.ROBIDs
443  if args.doCaloInput:
444  gFexInputByteStreamTool = acc.popToolsAndMerge(gFexInputByteStreamToolCfg(flags, 'gFexInputByteStreamTool', writeBS=False))
445  decoderTools += [gFexInputByteStreamTool]
446  outputEDM += addEDM('xAOD::gFexTowerContainer', gFexInputByteStreamTool.gTowersWriteKey.Path)
447  maybeMissingRobs += gFexInputByteStreamTool.ROBIDs
448 
449  if 'Topo' in subsystem:
450  from L1TopoByteStream.L1TopoByteStreamConfig import L1TopoPhase1ByteStreamToolCfg
451  l1topoBSTool = acc.popToolsAndMerge(L1TopoPhase1ByteStreamToolCfg(flags, "L1TopoBSDecoderTool"))
452  decoderTools += [l1topoBSTool]
453  outputEDM += addEDM('xAOD::L1TopoRawDataContainer', l1topoBSTool.L1TopoPhase1RAWDataWriteContainer.Path)
454  maybeMissingRobs += l1topoBSTool.ROBIDs
455 
456  decoderAlg = CompFactory.L1TriggerByteStreamDecoderAlg(name="L1TriggerByteStreamDecoder",
457  DecoderTools=decoderTools,
458  MaybeMissingROBs=maybeMissingRobs,
459  OutputLevel=algLogLevel)
460 
461  acc.addEventAlgo(decoderAlg, sequenceName='AthAlgSeq')
462 
463  roib2topo = CompFactory.LVL1.RoiB2TopoInputDataCnv(name='RoiB2TopoInputDataCnv')
464  roib2topo.OutputLevel = algLogLevel
465  acc.addEventAlgo(roib2topo, sequenceName="AthAlgSeq")
466  from L1TopoByteStream.L1TopoByteStreamConfig import L1TopoByteStreamCfg
467  acc.merge(L1TopoByteStreamCfg(flags), sequenceName='AthAlgSeq')
468  outputEDM += addEDM('xAOD::L1TopoRawDataContainer', 'L1TopoRawData')
469 
470  acc.merge(L1TopoSimulationStandaloneCfg(flags,outputEDM,doMuons=('Muons' in subsystem)), sequenceName='AthAlgSeq')
471  if args.algoHdwMon:
472  acc.getEventAlgo('L1TopoSimulation').FillHistoBasedOnHardware = True
473  acc.getEventAlgo('L1TopoSimulation').PrescaleDAQROBAccess = 1
474  outputEDM += addEDM('xAOD::L1TopoSimResultsContainer','L1_TopoSimResults')
475 
476  # phase1 mon
477  from L1TopoOnlineMonitoring import L1TopoOnlineMonitoringConfig as TopoMonConfig
478  acc.addEventAlgo(
479  TopoMonConfig.getL1TopoPhase1OnlineMonitor(flags,'L1/L1TopoOffline',True,True,True,True,True,args.forceCtp,algLogLevel),
480  sequenceName="AthAlgSeq"
481  )
482 
483  from GaudiSvc.GaudiSvcConf import THistSvc # noqa: F401
484  histSvc = CompFactory.THistSvc(Output = ["EXPERT DATAFILE='expert-monitoring-l1topo.root', OPT='RECREATE'"])
485  acc.addService(histSvc)
486 
487  from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
488  log.debug('Adding the following output EDM to ItemList: %s', outputEDM)
489  acc.merge(OutputStreamCfg(flags, 'AOD', ItemList=outputEDM))
490  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
491  acc.merge(SetupMetaDataForStreamCfg(flags, 'AOD'))
492 
493  if args.log == 'verbose' or args.perfmon:
494  acc.printConfig(withDetails=True, summariseProps=True, printDefaults=True)
495 
496  if acc.run().isFailure():
497  sys.exit(1)
L1TopoByteStreamConfig.L1TopoPhase1ByteStreamToolCfg
def L1TopoPhase1ByteStreamToolCfg(flags, name, writeBS=False)
Definition: L1TopoByteStreamConfig.py:9
TrigT1MuonRecRoiToolConfig.RPCRecRoiToolCfg
def RPCRecRoiToolCfg(flags, name="RPCRecRoiTool", useRun3Config=True)
Definition: TrigT1MuonRecRoiToolConfig.py:8
L1TopoByteStreamConfig.L1TopoByteStreamCfg
def L1TopoByteStreamCfg(flags)
Definition: L1TopoByteStreamConfig.py:40
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
MuonBytestreamDecodeConfig.RpcBytestreamDecodeCfg
def RpcBytestreamDecodeCfg(flags, name="RpcRawDataProvider", **kwargs)
This configuration function sets up everything for decoding RPC bytestream data into RDOs.
Definition: MuonBytestreamDecodeConfig.py:34
L1TopoInputHistograms.configureeFexInputProviderHistograms
def configureeFexInputProviderHistograms(alg, flags)
Definition: L1TopoInputHistograms.py:65
python.OutputStreamConfig.OutputStreamCfg
def OutputStreamCfg(flags, streamName, ItemList=[], MetadataItemList=[], disableEventTag=False, trigNavThinningSvc=None, takeItemsFromInput=False, extendProvenanceRecord=True, keepProvenanceTagsRegEx=None, AcceptAlgs=[], HelperTools=[])
Definition: OutputStreamConfig.py:16
L1TopoInputHistograms.configureEMTauInputProviderHistograms
def configureEMTauInputProviderHistograms(alg, flags)
Definition: L1TopoInputHistograms.py:226
python.TrigConfigSvcCfg.generateL1Menu
def generateL1Menu(flags)
Definition: TrigConfigSvcCfg.py:189
L1TopoInputHistograms.configurejFexInputProviderHistograms
def configurejFexInputProviderHistograms(alg, flags)
Definition: L1TopoInputHistograms.py:114
L1TopoInputHistograms.configureMuonInputProviderHistograms
def configureMuonInputProviderHistograms(alg, flags)
Definition: L1TopoInputHistograms.py:3
python.ByteStreamConfig.ByteStreamReadCfg
def ByteStreamReadCfg(flags, type_names=None)
Definition: Event/ByteStreamCnvSvc/python/ByteStreamConfig.py:25
AnalysisTriggerAlgsConfig.RoIBResultToxAODCfg
def RoIBResultToxAODCfg(flags)
Definition: AnalysisTriggerAlgsConfig.py:9
L1CaloFEXByteStreamConfig.jFexInputByteStreamToolCfg
def jFexInputByteStreamToolCfg(flags, name, *writeBS=False)
Definition: L1CaloFEXByteStreamConfig.py:232
python.PerfMonCompsConfig.PerfMonMTSvcCfg
def PerfMonMTSvcCfg(flags, **kwargs)
A minimal new-style configuration for PerfMonMTSvc.
Definition: PerfMonCompsConfig.py:10
L1TopoInputHistograms.configureJetInputProviderHistograms
def configureJetInputProviderHistograms(alg, flags)
Definition: L1TopoInputHistograms.py:250
L1TopoInputHistograms.configuregFexInputProviderHistograms
def configuregFexInputProviderHistograms(alg, flags)
Definition: L1TopoInputHistograms.py:187
python.IOVDbAutoCfgFlags.getLastGlobalTag
def getLastGlobalTag(prevFlags)
Definition: IOVDbAutoCfgFlags.py:6
L1TopoSimulationConfig.L1TopoSimulationCfg
def L1TopoSimulationCfg(flags, doMonitoring=True, readMuCTPI=False, name="L1TopoSimulation", deactivateL1TopoMuons=False, useMuonRoIs=False, useMuonDecoder=False, writeMuonRoIs=True)
Definition: L1TopoSimulationConfig.py:46
TrigT1ResultByteStreamConfig.RoIBResultByteStreamToolCfg
def RoIBResultByteStreamToolCfg(flags, name, writeBS=False)
Definition: TrigT1ResultByteStreamConfig.py:18
L1TopoSimulationConfig.L1TopoSimulationStandaloneCfg
def L1TopoSimulationStandaloneCfg(flags, outputEDM=[], doMuons=False, doMonitoring=True)
Definition: L1TopoSimulationConfig.py:169
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:312
L1CaloFEXByteStreamConfig.gFexByteStreamToolCfg
def gFexByteStreamToolCfg(flags, name, *writeBS=False)
Definition: L1CaloFEXByteStreamConfig.py:148
Constants
some useful constants -------------------------------------------------—
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
GenericMonitoringTool
Definition: GenericMonitoringTool.py:1
L1CaloFEXByteStreamConfig.gFexInputByteStreamToolCfg
def gFexInputByteStreamToolCfg(flags, name, *writeBS=False)
Definition: L1CaloFEXByteStreamConfig.py:275
L1TopoSimulationConfig.addEDM
def addEDM(edmType, edmName)
Definition: L1TopoSimulationConfig.py:371
python.TrigConfigSvcCfg.L1ConfigSvcCfg
def L1ConfigSvcCfg(flags)
Definition: TrigConfigSvcCfg.py:203
TrigT1ResultByteStreamConfig.MuonRoIByteStreamToolCfg
def MuonRoIByteStreamToolCfg(flags, name, writeBS=False, writeDecodedMuonRoIs=True)
Definition: TrigT1ResultByteStreamConfig.py:69
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
L1CaloFEXByteStreamConfig.jFexRoiByteStreamToolCfg
def jFexRoiByteStreamToolCfg(flags, name, *writeBS=False, xTOBs=False)
Definition: L1CaloFEXByteStreamConfig.py:87
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
TrigT1MuonRecRoiToolConfig.TGCRecRoiToolCfg
def TGCRecRoiToolCfg(flags, name="TGCRecRoiTool", useRun3Config=True)
Definition: TrigT1MuonRecRoiToolConfig.py:18
L1CaloFEXByteStreamConfig.eFexByteStreamToolCfg
def eFexByteStreamToolCfg(flags, name, *writeBS=False, TOBs=True, xTOBs=False, multiSlice=False, decodeInputs=False)
Definition: L1CaloFEXByteStreamConfig.py:8
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:222
L1TopoInputHistograms.configureEnergyInputProviderHistograms
def configureEnergyInputProviderHistograms(alg, flags)
Definition: L1TopoInputHistograms.py:220
L1TopoSimulationConfig.L1LegacyTopoSimulationCfg
def L1LegacyTopoSimulationCfg(flags)
Definition: L1TopoSimulationConfig.py:7
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
L1TopoSimulationConfig.int
int
Definition: L1TopoSimulationConfig.py:284
MuonBytestreamDecodeConfig.TgcBytestreamDecodeCfg
def TgcBytestreamDecodeCfg(flags, name="TgcRawDataProvider", **kwargs)
Definition: MuonBytestreamDecodeConfig.py:97