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