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