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