11 from AthenaCommon.Logging
import logging
12 from AthenaCommon.Logging
import log
as topLog
13 topLog.setLevel(logging.WARNING)
14 log = logging.getLogger(
'L1CaloPhase1Monitoring.py')
15 log.setLevel(logging.INFO)
17 from TrigT1CaloMonitoring.LVL1CaloMonitoringConfig
import L1CaloMonitorCfgHelper
18 L1CaloMonitorCfgHelper.embargoed = [
"Expert/Efficiency/gFEX/MuonReferenceTrigger/SRpt_L1_gJ400p0ETA25"]
22 from AthenaConfiguration.ComponentFactory
import CompFactory
23 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
24 from AthenaConfiguration.Enums
import LHCPeriod,Format
25 from AthenaCommon
import Constants
29 partition = ispy.IPCPartition(os.getenv(
"TDAQ_PARTITION",
"ATLAS"))
32 flags.Input.Files = []
38 flags.Exec.OutputLevel = Constants.WARNING
39 flags.Exec.InfoMessageComponents = [
"AthenaEventLoopMgr",
"THistSvc",
"PerfMonMTSvc",
"ApplicationMgr",
"AvalancheSchedulerSvc"]
40 flags.Exec.PrintAlgsSequence =
True
44 flags.GeoModel.Run = LHCPeriod.Run3
45 flags.Common.useOnlineLumi =
True
46 flags.DQ.doMonitoring =
True
47 flags.DQ.enableLumiAccess =
False
48 flags.DQ.FileKey =
"" if partition.isValid()
else "EXPERT"
49 flags.Output.HISTFileName = os.getenv(
"L1CALO_ATHENA_JOB_NAME",
"") +
"monitoring.root"
50 flags.DQ.useTrigger =
False
51 flags.Trigger.L1.doCaloInputs = partition.isValid()
52 flags.Trigger.enableL1CaloPhase1 =
True
54 flags.Trigger.L1.doCalo = partition.isValid()
55 flags.Trigger.L1.doeFex = partition.isValid()
56 flags.Trigger.L1.dojFex = partition.isValid()
57 flags.Trigger.L1.dogFex = partition.isValid()
58 flags.Trigger.L1.doTopo = partition.isValid()
61 if partition.isValid():
64 flags.Trigger.doLVL1 =
False
65 flags.Trigger.doHLT =
False
66 from AthenaConfiguration.AutoConfigOnlineRecoFlags
import autoConfigOnlineRecoFlags
69 flags.Trigger.doLVL1 =
True
74 parser = flags.getArgumentParser(epilog=
"""
75 Extra flags are specified after a " -- " and the following are most relevant bool flags for this script:
77 Trigger.enableL1CaloPhase1 : turn on/off the offline simulation [default: True]
78 DQ.doMonitoring : turn on/off the monitoring [default: True]
79 Trigger.L1.doCaloInputs : controls input readout decoding and monitoring [default: False*]
80 Trigger.L1.doCalo : controls trex (legacy syst) monitoring [default: False]
81 Trigger.L1.doeFex : controls efex simulation and monitoring [default: False*]
82 Trigger.L1.dojFex : controls jfex simulation and monitoring [default: False*]
83 Trigger.L1.dogFex : controls gfex simulation and monitoring [default: False*]
84 Trigger.L1.doTopo : controls topo simulation and monitoring [default: False*] (from 2023 Onwards)
85 DQ.useTrigger : controls if JetEfficiency monitoring alg is run or not [default: False]
86 PerfMon.doFullMonMT : print info about execution time of algorithms and memory use etc [default: False]
88 Note: If you do not specify any flags, then all the flags that are marked with a * will automatically become True
90 E.g. to run just the jFex monitoring, without offline simulation, you can do:
92 athena TrigT1CaloMonitoring/L1CalPhase1Monitoring.py .... -- Trigger.enableL1CaloPhase1=False Trigger.L1.doCaloInputs=False Trigger.L1.doeFex=False Trigger.L1.dogFex=False
94 Further notes: Run with "--evtMax 0" to print flags and ca config, and generate a hanConfig file.
95 Run with "--evtMax 1" to dump StoreGate contents after the first event
100 parser.formatter_class = argparse.RawDescriptionHelpFormatter
101 parser.add_argument(
'--runNumber',default=
None,help=
"specify to select a run number")
102 parser.add_argument(
'--lumiBlock',default=
None,help=
"specify to select a lumiBlock")
103 parser.add_argument(
'--evtNumber',default=
None,nargs=
"+",type=int,help=
"specify to select an evtNumber")
104 parser.add_argument(
'--stream',default=
"*",help=
"stream to lookup files in")
105 parser.add_argument(
'--fexReadoutFilter',action=
'store_true',help=
"If specified, will skip events without fexReadout")
106 parser.add_argument(
'--dbOverrides',default=
None,nargs=
"+",type=str,help=
"specify overrides of COOL database folders in form <folder>=<dbPath> or <folder>:<tag>[=<dbPath>] to override a tag, example: /TRIGGER/L1Calo/V1/Calibration/EfexEnergyCalib=mytest.db ")
107 parser.add_argument(
'--postConfig',default=[],nargs=
"+",type=str,help=
"specify component properties to apply at the end of the config. Can also specify in the flags section if start with 'cfg.'")
108 args,unknown_args = flags.fillFromArgs(parser=parser,return_unknown=
True)
109 args.postConfig += [x[4:]
for x
in unknown_args
if x.startswith(
"cfg.")]
110 if any([
not x.startswith(
"cfg.")
for x
in unknown_args]):
111 raise KeyError(
"Unknown flags: " +
" ".
join([x
for x
in unknown_args
if not x.startswith(
"cfg.")]))
112 if not any([flags.Trigger.L1.doCalo,flags.Trigger.L1.doCaloInputs,flags.Trigger.L1.doeFex,flags.Trigger.L1.dojFex,flags.Trigger.L1.dogFex,flags.Trigger.L1.doTopo,flags.DQ.useTrigger]):
113 log.info(
"No steering flags specified, turning on phase 1 sim+monitoring (trex,efex,jfex,gfex,topo)")
114 flags.Trigger.L1.doCaloInputs =
True
115 flags.Trigger.L1.doCalo =
True
116 flags.Trigger.L1.doeFex =
True
117 flags.Trigger.L1.dojFex =
True
118 flags.Trigger.L1.dogFex =
True
119 flags.Trigger.L1.doTopo =
True
120 if args.runNumber
is not None:
126 from glob
import glob
127 if args.lumiBlock
is None: args.lumiBlock=
"*"
128 log.info(
" ".
join((
"Looking up files in atlastier0 for run",args.runNumber,
"lb =",args.lumiBlock)))
129 flags.Input.Files = []
130 for lb
in args.lumiBlock.split(
","):
132 tryStr = f
"/eos/atlas/atlastier0/rucio/data*/{args.stream}/*{args.runNumber}/*RAW/*lb*.*"
134 tryStr = f
"/eos/atlas/atlastier0/rucio/data*/{args.stream}/*{args.runNumber}/*RAW/*lb{int(lb):04}.*"
135 log.info(
" ".
join((
"Trying",tryStr)))
136 flags.Input.Files += glob(tryStr)
137 log.info(
" ".
join((
"Found",
str(len(flags.Input.Files)),
"files")))
141 if not partition.isValid()
and len(flags.Input.Files)==0:
142 if flags.Exec.MaxEvents==0:
144 flags.Input.Files = [
"/eos/atlas/atlascerngroupdisk/det-l1calo/OfflineSoftware/TestFiles/data24_13p6TeV/data24_13p6TeV.00477048.physics_Main.daq.RAW._lb0821._SFO-20._0001.data"]
146 log.fatal(
"Running in offline mode but no input files provided")
148 elif partition.isValid():
149 log.info(
"Running Online with Partition: "+partition.name())
150 standalone = (partition.name()!=
"ATLAS")
151 if standalone : log.info(
"Using local menu because partition is not ATLAS")
152 elif len(flags.Input.Files)==0:
155 log.info(
"Waiting 2 minutes for LATOME to get their databases in order")
159 if len(flags.Input.Files)>0:
160 flags.DQ.Environment =
"user"
163 standalone = ((flags.Input.ProjectName ==
"data_test")
or (re.match(
r"data\d\d_calib", flags.Input.ProjectName)))
164 if standalone :
print(
"Using local menu because project_name=",flags.Input.ProjectName)
165 if flags.Input.isMC : flags.Trigger.triggerConfig=
'FILE'
166 elif flags.Trigger.triggerConfig==
'INFILE':
168 flags.Trigger.triggerConfig=
"DB"
170 if flags.Input.isMC
and flags.Trigger.L1.doCalo:
171 log.info(
"Disabling legacy monitoring because it doesn't work with MC")
172 flags.Trigger.L1.doCalo=
False
175 flags.Trigger.triggerConfig=
'FILE'
178 if flags.Exec.MaxEvents == 0:
180 flags.DQ.doMonitoring=
True
181 flags.Trigger.L1.doCalo=
True
182 flags.Trigger.L1.doCaloInputs=
True
183 flags.Trigger.L1.doeFex=
True
184 flags.Trigger.L1.dojFex=
True
185 flags.Trigger.L1.dogFex=
True
186 flags.Trigger.L1.doTopo=
True
187 flags.DQ.useTrigger=
True
188 flags.Exec.OutputLevel = Constants.INFO
191 if flags.GeoModel.AtlasVersion
is None:
192 from AthenaConfiguration.TestDefaults
import defaultGeometryTags
193 flags.GeoModel.AtlasVersion = defaultGeometryTags.autoconfigure(flags)
195 if (flags.Input.Format == Format.POOL): flags.Trigger.L1.doTopo =
False
196 if not flags.Trigger.L1.doTopo: flags.Trigger.L1.doMuon =
False
198 if flags.Trigger.enableL1CaloPhase1:
201 from AthenaConfiguration.DetectorConfigFlags
import setupDetectorsFromList
202 setupDetectorsFromList(flags,[
'LAr',
'Tile',
'MBTS'] + ([
'RPC',
'TGC',
'MDT']
if flags.Trigger.L1.doMuon
else []),
True)
204 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
207 log.setLevel(logging.INFO)
210 if flags.Exec.MaxEvents == 0: flags.dump(evaluate=
True)
213 if not any([flags.Trigger.L1.doCaloInputs,flags.Trigger.L1.doCalo,flags.Trigger.L1.doeFex,flags.Trigger.L1.dojFex,flags.Trigger.L1.dogFex,flags.Trigger.L1.doTopo]):
214 log.fatal(
"You did not set any flags to specify what to run. ")
215 log.fatal(
"Please set at least one of the flags in Trigger.L1.(doCaloInputs, doCalo, doeFex, dojFex, dogFex, doTopo) ")
216 log.fatal(
"or use '--all' option to turn on everything (but that is slow)")
217 log.fatal(
"See --help for more info about the flags")
220 if partition.isValid()
and len(flags.Input.Files)==0:
221 flags.dump(evaluate=
True)
222 from ByteStreamEmonSvc.EmonByteStreamConfig
import EmonByteStreamCfg
224 bsSvc = cfg.getService(
"ByteStreamInputSvc")
225 bsSvc.Partition = partition.name()
226 bsSvc.Key = os.environ.get(
"L1CALO_PTIO_KEY",
"REB" if partition.name()==
"L1CaloStandalone" else "dcm")
227 if partition.name()==
"L1CaloSTF": bsSvc.Key =
"SWROD"
228 bsSvc.KeyCount =
int(os.environ.get(
"L1CALO_PTIO_KEY_COUNT",
"25"))
229 bsSvc.ISServer =
"Histogramming"
230 bsSvc.BufferSize = 10
231 bsSvc.UpdatePeriod = 30
232 bsSvc.Timeout = 240000
233 bsSvc.PublishName = os.getenv(
"L1CALO_ATHENA_JOB_NAME",
"testing")
234 bsSvc.StreamType = os.getenv(
"L1CALO_PTIO_STREAM_TYPE",
"physics")
235 bsSvc.ExitOnPartitionShutdown =
False
236 bsSvc.ClearHistograms =
True
237 bsSvc.GroupName =
"RecExOnline"
239 bsSvc.StreamNames = os.getenv(
"L1CALO_PTIO_STREAM_NAME",
"L1Calo:Main:MinBias:MinBiasOverlay:UPC:EnhancedBias:ZeroBias:HardProbes:Standby:ALFACalib").
split(
":")
240 bsSvc.StreamLogic = os.getenv(
"L1CALO_PTIO_STREAM_LOGIC",
"Or")
if partition.name() !=
"L1CaloStandalone" else "Ignore"
242 bsSvc.LVL1Logic =
"Ignore"
243 elif flags.Input.Format == Format.POOL:
244 log.info(f
"Running Offline on {len(flags.Input.Files)} POOL files")
245 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
248 log.info(f
"Running Offline on {len(flags.Input.Files)} bytestream files")
251 from TriggerJobOpts.TriggerByteStreamConfig
import ByteStreamReadCfg
255 from AthenaMonitoring.AthMonitorCfgHelper
import getDQTHistSvc
259 from TrigConfigSvc.TrigConfigSvcCfg
import L1ConfigSvcCfg,generateL1Menu, createL1PrescalesFileFromMenu,getL1MenuFileName
260 if flags.Trigger.triggerConfig==
"FILE":
265 if os.path.exists(menuFilename):
266 log.info(f
"Using L1Menu: {menuFilename}")
268 log.fatal(f
"L1Menu file does not exist: {menuFilename}")
277 if partition.isValid()
or (flags.Input.Format != Format.POOL
and not flags.Input.isMC):
278 from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig
import eFexByteStreamToolCfg, jFexRoiByteStreamToolCfg, jFexInputByteStreamToolCfg, gFexByteStreamToolCfg, gFexInputByteStreamToolCfg
279 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))]
280 if flags.Trigger.L1.dojFex: decoderTools += [cfg.popToolsAndMerge(
jFexRoiByteStreamToolCfg(flags=flags,name=
"jFexBSDecoderTool",writeBS=
False))]
281 if flags.Trigger.L1.dogFex: decoderTools += [cfg.popToolsAndMerge(
gFexByteStreamToolCfg(flags=flags,name=
"gFexBSDecoderTool",writeBS=
False))]
283 if flags.Trigger.L1.doMuon:
284 from MuonConfig.MuonBytestreamDecodeConfig
import RpcBytestreamDecodeCfg,TgcBytestreamDecodeCfg
287 from TrigT1ResultByteStream.TrigT1ResultByteStreamConfig
import MuonRoIByteStreamToolCfg
291 if flags.Trigger.L1.doCaloInputs:
292 if flags.Trigger.L1.dojFex: decoderTools += [cfg.popToolsAndMerge(
jFexInputByteStreamToolCfg(flags=flags,name=
'jFexInputBSDecoderTool',writeBS=
False))]
293 if flags.Trigger.L1.dogFex: decoderTools += [cfg.popToolsAndMerge(
gFexInputByteStreamToolCfg(flags=flags,name=
'gFexInputBSDecoderTool',writeBS=
False))]
295 if len(decoderTools) > 0:
296 from TrigT1ResultByteStream.TrigT1ResultByteStreamMonitoringConfig
import L1TriggerByteStreamDecoderMonitoringCfg
297 cfg.addEventAlgo(CompFactory.L1TriggerByteStreamDecoderAlg(
298 name=
"L1TriggerByteStreamDecoder",
299 OutputLevel=Constants.ERROR,
300 DecoderTools=decoderTools,
301 ByteStreamMetadataRHKey =
'',
302 MaybeMissingROBs= [id
for tool
in decoderTools
for id
in tool.ROBIDs ]
if partition.name()!=
"ATLAS" or not partition.isValid()
else [],
304 ),sequenceName=
'AthAlgSeq'
308 if flags.Trigger.enableL1CaloPhase1:
309 from L1CaloFEXSim.L1CaloFEXSimCfg
import L1CaloFEXSimCfg
313 cfg.merge(
L1CaloFEXSimCfg(flags,outputSuffix=
"_ReSim" if flags.Input.Format == Format.POOL
else ""))
315 if flags.Trigger.L1.doeFex:
317 from TrigConfigSvc.TriggerConfigAccess
import getL1MenuAccess
319 L1_menu.printSummary()
320 em_algoVersion = L1_menu.thresholdExtraInfo(
"eEM").
get(
"algoVersion", 0)
321 tau_algoVersion = L1_menu.thresholdExtraInfo(
"eTAU").
get(
"algoVersion", 0)
322 log.info(f
"algoVersions: eEM: {em_algoVersion}, eTAU: {tau_algoVersion}")
326 if flags.Trigger.L1.doTopo:
327 from L1TopoSimulation.L1TopoSimulationConfig
import L1TopoSimulationCfg
343 if flags.DQ.doMonitoring:
344 if flags.Trigger.L1.doCalo:
345 from TrigT1CaloMonitoring.PprMonitorAlgorithm
import PprMonitoringConfig
347 from TrigT1CaloMonitoring.PPMSimBSMonitorAlgorithm
import PPMSimBSMonitoringConfig
349 from TrigT1CaloMonitoring.OverviewMonitorAlgorithm
import OverviewMonitoringConfig
353 OverviewMonAlg = cfg.getEventAlgo(
"OverviewMonAlg")
354 OverviewMonAlg.CPMErrorLocation =
""
355 OverviewMonAlg.CPMMismatchLocation =
""
357 if flags.Trigger.L1.doeFex:
358 from TrigT1CaloMonitoring.EfexMonitorAlgorithm
import EfexMonitoringConfig
360 EfexMonAlg = cfg.getEventAlgo(
'EfexMonAlg')
362 EfexMonAlg.eFexEMTobKeyList = [
'L1_eEMRoI',
'L1_eEMxRoI']
363 EfexMonAlg.eFexTauTobKeyList = [
'L1_eTauRoI',
'L1_eTauxRoI']
365 if flags.Input.Format == Format.POOL
or flags.Trigger.enableL1CaloPhase1:
366 for l
in [EfexMonAlg.eFexEMTobKeyList,EfexMonAlg.eFexTauTobKeyList]: l += [x + (
"_ReSim" if flags.Input.Format == Format.POOL
and flags.Trigger.enableL1CaloPhase1
else "Sim")
for x
in l ]
368 if not flags.Input.isMC
and flags.Trigger.enableL1CaloPhase1:
369 from TrigT1CaloMonitoring.EfexSimMonitorAlgorithm
import EfexSimMonitoringConfig
373 from TrigT1CaloMonitoring.EfexMonitorAlgorithm
import EfexMonitoringHistConfig
376 if flags.Trigger.L1.dojFex:
377 from TrigT1CaloMonitoring.JfexMonitorAlgorithm
import JfexMonitoringConfig
379 if not flags.Input.isMC
and flags.Trigger.enableL1CaloPhase1:
380 from TrigT1CaloMonitoring.JfexSimMonitorAlgorithm
import JfexSimMonitoringConfig
382 if flags.Trigger.L1.dogFex:
383 from TrigT1CaloMonitoring.GfexMonitorAlgorithm
import GfexMonitoringConfig
385 if not flags.Input.isMC
and flags.Trigger.enableL1CaloPhase1:
386 from TrigT1CaloMonitoring.GfexSimMonitorAlgorithm
import GfexSimMonitoringConfig
390 if flags.DQ.useTrigger:
391 from TrigT1CaloMonitoring.JetEfficiencyMonitorAlgorithm
import JetEfficiencyMonitoringConfig
394 if flags.Trigger.L1.doTopo:
395 from L1TopoOnlineMonitoring.L1TopoOnlineMonitoringConfig
import Phase1TopoMonitoringCfg
399 if flags.Trigger.L1.doCaloInputs
and not flags.Input.isMC:
400 from TrigT1CaloMonitoring.EfexInputMonitorAlgorithm
import EfexInputMonitoringConfig
402 from TrigT1CaloMonitoring.JfexInputMonitorAlgorithm
import JfexInputMonitoringConfig
404 from TrigT1CaloMonitoring.GfexInputMonitorAlgorithm
import GfexInputMonitoringConfig
407 mainSeq =
"AthAllAlgSeq"
408 if args.fexReadoutFilter:
410 topSeq = cfg.getSequence(
"AthAlgEvtSeq")
411 algSeq = cfg.getSequence(mainSeq)
412 mainSeq =
"New" + mainSeq
414 topSeq.Members = [topSeq.Members[0],CompFactory.AthSequencer(mainSeq),topSeq.Members[-1]]
415 cfg.addEventAlgo(CompFactory.L1IDFilterAlgorithm(),sequenceName=mainSeq)
416 cfg.getSequence(mainSeq).Members += [algSeq]
418 if args.evtNumber
is not None:
419 print(
"filtering events",args.evtNumber)
421 topSeq = cfg.getSequence(
"AthAlgEvtSeq")
422 algSeq = cfg.getSequence(mainSeq)
423 mainSeq =
"New" + mainSeq
425 topSeq.Members = [topSeq.Members[0],CompFactory.AthSequencer(mainSeq),topSeq.Members[-1]]
426 cfg.addEventAlgo(CompFactory.EventNumberFilterAlgorithm(
"EvtNumberFilter",EventNumbers=args.evtNumber),sequenceName=mainSeq)
427 cfg.getSequence(mainSeq).Members += [algSeq]
429 from PerfMonComps.PerfMonCompsConfig
import PerfMonMTSvcCfg
432 from AthenaConfiguration.Utils
import setupLoggingLevels
435 if any([s.name==
"AthenaEventLoopMgr" for s
in cfg.getServices()]): cfg.getService(
"AthenaEventLoopMgr").IntervalInSeconds = 30
436 if any([s.name==
"AvalancheSchedulerSvc" for s
in cfg.getServices()]):
437 cfg.getService(
"AvalancheSchedulerSvc").ShowDataDependencies=
True
440 if not flags.Input.isMC:
443 if runinfo.FWversion()==6:
445 if args.dbOverrides
is None: args.dbOverrides = []
446 args.dbOverrides += [
"/LAR/Identifier/LatomeMapping:LARIdentifierLatomeMapping-fw6"]
450 if type(args.dbOverrides)==list:
451 from IOVDbSvc.IOVDbSvcConfig
import addOverride
455 for override
in args.dbOverrides:
456 folderName,dbPath = override.split(
"=",1)
if "=" in override
else (override,
"")
457 if folderName ==
"":
raise ValueError(
"Cannot parse dbOverride: " + override)
460 if ";dbname=" not in dbPath: dbPath +=
";dbname=CONDBR2"
461 dbPath,dbInst = dbPath.split(
";dbname=")
462 if not os.path.exists(dbPath):
raise ValueError(
"dbOverride file doesn't exist: " + dbPath)
463 db = f
"sqlite://;schema={dbPath};dbname={dbInst}"
465 if ":" in folderName:
466 folderName,tag = folderName.split(
":",1)
467 if folderName[0] !=
"/": folderName =
"/TRIGGER/L1Calo/V1/Calibration/" + folderName
468 log.info(
" ".
join((
"Overriding COOL folder=",folderName,
"db=",db,
"tag=",tag)))
472 cfg.merge(
addOverride(flags,folder=folderName,db=db,tag=tag))
476 if flags.Output.AODFileName !=
"":
478 if edmName.endswith(
"Sim")
and flags.Input.Format == Format.POOL: edmName = edmName.replace(
"Sim",
"_ReSim")
479 auxType = edmType.replace(
'Container',
'AuxContainer')
480 return [f
'{edmType}#{edmName}', f
'{auxType}#{edmName}Aux.']
484 if flags.Trigger.L1.doeFex:
485 outputEDM +=
addEDM(
'xAOD::eFexEMRoIContainer' ,
"L1_eEMRoI")
486 outputEDM +=
addEDM(
'xAOD::eFexEMRoIContainer' ,
"L1_eEMRoISim")
487 outputEDM +=
addEDM(
'xAOD::eFexEMRoIContainer' ,
"L1_eEMxRoI")
488 outputEDM +=
addEDM(
'xAOD::eFexEMRoIContainer' ,
"L1_eEMxRoISim")
490 outputEDM +=
addEDM(
'xAOD::eFexTauRoIContainer' ,
"L1_eTauRoI")
491 outputEDM +=
addEDM(
'xAOD::eFexTauRoIContainer' ,
"L1_eTauRoISim")
492 outputEDM +=
addEDM(
'xAOD::eFexTauRoIContainer' ,
"L1_eTauxRoI")
493 outputEDM +=
addEDM(
'xAOD::eFexTauRoIContainer' ,
"L1_eTauxRoISim")
495 if flags.Trigger.L1.dojFex:
496 outputEDM +=
addEDM(
'xAOD::jFexTowerContainer' ,
"L1_jFexDataTowers")
497 outputEDM +=
addEDM(
'xAOD::jFexTowerContainer' ,
"L1_jFexEmulatedTowers")
498 outputEDM +=
addEDM(
'xAOD::jFexSRJetRoIContainer',
'L1_jFexSRJetRoISim')
499 outputEDM +=
addEDM(
'xAOD::jFexLRJetRoIContainer',
'L1_jFexLRJetRoISim')
500 outputEDM +=
addEDM(
'xAOD::jFexTauRoIContainer' ,
'L1_jFexTauRoISim' )
501 outputEDM +=
addEDM(
'xAOD::jFexFwdElRoIContainer',
'L1_jFexFwdElRoISim')
502 outputEDM +=
addEDM(
'xAOD::jFexSumETRoIContainer',
'L1_jFexSumETRoISim')
503 outputEDM +=
addEDM(
'xAOD::jFexMETRoIContainer' ,
'L1_jFexMETRoISim' )
504 outputEDM +=
addEDM(
'xAOD::jFexSRJetRoIContainer',
'L1_jFexSRJetRoI')
505 outputEDM +=
addEDM(
'xAOD::jFexLRJetRoIContainer',
'L1_jFexLRJetRoI')
506 outputEDM +=
addEDM(
'xAOD::jFexTauRoIContainer' ,
'L1_jFexTauRoI' )
507 outputEDM +=
addEDM(
'xAOD::jFexFwdElRoIContainer',
'L1_jFexFwdElRoI')
508 outputEDM +=
addEDM(
'xAOD::jFexSumETRoIContainer',
'L1_jFexSumETRoI')
509 outputEDM +=
addEDM(
'xAOD::jFexMETRoIContainer' ,
'L1_jFexMETRoI' )
511 outputEDM +=
addEDM(
'xAOD::jFexSRJetRoIContainer',
'L1_jFexSRJetxRoI')
512 outputEDM +=
addEDM(
'xAOD::jFexLRJetRoIContainer',
'L1_jFexLRJetxRoI')
513 outputEDM +=
addEDM(
'xAOD::jFexTauRoIContainer' ,
'L1_jFexTauxRoI' )
514 outputEDM +=
addEDM(
'xAOD::jFexFwdElRoIContainer',
'L1_jFexFwdElxRoI')
515 outputEDM +=
addEDM(
'xAOD::jFexSumETRoIContainer',
'L1_jFexSumETxRoI')
516 outputEDM +=
addEDM(
'xAOD::jFexMETRoIContainer' ,
'L1_jFexMETxRoI' )
518 if flags.Trigger.L1.dogFex:
519 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gMETComponentsJwoj')
520 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gMETComponentsJwojSim')
521 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gMHTComponentsJwoj')
522 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gMHTComponentsJwojSim')
523 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gMSTComponentsJwoj')
524 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gMSTComponentsJwojSim')
525 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gScalarEJwoj')
526 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gScalarEJwojSim')
527 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gScalarENoiseCutSim')
528 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gScalarERmsSim')
530 outputEDM +=
addEDM(
'xAOD::gFexJetRoIContainer',
'L1_gFexLRJetRoI')
531 outputEDM +=
addEDM(
'xAOD::gFexJetRoIContainer',
'L1_gFexLRJetRoISim')
532 outputEDM +=
addEDM(
'xAOD::gFexJetRoIContainer',
'L1_gFexSRJetRoI')
533 outputEDM +=
addEDM(
'xAOD::gFexJetRoIContainer',
'L1_gFexSRJetRoISim')
534 outputEDM +=
addEDM(
'xAOD::gFexJetRoIContainer',
'L1_gFexRhoRoI')
535 outputEDM +=
addEDM(
'xAOD::gFexJetRoIContainer',
'L1_gFexRhoRoISim')
539 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
541 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
545 if "MaskedSCCondAlg" in [a.name
for a
in cfg.getCondAlgos()]: cfg.getCondAlgo(
"MaskedSCCondAlg").ReloadEveryEvent=flags.Common.isOnline
546 if "MuonAlignmentCondAlg" in [a.name
for a
in cfg.getCondAlgos()]: cfg.getCondAlgo(
"MuonAlignmentCondAlg").OutputLevel=Constants.ERROR
549 if flags.Trigger.L1.doeFex
and (args.evtNumber
is not None):
551 cfg.addEventAlgo(CompFactory.LVL1.eFexEventDumper(TowersKey=
"L1_eFexDataTowers",EMRoIKey=
"L1_eEMRoI",TauRoIKey=
"L1_eTauRoI"))
556 for conf
in args.postConfig:
557 compName,propNameAndVal=conf.split(
".",1)
558 propName,propVal=propNameAndVal.split(
"=",1)
560 from collections
import defaultdict
561 availableComps = defaultdict(list)
562 for comp
in [c
for c
in cfg._allComponents()]+cfg.getServices():
563 availableComps[comp.getType()] += [comp.getName()]
564 if comp.getName()==compName
or comp.getType()==compName
or comp.toStringProperty()==compName:
567 log.info(
"Setting "+compName+
" property: "+propNameAndVal)
568 exec(f
"comp.{propNameAndVal}")
569 except AttributeError
as e:
570 log.fatal(
"Unknown property of " + compName +
" : " + propNameAndVal)
571 log.fatal(
"See next line for available properties:")
576 print(
"Available comps:")
577 for k,v
in availableComps.items():
579 raise ValueError(f
"postConfig {conf} had no effect ... typo? See list above of available components")
583 if flags.Exec.MaxEvents==0: cfg.printConfig(withDetails =
True, summariseProps =
True, printDefaults =
True)
584 log.info(
" ".
join((
"Configured Services:",*[svc.name
for svc
in cfg.getServices()])) )
588 if flags.Exec.MaxEvents==1:
590 cfg.getService(
"StoreGateSvc").Dump=
True
591 cfg.getService(
"DetectorStore").Dump=
True
594 if cfg.getService(
"StoreGateSvc").Dump:
595 cfg.getService(
"StoreGateSvc").OutputLevel=3
596 if cfg.getService(
"DetectorStore").Dump:
597 cfg.getService(
"DetectorStore").OutputLevel=3
599 if flags.Exec.MaxEvents==0:
603 from TrigT1CaloMonitoring.LVL1CaloMonitoringConfig
import L1CaloMonitorCfgHelper
604 L1CaloMonitorCfgHelper.printHanConfig()
605 cfg._wasMerged =
True
608 if cfg.run().isFailure():