Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  v36r13 (995e4364)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 (
217  hasattr(Configurable, "PropertyReference")
218  and type(v) == Configurable.PropertyReference
219  ):
220  # this is done in "getFullName", but the exception is ignored,
221  # so we do it again to get it
222  v = v.__resolve__()
223  if isinstance(v, str):
224  # properly escape quotes in the string (see gaudi/Gaudi#78)
225  v = '"%s"' % v.replace('"', '\\"')
226  elif hasattr(v, "__opt_value__"):
227  v = v.__opt_value__()
228  old_opts[".".join((n, p))] = str(v)
229 
230  return old_opts
231 
232 
233 def getAllOpts(explicit_defaults=False):
234  """
235  Return all options from the old and new configuration system as a dictionary.
236 
237  If explicit_defaults is true, include default values of unset properties in the dictionary.
238  """
239  import GaudiConfig2
240 
241  # We need to run normal (without defaults) collection first (regardless of explicit_defaults)
242  # as the conflicts detection makes sense only for explicitly set options
243  old_opts = _getAllOpts_old(False)
244  opts = GaudiConfig2.all_options(False)
245 
246  conflicts = [n for n in set(opts).intersection(old_opts) if opts[n] != old_opts[n]]
247  if conflicts:
248  conflicts.sort()
249  log.error("Some properties are set in old and new style configuration")
250  log.warning("name: old -> new")
251  for n in conflicts:
252  log.warning("%s: %s -> %s", n, old_opts[n], opts[n])
253  sys.exit(10)
254 
255  opts.update(old_opts)
256 
257  if explicit_defaults:
258  # If we are asked to print also the defaults, we collect everything
259  # and blindly merge to make sure we have the full set of configurables
260  all_opts = _getAllOpts_old(True)
261  all_opts.update(GaudiConfig2.all_options(True))
262  # the we override the dictionary with the explicitly set options
263  # (that leaves the defaults untouched and the set options with the
264  # correct value)
265  all_opts.update(opts)
266  opts = all_opts
267 
268  return opts
269 
270 
271 def toOpt(value):
272  """
273  Helper to convert values to old .opts format.
274 
275  >>> print(toOpt('some "text"'))
276  "some \\"text\\""
277  >>> print(toOpt('first\\nsecond'))
278  "first
279  second"
280  >>> print(toOpt({'a': [1, 2, '3']}))
281  {"a": [1, 2, "3"]}
282  """
283  if isinstance(value, six.string_types):
284  return '"{0}"'.format(value.replace('"', '\\"'))
285  elif isinstance(value, dict):
286  return "{{{0}}}".format(
287  ", ".join("{0}: {1}".format(toOpt(k), toOpt(v)) for k, v in value.items())
288  )
289  elif hasattr(value, "__iter__"):
290  return "[{0}]".format(", ".join(map(toOpt, value)))
291  else:
292  return repr(value)
293 
294 
295 def parseOpt(s):
296  """
297  Helper to parse option strings to Python values.
298 
299  Ideally it should just be "eval", but the string parser of Gaudi
300  is different from the Python one, so we get string options that
301  cannot be just evaluated.
302 
303  >>> print(parseOpt('123'))
304  123
305  >>> print(parseOpt('"some\\n\\\\"text\\\\""'))
306  some
307  "text"
308  >>> print(parseOpt(''))
309  <BLANKLINE>
310 
311  (see gaudi/Gaudi#78)
312  """
313  import re
314 
315  quoted_string = re.compile(r'^"(.*)"$', re.DOTALL)
316  # FIXME: this is needed because we cannot use repr for strings
317  # (see gaudi/Gaudi#78)
318  if not s: # pass through empty strings
319  return s
320  m = quoted_string.match(s)
321  if m:
322  return m.group(1).replace('\\"', '"')
323  return eval(s)
324 
325 
326 class gaudimain(object):
327  def __init__(self):
328  from Configurables import ApplicationMgr
329 
330  appMgr = ApplicationMgr()
331  if os.environ.get("GAUDIAPPNAME"):
332  appMgr.AppName = str(os.environ["GAUDIAPPNAME"])
333  if os.environ.get("GAUDIAPPVERSION"):
334  appMgr.AppVersion = str(os.environ["GAUDIAPPVERSION"])
335  self.log = logging.getLogger(__name__)
336  self.printsequence = False
337  self.application = "Gaudi::Application"
338 
340  # ---------------------------------------------------
341  # set up Logging
342  # ----------------
343  # from multiprocessing import enableLogging, getLogger
344  import multiprocessing
345 
346  # preliminaries for handlers/output files, etc.
347  from time import ctime
348 
349  datetime = ctime()
350  datetime = datetime.replace(" ", "_")
351  outfile = open("gaudirun-%s.log" % (datetime), "w")
352  # two handlers, one for a log file, one for terminal
353  streamhandler = logging.StreamHandler(stream=outfile)
354  console = logging.StreamHandler()
355  # create formatter : the params in parentheses are variable names available via logging
356  formatter = logging.Formatter(
357  "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
358  )
359  # add formatter to Handler
360  streamhandler.setFormatter(formatter)
361  console.setFormatter(formatter)
362  # now, configure the logger
363  # enableLogging( level=0 )
364  # self.log = getLogger()
365  self.log = multiprocessing.log_to_stderr()
366  self.log.setLevel(logging.INFO)
367  self.log.name = "Gaudi/Main.py Logger"
368  self.log.handlers = []
369  # add handlers to logger : one for output to a file, one for console output
370  self.log.addHandler(streamhandler)
371  self.log.addHandler(console)
372  self.log.removeHandler(console)
373  # set level!!
374  self.log.setLevel = logging.INFO
375  # ---------------------------------------------------
376 
377  def generatePyOutput(self, all=False):
378  from collections import defaultdict
379  from pprint import pformat
380 
381  optDict = defaultdict(dict)
382  allOpts = getAllOpts(all)
383  for key in allOpts:
384  c, p = key.rsplit(".", 1)
385  optDict[c][p] = parseOpt(allOpts[key])
386  formatted = pformat(dict(optDict))
387  # Python 2 compatibility
388  if six.PY2:
389  return formatted
390  else:
391  # undo splitting of strings on multiple lines
392  import re
393 
394  return re.sub(r'"\n +"', "", formatted, flags=re.MULTILINE)
395 
396  def generateOptsOutput(self, all=False):
397  opts = getAllOpts(all)
398  keys = sorted(opts)
399  return "\n".join(
400  "{} = {};".format(key, toOpt(parseOpt(opts[key]))) for key in keys
401  )
402 
403  def _writepickle(self, filename):
404  # --- Lets take the first file input file as the name of the pickle file
405  import pickle
406 
407  output = open(filename, "wb")
408  # Dump only the the configurables that make sense to dump (not User ones)
409  from GaudiKernel.Proxy.Configurable import getNeededConfigurables
410 
411  to_dump = {}
412  for n in getNeededConfigurables():
413  to_dump[n] = Configuration.allConfigurables[n]
414  pickle.dump(to_dump, output, -1)
415  output.close()
416 
417  def printconfig(self, old_format=False, all=False):
418  msg = "Dumping all configurables and properties"
419  if not all:
420  msg += " (different from default)"
421  log.info(msg)
422  if old_format:
423  print(self.generateOptsOutput(all))
424  else:
425  print(self.generatePyOutput(all))
426  sys.stdout.flush()
427 
428  def writeconfig(self, filename, all=False):
429  import json
430 
431  write = {
432  ".pkl": lambda filename, all: self._writepickle(filename),
433  ".py": lambda filename, all: open(filename, "w").write(
434  self.generatePyOutput(all) + "\n"
435  ),
436  ".opts": lambda filename, all: open(filename, "w").write(
437  self.generateOptsOutput(all) + "\n"
438  ),
439  ".json": lambda filename, all: json.dump(
440  getAllOpts(all), open(filename, "w"), indent=2, sort_keys=True
441  ),
442  }
443  try:
444  import yaml
445 
446  write[".yaml"] = lambda filename, all: yaml.safe_dump(
447  getAllOpts(all), open(filename, "w")
448  )
449  write[".yml"] = write[".yaml"]
450  except ImportError:
451  pass # yaml support is optional
452 
453  from os.path import splitext
454 
455  ext = splitext(filename)[1]
456  if ext in write:
457  write[ext](filename, all)
458  else:
459  log.error(
460  "Unknown file type '%s'. Must be any of %r.", ext, sorted(write.keys())
461  )
462  sys.exit(1)
463 
464  # Instantiate and run the application.
465  # Depending on the number of CPUs (ncpus) specified, it start
466  def run(self, attach_debugger, ncpus=None):
467  if not ncpus:
468  # Standard sequential mode
469  result = self.runSerial(attach_debugger)
470  else:
471  # Otherwise, run with the specified number of cpus
472  result = self.runParallel(ncpus)
473  return result
474 
475  def hookDebugger(self, debugger="gdb"):
476  import os
477 
478  self.log.info("attaching debugger to PID " + str(os.getpid()))
479  pid = os.spawnvp(
480  os.P_NOWAIT, debugger, [debugger, "-q", "python", str(os.getpid())]
481  )
482 
483  # give debugger some time to attach to the python process
484  import time
485 
486  time.sleep(5)
487 
488  # verify the process' existence (will raise OSError if failed)
489  os.waitpid(pid, os.WNOHANG)
490  os.kill(pid, 0)
491  return
492 
493  def runSerial(self, attach_debugger):
494  try:
495  from GaudiKernel.Proxy.Configurable import expandvars
496  except ImportError:
497  # pass-through implementation if expandvars is not defined (AthenaCommon)
498  def expandvars(data):
499  return data
500 
501  from GaudiKernel.Proxy.Configurable import Configurable
502 
503  self.log.debug("runSerial: apply options")
504  conf_dict = expandvars(getAllOpts())
505  conf_dict["ApplicationMgr.JobOptionsType"] = '"NONE"'
506 
507  if self.printsequence:
508  conf_dict["ApplicationMgr.PrintAlgsSequence"] = "true"
509 
510  if hasattr(Configurable, "_configurationLocked"):
511  Configurable._configurationLocked = True
512 
513  if attach_debugger:
514  self.hookDebugger()
515 
516  self.log.debug("-" * 80)
517  self.log.debug("%s: running in serial mode", __name__)
518  self.log.debug("-" * 80)
519  sysStart = time()
520 
521  import Gaudi
522 
523  app = Gaudi.Application.create(self.application, conf_dict)
524  retcode = app.run()
525 
526  sysTime = time() - sysStart
527  self.log.debug("-" * 80)
528  self.log.debug(
529  "%s: serial system finished, time taken: %5.4fs", __name__, sysTime
530  )
531  self.log.debug("-" * 80)
532 
533  return retcode
534 
535  def runParallel(self, ncpus):
536  self.setupParallelLogging()
537  import GaudiMP.GMPBase as gpp
538  from Gaudi.Configuration import Configurable
539 
540  c = Configurable.allConfigurables
541  self.log.info("-" * 80)
542  self.log.info("%s: Parallel Mode : %i ", __name__, ncpus)
543  for name, value in [
544  ("platform", " ".join(os.uname())),
545  ("config", os.environ.get("BINARY_TAG") or os.environ.get("CMTCONFIG")),
546  ("app. name", os.environ.get("GAUDIAPPNAME")),
547  ("app. version", os.environ.get("GAUDIAPPVERSION")),
548  ]:
549  self.log.info("%s: %30s : %s ", __name__, name, value or "Undefined")
550  try:
551  events = str(c["ApplicationMgr"].EvtMax)
552  except Exception:
553  events = "Undetermined"
554  self.log.info("%s: Events Specified : %s ", __name__, events)
555  self.log.info("-" * 80)
556  # Parall = gpp.Coordinator(ncpus, shared, c, self.log)
557  Parall = gpp.Coord(ncpus, c, self.log)
558  sysStart = time()
559  sc = Parall.Go()
560  self.log.info("MAIN.PY : received %s from Coordinator" % (sc))
561  if sc.isFailure():
562  return 1
563  sysTime = time() - sysStart
564  self.log.name = "Gaudi/Main.py Logger"
565  self.log.info("-" * 80)
566  self.log.info(
567  "%s: parallel system finished, time taken: %5.4fs", __name__, sysTime
568  )
569  self.log.info("-" * 80)
570  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:377
Gaudi.Main.gaudimain.application
application
Definition: Main.py:337
Gaudi.Main.gaudimain.hookDebugger
def hookDebugger(self, debugger="gdb")
Definition: Main.py:475
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:428
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:417
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:327
Gaudi.Main.parseOpt
def parseOpt(s)
Definition: Main.py:295
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:396
Gaudi.Configuration
Definition: Configuration.py:1
GaudiPython.HistoUtils.__repr__
__repr__
Definition: HistoUtils.py:536
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:493
Gaudi.Main.gaudimain
Definition: Main.py:326
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:339
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:335
gaudirun.type
type
Definition: gaudirun.py:162
Gaudi.Main.gaudimain.run
def run(self, attach_debugger, ncpus=None)
Definition: Main.py:466
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:403
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:336
Gaudi.Main.toOpt
def toOpt(value)
Definition: Main.py:271
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:233
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:535
GaudiKernel.Configurable.expandvars
def expandvars(data)
Definition: Configurable.py:78
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