ATLAS Offline Software
Loading...
Searching...
No Matches
python.MainServicesConfig Namespace Reference

Functions

 AppMgrCfg (flags)
 AvalancheSchedulerSvcCfg (flags, **kwargs)
 OutputUsageIgnoreCfg (flags, algorithm)
 AthenaEventLoopMgrCfg (flags)
 MPIHiveEventLoopMgrCfg (flags)
 AthenaHiveEventLoopMgrCfg (flags)
 AthenaMpEventLoopMgrCfg (flags)
 AthenaMtesEventLoopMgrCfg (flags, mtEs=False, channel='')
 PyAthenaEventLoopMgrCfg (flags)
 MessageSvcCfg (flags)
 addMainSequences (flags, cfg)
 addEvgenSequences (flags, cfg)
 MainServicesCfg (flags, createEventLoopMgr=True)
 MainEvgenServicesCfg (flags, withSequences=True)
 JobOptionsDumpCfg (flags, fileName="JobOptsConfig.txt")

Function Documentation

◆ addEvgenSequences()

addEvgenSequences ( flags,
cfg )

Definition at line 331 of file MainServicesConfig.py.

331def addEvgenSequences(flags, cfg):
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)
340
341

◆ addMainSequences()

addMainSequences ( flags,
cfg )
Add the standard sequences to cfg

Definition at line 272 of file MainServicesConfig.py.

272def addMainSequences(flags, cfg):
273 """Add the standard sequences to cfg"""
274
275 topSeqName = cfg.getSequence().name # usually AthMasterSeq
276
277 # Build standard sequences:
278 AthSequencer = CompFactory.AthSequencer
279 cfg.addSequence(AthSequencer('AthAlgEvtSeq', Sequential=True, StopOverride=True), parentName=topSeqName)
280 cfg.addSequence(AthSequencer('AthOutSeq', StopOverride=True), parentName=topSeqName)
281
282 cfg.addSequence(AthSequencer('AthBeginSeq', Sequential=True), parentName='AthAlgEvtSeq')
283 cfg.addSequence(AthSequencer('AthAllAlgSeq', StopOverride=True), parentName='AthAlgEvtSeq')
284
285 athAlgSeq = AthSequencer('AthAlgSeq', IgnoreFilterPassed=True, StopOverride=True, ProcessDynamicDataDependencies=True, ExtraDataForDynamicConsumers=[])
286 athCondSeq = AthSequencer('AthCondSeq',StopOverride=True)
287
288 if flags.Concurrency.NumThreads==0:
289 # For serial execution, we need the CondAlgs to execute first.
290 cfg.addSequence(athCondSeq, parentName='AthAllAlgSeq')
291 cfg.addSequence(athAlgSeq, parentName='AthAllAlgSeq')
292 else:
293 # In MT, the order of execution is irrelevant (determined by data deps).
294 # We add the conditions sequence later such that the CondInputLoader gets
295 # initialized after all other user Algorithms for MT, so the base classes
296 # of data deps can be correctly determined.
297 cfg.addSequence(athAlgSeq, parentName='AthAllAlgSeq')
298 cfg.addSequence(athCondSeq, parentName='AthAllAlgSeq')
299
300 cfg.addSequence(AthSequencer('AthEndSeq', Sequential=True), parentName='AthAlgEvtSeq')
301
302 # Set up incident firing:
303 AthIncFirerAlg = CompFactory.AthIncFirerAlg
304 IncidentProcAlg = CompFactory.IncidentProcAlg
305
306 previousPerfmonDomain = cfg.getCurrentPerfmonDomain()
307 cfg.flagPerfmonDomain('Incidents')
308
309 cfg.addEventAlgo(AthIncFirerAlg("BeginIncFiringAlg", FireSerial=False, Incidents=['BeginEvent']),
310 sequenceName='AthBeginSeq')
311
312 cfg.addEventAlgo(IncidentProcAlg('IncidentProcAlg1'),
313 sequenceName='AthBeginSeq')
314
315 cfg.addEventAlgo(AthIncFirerAlg('EndIncFiringAlg', FireSerial=False, Incidents=['EndEvent']),
316 sequenceName="AthEndSeq")
317
318 cfg.addEventAlgo(IncidentProcAlg('IncidentProcAlg2'),
319 sequenceName="AthEndSeq")
320
321 # Should be after all other algorithms:
322 cfg.addEventAlgo(AthIncFirerAlg('EndAlgorithmsFiringAlg', FireSerial=False, Incidents=['EndAlgorithms']),
323 sequenceName=topSeqName)
324
325 cfg.addEventAlgo(IncidentProcAlg('IncidentProcAlg3'),
326 sequenceName=topSeqName)
327
328 cfg.flagPerfmonDomain(previousPerfmonDomain)
329
330
Algorithm to fire given list of incidents on execute.
ClassName: AthSequencer.

◆ AppMgrCfg()

AppMgrCfg ( flags)
Top-level CA with TopAlg and ApplicationMgr settings

Definition at line 7 of file MainServicesConfig.py.

7def AppMgrCfg(flags):
8 """Top-level CA with TopAlg and ApplicationMgr settings"""
9
10 topSeq = CompFactory.AthSequencer('AthMasterSeq', Sequential=True)
11 cfg = ComponentAccumulator(sequence=topSeq)
12 cfg.setAsTopLevel()
13
14 # AppMgr properties:
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)
23
24 if flags.Exec.OutputLevel > INFO:
25 # this turns off the AppMgr splash
26 cfg.setAppProperty('AppName', '')
27
28 if flags.Exec.StopOnSignal:
29 cfg.setAppProperty("StopOnSignal", True)
30 cfg.addService(CompFactory.Gaudi.Utils.StopSignalHandler(Signals=flags.Exec.StopOnSignal))
31
32 return cfg
33
34

◆ AthenaEventLoopMgrCfg()

AthenaEventLoopMgrCfg ( flags)

Definition at line 74 of file MainServicesConfig.py.

74def AthenaEventLoopMgrCfg(flags):
75 cfg = ComponentAccumulator()
76 elmgr = CompFactory.AthenaEventLoopMgr(EventPrintoutInterval = flags.Exec.EventPrintoutInterval)
77 cfg.setAppProperty('EventLoop', elmgr.name)
78
79 if flags.Input.OverrideRunNumber:
80 from AthenaKernel.EventIdOverrideConfig import EvtIdModifierSvcCfg
81 elmgr.EvtIdModifierSvc = cfg.getPrimaryAndMerge( EvtIdModifierSvcCfg(flags) )
82
83 if flags.Common.isOverlay:
84 if not flags.Overlay.DataOverlay:
85 elmgr.RequireInputAttributeList = True
86 elmgr.UseSecondaryEventNumber = True
87
88 cfg.addService( elmgr )
89
90 return cfg
91
92

◆ AthenaHiveEventLoopMgrCfg()

AthenaHiveEventLoopMgrCfg ( flags)

Definition at line 147 of file MainServicesConfig.py.

147def AthenaHiveEventLoopMgrCfg(flags):
148 cfg = ComponentAccumulator()
149 hivesvc = CompFactory.SG.HiveMgrSvc("EventDataSvc",
150 NSlots = flags.Concurrency.NumConcurrentEvents)
151 cfg.addService( hivesvc )
152
153 arp = CompFactory.AlgResourcePool(TopAlg = ["AthMasterSeq"]) #this should enable control flow
154 cfg.addService( arp )
155
156 scheduler = cfg.getPrimaryAndMerge(AvalancheSchedulerSvcCfg(flags))
157
158 elmgr = CompFactory.AthenaHiveEventLoopMgr(
159 WhiteboardSvc = "EventDataSvc",
160 SchedulerSvc = scheduler.getName(),
161 EventPrintoutInterval = flags.Exec.EventPrintoutInterval)
162
163 cfg.setAppProperty('EventLoop', elmgr.name)
164
165 if flags.Input.OverrideRunNumber:
166 from AthenaKernel.EventIdOverrideConfig import EvtIdModifierSvcCfg
167 elmgr.EvtIdModifierSvc = cfg.getPrimaryAndMerge(EvtIdModifierSvcCfg(flags))
168
169 if flags.Common.isOverlay and not flags.Overlay.DataOverlay:
170 elmgr.RequireInputAttributeList = True
171 elmgr.UseSecondaryEventNumber = True
172
173 cfg.addService( elmgr )
174
175 return cfg
176
177

◆ AthenaMpEventLoopMgrCfg()

AthenaMpEventLoopMgrCfg ( flags)

Definition at line 178 of file MainServicesConfig.py.

178def AthenaMpEventLoopMgrCfg(flags):
179 cfg = ComponentAccumulator()
180 if flags.Common.isOverlay and not flags.Overlay.DataOverlay:
181 # Configure the AthenaEventLoopMgr, which is used by AthMpEvtLoopMgr,
182 # but do NOT set it as the main EventLoopMgr:
183 elmgr = CompFactory.AthenaEventLoopMgr(
184 EventPrintoutInterval = flags.Exec.EventPrintoutInterval,
185 RequireInputAttributeList = True,
186 UseSecondaryEventNumber = True)
187 cfg.addService( elmgr )
188
189 from AthenaMP.AthenaMPConfig import AthenaMPCfg
190 mploop = AthenaMPCfg(flags)
191 cfg.merge( mploop )
192
193 return cfg
194
195

◆ AthenaMtesEventLoopMgrCfg()

AthenaMtesEventLoopMgrCfg ( flags,
mtEs = False,
channel = '' )

Definition at line 196 of file MainServicesConfig.py.

196def AthenaMtesEventLoopMgrCfg(flags, mtEs=False, channel=''):
197 cfg = ComponentAccumulator()
198
199 hivesvc = CompFactory.SG.HiveMgrSvc("EventDataSvc",
200 NSlots = flags.Concurrency.NumConcurrentEvents)
201 cfg.addService( hivesvc )
202
203 arp = CompFactory.AlgResourcePool(TopAlg = ["AthMasterSeq"]) #this should enable control flow
204 cfg.addService( arp )
205
206 scheduler = cfg.getPrimaryAndMerge(AvalancheSchedulerSvcCfg(flags))
207
208 elmgr = CompFactory.AthenaMtesEventLoopMgr(
209 WhiteboardSvc = "EventDataSvc",
210 SchedulerSvc = scheduler.getName(),
211 EventRangeChannel = channel,
212 EventPrintoutInterval = flags.Exec.EventPrintoutInterval)
213
214 if mtEs:
215 cfg.setAppProperty('EventLoop', elmgr.name)
216
217 if flags.Input.OverrideRunNumber:
218 from AthenaKernel.EventIdOverrideConfig import EvtIdModifierSvcCfg
219 elmgr.EvtIdModifierSvc = cfg.getPrimaryAndMerge(EvtIdModifierSvcCfg(flags))
220
221 if flags.Common.isOverlay and not flags.Overlay.DataOverlay:
222 elmgr.RequireInputAttributeList = True
223 elmgr.UseSecondaryEventNumber = True
224
225 if mtEs:
226 from AthenaServices.OutputStreamSequencerSvcConfig import OutputStreamSequencerSvcCfg
227 cfg.merge(OutputStreamSequencerSvcCfg(flags,
228 incidentName="NextEventRange",
229 reportingOn = True))
230
231 cfg.addService( elmgr )
232
233 return cfg
234
235

◆ AvalancheSchedulerSvcCfg()

AvalancheSchedulerSvcCfg ( flags,
** kwargs )

Definition at line 35 of file MainServicesConfig.py.

35def AvalancheSchedulerSvcCfg(flags, **kwargs):
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)
47
48 cfg = ComponentAccumulator()
49 scheduler = CompFactory.AvalancheSchedulerSvc(**kwargs)
50 cfg.addService(scheduler, primary=True)
51
52 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
53 # FailIfNoProxy=False makes it a warning, not an error, if unmet data
54 # dependencies are not found in the store. It should probably be changed
55 # to True eventually.
56 inputloader_ca = SGInputLoaderCfg(flags, FailIfNoProxy=flags.Input.FailOnUnknownCollections)
57 cfg.merge(inputloader_ca, sequenceName="AthAlgSeq")
58
59 # Specifying DataLoaderAlg makes the Scheduler automatically assign
60 # all unmet data dependencies to that algorithm.
61 if flags.Scheduler.AutoLoadUnmetDependencies:
62 scheduler.DataLoaderAlg = inputloader_ca.getPrimary().getName()
63
64 return cfg
65
66

◆ JobOptionsDumpCfg()

JobOptionsDumpCfg ( flags,
fileName = "JobOptsConfig.txt" )
Job options service configuration - mainly to dump the config.

Definition at line 472 of file MainServicesConfig.py.

472def JobOptionsDumpCfg(flags, fileName="JobOptsConfig.txt"):
473 """Job options service configuration - mainly to dump the config."""
474 acc = ComponentAccumulator()
475 acc.addService(CompFactory.JobOptionsSvc(DUMPFILE=fileName))
476 return acc

◆ MainEvgenServicesCfg()

MainEvgenServicesCfg ( flags,
withSequences = True )
ComponentAccumulator-based equivalent of:
import AthenaCommon.AtlasUnixGeneratorJob

NB Must have set flags.Input.RunNumbers and
flags.Input.TimeStamps before calling to avoid
attempted auto-configuration from an input file.

Definition at line 453 of file MainServicesConfig.py.

453def MainEvgenServicesCfg(flags, withSequences=True):
454 """ComponentAccumulator-based equivalent of:
455 import AthenaCommon.AtlasUnixGeneratorJob
456
457 NB Must have set flags.Input.RunNumbers and
458 flags.Input.TimeStamps before calling to avoid
459 attempted auto-configuration from an input file.
460 """
461 cfg = MainServicesCfg(flags)
462 if not flags.Input.Files:
463 from McEventSelector.McEventSelectorConfig import McEventSelectorCfg
464 cfg.merge(McEventSelectorCfg(flags))
465
466 if withSequences:
467 addEvgenSequences(flags, cfg)
468
469 return cfg
470
471

◆ MainServicesCfg()

MainServicesCfg ( flags,
createEventLoopMgr = True )
Configuration of main services. An appropriate EventLoopMgr is configured (MT/MP/etc).
If you have configured your own EventLoopMgr set createEventLoopMgr to False.

Definition at line 342 of file MainServicesConfig.py.

342def MainServicesCfg(flags, createEventLoopMgr=True):
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."""
345
346 # Set the Python OutputLevel on the root logger
347 from AthenaCommon.Logging import log
348 log.setLevel(flags.Exec.OutputLevel)
349
350 # Guard incorrect configurations
351 if flags.Exec.MPI:
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")
358
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!")
362
363 # Top-level CA with ApplicationMgr settings
364 cfg = AppMgrCfg(flags)
365
366 # Main sequences and incident handling:
367 addMainSequences(flags, cfg)
368
369 # Basic services:
370 cfg.addService(CompFactory.ClassIDSvc(CLIDDBFiles = ['clid.db','Gaudi_clid.db']))
371
372 cfg.addService(CompFactory.AlgContextSvc(BypassIncidents=True))
373 cfg.addAuditor(CompFactory.AlgContextAuditor())
374
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))
379
380 cfg.merge(MessageSvcCfg(flags))
381
382 from AthenaServices.FPEAndCoreDumpConfig import FPEAndCoreDumpCfg
383 cfg.merge(FPEAndCoreDumpCfg(flags))
384
385 if flags.Debug.NameAuditor:
386 cfg.addAuditor(CompFactory.NameAuditor())
387
388 # Avoid stack traces to the exception handler. These traces
389 # aren't very useful since they just point to the handler, not
390 # the original bug.
391 cfg.addService(CompFactory.ExceptionSvc(Catch="NONE"))
392
393 # Miscellaneous environment settings.
394 # This includes fixing the cache sizes that Eigen assumes, so that
395 # operations on large matrices will give identical results across
396 # hardware with differing cache sizes.
397 cfg.addService(CompFactory.AthEnvironmentSvc(), create=True)
398
399 if flags.Exec.DebugStage != "":
400 cfg.setDebugStage(flags.Exec.DebugStage)
401
402 cfg.interactive = flags.Exec.Interactive
403
404 # Timeout
405 if flags.Exec.EventTimeOut > 0:
406 timeoutAlg = CompFactory.TimeoutAlg(
407 Timeout = flags.Exec.EventTimeOut,
408 AbortJob = True,
409 DumpSchedulerState = False)
410 cfg.addEventAlgo(timeoutAlg, sequenceName='AthBeginSeq')
411
412 # Configure EventLoopMgr:
413 if flags.Exec.Interactive == "run":
414 cfg.merge(PyAthenaEventLoopMgrCfg(flags))
415 log.info("Interactive mode, switching to PyAthenaEventLoopMgr")
416
417 elif flags.Concurrency.NumProcs > 0:
418 cfg.merge(AthenaMpEventLoopMgrCfg(flags))
419
420 elif createEventLoopMgr is False:
421 pass # the user will have to configure one
422
423 elif flags.Concurrency.NumThreads > 0:
424 # Setup SGCommitAuditor to sweep new DataObjects at end of Alg execute
425 cfg.addAuditor( CompFactory.SGCommitAuditor() )
426
427 if flags.Exec.MTEventService:
428 cfg.merge(AthenaMtesEventLoopMgrCfg(flags,True,flags.Exec.MTEventServiceChannel))
429 elif flags.Exec.MPI:
430 cfg.merge(MPIHiveEventLoopMgrCfg(flags))
431 else:
432 cfg.merge(AthenaHiveEventLoopMgrCfg(flags))
433
434 elif flags.Concurrency.NumThreads == 0:
435 cfg.merge(AthenaEventLoopMgrCfg(flags))
436
437 # Performance monitoring and profiling:
438 if flags.PerfMon.doFastMonMT or flags.PerfMon.doFullMonMT:
439 from PerfMonComps.PerfMonCompsConfig import PerfMonMTSvcCfg
440 cfg.merge(PerfMonMTSvcCfg(flags))
441
442 if flags.PerfMon.doGPerfProf:
443 from PerfMonGPerfTools.GPT_ProfilerServiceConfig import GPT_ProfilerServiceCfg
444 cfg.merge(GPT_ProfilerServiceCfg(flags))
445
446 if len(flags.PerfMon.Valgrind.ProfiledAlgs)>0:
447 from Valkyrie.ValkyrieConfig import ValgrindServiceCfg
448 cfg.merge(ValgrindServiceCfg(flags))
449
450 return cfg
451
452

◆ MessageSvcCfg()

MessageSvcCfg ( flags)

Definition at line 242 of file MainServicesConfig.py.

242def MessageSvcCfg(flags):
243 cfg = ComponentAccumulator()
244 defaultLimit = 500
245
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,
252 statLevel = WARNING,
253 # Disable suppression limit if we are debugging components
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,
259 )
260
261 # Temporary to match legacy configuration for serial simulation/digitization/overlay jobs (FIXME)
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"
267
268 cfg.addService(msgsvc)
269 return cfg
270
271

◆ MPIHiveEventLoopMgrCfg()

MPIHiveEventLoopMgrCfg ( flags)
Sets up an MPIHive EventLoopMgr along with it's dependencies

Definition at line 93 of file MainServicesConfig.py.

93def MPIHiveEventLoopMgrCfg(flags):
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
99
100 hivesvc = CompFactory.SG.HiveMgrSvc("EventDataSvc", NSlots=nConcurrentEvents)
101 cfg.addService(hivesvc)
102
103 arp = CompFactory.AlgResourcePool(
104 TopAlg=["AthMasterSeq"]
105 ) # this should enable control flow
106 cfg.addService(arp)
107
108 scheduler = cfg.getPrimaryAndMerge(
109 AvalancheSchedulerSvcCfg(flags, ThreadPoolSize=nThreads)
110 )
111
112 # Log DBs are rank-exclusive so no locking is needed
113 cfg.merge(
114 SQLiteDBSvcCfg(
115 flags, name="LogDBSvc", dbPath="file:mpilog.db?nolock=1"
116 )
117 )
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,
124 )
125 cfg.setAppProperty('EventLoop', elmgr.name)
126
127 from AthenaServices.OutputStreamSequencerSvcConfig import OutputStreamSequencerSvcCfg
128
129 cfg.merge(
130 OutputStreamSequencerSvcCfg(
131 flags, incidentName="BeginInputFile", reportingOn=False, replaceRangeMode=True
132 )
133 )
134 if flags.Input.OverrideRunNumber:
135 from AthenaKernel.EventIdOverrideConfig import EvtIdModifierSvcCfg
136 elmgr.EvtIdModifierSvc = cfg.getPrimaryAndMerge(EvtIdModifierSvcCfg(flags)).name
137
138 if flags.Common.isOverlay and not flags.Overlay.DataOverlay:
139 elmgr.RequireInputAttributeList = True
140 elmgr.UseSecondaryEventNumber = True
141
142 cfg.addService(elmgr)
143
144 return cfg
145
146

◆ OutputUsageIgnoreCfg()

OutputUsageIgnoreCfg ( flags,
algorithm )

Definition at line 67 of file MainServicesConfig.py.

67def OutputUsageIgnoreCfg(flags, algorithm):
68 cfg = ComponentAccumulator()
69 if flags.Concurrency.NumThreads > 0 and flags.Scheduler.CheckOutputUsage:
70 cfg.merge(AvalancheSchedulerSvcCfg(flags, CheckOutputUsageIgnoreList=[algorithm]))
71 return cfg
72
73

◆ PyAthenaEventLoopMgrCfg()

PyAthenaEventLoopMgrCfg ( flags)

Definition at line 236 of file MainServicesConfig.py.

236def PyAthenaEventLoopMgrCfg(flags):
237 cfg = ComponentAccumulator()
238 cfg.setAppProperty('EventLoop', "PyAthenaEventLoopMgr")
239 return cfg
240
241