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 AthenaConfiguration.ComponentFactory
import CompFactory
18 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
19 from AthenaConfiguration.Enums
import LHCPeriod,Format
20 from AthenaCommon
import Constants
24 partition = ispy.IPCPartition(os.getenv(
"TDAQ_PARTITION",
"ATLAS"))
27 flags.Input.Files = []
33 flags.Exec.OutputLevel = Constants.WARNING
34 flags.Exec.InfoMessageComponents = [
"AthenaEventLoopMgr",
"THistSvc",
"PerfMonMTSvc",
"ApplicationMgr",
"AvalancheSchedulerSvc"]
35 flags.Exec.PrintAlgsSequence =
True
39 flags.GeoModel.Run = LHCPeriod.Run3
40 flags.Common.useOnlineLumi =
True
41 flags.DQ.doMonitoring =
True
42 flags.DQ.enableLumiAccess =
False
43 flags.DQ.FileKey =
"" if partition.isValid()
else "EXPERT"
44 flags.Output.HISTFileName = os.getenv(
"L1CALO_ATHENA_JOB_NAME",
"") +
"monitoring.root"
45 flags.DQ.useTrigger =
False
46 flags.Trigger.L1.doCaloInputs =
True
47 flags.Trigger.enableL1CaloPhase1 =
True
49 flags.Trigger.L1.doeFex =
True
50 flags.Trigger.L1.dojFex =
True
51 flags.Trigger.L1.dogFex =
True
52 flags.Trigger.L1.doTopo =
True
55 if partition.isValid():
58 flags.Trigger.doLVL1 =
False
59 flags.Trigger.doHLT =
False
60 from AthenaConfiguration.AutoConfigOnlineRecoFlags
import autoConfigOnlineRecoFlags
63 flags.Trigger.doLVL1 =
True
68 parser = flags.getArgumentParser(epilog=
"""
69 Extra flags are specified after a " -- " and the following are most relevant bool flags for this script:
71 Trigger.enableL1CaloPhase1 : turn on/off the offline simulation [default: True]
72 DQ.doMonitoring : turn on/off the monitoring [default: True]
73 Trigger.L1.doCaloInputs : controls input readout decoding and monitoring [default: True]
74 Trigger.L1.doCalo : controls trex (legacy syst) monitoring [default: True]
75 Trigger.L1.doeFex : controls efex simulation and monitoring [default: True]
76 Trigger.L1.dojFex : controls jfex simulation and monitoring [default: True]
77 Trigger.L1.dogFex : controls gfex simulation and monitoring [default: True]
78 Trigger.L1.doTopo : controls topo simulation and monitoring [default: True] (from 2023 Onwards)
79 DQ.useTrigger : controls if JetEfficiency monitoring alg is run or not [default: False]
80 PerfMon.doFullMonMT : print info about execution time of algorithms and memory use etc [default: False]
82 E.g. to run just the jFex monitoring, without offline simulation, you can do:
84 athena TrigT1CaloMonitoring/L1CalPhase1Monitoring.py .... -- Trigger.enableL1CaloPhase1=False Trigger.L1.doCaloInputs=False Trigger.L1.doeFex=False Trigger.L1.dogFex=False
86 Further notes: Run with "--evtMax 0" to print flags and ca config, and generate a hanConfig file.
87 Run with "--evtMax 1" to dump StoreGate contents after the first event
92 parser.formatter_class = argparse.RawDescriptionHelpFormatter
93 parser.add_argument(
'--runNumber',default=
None,help=
"specify to select a run number")
94 parser.add_argument(
'--lumiBlock',default=
None,help=
"specify to select a lumiBlock")
95 parser.add_argument(
'--evtNumber',default=
None,nargs=
"+",type=int,help=
"specify to select an evtNumber")
96 parser.add_argument(
'--stream',default=
"*",help=
"stream to lookup files in")
97 parser.add_argument(
'--fexReadoutFilter',action=
'store_true',help=
"If specified, will skip events without fexReadout")
98 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 ")
99 parser.add_argument(
'--postConfig',default=[],nargs=
"+",type=str,help=
"specify component properties to apply at the end of the config")
100 args = flags.fillFromArgs(parser=parser)
101 if args.runNumber
is not None:
107 from glob
import glob
108 if args.lumiBlock
is None: args.lumiBlock=
"*"
109 log.info(
" ".
join((
"Looking up files in atlastier0 for run",args.runNumber,
"lb =",args.lumiBlock)))
110 flags.Input.Files = []
111 for lb
in args.lumiBlock.split(
","):
113 tryStr = f
"/eos/atlas/atlastier0/rucio/data*/{args.stream}/*{args.runNumber}/*RAW/*lb*.*"
115 tryStr = f
"/eos/atlas/atlastier0/rucio/data*/{args.stream}/*{args.runNumber}/*RAW/*lb{int(lb):04}.*"
116 log.info(
" ".
join((
"Trying",tryStr)))
117 flags.Input.Files += glob(tryStr)
118 log.info(
" ".
join((
"Found",
str(len(flags.Input.Files)),
"files")))
122 if not partition.isValid()
and len(flags.Input.Files)==0:
123 if flags.Exec.MaxEvents==0:
125 flags.Input.Files = [
"/eos/atlas/atlascerngroupdisk/det-l1calo/OfflineSoftware/TestFiles/data24_13p6TeV/data24_13p6TeV.00477048.physics_Main.daq.RAW._lb0821._SFO-20._0001.data"]
127 log.fatal(
"Running in offline mode but no input files provided")
129 elif partition.isValid():
130 log.info(
"Running Online with Partition:",partition.name())
131 standalone = (partition.name()!=
"ATLAS")
132 if standalone : log.info(
"Using local menu because partition is not ATLAS")
135 if len(flags.Input.Files)>0:
136 flags.DQ.Environment =
"user"
139 standalone = ((flags.Input.ProjectName ==
"data_test")
or (re.match(
r"data\d\d_calib", flags.Input.ProjectName)))
140 if standalone :
print(
"Using local menu because project_name=",flags.Input.ProjectName)
141 if flags.Input.isMC : flags.Trigger.triggerConfig=
'FILE'
142 elif flags.Trigger.triggerConfig==
'INFILE':
144 flags.Trigger.triggerConfig=
"DB"
146 if flags.Input.isMC
and flags.Trigger.L1.doCalo:
147 log.info(
"Disabling legacy monitoring because it doesn't work with MC")
148 flags.Trigger.L1.doCalo=
False
151 flags.Trigger.triggerConfig=
'FILE'
154 if flags.Exec.MaxEvents == 0:
156 flags.DQ.doMonitoring=
True
157 flags.Trigger.L1.doCaloInputs=
True
158 flags.Trigger.L1.doeFex=
True
159 flags.Trigger.L1.dojFex=
True
160 flags.Trigger.L1.dogFex=
True
161 flags.Trigger.L1.doTopo=
True
162 flags.DQ.useTrigger=
True
163 flags.Exec.OutputLevel = Constants.INFO
166 if flags.GeoModel.AtlasVersion
is None:
167 from AthenaConfiguration.TestDefaults
import defaultGeometryTags
168 flags.GeoModel.AtlasVersion = defaultGeometryTags.autoconfigure(flags)
170 if (flags.Input.Format == Format.POOL): flags.Trigger.L1.doTopo =
False
171 if not flags.Trigger.L1.doTopo: flags.Trigger.L1.doMuon =
False
173 if flags.Trigger.enableL1CaloPhase1:
176 from AthenaConfiguration.DetectorConfigFlags
import setupDetectorsFromList
177 setupDetectorsFromList(flags,[
'LAr',
'Tile',
'MBTS'] + ([
'RPC',
'TGC',
'MDT']
if flags.Trigger.L1.doMuon
else []),
True)
179 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
182 log.setLevel(logging.INFO)
185 if flags.Exec.MaxEvents == 0: flags.dump(evaluate=
True)
187 if partition.isValid()
and len(flags.Input.Files)==0:
188 flags.dump(evaluate=
True)
189 from ByteStreamEmonSvc.EmonByteStreamConfig
import EmonByteStreamCfg
191 bsSvc = cfg.getService(
"ByteStreamInputSvc")
192 bsSvc.Partition = partition.name()
193 bsSvc.Key = os.environ.get(
"L1CALO_PTIO_KEY",
"REB" if partition.name()==
"L1CaloStandalone" else "dcm")
194 if partition.name()==
"L1CaloSTF": bsSvc.Key =
"SWROD"
195 bsSvc.KeyCount =
int(os.environ.get(
"L1CALO_PTIO_KEY_COUNT",
"25"))
196 bsSvc.ISServer =
"Histogramming"
197 bsSvc.BufferSize = 10
198 bsSvc.UpdatePeriod = 30
199 bsSvc.Timeout = 240000
200 bsSvc.PublishName = os.getenv(
"L1CALO_ATHENA_JOB_NAME",
"testing")
201 bsSvc.StreamType = os.getenv(
"L1CALO_PTIO_STREAM_TYPE",
"physics")
202 bsSvc.ExitOnPartitionShutdown =
False
203 bsSvc.ClearHistograms =
True
204 bsSvc.GroupName =
"RecExOnline"
206 bsSvc.StreamNames = os.getenv(
"L1CALO_PTIO_STREAM_NAME",
"L1Calo:Main:MinBias:MinBiasOverlay:UPC:EnhancedBias:ZeroBias:HardProbes:Standby:ALFACalib").
split(
":")
207 bsSvc.StreamLogic = os.getenv(
"L1CALO_PTIO_STREAM_LOGIC",
"Or")
if partition.name() !=
"L1CaloStandalone" else "Ignore"
209 bsSvc.LVL1Logic =
"Ignore"
210 elif flags.Input.Format == Format.POOL:
211 log.info(f
"Running Offline on {len(flags.Input.Files)} POOL files")
212 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
215 log.info(f
"Running Offline on {len(flags.Input.Files)} bytestream files")
218 from TriggerJobOpts.TriggerByteStreamConfig
import ByteStreamReadCfg
222 from AthenaMonitoring.AthMonitorCfgHelper
import getDQTHistSvc
226 from TrigConfigSvc.TrigConfigSvcCfg
import L1ConfigSvcCfg,generateL1Menu, createL1PrescalesFileFromMenu,getL1MenuFileName
227 if flags.Trigger.triggerConfig==
"FILE":
232 if os.path.exists(menuFilename):
233 log.info(f
"Using L1Menu: {menuFilename}")
235 log.fatal(f
"L1Menu file does not exist: {menuFilename}")
244 if partition.isValid()
or (flags.Input.Format != Format.POOL
and not flags.Input.isMC):
245 from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig
import eFexByteStreamToolCfg, jFexRoiByteStreamToolCfg, jFexInputByteStreamToolCfg, gFexByteStreamToolCfg, gFexInputByteStreamToolCfg
246 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))]
247 if flags.Trigger.L1.dojFex: decoderTools += [cfg.popToolsAndMerge(
jFexRoiByteStreamToolCfg(flags=flags,name=
"jFexBSDecoderTool",writeBS=
False))]
248 if flags.Trigger.L1.dogFex: decoderTools += [cfg.popToolsAndMerge(
gFexByteStreamToolCfg(flags=flags,name=
"gFexBSDecoderTool",writeBS=
False))]
250 if flags.Trigger.L1.doMuon:
251 from MuonConfig.MuonBytestreamDecodeConfig
import RpcBytestreamDecodeCfg,TgcBytestreamDecodeCfg
254 from TrigT1ResultByteStream.TrigT1ResultByteStreamConfig
import MuonRoIByteStreamToolCfg
258 if flags.Trigger.L1.doCaloInputs:
259 if flags.Trigger.L1.dojFex: decoderTools += [cfg.popToolsAndMerge(
jFexInputByteStreamToolCfg(flags=flags,name=
'jFexInputBSDecoderTool',writeBS=
False))]
260 if flags.Trigger.L1.dogFex: decoderTools += [cfg.popToolsAndMerge(
gFexInputByteStreamToolCfg(flags=flags,name=
'gFexInputBSDecoderTool',writeBS=
False))]
262 if len(decoderTools) > 0:
263 from TrigT1ResultByteStream.TrigT1ResultByteStreamMonitoringConfig
import L1TriggerByteStreamDecoderMonitoringCfg
264 cfg.addEventAlgo(CompFactory.L1TriggerByteStreamDecoderAlg(
265 name=
"L1TriggerByteStreamDecoder",
266 OutputLevel=Constants.ERROR,
267 DecoderTools=decoderTools,
268 ByteStreamMetadataRHKey =
'',
269 MaybeMissingROBs= [id
for tool
in decoderTools
for id
in tool.ROBIDs ]
if partition.name()!=
"ATLAS" or not partition.isValid()
else [],
271 ),sequenceName=
'AthAlgSeq'
275 if flags.Trigger.enableL1CaloPhase1:
276 from L1CaloFEXSim.L1CaloFEXSimCfg
import L1CaloFEXSimCfg
280 cfg.merge(
L1CaloFEXSimCfg(flags,outputSuffix=
"_ReSim" if flags.Input.Format == Format.POOL
else ""))
283 from TrigConfigSvc.TriggerConfigAccess
import getL1MenuAccess
285 L1_menu.printSummary()
286 em_algoVersion = L1_menu.thresholdExtraInfo(
"eEM").
get(
"algoVersion", 0)
287 tau_algoVersion = L1_menu.thresholdExtraInfo(
"eTAU").
get(
"algoVersion", 0)
288 log.info(f
"algoVersions: eEM: {em_algoVersion}, eTAU: {tau_algoVersion}")
291 if flags.Trigger.L1.doTopo:
292 from L1TopoSimulation.L1TopoSimulationConfig
import L1TopoSimulationCfg
308 if flags.DQ.doMonitoring:
309 if flags.Trigger.L1.doCalo:
310 from TrigT1CaloMonitoring.PprMonitorAlgorithm
import PprMonitoringConfig
312 from TrigT1CaloMonitoring.PPMSimBSMonitorAlgorithm
import PPMSimBSMonitoringConfig
314 from TrigT1CaloMonitoring.OverviewMonitorAlgorithm
import OverviewMonitoringConfig
318 OverviewMonAlg = cfg.getEventAlgo(
"OverviewMonAlg")
319 OverviewMonAlg.CPMErrorLocation =
""
320 OverviewMonAlg.CPMMismatchLocation =
""
322 if flags.Trigger.L1.doeFex:
323 from TrigT1CaloMonitoring.EfexMonitorAlgorithm
import EfexMonitoringConfig
325 EfexMonAlg = cfg.getEventAlgo(
'EfexMonAlg')
327 EfexMonAlg.eFexEMTobKeyList = [
'L1_eEMRoI',
'L1_eEMxRoI']
328 EfexMonAlg.eFexTauTobKeyList = [
'L1_eTauRoI',
'L1_eTauxRoI']
330 if flags.Input.Format == Format.POOL
or flags.Trigger.enableL1CaloPhase1:
331 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 ]
333 if not flags.Input.isMC
and flags.Trigger.enableL1CaloPhase1:
334 from TrigT1CaloMonitoring.EfexSimMonitorAlgorithm
import EfexSimMonitoringConfig
338 from TrigT1CaloMonitoring.EfexMonitorAlgorithm
import EfexMonitoringHistConfig
341 if flags.Trigger.L1.dojFex:
342 from TrigT1CaloMonitoring.JfexMonitorAlgorithm
import JfexMonitoringConfig
344 if not flags.Input.isMC
and flags.Trigger.enableL1CaloPhase1:
345 from TrigT1CaloMonitoring.JfexSimMonitorAlgorithm
import JfexSimMonitoringConfig
347 if flags.Trigger.L1.dogFex:
348 from TrigT1CaloMonitoring.GfexMonitorAlgorithm
import GfexMonitoringConfig
350 if not flags.Input.isMC
and flags.Trigger.enableL1CaloPhase1:
351 from TrigT1CaloMonitoring.GfexSimMonitorAlgorithm
import GfexSimMonitoringConfig
355 if flags.DQ.useTrigger:
356 from TrigT1CaloMonitoring.JetEfficiencyMonitorAlgorithm
import JetEfficiencyMonitoringConfig
359 if flags.Trigger.L1.doTopo:
360 from L1TopoOnlineMonitoring.L1TopoOnlineMonitoringConfig
import Phase1TopoMonitoringCfg
364 if flags.Trigger.L1.doCaloInputs
and not flags.Input.isMC:
365 from TrigT1CaloMonitoring.EfexInputMonitorAlgorithm
import EfexInputMonitoringConfig
367 from TrigT1CaloMonitoring.JfexInputMonitorAlgorithm
import JfexInputMonitoringConfig
369 from TrigT1CaloMonitoring.GfexInputMonitorAlgorithm
import GfexInputMonitoringConfig
372 mainSeq =
"AthAllAlgSeq"
373 if args.fexReadoutFilter:
375 topSeq = cfg.getSequence(
"AthAlgEvtSeq")
376 algSeq = cfg.getSequence(mainSeq)
377 mainSeq =
"New" + mainSeq
379 topSeq.Members = [topSeq.Members[0],CompFactory.AthSequencer(mainSeq),topSeq.Members[-1]]
380 cfg.addEventAlgo(CompFactory.L1IDFilterAlgorithm(),sequenceName=mainSeq)
381 cfg.getSequence(mainSeq).Members += [algSeq]
383 if args.evtNumber
is not None:
384 print(
"filtering events",args.evtNumber)
386 topSeq = cfg.getSequence(
"AthAlgEvtSeq")
387 algSeq = cfg.getSequence(mainSeq)
388 mainSeq =
"New" + mainSeq
390 topSeq.Members = [topSeq.Members[0],CompFactory.AthSequencer(mainSeq),topSeq.Members[-1]]
391 cfg.addEventAlgo(CompFactory.EventNumberFilterAlgorithm(
"EvtNumberFilter",EventNumbers=args.evtNumber),sequenceName=mainSeq)
392 cfg.getSequence(mainSeq).Members += [algSeq]
395 from PerfMonComps.PerfMonCompsConfig
import PerfMonMTSvcCfg
398 from AthenaConfiguration.Utils
import setupLoggingLevels
401 if any([s.name==
"AthenaEventLoopMgr" for s
in cfg.getServices()]): cfg.getService(
"AthenaEventLoopMgr").IntervalInSeconds = 30
402 if any([s.name==
"AvalancheSchedulerSvc" for s
in cfg.getServices()]):
403 cfg.getService(
"AvalancheSchedulerSvc").ShowDataDependencies=
True
406 if not flags.Input.isMC:
409 if runinfo.FWversion()==6:
411 if args.dbOverrides
is None: args.dbOverrides = []
412 args.dbOverrides += [
"/LAR/Identifier/LatomeMapping:LARIdentifierLatomeMapping-fw6"]
416 if type(args.dbOverrides)==list:
417 from IOVDbSvc.IOVDbSvcConfig
import addOverride
421 for override
in args.dbOverrides:
422 folderName,dbPath = override.split(
"=",1)
if "=" in override
else (override,
"")
423 if folderName ==
"":
raise ValueError(
"Cannot parse dbOverride: " + override)
426 if ";dbname=" not in dbPath: dbPath +=
";dbname=CONDBR2"
427 dbPath,dbInst = dbPath.split(
";dbname=")
428 if not os.path.exists(dbPath):
raise ValueError(
"dbOverride file doesn't exist: " + dbPath)
429 db = f
"sqlite://;schema={dbPath};dbname={dbInst}"
431 if ":" in folderName:
432 folderName,tag = folderName.split(
":",1)
433 if folderName[0] !=
"/": folderName =
"/TRIGGER/L1Calo/V1/Calibration/" + folderName
434 log.info(
" ".
join((
"Overriding COOL folder=",folderName,
"db=",db,
"tag=",tag)))
438 cfg.merge(
addOverride(flags,folder=folderName,db=db,tag=tag))
442 if flags.Output.AODFileName !=
"":
444 if edmName.endswith(
"Sim")
and flags.Input.Format == Format.POOL: edmName = edmName.replace(
"Sim",
"_ReSim")
445 auxType = edmType.replace(
'Container',
'AuxContainer')
446 return [f
'{edmType}#{edmName}', f
'{auxType}#{edmName}Aux.']
450 if flags.Trigger.L1.doeFex:
451 outputEDM +=
addEDM(
'xAOD::eFexEMRoIContainer' ,
"L1_eEMRoI")
452 outputEDM +=
addEDM(
'xAOD::eFexEMRoIContainer' ,
"L1_eEMRoISim")
453 outputEDM +=
addEDM(
'xAOD::eFexEMRoIContainer' ,
"L1_eEMxRoI")
454 outputEDM +=
addEDM(
'xAOD::eFexEMRoIContainer' ,
"L1_eEMxRoISim")
456 outputEDM +=
addEDM(
'xAOD::eFexTauRoIContainer' ,
"L1_eTauRoI")
457 outputEDM +=
addEDM(
'xAOD::eFexTauRoIContainer' ,
"L1_eTauRoISim")
458 outputEDM +=
addEDM(
'xAOD::eFexTauRoIContainer' ,
"L1_eTauxRoI")
459 outputEDM +=
addEDM(
'xAOD::eFexTauRoIContainer' ,
"L1_eTauxRoISim")
461 if flags.Trigger.L1.dojFex:
462 outputEDM +=
addEDM(
'xAOD::jFexTowerContainer' ,
"L1_jFexDataTowers")
463 outputEDM +=
addEDM(
'xAOD::jFexTowerContainer' ,
"L1_jFexEmulatedTowers")
464 outputEDM +=
addEDM(
'xAOD::jFexSRJetRoIContainer',
'L1_jFexSRJetRoISim')
465 outputEDM +=
addEDM(
'xAOD::jFexLRJetRoIContainer',
'L1_jFexLRJetRoISim')
466 outputEDM +=
addEDM(
'xAOD::jFexTauRoIContainer' ,
'L1_jFexTauRoISim' )
467 outputEDM +=
addEDM(
'xAOD::jFexFwdElRoIContainer',
'L1_jFexFwdElRoISim')
468 outputEDM +=
addEDM(
'xAOD::jFexSumETRoIContainer',
'L1_jFexSumETRoISim')
469 outputEDM +=
addEDM(
'xAOD::jFexMETRoIContainer' ,
'L1_jFexMETRoISim' )
470 outputEDM +=
addEDM(
'xAOD::jFexSRJetRoIContainer',
'L1_jFexSRJetRoI')
471 outputEDM +=
addEDM(
'xAOD::jFexLRJetRoIContainer',
'L1_jFexLRJetRoI')
472 outputEDM +=
addEDM(
'xAOD::jFexTauRoIContainer' ,
'L1_jFexTauRoI' )
473 outputEDM +=
addEDM(
'xAOD::jFexFwdElRoIContainer',
'L1_jFexFwdElRoI')
474 outputEDM +=
addEDM(
'xAOD::jFexSumETRoIContainer',
'L1_jFexSumETRoI')
475 outputEDM +=
addEDM(
'xAOD::jFexMETRoIContainer' ,
'L1_jFexMETRoI' )
477 outputEDM +=
addEDM(
'xAOD::jFexSRJetRoIContainer',
'L1_jFexSRJetxRoI')
478 outputEDM +=
addEDM(
'xAOD::jFexLRJetRoIContainer',
'L1_jFexLRJetxRoI')
479 outputEDM +=
addEDM(
'xAOD::jFexTauRoIContainer' ,
'L1_jFexTauxRoI' )
480 outputEDM +=
addEDM(
'xAOD::jFexFwdElRoIContainer',
'L1_jFexFwdElxRoI')
481 outputEDM +=
addEDM(
'xAOD::jFexSumETRoIContainer',
'L1_jFexSumETxRoI')
482 outputEDM +=
addEDM(
'xAOD::jFexMETRoIContainer' ,
'L1_jFexMETxRoI' )
484 if flags.Trigger.L1.dogFex:
485 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gMETComponentsJwoj')
486 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gMETComponentsJwojSim')
487 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gMHTComponentsJwoj')
488 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gMHTComponentsJwojSim')
489 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gMSTComponentsJwoj')
490 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gMSTComponentsJwojSim')
491 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gScalarEJwoj')
492 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gScalarEJwojSim')
493 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gScalarENoiseCutSim')
494 outputEDM +=
addEDM(
'xAOD::gFexGlobalRoIContainer',
'L1_gScalarERmsSim')
496 outputEDM +=
addEDM(
'xAOD::gFexJetRoIContainer',
'L1_gFexLRJetRoI')
497 outputEDM +=
addEDM(
'xAOD::gFexJetRoIContainer',
'L1_gFexLRJetRoISim')
498 outputEDM +=
addEDM(
'xAOD::gFexJetRoIContainer',
'L1_gFexSRJetRoI')
499 outputEDM +=
addEDM(
'xAOD::gFexJetRoIContainer',
'L1_gFexSRJetRoISim')
500 outputEDM +=
addEDM(
'xAOD::gFexJetRoIContainer',
'L1_gFexRhoRoI')
501 outputEDM +=
addEDM(
'xAOD::gFexJetRoIContainer',
'L1_gFexRhoRoISim')
505 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
507 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
511 if "MaskedSCCondAlg" in cfg.getCondAlgos(): cfg.getCondAlgo(
"MaskedSCCondAlg").ReloadEveryEvent=flags.Common.isOnline
516 for conf
in args.postConfig:
517 compName,propNameAndVal=conf.split(
".",1)
518 propName,propVal=propNameAndVal.split(
"=",1)
520 from collections
import defaultdict
521 availableComps = defaultdict(list)
522 for comp
in [c
for c
in cfg._allComponents()]+cfg.getServices():
523 availableComps[comp.getType()] += [comp.getName()]
524 if comp.getName()==compName
or comp.getType()==compName
or comp.toStringProperty()==compName:
526 exec(f
"comp.{propNameAndVal}")
529 print(
"Available comps:")
530 for k,v
in availableComps.items():
532 raise ValueError(f
"postConfig {conf} had no effect ... typo? See list above of available components")
536 if flags.Exec.MaxEvents==0: cfg.printConfig(summariseProps=
True)
537 log.info(
" ".
join((
"Configured Services:",*[svc.name
for svc
in cfg.getServices()])) )
541 if flags.Exec.MaxEvents==1:
543 cfg.getService(
"StoreGateSvc").Dump=
True
544 cfg.getService(
"DetectorStore").Dump=
True
547 if cfg.getService(
"StoreGateSvc").Dump:
548 cfg.getService(
"StoreGateSvc").OutputLevel=3
549 if cfg.getService(
"DetectorStore").Dump:
550 cfg.getService(
"DetectorStore").OutputLevel=3
552 if flags.Exec.MaxEvents==0:
556 from TrigT1CaloMonitoring.LVL1CaloMonitoringConfig
import L1CaloMonitorCfgHelper
557 L1CaloMonitorCfgHelper.printHanConfig()
558 cfg._wasMerged =
True
561 if cfg.run().isFailure():