ATLAS Offline Software
L1CaloPhase1Monitoring.py
Go to the documentation of this file.
1 #!/usr/bin/env athena
2 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 
4 
10 
11 from AthenaConfiguration.ComponentFactory import CompFactory
12 from AthenaConfiguration.AllConfigFlags import initConfigFlags
13 from AthenaConfiguration.Enums import LHCPeriod,Format
14 from AthenaCommon import Constants
15 import os,sys
16 import ispy
17 partition = ispy.IPCPartition(os.getenv("TDAQ_PARTITION","ATLAS"))
18 
19 flags = initConfigFlags()
20 flags.Input.Files = [] # so that when no files given we can detect that
21 
22 # Note: The order in which all these flag defaults get set is very fragile
23 # so don't reorder the setup of this flags stuff
24 
25 
26 flags.Exec.OutputLevel = Constants.WARNING # by default make everything output at WARNING level
27 flags.Exec.InfoMessageComponents = ["AthenaEventLoopMgr","THistSvc","PerfMonMTSvc","ApplicationMgr"] # Re-enable some info messaging though
28 flags.Exec.PrintAlgsSequence = True # print the alg sequence at the start of the job (helpful to see what is scheduled)
29 # flags.Exec.FPE = -2 # disable FPE auditing ... set to 0 to re-enable
30 
31 
32 flags.GeoModel.Run = LHCPeriod.Run3 # needed for LArGMConfig - or can infer from above
33 flags.Common.useOnlineLumi = True # needed for lumi-scaled monitoring, only have lumi in online DB at this time
34 flags.DQ.doMonitoring = True # use this flag to turn on/off monitoring in this application
35 flags.DQ.enableLumiAccess = False # in fact, we don't need lumi access for now ... this turns it all off
36 flags.DQ.FileKey = "" if partition.isValid() else "EXPERT" # histsvc file "name" to record to - Rafal asked it to be blank @ P1 ... means monitoring.root will be empty
37 flags.Output.HISTFileName = os.getenv("L1CALO_ATHENA_JOB_NAME","") + "monitoring.root" # control names of monitoring root file - ensure each online monitoring job gets a different filename to avoid collision between processes
38 flags.DQ.useTrigger = False # don't do TrigDecisionTool in MonitorCfg helper methods
39 # flag for saying if inputs should be decoded or not
40 flags.Trigger.L1.doCaloInputs = True
41 # flags for rerunning simulation
42 flags.Trigger.L1.doeFex = True
43 flags.Trigger.L1.dojFex = True
44 flags.Trigger.L1.dogFex = True
45 # if running online, override these with autoconfig values
46 # will set things like the GlobalTag automatically
47 if partition.isValid():
48  # must ensure doLVL1 and doHLT are False, otherwise will get ByteStreamCnvSvc conflicts (TrigByteStreamCnvSvc is setup, but EMon setup provides ByteStreamCnvSvc)
49  # see TriggerByteStreamConfig.py
50  flags.Trigger.doLVL1 = False
51  flags.Trigger.doHLT = False
52  from AthenaConfiguration.AutoConfigOnlineRecoFlags import autoConfigOnlineRecoFlags
53  autoConfigOnlineRecoFlags(flags, partition.name()) # sets things like projectName etc which would otherwise be inferred from input file
54 else:
55  flags.Trigger.doLVL1 = True # set this just so that IOBDb.GlobalTag is autoconfigured based on release setup if running on RAW (autoconfig will take it from POOL file if running on that)
56 #flags.IOVDb.GlobalTag = lambda s: "OFLCOND-MC23-SDR-RUN3-02" if s.Input.isMC else "CONDBR2-ES1PA-2022-07" #"CONDBR2-HLTP-2022-02"
57 
58 # now parse
59 
60 parser = flags.getArgumentParser()
61 parser.add_argument('--runNumber',default=None,help="specify to select a run number")
62 parser.add_argument('--lumiBlock',default=None,help="specify to select a lumiBlock")
63 parser.add_argument('--evtNumber',default=None,nargs="+",type=int,help="specify to select an evtNumber")
64 parser.add_argument('--stream',default="*",help="stream to lookup files in")
65 parser.add_argument('--fexReadoutFilter',action='store_true',help="If specified, will skip events without fexReadout")
66 parser.add_argument('--dbOverrides',default=None,nargs="+",type=str,help="specify overrides of COOL database folders in form <folder>=<dbPath>, example: /TRIGGER/L1Calo/V1/Calibration/EfexEnergyCalib=mytest.db ")
67 parser.add_argument('--postConfig',default=[],nargs="+",type=str,help="specify component properties to apply at the end of the config")
68 args = flags.fillFromArgs(parser=parser)
69 if args.runNumber is not None:
70  from glob import glob
71  if args.lumiBlock is None: args.lumiBlock="*"
72  print("Looking up files in atlastier0 for run",args.runNumber,"lb =",args.lumiBlock)
73  flags.Input.Files = []
74  for lb in args.lumiBlock.split(","):
75  if lb=="*":
76  tryStr = f"/eos/atlas/atlastier0/rucio/data*/{args.stream}/*{args.runNumber}/*RAW/*lb*.*"
77  else:
78  tryStr = f"/eos/atlas/atlastier0/rucio/data*/{args.stream}/*{args.runNumber}/*RAW/*lb{int(lb):04}.*"
79  print("Trying",tryStr)
80  flags.Input.Files += glob(tryStr)
81  print("Found",len(flags.Input.Files),"files")
82 
83 # require at least 1 input file if running offline
84 if not partition.isValid() and len(flags.Input.Files)==0:
85  print("FATAL: Running in offline mode but no input files provided")
86  sys.exit(1)
87 elif partition.isValid():
88  print("Running Online with Partition:",partition.name())
89 
90 # if running on an input file, change the DQ environment, which will allow debug tree creation from monitoring algs
91 if len(flags.Input.Files)>0:
92  flags.DQ.Environment = "user"
93  # triggerConfig should default to DB which is appropriate if running on data
94  if flags.Input.isMC: flags.Trigger.triggerConfig='FILE' # uses the generated L1Menu (see below)
95  elif flags.Trigger.triggerConfig=='INFILE':
96  # this happens with AOD data files, but this is incompatible with the setup of the LVL1ConfigSvc
97  flags.Trigger.triggerConfig="DB" # so force onto DB usage
98 
99 # due to https://gitlab.cern.ch/atlas/athena/-/merge_requests/65253 must now specify geomodel explicitly if cant take from input file, but can autoconfigure it based on LHCPeriod set above
100 if flags.GeoModel.AtlasVersion is None:
101  from AthenaConfiguration.TestDefaults import defaultGeometryTags
102  flags.GeoModel.AtlasVersion = defaultGeometryTags.autoconfigure(flags)
103 
104 # add detector conditions flags required for rerunning simulation
105 # needs input files declared if offline, hence doing after parsing
106 from AthenaConfiguration.DetectorConfigFlags import setupDetectorsFromList
107 setupDetectorsFromList(flags,['LAr','Tile','MBTS'],True)
108 
109 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
110 cfg = MainServicesCfg(flags)
111 
112 
113 flags.lock()
114 if flags.Exec.MaxEvents == 0: flags.dump(evaluate=True)
115 
116 if partition.isValid() and len(flags.Input.Files)==0:
117  from ByteStreamEmonSvc.EmonByteStreamConfig import EmonByteStreamCfg
118  cfg.merge(EmonByteStreamCfg(flags)) # setup EmonSvc
119  bsSvc = cfg.getService("ByteStreamInputSvc")
120  bsSvc.Partition = partition.name()
121  bsSvc.Key = os.environ.get("L1CALO_PTIO_KEY", "REB" if partition.name()=="L1CaloStandalone" else "dcm") # set the Sampler Key Type name (default is SFI)
122  if partition.name()=="L1CaloSTF": bsSvc.Key = "SWROD"
123  bsSvc.KeyCount = int(os.environ.get("L1CALO_PTIO_KEY_COUNT","25"))
124  bsSvc.ISServer = "Histogramming" # IS server on which to create this provider
125  bsSvc.BufferSize = 10 # event buffer size for each sampler
126  bsSvc.UpdatePeriod = 30 # time in seconds between updating plots
127  bsSvc.Timeout = 240000 # timeout (not sure what this does)
128  bsSvc.PublishName = os.getenv("L1CALO_ATHENA_JOB_NAME","testing") # set name of this publisher as it will appear in IS (default is "l1calo-athenaHLT"; change to something sensible for testing)
129  bsSvc.StreamType = os.getenv("L1CALO_PTIO_STREAM_TYPE","physics") # name of the stream type (physics,express, etc.)
130  bsSvc.ExitOnPartitionShutdown = False
131  bsSvc.ClearHistograms = True # clear hists at start of new run
132  bsSvc.GroupName = "RecExOnline"
133  # name of the stream (Egamma,JetTauEtmiss,MinBias,Standby, etc.), this can be a colon(:) separated list of streams that use the 'streamLogic' to combine stream for 2016 HI run
134  bsSvc.StreamNames = os.getenv("L1CALO_PTIO_STREAM_NAME","L1Calo:Main:MinBias:MinBiasOverlay:UPC:EnhancedBias:ZeroBias:HardProbes:Standby:ALFACalib").split(":")
135  bsSvc.StreamLogic = os.getenv("L1CALO_PTIO_STREAM_LOGIC","Or") if partition.name() != "L1CaloStandalone" else "Ignore"
136  bsSvc.LVL1Names = [] # name of L1 items to select
137  bsSvc.LVL1Logic = "Ignore" # one of: Ignore, Or, And
138 elif flags.Input.Format == Format.POOL:
139  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
140  cfg.merge(PoolReadCfg(flags))
141 else:
142  print("Running Offline on", len(flags.Input.Files)," bytestream files")
143  #from ByteStreamCnvSvc.ByteStreamConfig import ByteStreamReadCfg
144  #TODO: Figure out why the above line causes CA conflict @ P1 if try to run on a RAW file there
145  from TriggerJobOpts.TriggerByteStreamConfig import ByteStreamReadCfg
146  cfg.merge(ByteStreamReadCfg(flags)) # configure reading bytestream
147 
148 # ensure histsvc is set up
149 from AthenaMonitoring.AthMonitorCfgHelper import getDQTHistSvc
150 cfg.merge(getDQTHistSvc(flags))
151 
152 # Create run3 L1 menu (needed for L1Calo EDMs)
153 from TrigConfigSvc.TrigConfigSvcCfg import L1ConfigSvcCfg,generateL1Menu, createL1PrescalesFileFromMenu,getL1MenuFileName
154 if flags.Input.isMC:
155  # for MC we set the TriggerConfig to "FILE" above, so must generate a menu for it to load (will be the release's menu)
156  generateL1Menu(flags)
158 if flags.Trigger.triggerConfig=="FILE":
159  menuFilename = getL1MenuFileName(flags)
160  if os.path.exists(menuFilename):
161  print("Using L1Menu:",menuFilename)
162  else:
163  print("L1Menu file does not exist:",menuFilename)
164  sys.exit(1)
165 cfg.merge(L1ConfigSvcCfg(flags))
166 
167 # -------- CHANGES GO BELOW ------------
168 # setup the L1Calo software we want to monitor
169 
170 decoderTools = []
171 
172 if partition.isValid() or (flags.Input.Format != Format.POOL and not flags.Input.isMC):
173  from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig import eFexByteStreamToolCfg, jFexRoiByteStreamToolCfg, jFexInputByteStreamToolCfg, gFexByteStreamToolCfg, gFexInputByteStreamToolCfg
174  if flags.Trigger.L1.doeFex: decoderTools += [cfg.popToolsAndMerge(eFexByteStreamToolCfg(flags=flags,name='eFexBSDecoderTool',TOBs=flags.Trigger.L1.doeFex,xTOBs=flags.Trigger.L1.doeFex,decodeInputs=flags.Trigger.L1.doCaloInputs,multiSlice=True))]
175  if flags.Trigger.L1.dojFex: decoderTools += [cfg.popToolsAndMerge(jFexRoiByteStreamToolCfg(flags=flags,name="jFexBSDecoderTool",writeBS=False))]
176  if flags.Trigger.L1.dogFex: decoderTools += [cfg.popToolsAndMerge(gFexByteStreamToolCfg(flags=flags,name="gFexBSDecoderTool",writeBS=False))]
177 
178 
179 
180  if flags.Trigger.L1.doCaloInputs:
181  if flags.Trigger.L1.dojFex: decoderTools += [cfg.popToolsAndMerge(jFexInputByteStreamToolCfg(flags=flags,name='jFexInputBSDecoderTool',writeBS=False))]
182  if flags.Trigger.L1.dogFex: decoderTools += [cfg.popToolsAndMerge(gFexInputByteStreamToolCfg(flags=flags,name='gFexInputBSDecoderTool',writeBS=False))]
183 
184  if len(decoderTools) > 0:
185  from TrigT1ResultByteStream.TrigT1ResultByteStreamMonitoringConfig import L1TriggerByteStreamDecoderMonitoringCfg
186  cfg.addEventAlgo(CompFactory.L1TriggerByteStreamDecoderAlg(
187  name="L1TriggerByteStreamDecoder",
188  OutputLevel=Constants.ERROR, # hides warnings about non-zero status codes in fragments ... will show up in hists
189  DecoderTools=decoderTools,
190  ByteStreamMetadataRHKey = '', # seems necessary @ P1 if trying to run on a raw file
191  MaybeMissingROBs= [id for tool in decoderTools for id in tool.ROBIDs ] if partition.name()!="ATLAS" or not partition.isValid() else [], # allow missing ROBs away from online ATLAS partition
192  MonTool= cfg.popToolsAndMerge(L1TriggerByteStreamDecoderMonitoringCfg(flags,"L1TriggerByteStreamDecoder", decoderTools))
193  ),sequenceName='AthAlgSeq'
194  )
195 
196 #from LArCabling.LArCablingConfig import LArOnOffIdMappingSCCfg
197 #cfg.merge( LArOnOffIdMappingSCCfg(flags) )
198 # from LArGeoAlgsNV.LArGMConfig import LArGMCfg
199 # cfg.merge(LArGMCfg(flags))
200 
201 # rerun sim if required
202 if flags.Trigger.L1.doeFex or flags.Trigger.L1.dojFex or flags.Trigger.L1.dogFex or flags.Trigger.L1.doCaloInputs:
203  from L1CaloFEXSim.L1CaloFEXSimCfg import L1CaloFEXSimCfg
204  cfg.merge(L1CaloFEXSimCfg(flags,outputSuffix="DAODSim" if flags.Input.Format == Format.POOL else ""))
205 
206  # do otf masking:
207  # from IOVDbSvc.IOVDbSvcConfig import addFolders,addOverride
208  # #cfg.merge(addFolders(flags,"<db>sqlite://;schema=/afs/cern.ch/user/w/will/new_maskedSCs_run457976.db;dbname=CONDBR2</db> /LAR/BadChannels/NoisyChannelsSC",className="CondAttrListCollection")) # dmCorr from DB!
209  # cfg.merge(addFolders(flags,"/LAR/BadChannels/MaskedSC","LAR_ONL",tag="LARBadChannelsMaskedSC-RUN3-UPD1-00",className="CondAttrListCollection",extensible=False)) # when run online, need folder to be extensible to force reload each event
210  # cfg.addCondAlgo(CompFactory.LArBadChannelCondAlg(name="MaskedSCCondAlg",ReadKey="/LAR/BadChannels/MaskedSC",isSC=True,CablingKey="LArOnOffIdMapSC",WriteKey="LArMaskedSC"))
211  # # note to self, if need to flag extensible after loaded elsewhere, look at property: cfg.getService("IOVDbSvc").Folders ... extend relevant entry with "<extensible/>"
212  # print(cfg.getService("MessageSvc"))
213  # cfg.getService("MessageSvc").errorLimit = 0
214  #
215  # cfg.getEventAlgo("L1_eFexEmulatedTowers").LArBadChannelKey = "LArMaskedSC"
216 
217 
218 
219 if flags.DQ.doMonitoring:
220  if flags.Trigger.L1.doeFex:
221  from TrigT1CaloMonitoring.EfexMonitorAlgorithm import EfexMonitoringConfig
222  cfg.merge(EfexMonitoringConfig(flags))
223  EfexMonAlg = cfg.getEventAlgo('EfexMonAlg')
224  # do we need next lines??
225  EfexMonAlg.eFexEMTobKeyList = ['L1_eEMRoI', 'L1_eEMxRoI'] # default is just L1_eEMRoI
226  EfexMonAlg.eFexTauTobKeyList = ['L1_eTauRoI', 'L1_eTauxRoI']
227  # Adjust eFEX containers to be monitored to also monitor the sim RoI
228  for l in [EfexMonAlg.eFexEMTobKeyList,EfexMonAlg.eFexTauTobKeyList]: l += [x + "Sim" for x in l ]
229  # monitoring of simulation vs hardware
230  if not flags.Input.isMC:
231  from TrigT1CaloMonitoring.EfexSimMonitorAlgorithm import EfexSimMonitoringConfig
232  cfg.merge(EfexSimMonitoringConfig(flags))
233  # EfexSimMonitorAlgorithm = cfg.getEventAlgo('EfexSimMonAlg')
234  # and now book the histograms that depend on the containers
235  from TrigT1CaloMonitoring.EfexMonitorAlgorithm import EfexMonitoringHistConfig
236  cfg.merge(EfexMonitoringHistConfig(flags,EfexMonAlg))
237 
238  if flags.Trigger.L1.dojFex:
239  from TrigT1CaloMonitoring.JfexMonitorAlgorithm import JfexMonitoringConfig
240  cfg.merge(JfexMonitoringConfig(flags))
241  from TrigT1CaloMonitoring.JfexSimMonitorAlgorithm import JfexSimMonitoringConfig
242  cfg.merge(JfexSimMonitoringConfig(flags))
243  if flags.Trigger.L1.dogFex:
244  from TrigT1CaloMonitoring.GfexMonitorAlgorithm import GfexMonitoringConfig
245  cfg.merge(GfexMonitoringConfig(flags))
246  from TrigT1CaloMonitoring.GfexSimMonitorAlgorithm import GfexSimMonitoringConfig
247  cfg.merge(GfexSimMonitoringConfig(flags))
248  # generally can't include efficiency monitoring because requires too many things we don't have
249  # but b.c. alg requires TrigDecisionTool, we activate it if DQ.useTrigger explicitly set
250  if flags.DQ.useTrigger:
251  from TrigT1CaloMonitoring.JetEfficiencyMonitorAlgorithm import JetEfficiencyMonitoringConfig
252  cfg.merge(JetEfficiencyMonitoringConfig(flags))
253 
254  # input data monitoring
255  if flags.Trigger.L1.doCaloInputs and not flags.Input.isMC:
256  from TrigT1CaloMonitoring.EfexInputMonitorAlgorithm import EfexInputMonitoringConfig
257  if flags.Trigger.L1.doeFex: cfg.merge(EfexInputMonitoringConfig(flags))
258  from TrigT1CaloMonitoring.JfexInputMonitorAlgorithm import JfexInputMonitoringConfig
259  if flags.Trigger.L1.dojFex: cfg.merge(JfexInputMonitoringConfig(flags))
260  from TrigT1CaloMonitoring.GfexInputMonitorAlgorithm import GfexInputMonitoringConfig
261  if flags.Trigger.L1.dogFex: cfg.merge(GfexInputMonitoringConfig(flags))
262 
263 mainSeq = "AthAllAlgSeq"
264 if args.fexReadoutFilter:
265  # want to take existing AthAllSeqSeq and move it inside a new sequence
266  topSeq = cfg.getSequence("AthAlgEvtSeq")
267  algSeq = cfg.getSequence(mainSeq)
268  mainSeq = "New" + mainSeq
269  # topSeq has three sub-sequencers ... preserve first and last
270  topSeq.Members = [topSeq.Members[0],CompFactory.AthSequencer(mainSeq),topSeq.Members[-1]]
271  cfg.addEventAlgo(CompFactory.L1IDFilterAlgorithm(),sequenceName=mainSeq)
272  cfg.getSequence(mainSeq).Members += [algSeq]
273 
274 if args.evtNumber is not None:
275  print("filtering events",args.evtNumber)
276  # similar adjustment with an event filter
277  topSeq = cfg.getSequence("AthAlgEvtSeq")
278  algSeq = cfg.getSequence(mainSeq)
279  mainSeq = "New" + mainSeq
280  # topSeq has three sub-sequencers ... preserve first and last
281  topSeq.Members = [topSeq.Members[0],CompFactory.AthSequencer(mainSeq),topSeq.Members[-1]]
282  cfg.addEventAlgo(CompFactory.EventNumberFilterAlgorithm("EvtNumberFilter",EventNumbers=args.evtNumber),sequenceName=mainSeq)
283  cfg.getSequence(mainSeq).Members += [algSeq]
284  # cfg.addEventAlgo(CompFactory.LVL1.eFexEventDumper("Dumper",TowersKey="L1_eFexEmulatedTowers"))
285 
286 from PerfMonComps.PerfMonCompsConfig import PerfMonMTSvcCfg
287 cfg.merge( PerfMonMTSvcCfg(flags) )
288 
289 from AthenaConfiguration.Utils import setupLoggingLevels
290 setupLoggingLevels(flags,cfg)
291 
292 if cfg.getService("AthenaEventLoopMgr"): cfg.getService("AthenaEventLoopMgr").IntervalInSeconds = 30
293 
294 if type(args.dbOverrides)==list:
295  from IOVDbSvc.IOVDbSvcConfig import addOverride
296  #examples:
297  #cfg.merge( addOverride(flags, folder="/TRIGGER/L1Calo/V1/Calibration/EfexEnergyCalib", db="sqlite://;schema=mytest.db;dbname=CONDBR2",tag="" ) )
298  #cfg.merge( addOverride(flags, folder="/TRIGGER/L1Calo/V1/Calibration/EfexNoiseCuts", db="sqlite://;schema=/afs/cern.ch/user/w/will/calib.sqlite;dbname=L1CALO",tag="" ) )
299  for override in args.dbOverrides:
300  print(override)
301  folderName,dbPath = override.split("=",1)
302  if folderName == "": raise ValueError("Cannot parse dbOverride: " + override)
303  if ";dbname=" not in dbPath: dbPath += ";dbname=CONDBR2"
304  dbPath,dbInst = dbPath.split(";dbname=")
305  if not os.path.exists(dbPath): raise ValueError("dbOverride file doesn't exist: " + dbPath)
306  if folderName[0] != "/": folderName = "/TRIGGER/L1Calo/V1/Calibration/" + folderName
307  print("Overriding COOL folder:",folderName,dbPath,dbInst)
308  cfg.merge( addOverride(flags,folder=folderName,db=f"sqlite://;schema={dbPath};dbname={dbInst}",tag=""))
309 
310 
311 # configure output AOD if requested
312 if flags.Output.AODFileName != "":
313  def addEDM(edmType, edmName):
314  auxType = edmType.replace('Container','AuxContainer')
315  return [f'{edmType}#{edmName}', f'{auxType}#{edmName}Aux.']
316 
317  outputEDM = []
318  outputEDM += addEDM('xAOD::jFexTowerContainer' , "L1_jFexDataTowers")
319  outputEDM += addEDM('xAOD::jFexTowerContainer' , "L1_jFexEmulatedTowers")
320  outputEDM += addEDM('xAOD::jFexSRJetRoIContainer', 'L1_jFexSRJetRoISim')
321  outputEDM += addEDM('xAOD::jFexLRJetRoIContainer', 'L1_jFexLRJetRoISim')
322  outputEDM += addEDM('xAOD::jFexTauRoIContainer' , 'L1_jFexTauRoISim' )
323  outputEDM += addEDM('xAOD::jFexFwdElRoIContainer', 'L1_jFexFwdElRoISim')
324  outputEDM += addEDM('xAOD::jFexSumETRoIContainer', 'L1_jFexSumETRoISim')
325  outputEDM += addEDM('xAOD::jFexMETRoIContainer' , 'L1_jFexMETRoISim' )
326  outputEDM += addEDM('xAOD::jFexSRJetRoIContainer', 'L1_jFexSRJetRoI')
327  outputEDM += addEDM('xAOD::jFexLRJetRoIContainer', 'L1_jFexLRJetRoI')
328  outputEDM += addEDM('xAOD::jFexTauRoIContainer' , 'L1_jFexTauRoI' )
329  outputEDM += addEDM('xAOD::jFexFwdElRoIContainer', 'L1_jFexFwdElRoI')
330  outputEDM += addEDM('xAOD::jFexSumETRoIContainer', 'L1_jFexSumETRoI')
331  outputEDM += addEDM('xAOD::jFexMETRoIContainer' , 'L1_jFexMETRoI' )
332 
333  outputEDM += addEDM('xAOD::jFexSRJetRoIContainer', 'L1_jFexSRJetxRoI')
334  outputEDM += addEDM('xAOD::jFexLRJetRoIContainer', 'L1_jFexLRJetxRoI')
335  outputEDM += addEDM('xAOD::jFexTauRoIContainer' , 'L1_jFexTauxRoI' )
336  outputEDM += addEDM('xAOD::jFexFwdElRoIContainer', 'L1_jFexFwdElxRoI')
337  outputEDM += addEDM('xAOD::jFexSumETRoIContainer', 'L1_jFexSumETxRoI')
338  outputEDM += addEDM('xAOD::jFexMETRoIContainer' , 'L1_jFexMETxRoI' )
339  from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
340  cfg.merge(OutputStreamCfg(flags, 'AOD', ItemList=outputEDM))
341  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
342  cfg.merge(SetupMetaDataForStreamCfg(flags, 'AOD'))
343 
344 # example of adding user algorithm
345 # cfg.addEventAlgo(CompFactory.AnotherPackageAlg(),sequenceName="AthAlgSeq")
346 
347 for conf in args.postConfig:
348  compName,propNameAndVal=conf.split(".",1)
349  propName,propVal=propNameAndVal.split("=",1)
350  applied = False
351  for comp in [c for c in cfg._allComponents()]+cfg.getServices():
352  if comp.name==compName:
353  applied = True
354  exec(f"comp.{propNameAndVal}")
355  break
356  if not applied:
357  raise ValueError(f"postConfig {conf} had no effect ... typo?")
358 
359 # -------- CHANGES GO ABOVE ------------
360 
361 if flags.Exec.MaxEvents==0: cfg.printConfig()
362 print("Configured Services:",*[svc.name for svc in cfg.getServices()])
363 #print("Configured EventAlgos:",*[alg.name for alg in cfg.getEventAlgos()])
364 #print("Configured CondAlgos:",*[alg.name for alg in cfg.getCondAlgos()])
365 
366 #cfg.getService("StoreGateSvc").Dump=True
367 
368 # ensure printout level is low enough if dumping
369 if cfg.getService("StoreGateSvc").Dump:
370  cfg.getService("StoreGateSvc").OutputLevel=3
371 
372 
373 if flags.Exec.MaxEvents==0:
374  # create a han config file if running in config-only mode
375  from TrigT1CaloMonitoring.LVL1CaloMonitoringConfig import L1CaloMonitorCfgHelper
376  L1CaloMonitorCfgHelper.printHanConfig()
377  sys.exit(0)
378 
379 if cfg.run().isFailure():
380  import sys
381  sys.exit(1)
EfexMonitorAlgorithm.EfexMonitoringHistConfig
def EfexMonitoringHistConfig(flags, eFexAlg)
Definition: EfexMonitorAlgorithm.py:35
EmonByteStreamConfig.EmonByteStreamCfg
def EmonByteStreamCfg(flags, type_names=[])
Definition: EmonByteStreamConfig.py:12
python.OutputStreamConfig.OutputStreamCfg
def OutputStreamCfg(flags, streamName, ItemList=[], MetadataItemList=[], disableEventTag=False, trigNavThinningSvc=None, takeItemsFromInput=False, extendProvenanceRecord=True, AcceptAlgs=[], HelperTools=[])
Definition: OutputStreamConfig.py:12
EfexSimMonitorAlgorithm.EfexSimMonitoringConfig
def EfexSimMonitoringConfig(flags)
Definition: EfexSimMonitorAlgorithm.py:4
GfexSimMonitorAlgorithm.GfexSimMonitoringConfig
def GfexSimMonitoringConfig(flags, UseOfflineCopy=True)
Definition: GfexSimMonitorAlgorithm.py:4
python.TrigConfigSvcCfg.createL1PrescalesFileFromMenu
def createL1PrescalesFileFromMenu(flags)
Definition: TrigConfigSvcCfg.py:165
python.TrigConfigSvcCfg.generateL1Menu
def generateL1Menu(flags)
Definition: TrigConfigSvcCfg.py:184
python.TrigConfigSvcCfg.getL1MenuFileName
def getL1MenuFileName(flags)
Definition: TrigConfigSvcCfg.py:136
python.ByteStreamConfig.ByteStreamReadCfg
def ByteStreamReadCfg(flags, type_names=None)
Definition: Event/ByteStreamCnvSvc/python/ByteStreamConfig.py:25
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
python.Utils.setupLoggingLevels
def setupLoggingLevels(flags, ca)
Definition: Control/AthenaConfiguration/python/Utils.py:46
python.DetectorConfigFlags.setupDetectorsFromList
def setupDetectorsFromList(flags, detectors, toggle_geometry=False, validate_only=False)
Definition: DetectorConfigFlags.py:351
EfexInputMonitorAlgorithm.EfexInputMonitoringConfig
def EfexInputMonitoringConfig(flags)
Definition: EfexInputMonitorAlgorithm.py:4
L1CaloPhase1Monitoring.addEDM
def addEDM(edmType, edmName)
Definition: L1CaloPhase1Monitoring.py:313
python.IOVDbSvcConfig.addOverride
def addOverride(flags, folder, tag, db=None)
Definition: IOVDbSvcConfig.py:224
LArG4FSStartPointFilter.exec
exec
Definition: LArG4FSStartPointFilter.py:103
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:252
L1CaloFEXByteStreamConfig.gFexByteStreamToolCfg
def gFexByteStreamToolCfg(flags, name, *writeBS=False)
Definition: L1CaloFEXByteStreamConfig.py:148
TrigT1ResultByteStreamMonitoringConfig.L1TriggerByteStreamDecoderMonitoringCfg
def L1TriggerByteStreamDecoderMonitoringCfg(flags, name, decoderTools)
Definition: TrigT1ResultByteStreamMonitoringConfig.py:75
python.AutoConfigOnlineRecoFlags.autoConfigOnlineRecoFlags
def autoConfigOnlineRecoFlags(flags, partition=None)
Definition: AutoConfigOnlineRecoFlags.py:134
GfexInputMonitorAlgorithm.GfexInputMonitoringConfig
def GfexInputMonitoringConfig(flags)
Definition: GfexInputMonitorAlgorithm.py:4
L1CaloPhase1Monitoring.int
int
Definition: L1CaloPhase1Monitoring.py:63
L1CaloFEXByteStreamConfig.gFexInputByteStreamToolCfg
def gFexInputByteStreamToolCfg(flags, name, *writeBS=False)
Definition: L1CaloFEXByteStreamConfig.py:275
GfexMonitorAlgorithm.GfexMonitoringConfig
def GfexMonitoringConfig(flags)
Definition: GfexMonitorAlgorithm.py:4
python.AthMonitorCfgHelper.getDQTHistSvc
def getDQTHistSvc(flags)
Definition: AthMonitorCfgHelper.py:169
python.TrigConfigSvcCfg.L1ConfigSvcCfg
def L1ConfigSvcCfg(flags)
Definition: TrigConfigSvcCfg.py:198
L1CaloPhase1Monitoring.type
type
Definition: L1CaloPhase1Monitoring.py:63
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
L1CaloFEXByteStreamConfig.jFexRoiByteStreamToolCfg
def jFexRoiByteStreamToolCfg(flags, name, *writeBS=False, xTOBs=False)
Definition: L1CaloFEXByteStreamConfig.py:87
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
JfexSimMonitorAlgorithm.JfexSimMonitoringConfig
def JfexSimMonitoringConfig(flags)
Definition: JfexSimMonitorAlgorithm.py:4
L1CaloFEXByteStreamConfig.eFexByteStreamToolCfg
def eFexByteStreamToolCfg(flags, name, *writeBS=False, TOBs=True, xTOBs=False, multiSlice=False, decodeInputs=False)
Definition: L1CaloFEXByteStreamConfig.py:8
JfexInputMonitorAlgorithm.JfexInputMonitoringConfig
def JfexInputMonitoringConfig(flags)
Definition: JfexInputMonitorAlgorithm.py:4
EfexMonitorAlgorithm.EfexMonitoringConfig
def EfexMonitoringConfig(inputFlags)
Definition: EfexMonitorAlgorithm.py:4
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:216
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69
JetEfficiencyMonitorAlgorithm.JetEfficiencyMonitoringConfig
def JetEfficiencyMonitoringConfig(flags)
Definition: JetEfficiencyMonitorAlgorithm.py:4
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
L1CaloFEXSimCfg
Definition: L1CaloFEXSimCfg.py:1
JfexMonitorAlgorithm.JfexMonitoringConfig
def JfexMonitoringConfig(flags)
Definition: JfexMonitorAlgorithm.py:4