8 """Top-level CA with TopAlg and ApplicationMgr settings"""
10 topSeq = CompFactory.AthSequencer(
'AthMasterSeq', Sequential=
True)
11 cfg = ComponentAccumulator(sequence=topSeq)
15 cfg.setAppProperty(
'AuditAlgorithms',
True)
16 cfg.setAppProperty(
'InitializationLoopCheck',
False)
17 cfg.setAppProperty(
'ExtSvcCreates',
False)
18 cfg.setAppProperty(
'JobOptionsType',
'NONE')
19 cfg.setAppProperty(
'EvtMax', flags.Exec.MaxEvents)
20 cfg.setAppProperty(
'TopAlg', [topSeq.getFullJobOptName()])
21 cfg.setAppProperty(
'PrintAlgsSequence', flags.Exec.PrintAlgsSequence)
22 cfg.setAppProperty(
'OutputLevel', flags.Exec.OutputLevel)
24 if flags.Exec.OutputLevel > INFO:
26 cfg.setAppProperty(
'AppName',
'')
28 if flags.Exec.StopOnSignal:
29 cfg.setAppProperty(
"StopOnSignal",
True)
30 cfg.addService(CompFactory.Gaudi.Utils.StopSignalHandler(Signals=flags.Exec.StopOnSignal))
36 kwargs.setdefault(
"CheckDependencies", flags.Scheduler.CheckDependencies)
37 kwargs.setdefault(
"CheckOutputUsage", flags.Scheduler.CheckOutputUsage)
38 kwargs.setdefault(
"ShowDataDependencies", flags.Scheduler.ShowDataDeps)
39 kwargs.setdefault(
"ShowDataFlow", flags.Scheduler.ShowDataFlow)
40 kwargs.setdefault(
"ShowControlFlow", flags.Scheduler.ShowControlFlow)
41 kwargs.setdefault(
"VerboseSubSlots", flags.Scheduler.EnableVerboseViews)
42 kwargs.setdefault(
"ThreadPoolSize", flags.Concurrency.NumThreads)
43 kwargs.setdefault(
"DataDepsGraphFile", flags.Scheduler.DataDepsGraphFile)
44 kwargs.setdefault(
"DataDepsGraphAlgPattern", flags.Scheduler.DataDepsGraphAlgPattern)
45 kwargs.setdefault(
"DataDepsGraphObjectPattern", flags.Scheduler.DataDepsGraphObjectPattern)
46 kwargs.setdefault(
"NumOffloadThreads", flags.Concurrency.NumOffloadThreads)
48 cfg = ComponentAccumulator()
49 scheduler = CompFactory.AvalancheSchedulerSvc(**kwargs)
50 cfg.addService(scheduler, primary=
True)
52 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
56 inputloader_ca = SGInputLoaderCfg(flags, FailIfNoProxy=flags.Input.FailOnUnknownCollections)
57 cfg.merge(inputloader_ca, sequenceName=
"AthAlgSeq")
61 if flags.Scheduler.AutoLoadUnmetDependencies:
62 scheduler.DataLoaderAlg = inputloader_ca.getPrimary().getName()
75 cfg = ComponentAccumulator()
76 elmgr = CompFactory.AthenaEventLoopMgr(EventPrintoutInterval = flags.Exec.EventPrintoutInterval)
77 cfg.setAppProperty(
'EventLoop', elmgr.name)
79 if flags.Input.OverrideRunNumber:
80 from AthenaKernel.EventIdOverrideConfig
import EvtIdModifierSvcCfg
81 elmgr.EvtIdModifierSvc = cfg.getPrimaryAndMerge( EvtIdModifierSvcCfg(flags) )
83 if flags.Common.isOverlay:
84 if not flags.Overlay.DataOverlay:
85 elmgr.RequireInputAttributeList =
True
86 elmgr.UseSecondaryEventNumber =
True
88 cfg.addService( elmgr )
94 """Sets up an MPIHive EventLoopMgr along with it's dependencies"""
95 from SQLiteDBSvc.SQLiteDBSvcConfig
import SQLiteDBSvcCfg
96 cfg = ComponentAccumulator()
97 nConcurrentEvents = flags.Concurrency.NumConcurrentEvents
98 nThreads = flags.Concurrency.NumThreads
100 hivesvc = CompFactory.SG.HiveMgrSvc(
"EventDataSvc", NSlots=nConcurrentEvents)
101 cfg.addService(hivesvc)
103 arp = CompFactory.AlgResourcePool(
104 TopAlg=[
"AthMasterSeq"]
108 scheduler = cfg.getPrimaryAndMerge(
115 flags, name=
"LogDBSvc", dbPath=
"file:mpilog.db?nolock=1"
118 cfg.addService(CompFactory.MPIClusterSvc(
"MPIClusterSvc", LogDatabaseSvc=
"SQLiteDBSvc/LogDBSvc"))
119 elmgr = CompFactory.MPIHiveEventLoopMgr(
120 MPIClusterSvc=
"MPIClusterSvc",
121 WhiteboardSvc=
"EventDataSvc",
122 SchedulerSvc=scheduler.getName(),
123 FirstEventIndex=flags.Exec.SkipEvents,
125 cfg.setAppProperty(
'EventLoop', elmgr.name)
127 from AthenaServices.OutputStreamSequencerSvcConfig
import OutputStreamSequencerSvcCfg
130 OutputStreamSequencerSvcCfg(
131 flags, incidentName=
"BeginInputFile", reportingOn=
False, replaceRangeMode=
True
134 if flags.Input.OverrideRunNumber:
135 from AthenaKernel.EventIdOverrideConfig
import EvtIdModifierSvcCfg
136 elmgr.EvtIdModifierSvc = cfg.getPrimaryAndMerge(EvtIdModifierSvcCfg(flags)).name
138 if flags.Common.isOverlay
and not flags.Overlay.DataOverlay:
139 elmgr.RequireInputAttributeList =
True
140 elmgr.UseSecondaryEventNumber =
True
142 cfg.addService(elmgr)
148 cfg = ComponentAccumulator()
149 hivesvc = CompFactory.SG.HiveMgrSvc(
"EventDataSvc",
150 NSlots = flags.Concurrency.NumConcurrentEvents)
151 cfg.addService( hivesvc )
153 arp = CompFactory.AlgResourcePool(TopAlg = [
"AthMasterSeq"])
154 cfg.addService( arp )
158 elmgr = CompFactory.AthenaHiveEventLoopMgr(
159 WhiteboardSvc =
"EventDataSvc",
160 SchedulerSvc = scheduler.getName(),
161 EventPrintoutInterval = flags.Exec.EventPrintoutInterval)
163 cfg.setAppProperty(
'EventLoop', elmgr.name)
165 if flags.Input.OverrideRunNumber:
166 from AthenaKernel.EventIdOverrideConfig
import EvtIdModifierSvcCfg
167 elmgr.EvtIdModifierSvc = cfg.getPrimaryAndMerge(EvtIdModifierSvcCfg(flags))
169 if flags.Common.isOverlay
and not flags.Overlay.DataOverlay:
170 elmgr.RequireInputAttributeList =
True
171 elmgr.UseSecondaryEventNumber =
True
173 cfg.addService( elmgr )
179 cfg = ComponentAccumulator()
180 if flags.Common.isOverlay
and not flags.Overlay.DataOverlay:
183 elmgr = CompFactory.AthenaEventLoopMgr(
184 EventPrintoutInterval = flags.Exec.EventPrintoutInterval,
185 RequireInputAttributeList =
True,
186 UseSecondaryEventNumber =
True)
187 cfg.addService( elmgr )
189 from AthenaMP.AthenaMPConfig
import AthenaMPCfg
190 mploop = AthenaMPCfg(flags)
197 cfg = ComponentAccumulator()
199 hivesvc = CompFactory.SG.HiveMgrSvc(
"EventDataSvc",
200 NSlots = flags.Concurrency.NumConcurrentEvents)
201 cfg.addService( hivesvc )
203 arp = CompFactory.AlgResourcePool(TopAlg = [
"AthMasterSeq"])
204 cfg.addService( arp )
208 elmgr = CompFactory.AthenaMtesEventLoopMgr(
209 WhiteboardSvc =
"EventDataSvc",
210 SchedulerSvc = scheduler.getName(),
211 EventRangeChannel = channel,
212 EventPrintoutInterval = flags.Exec.EventPrintoutInterval)
215 cfg.setAppProperty(
'EventLoop', elmgr.name)
217 if flags.Input.OverrideRunNumber:
218 from AthenaKernel.EventIdOverrideConfig
import EvtIdModifierSvcCfg
219 elmgr.EvtIdModifierSvc = cfg.getPrimaryAndMerge(EvtIdModifierSvcCfg(flags))
221 if flags.Common.isOverlay
and not flags.Overlay.DataOverlay:
222 elmgr.RequireInputAttributeList =
True
223 elmgr.UseSecondaryEventNumber =
True
226 from AthenaServices.OutputStreamSequencerSvcConfig
import OutputStreamSequencerSvcCfg
227 cfg.merge(OutputStreamSequencerSvcCfg(flags,
228 incidentName=
"NextEventRange",
231 cfg.addService( elmgr )
243 cfg = ComponentAccumulator()
246 msgsvc = CompFactory.MessageSvc(
247 OutputLevel = flags.Exec.OutputLevel,
248 Format = (f
"% F%{flags.Common.MsgSourceLength}W%C%6W%R%e%s%8W%R%T %0W%M" if flags.Concurrency.NumThreads>0
else
249 f
"% F%{flags.Common.MsgSourceLength}W%C%7W%R%T %0W%M"),
250 enableSuppression = flags.Common.MsgSuppression,
251 showStats = flags.Common.ShowMsgStats,
254 verboseLimit = 0
if flags.Exec.VerboseMessageComponents
else defaultLimit,
255 debugLimit = 0
if flags.Exec.DebugMessageComponents
else defaultLimit,
256 infoLimit = 0
if flags.Exec.InfoMessageComponents
else defaultLimit,
257 warningLimit = 0
if flags.Exec.WarningMessageComponents
else defaultLimit,
258 errorLimit = 0
if flags.Exec.ErrorMessageComponents
else defaultLimit,
262 from AthenaConfiguration.Enums
import ProductionStep
263 if flags.Common.ProductionStep
not in (ProductionStep.Default,
264 ProductionStep.Reconstruction,
265 ProductionStep.Derivation):
266 msgsvc.Format =
"% F%18W%S%7W%R%T %0W%M"
268 cfg.addService(msgsvc)
273 """Add the standard sequences to cfg"""
275 topSeqName = cfg.getSequence().name
278 AthSequencer = CompFactory.AthSequencer
279 cfg.addSequence(
AthSequencer(
'AthAlgEvtSeq', Sequential=
True, StopOverride=
True), parentName=topSeqName)
280 cfg.addSequence(
AthSequencer(
'AthOutSeq', StopOverride=
True), parentName=topSeqName)
282 cfg.addSequence(
AthSequencer(
'AthBeginSeq', Sequential=
True), parentName=
'AthAlgEvtSeq')
283 cfg.addSequence(
AthSequencer(
'AthAllAlgSeq', StopOverride=
True), parentName=
'AthAlgEvtSeq')
285 athAlgSeq =
AthSequencer(
'AthAlgSeq', IgnoreFilterPassed=
True, StopOverride=
True, ProcessDynamicDataDependencies=
True, ExtraDataForDynamicConsumers=[])
286 athCondSeq =
AthSequencer(
'AthCondSeq',StopOverride=
True)
288 if flags.Concurrency.NumThreads==0:
290 cfg.addSequence(athCondSeq, parentName=
'AthAllAlgSeq')
291 cfg.addSequence(athAlgSeq, parentName=
'AthAllAlgSeq')
297 cfg.addSequence(athAlgSeq, parentName=
'AthAllAlgSeq')
298 cfg.addSequence(athCondSeq, parentName=
'AthAllAlgSeq')
300 cfg.addSequence(
AthSequencer(
'AthEndSeq', Sequential=
True), parentName=
'AthAlgEvtSeq')
303 AthIncFirerAlg = CompFactory.AthIncFirerAlg
304 IncidentProcAlg = CompFactory.IncidentProcAlg
306 previousPerfmonDomain = cfg.getCurrentPerfmonDomain()
307 cfg.flagPerfmonDomain(
'Incidents')
309 cfg.addEventAlgo(
AthIncFirerAlg(
"BeginIncFiringAlg", FireSerial=
False, Incidents=[
'BeginEvent']),
310 sequenceName=
'AthBeginSeq')
312 cfg.addEventAlgo(IncidentProcAlg(
'IncidentProcAlg1'),
313 sequenceName=
'AthBeginSeq')
315 cfg.addEventAlgo(
AthIncFirerAlg(
'EndIncFiringAlg', FireSerial=
False, Incidents=[
'EndEvent']),
316 sequenceName=
"AthEndSeq")
318 cfg.addEventAlgo(IncidentProcAlg(
'IncidentProcAlg2'),
319 sequenceName=
"AthEndSeq")
322 cfg.addEventAlgo(
AthIncFirerAlg(
'EndAlgorithmsFiringAlg', FireSerial=
False, Incidents=[
'EndAlgorithms']),
323 sequenceName=topSeqName)
325 cfg.addEventAlgo(IncidentProcAlg(
'IncidentProcAlg3'),
326 sequenceName=topSeqName)
328 cfg.flagPerfmonDomain(previousPerfmonDomain)
332 from GeneratorConfig.Sequences
import EvgenSequence, EvgenSequenceFactory
333 cfg.addSequence(EvgenSequenceFactory(EvgenSequence.Main), parentName=
"AthAlgSeq")
334 cfg.addSequence(EvgenSequenceFactory(EvgenSequence.Generator), parentName=EvgenSequence.Main.value)
335 cfg.addSequence(EvgenSequenceFactory(EvgenSequence.Fix), parentName=EvgenSequence.Main.value)
336 cfg.addSequence(EvgenSequenceFactory(EvgenSequence.PreFilter), parentName=EvgenSequence.Main.value)
337 cfg.addSequence(EvgenSequenceFactory(EvgenSequence.Test), parentName=EvgenSequence.Main.value)
338 cfg.addSequence(EvgenSequenceFactory(EvgenSequence.Filter), parentName=EvgenSequence.Main.value)
339 cfg.addSequence(EvgenSequenceFactory(EvgenSequence.Post), parentName=EvgenSequence.Main.value)
343 """Configuration of main services. An appropriate EventLoopMgr is configured (MT/MP/etc).
344 If you have configured your own EventLoopMgr set createEventLoopMgr to False."""
347 from AthenaCommon.Logging
import log
348 log.setLevel(flags.Exec.OutputLevel)
352 if flags.Concurrency.NumThreads < 1:
353 raise Exception(
"Erroneous configuration for MPI: "
354 f
"Concurrency.NumThreads = {flags.Concurrency.NumThreads}, must be >= 1")
355 if flags.Concurrency.NumProcs > 0:
356 raise Exception(
"Erroneous configuration for MPI: "
357 f
"Concurrency.NumProcs = {flags.Concurrency.NumProcs}, must be 0")
359 if flags.Concurrency.NumThreads > 0
and flags.Concurrency.NumConcurrentEvents==0:
360 raise Exception(
"Requested Concurrency.NumThreads>0 and Concurrency.NumConcurrentEvents==0, "
361 "which will not process events!")
370 cfg.addService(CompFactory.ClassIDSvc(CLIDDBFiles = [
'clid.db',
'Gaudi_clid.db']))
372 cfg.addService(CompFactory.AlgContextSvc(BypassIncidents=
True))
373 cfg.addAuditor(CompFactory.AlgContextAuditor())
375 cfg.addService(CompFactory.StoreGateSvc(Dump=flags.Debug.DumpEvtStore))
376 cfg.addService(CompFactory.StoreGateSvc(
"DetectorStore",Dump=flags.Debug.DumpDetStore))
377 cfg.addService(CompFactory.StoreGateSvc(
"HistoryStore"))
378 cfg.addService(CompFactory.StoreGateSvc(
"ConditionStore",Dump=flags.Debug.DumpCondStore))
382 from AthenaServices.FPEAndCoreDumpConfig
import FPEAndCoreDumpCfg
383 cfg.merge(FPEAndCoreDumpCfg(flags))
385 if flags.Debug.NameAuditor:
386 cfg.addAuditor(CompFactory.NameAuditor())
391 cfg.addService(CompFactory.ExceptionSvc(Catch=
"NONE"))
397 cfg.addService(CompFactory.AthEnvironmentSvc(), create=
True)
399 if flags.Exec.DebugStage !=
"":
400 cfg.setDebugStage(flags.Exec.DebugStage)
402 cfg.interactive = flags.Exec.Interactive
405 if flags.Exec.EventTimeOut > 0:
406 timeoutAlg = CompFactory.TimeoutAlg(
407 Timeout = flags.Exec.EventTimeOut,
409 DumpSchedulerState =
False)
410 cfg.addEventAlgo(timeoutAlg, sequenceName=
'AthBeginSeq')
413 if flags.Exec.Interactive ==
"run":
415 log.info(
"Interactive mode, switching to PyAthenaEventLoopMgr")
417 elif flags.Concurrency.NumProcs > 0:
420 elif createEventLoopMgr
is False:
423 elif flags.Concurrency.NumThreads > 0:
425 cfg.addAuditor( CompFactory.SGCommitAuditor() )
427 if flags.Exec.MTEventService:
434 elif flags.Concurrency.NumThreads == 0:
438 if flags.PerfMon.doFastMonMT
or flags.PerfMon.doFullMonMT:
439 from PerfMonComps.PerfMonCompsConfig
import PerfMonMTSvcCfg
440 cfg.merge(PerfMonMTSvcCfg(flags))
442 if flags.PerfMon.doGPerfProf:
443 from PerfMonGPerfTools.GPT_ProfilerServiceConfig
import GPT_ProfilerServiceCfg
444 cfg.merge(GPT_ProfilerServiceCfg(flags))
446 if len(flags.PerfMon.Valgrind.ProfiledAlgs)>0:
447 from Valkyrie.ValkyrieConfig
import ValgrindServiceCfg
448 cfg.merge(ValgrindServiceCfg(flags))
MainServicesCfg(flags, createEventLoopMgr=True)
JobOptionsDumpCfg(flags, fileName="JobOptsConfig.txt")
AthenaMpEventLoopMgrCfg(flags)
AthenaEventLoopMgrCfg(flags)
AthenaMtesEventLoopMgrCfg(flags, mtEs=False, channel='')
MPIHiveEventLoopMgrCfg(flags)
MainEvgenServicesCfg(flags, withSequences=True)
AthenaHiveEventLoopMgrCfg(flags)
AvalancheSchedulerSvcCfg(flags, **kwargs)
PyAthenaEventLoopMgrCfg(flags)
addMainSequences(flags, cfg)
addEvgenSequences(flags, cfg)
OutputUsageIgnoreCfg(flags, algorithm)