The Gaudi Framework  master (37c0b60a)
Main.py
Go to the documentation of this file.
1 
11 import logging
12 import os
13 import sys
14 from time import time
15 
16 from Gaudi import Configuration
17 
18 log = logging.getLogger(__name__)
19 
20 
21 class BootstrapHelper(object):
22  class StatusCode(object):
23  def __init__(self, value):
24  self.value = value
25 
26  def __bool__(self):
27  return self.value
28 
29  __nonzero__ = __bool__
30 
31  def isSuccess(self):
32  return self.value
33 
34  def isFailure(self):
35  return not self.value
36 
37  def ignore(self):
38  pass
39 
40  class Property(object):
41  def __init__(self, value):
42  self.value = value
43 
44  def __str__(self):
45  # TODO why bytes
46  return bytes(self.value).decode("utf-8")
47 
48  toString = __str__
49 
50  class AppMgr(object):
51  def __init__(self, ptr, lib):
52  self.ptr = ptr
53  self.lib = lib
54  self._as_parameter_ = ptr
55 
56  def configure(self):
58  self.lib.py_bootstrap_fsm_configure(self.ptr)
59  )
60 
61  def initialize(self):
63  self.lib.py_bootstrap_fsm_initialize(self.ptr)
64  )
65 
66  def start(self):
67  return BootstrapHelper.StatusCode(self.lib.py_bootstrap_fsm_start(self.ptr))
68 
69  def run(self, nevt):
71  self.lib.py_bootstrap_app_run(self.ptr, nevt)
72  )
73 
74  def stop(self):
75  return BootstrapHelper.StatusCode(self.lib.py_bootstrap_fsm_stop(self.ptr))
76 
77  def finalize(self):
79  self.lib.py_bootstrap_fsm_finalize(self.ptr)
80  )
81 
82  def terminate(self):
84  self.lib.py_bootstrap_fsm_terminate(self.ptr)
85  )
86 
87  def getService(self, name):
88  return self.lib.py_bootstrap_getService(self.ptr, name.encode("ascii"))
89 
90  def setProperty(self, name, value):
92  self.lib.py_bootstrap_setProperty(
93  self.ptr, name.encode("ascii"), value.encode("ascii")
94  )
95  )
96 
97  def getProperty(self, name):
99  self.lib.py_bootstrap_getProperty(self.ptr, name.encode("ascii"))
100  )
101 
103  return self.lib.py_helper_printAlgsSequences(self.ptr)
104 
105  def setOption(self, key, value):
106  self.lib.py_bootstrap_setOption(
107  self.ptr, key.encode("ascii"), value.encode("ascii")
108  )
109 
110  def __init__(self):
111  from ctypes import RTLD_GLOBAL, PyDLL, c_bool, c_char_p, c_int, c_void_p, util
112 
113  # Helper class to avoid void* to int conversion
114  # (see http://stackoverflow.com/questions/17840144)
115 
116  class IInterface_p(c_void_p):
117  def __repr__(self):
118  return "IInterface_p(0x%x)" % (0 if self.value is None else self.value)
119 
120  self.log = logging.getLogger("BootstrapHelper")
121  libname = util.find_library("GaudiKernel") or "libGaudiKernel.so"
122  self.log.debug("loading GaudiKernel (%s)", libname)
123 
124  # FIXME: note that we need PyDLL instead of CDLL if the calls to
125  # Python functions are not protected with the GIL.
126  self.lib = gkl = PyDLL(libname, mode=RTLD_GLOBAL)
127 
128  functions = [
129  ("createApplicationMgr", IInterface_p, []),
130  ("getService", IInterface_p, [IInterface_p, c_char_p]),
131  ("setProperty", c_bool, [IInterface_p, c_char_p, c_char_p]),
132  ("getProperty", c_char_p, [IInterface_p, c_char_p]),
133  ("setOption", None, [IInterface_p, c_char_p, c_char_p]),
134  ("ROOT_VERSION_CODE", c_int, []),
135  ]
136 
137  for name, restype, argtypes in functions:
138  f = getattr(gkl, "py_bootstrap_%s" % name)
139  f.restype, f.argtypes = restype, argtypes
140  # create a delegate method if not already present
141  # (we do not want to use hasattr because it calls "properties")
142  if name not in self.__class__.__dict__:
143  setattr(self, name, f)
144 
145  for name in (
146  "configure",
147  "initialize",
148  "start",
149  "stop",
150  "finalize",
151  "terminate",
152  ):
153  f = getattr(gkl, "py_bootstrap_fsm_%s" % name)
154  f.restype, f.argtypes = c_bool, [IInterface_p]
155  gkl.py_bootstrap_app_run.restype = c_bool
156  gkl.py_bootstrap_app_run.argtypes = [IInterface_p, c_int]
157 
158  gkl.py_helper_printAlgsSequences.restype = None
159  gkl.py_helper_printAlgsSequences.argtypes = [IInterface_p]
160 
162  ptr = self.lib.py_bootstrap_createApplicationMgr()
163  return self.AppMgr(ptr, self.lib)
164 
165  @property
166  def ROOT_VERSION_CODE(self):
167  return self.lib.py_bootstrap_ROOT_VERSION_CODE()
168 
169  @property
170  def ROOT_VERSION(self):
171  root_version_code = self.ROOT_VERSION_CODE
172  a = root_version_code >> 16 & 0xFF
173  b = root_version_code >> 8 & 0xFF
174  c = root_version_code & 0xFF
175  return (a, b, c)
176 
177 
178 def _getAllOpts_old(explicit_defaults=False):
179  """
180  Return all options from the old configuration system as a dictionary.
181 
182  If explicit_defaults is true, include default values of unset properties in the dictionary.
183  """
184  from itertools import chain
185 
186  from GaudiKernel.Proxy.Configurable import Configurable, getNeededConfigurables
187 
188  old_opts = {}
189 
190  # some algorithms may be generater when we call "getValuedProperties"
191  # so we need a few iterations before we get the full list
192  # (see GaudiConfig.ControlFlow)
193  needed_conf = []
194  count = 0
195  new_count = -1
196  while count != new_count:
197  count = new_count
198  needed_conf = getNeededConfigurables()
199  new_count = len(needed_conf)
200  for n in needed_conf:
201  c = Configurable.allConfigurables[n]
202  if hasattr(c, "getValuedProperties"):
203  c.getValuedProperties()
204 
205  for n in needed_conf:
206  c = Configurable.allConfigurables[n]
207  items = (
208  chain(c.getDefaultProperties().items(), c.getValuedProperties().items())
209  if explicit_defaults
210  else c.getValuedProperties().items()
211  )
212  for p, v in items:
213  # Note: AthenaCommon.Configurable does not have Configurable.PropertyReference
214  if hasattr(Configurable, "PropertyReference") and isinstance(
215  v, Configurable.PropertyReference
216  ):
217  # this is done in "getFullName", but the exception is ignored,
218  # so we do it again to get it
219  v = v.__resolve__()
220  if isinstance(v, str):
221  # properly escape quotes in the string (see gaudi/Gaudi#78)
222  v = '"%s"' % v.replace('"', '\\"')
223  elif hasattr(v, "__opt_value__"):
224  v = v.__opt_value__()
225  old_opts[".".join((n, p))] = str(v)
226 
227  return old_opts
228 
229 
230 def getAllOpts(explicit_defaults=False):
231  """
232  Return all options from the old and new configuration system as a dictionary.
233 
234  If explicit_defaults is true, include default values of unset properties in the dictionary.
235  """
236  import GaudiConfig2
237 
238  # We need to run normal (without defaults) collection first (regardless of explicit_defaults)
239  # as the conflicts detection makes sense only for explicitly set options
240  old_opts = _getAllOpts_old(False)
241  opts = GaudiConfig2.all_options(False)
242 
243  conflicts = [n for n in set(opts).intersection(old_opts) if opts[n] != old_opts[n]]
244  if conflicts:
245  conflicts.sort()
246  log.error("Some properties are set in old and new style configuration")
247  log.warning("name: old -> new")
248  for n in conflicts:
249  log.warning("%s: %s -> %s", n, old_opts[n], opts[n])
250  sys.exit(10)
251 
252  opts.update(old_opts)
253 
254  if explicit_defaults:
255  # If we are asked to print also the defaults, we collect everything
256  # and blindly merge to make sure we have the full set of configurables
257  all_opts = _getAllOpts_old(True)
258  all_opts.update(GaudiConfig2.all_options(True))
259  # the we override the dictionary with the explicitly set options
260  # (that leaves the defaults untouched and the set options with the
261  # correct value)
262  all_opts.update(opts)
263  opts = all_opts
264 
265  return opts
266 
267 
268 def toOpt(value):
269  """
270  Helper to convert values to old .opts format.
271 
272  >>> print(toOpt('some "text"'))
273  "some \\"text\\""
274  >>> print(toOpt('first\\nsecond'))
275  "first
276  second"
277  >>> print(toOpt({'a': [1, 2, '3']}))
278  {"a": [1, 2, "3"]}
279  """
280  if isinstance(value, str):
281  return '"{0}"'.format(value.replace('"', '\\"'))
282  elif isinstance(value, dict):
283  return "{{{0}}}".format(
284  ", ".join("{0}: {1}".format(toOpt(k), toOpt(v)) for k, v in value.items())
285  )
286  elif hasattr(value, "__iter__"):
287  return "[{0}]".format(", ".join(map(toOpt, value)))
288  else:
289  return repr(value)
290 
291 
292 def parseOpt(s):
293  """
294  Helper to parse option strings to Python values.
295 
296  Ideally it should just be "eval", but the string parser of Gaudi
297  is different from the Python one, so we get string options that
298  cannot be just evaluated.
299 
300  >>> print(parseOpt('123'))
301  123
302  >>> print(parseOpt('"some\\n\\\\"text\\\\""'))
303  some
304  "text"
305  >>> print(parseOpt(''))
306  <BLANKLINE>
307 
308  (see gaudi/Gaudi#78)
309  """
310  import re
311 
312  quoted_string = re.compile(r'^"(.*)"$', re.DOTALL)
313  # FIXME: this is needed because we cannot use repr for strings
314  # (see gaudi/Gaudi#78)
315  if not s: # pass through empty strings
316  return s
317  m = quoted_string.match(s)
318  if m:
319  return m.group(1).replace('\\"', '"')
320  return eval(s)
321 
322 
323 class gaudimain(object):
324  def __init__(self):
325  from Configurables import ApplicationMgr
326 
327  appMgr = ApplicationMgr()
328  if os.environ.get("GAUDIAPPNAME"):
329  appMgr.AppName = str(os.environ["GAUDIAPPNAME"])
330  if os.environ.get("GAUDIAPPVERSION"):
331  appMgr.AppVersion = str(os.environ["GAUDIAPPVERSION"])
332  self.log = logging.getLogger(__name__)
333  self.printsequence = False
334  self.application = "Gaudi::Application"
335 
337  # ---------------------------------------------------
338  # set up Logging
339  # ----------------
340  # from multiprocessing import enableLogging, getLogger
341  import multiprocessing
342 
343  # preliminaries for handlers/output files, etc.
344  from time import ctime
345 
346  datetime = ctime()
347  datetime = datetime.replace(" ", "_")
348  outfile = open("gaudirun-%s.log" % (datetime), "w")
349  # two handlers, one for a log file, one for terminal
350  streamhandler = logging.StreamHandler(stream=outfile)
351  console = logging.StreamHandler()
352  # create formatter : the params in parentheses are variable names available via logging
353  formatter = logging.Formatter(
354  "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
355  )
356  # add formatter to Handler
357  streamhandler.setFormatter(formatter)
358  console.setFormatter(formatter)
359  # now, configure the logger
360  # enableLogging( level=0 )
361  # self.log = getLogger()
362  self.log = multiprocessing.log_to_stderr()
363  self.log.setLevel(logging.INFO)
364  self.log.name = "Gaudi/Main.py Logger"
365  self.log.handlers = []
366  # add handlers to logger : one for output to a file, one for console output
367  self.log.addHandler(streamhandler)
368  self.log.addHandler(console)
369  self.log.removeHandler(console)
370  # set level!!
371  self.log.setLevel = logging.INFO
372  # ---------------------------------------------------
373 
374  def generatePyOutput(self, all=False):
375  import re
376  from collections import defaultdict
377  from pprint import pformat
378 
379  optDict = defaultdict(dict)
380  allOpts = getAllOpts(all)
381  for key in allOpts:
382  c, p = key.rsplit(".", 1)
383  optDict[c][p] = parseOpt(allOpts[key])
384  formatted = pformat(dict(optDict))
385  # undo splitting of strings on multiple lines
386 
387  return re.sub(r'"\n +"', "", formatted, flags=re.MULTILINE)
388 
389  def generateOptsOutput(self, all=False):
390  opts = getAllOpts(all)
391  keys = sorted(opts)
392  return "\n".join(
393  "{} = {};".format(key, toOpt(parseOpt(opts[key]))) for key in keys
394  )
395 
396  def _writepickle(self, filename):
397  # --- Lets take the first file input file as the name of the pickle file
398  import pickle
399 
400  output = open(filename, "wb")
401  # Dump only the the configurables that make sense to dump (not User ones)
402  from GaudiKernel.Proxy.Configurable import getNeededConfigurables
403 
404  to_dump = {}
405  for n in getNeededConfigurables():
406  to_dump[n] = Configuration.allConfigurables[n]
407  pickle.dump(to_dump, output, -1)
408  output.close()
409 
410  def printconfig(self, old_format=False, all=False):
411  msg = "Dumping all configurables and properties"
412  if not all:
413  msg += " (different from default)"
414  log.info(msg)
415  if old_format:
416  print(self.generateOptsOutput(all))
417  else:
418  print(self.generatePyOutput(all))
419  sys.stdout.flush()
420 
421  def writeconfig(self, filename, all=False):
422  import json
423 
424  write = {
425  ".pkl": lambda filename, all: self._writepickle(filename),
426  ".py": lambda filename, all: open(filename, "w").write(
427  self.generatePyOutput(all) + "\n"
428  ),
429  ".opts": lambda filename, all: open(filename, "w").write(
430  self.generateOptsOutput(all) + "\n"
431  ),
432  ".json": lambda filename, all: json.dump(
433  getAllOpts(all), open(filename, "w"), indent=2, sort_keys=True
434  ),
435  }
436  try:
437  import yaml
438 
439  write[".yaml"] = lambda filename, all: yaml.safe_dump(
440  getAllOpts(all), open(filename, "w")
441  )
442  write[".yml"] = write[".yaml"]
443  except ImportError:
444  pass # yaml support is optional
445 
446  from os.path import splitext
447 
448  ext = splitext(filename)[1]
449  if ext in write:
450  write[ext](filename, all)
451  else:
452  log.error(
453  "Unknown file type '%s'. Must be any of %r.", ext, sorted(write.keys())
454  )
455  sys.exit(1)
456 
457  # Instantiate and run the application.
458  # Depending on the number of CPUs (ncpus) specified, it start
459  def run(self, attach_debugger, ncpus=None):
460  if not ncpus:
461  # Standard sequential mode
462  result = self.runSerial(attach_debugger)
463  else:
464  # Otherwise, run with the specified number of cpus
465  result = self.runParallel(ncpus)
466  return result
467 
468  def hookDebugger(self, debugger="gdb"):
469  import os
470 
471  self.log.info("attaching debugger to PID " + str(os.getpid()))
472  pid = os.spawnvp(
473  os.P_NOWAIT, debugger, [debugger, "-q", "python", str(os.getpid())]
474  )
475 
476  # give debugger some time to attach to the python process
477  import time
478 
479  time.sleep(5)
480 
481  # verify the process' existence (will raise OSError if failed)
482  os.waitpid(pid, os.WNOHANG)
483  os.kill(pid, 0)
484  return
485 
486  def runSerial(self, attach_debugger):
487  try:
488  from GaudiKernel.Proxy.Configurable import expandvars
489  except ImportError:
490  # pass-through implementation if expandvars is not defined (AthenaCommon)
491  def expandvars(data):
492  return data
493 
494  from GaudiKernel.Proxy.Configurable import Configurable
495 
496  self.log.debug("runSerial: apply options")
497  conf_dict = expandvars(getAllOpts())
498  conf_dict["ApplicationMgr.JobOptionsType"] = '"NONE"'
499 
500  if self.printsequence:
501  conf_dict["ApplicationMgr.PrintAlgsSequence"] = "true"
502 
503  if hasattr(Configurable, "_configurationLocked"):
504  Configurable._configurationLocked = True
505 
506  if attach_debugger:
507  self.hookDebugger()
508 
509  self.log.debug("-" * 80)
510  self.log.debug("%s: running in serial mode", __name__)
511  self.log.debug("-" * 80)
512  sysStart = time()
513 
514  import Gaudi
515 
516  app = Gaudi.Application.create(self.application, conf_dict)
517  retcode = app.run()
518 
519  sysTime = time() - sysStart
520  self.log.debug("-" * 80)
521  self.log.debug(
522  "%s: serial system finished, time taken: %5.4fs", __name__, sysTime
523  )
524  self.log.debug("-" * 80)
525 
526  return retcode
527 
528  def runParallel(self, ncpus):
529  self.setupParallelLogging()
530  import GaudiMP.GMPBase as gpp
531  from Gaudi.Configuration import Configurable
532 
533  c = Configurable.allConfigurables
534  self.log.info("-" * 80)
535  self.log.info("%s: Parallel Mode : %i ", __name__, ncpus)
536  for name, value in [
537  ("platform", " ".join(os.uname())),
538  ("config", os.environ.get("BINARY_TAG") or os.environ.get("CMTCONFIG")),
539  ("app. name", os.environ.get("GAUDIAPPNAME")),
540  ("app. version", os.environ.get("GAUDIAPPVERSION")),
541  ]:
542  self.log.info("%s: %30s : %s ", __name__, name, value or "Undefined")
543  try:
544  events = str(c["ApplicationMgr"].EvtMax)
545  except Exception:
546  events = "Undetermined"
547  self.log.info("%s: Events Specified : %s ", __name__, events)
548  self.log.info("-" * 80)
549  # Parall = gpp.Coordinator(ncpus, shared, c, self.log)
550  Parall = gpp.Coord(ncpus, c, self.log)
551  sysStart = time()
552  sc = Parall.Go()
553  self.log.info("MAIN.PY : received %s from Coordinator" % (sc))
554  if sc.isFailure():
555  return 1
556  sysTime = time() - sysStart
557  self.log.name = "Gaudi/Main.py Logger"
558  self.log.info("-" * 80)
559  self.log.info(
560  "%s: parallel system finished, time taken: %5.4fs", __name__, sysTime
561  )
562  self.log.info("-" * 80)
563  return 0
Gaudi.Main.BootstrapHelper.ROOT_VERSION
def ROOT_VERSION(self)
Definition: Main.py:170
Gaudi.Application.create
def create(cls, appType, opts)
Definition: __init__.py:127
Gaudi.Main.BootstrapHelper.AppMgr.finalize
def finalize(self)
Definition: Main.py:77
Gaudi.Main.gaudimain.generatePyOutput
def generatePyOutput(self, all=False)
Definition: Main.py:374
Gaudi.Main.gaudimain.application
application
Definition: Main.py:334
Gaudi.Main.gaudimain.hookDebugger
def hookDebugger(self, debugger="gdb")
Definition: Main.py:468
GaudiMP.GMPBase
Definition: GMPBase.py:1
Gaudi.Main.BootstrapHelper.Property.__init__
def __init__(self, value)
Definition: Main.py:41
Gaudi.Main.BootstrapHelper.lib
lib
Definition: Main.py:126
GaudiPartProp.decorators.__repr__
__repr__
decorate the vector of properties
Definition: decorators.py:173
Gaudi.Main.BootstrapHelper.AppMgr.terminate
def terminate(self)
Definition: Main.py:82
py_bootstrap_app_run
bool py_bootstrap_app_run(IInterface *i, int maxevt)
Definition: Bootstrap.cpp:268
Gaudi.Main.BootstrapHelper.AppMgr.ptr
ptr
Definition: Main.py:52
Gaudi.Main.gaudimain.writeconfig
def writeconfig(self, filename, all=False)
Definition: Main.py:421
Gaudi.Main.BootstrapHelper.AppMgr.run
def run(self, nevt)
Definition: Main.py:69
Containers::map
struct GAUDI_API map
Parametrisation class for map-like implementation.
Definition: KeyedObjectManager.h:35
Gaudi.Main.BootstrapHelper.AppMgr.lib
lib
Definition: Main.py:53
Gaudi.Main.BootstrapHelper.StatusCode.__init__
def __init__(self, value)
Definition: Main.py:23
Gaudi.Main.gaudimain.printconfig
def printconfig(self, old_format=False, all=False)
Definition: Main.py:410
GaudiKernel.Proxy.getNeededConfigurables
getNeededConfigurables
Definition: Proxy.py:30
Gaudi.Main.BootstrapHelper.AppMgr.start
def start(self)
Definition: Main.py:66
Gaudi.Main.BootstrapHelper.__init__
def __init__(self)
Definition: Main.py:110
Gaudi.Main.BootstrapHelper.StatusCode.isSuccess
def isSuccess(self)
Definition: Main.py:31
Gaudi.Main.BootstrapHelper.Property.value
value
Definition: Main.py:42
Gaudi.Main.gaudimain.__init__
def __init__(self)
Definition: Main.py:324
Gaudi.Main.parseOpt
def parseOpt(s)
Definition: Main.py:292
Gaudi.Main.BootstrapHelper.AppMgr.setOption
def setOption(self, key, value)
Definition: Main.py:105
Gaudi.Main.BootstrapHelper.AppMgr.initialize
def initialize(self)
Definition: Main.py:61
Gaudi.Main.BootstrapHelper.AppMgr
Definition: Main.py:50
Gaudi.Main.BootstrapHelper.AppMgr.getProperty
def getProperty(self, name)
Definition: Main.py:97
Gaudi.Main.gaudimain.generateOptsOutput
def generateOptsOutput(self, all=False)
Definition: Main.py:389
Gaudi.Configuration
Definition: Configuration.py:1
Gaudi.Main.BootstrapHelper.AppMgr.setProperty
def setProperty(self, name, value)
Definition: Main.py:90
Gaudi.Main.BootstrapHelper.StatusCode
Definition: Main.py:22
Gaudi.Main.gaudimain.runSerial
def runSerial(self, attach_debugger)
Definition: Main.py:486
Gaudi.Main.gaudimain
Definition: Main.py:323
Gaudi.Main.BootstrapHelper.createApplicationMgr
def createApplicationMgr(self)
Definition: Main.py:161
format
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Definition: MsgStream.cpp:119
Gaudi.Main.gaudimain.setupParallelLogging
def setupParallelLogging(self)
Definition: Main.py:336
plotSpeedupsPyRoot.time
time
Definition: plotSpeedupsPyRoot.py:180
py_helper_printAlgsSequences
void py_helper_printAlgsSequences(IInterface *app)
Helper to call printAlgsSequences from Pyhton ctypes.
Definition: PrintAlgsSequences.cpp:57
Gaudi.Main.gaudimain.log
log
Definition: Main.py:332
Gaudi.Main.gaudimain.run
def run(self, attach_debugger, ncpus=None)
Definition: Main.py:459
Gaudi.Main._getAllOpts_old
def _getAllOpts_old(explicit_defaults=False)
Definition: Main.py:178
Gaudi.Main.BootstrapHelper.StatusCode.__bool__
def __bool__(self)
Definition: Main.py:26
Gaudi.Main.BootstrapHelper.ROOT_VERSION_CODE
def ROOT_VERSION_CODE(self)
Definition: Main.py:166
ApplicationMgr
Definition: ApplicationMgr.h:57
Gaudi.Main.gaudimain._writepickle
def _writepickle(self, filename)
Definition: Main.py:396
Gaudi.Main.BootstrapHelper.log
log
Definition: Main.py:120
Gaudi.Main.BootstrapHelper.Property
Definition: Main.py:40
Gaudi.Main.BootstrapHelper.StatusCode.isFailure
def isFailure(self)
Definition: Main.py:34
Gaudi.Main.gaudimain.printsequence
printsequence
Definition: Main.py:333
Gaudi.Main.toOpt
def toOpt(value)
Definition: Main.py:268
Gaudi.Main.BootstrapHelper.AppMgr.stop
def stop(self)
Definition: Main.py:74
Gaudi.Main.BootstrapHelper.AppMgr._as_parameter_
_as_parameter_
Definition: Main.py:54
Gaudi.Main.BootstrapHelper.StatusCode.value
value
Definition: Main.py:24
Gaudi.Main.BootstrapHelper
Definition: Main.py:21
Gaudi.Main.getAllOpts
def getAllOpts(explicit_defaults=False)
Definition: Main.py:230
Gaudi.Main.BootstrapHelper.StatusCode.ignore
def ignore(self)
Definition: Main.py:37
Gaudi.Main.BootstrapHelper.Property.__str__
def __str__(self)
Definition: Main.py:44
Gaudi.Main.BootstrapHelper.AppMgr.printAlgsSequences
def printAlgsSequences(self)
Definition: Main.py:102
Gaudi.Main.BootstrapHelper.AppMgr.__init__
def __init__(self, ptr, lib)
Definition: Main.py:51
Gaudi.Main.gaudimain.runParallel
def runParallel(self, ncpus)
Definition: Main.py:528
GaudiKernel.Configurable.expandvars
def expandvars(data)
Definition: Configurable.py:77
Gaudi.Main.BootstrapHelper.AppMgr.configure
def configure(self)
Definition: Main.py:56
Gaudi.Main.BootstrapHelper.AppMgr.getService
def getService(self, name)
Definition: Main.py:87