def __getattr2(self, name): # "running" getattr # handle "from ROOT import *" ... can be called multiple times if name == '__all__': caller = sys.modules[sys._getframe(1).f_globals['__name__']] # we may be calling in from __getattr1, verify and if so, go one frame up if caller == self: caller = sys.modules[sys._getframe(2).f_globals['__name__']] # setup the pre-defined globals for name in self.module.__pseudo__all__: caller.__dict__[name] = getattr(_root, name) # install the hook _root.SetRootLazyLookup(caller.__dict__) # return empty list, to prevent further copying return self.module.__all__ # lookup into ROOT (which may cause python-side enum/class/global creation) attr = _root.LookupRootEntity(name) # the call above will raise AttributeError as necessary; so if we get here, # attr is valid: cache as appropriate, so we don't come back if type(attr) == _root.PropertyProxy: setattr(self.__class__, name, attr) # descriptor return getattr(self, name) else: self.__dict__[name] = attr # normal member return attr # reaching this point means failure ... raise AttributeError(name)
setattr(cls, attr, klass) return klass class _global_cpp: class std(object): __metaclass__ = _stdmeta stlclasses = ( 'complex', 'pair', \ 'deque', 'list', 'queue', 'stack', 'vector', 'map', 'multimap', 'set', 'multiset' ) for name in stlclasses: locals()[name] = Template('std::%s' % name) string = _backend.MakeRootClass('string') _backend.SetRootLazyLookup(_global_cpp.__dict__) else: _global_cpp = _backend def Namespace(name): if name == '': return _global_cpp else: return _backend.LookupRootEntity(name) makeNamespace = Namespace def makeClass(name): return _backend.MakeRootClass(name)
Cintex = libPyROOT.MakeRootClass('Cintex') Cintex.SetDebug(0) Cintex.Enable() #--- Other functions needed ------------------------------------------- class _global_cpp: class std: #--- scope place holder for STL classes ------------------------------------------ stlclasses = ( 'complex', 'exception', 'pair', 'deque', 'list', 'queue',\ 'stack', 'vector', 'map', 'multimap', 'set', 'multiset' ) for name in stlclasses: exec '%(name)s = Template( "std::%(name)s" )' % {'name': name} libPyROOT.SetRootLazyLookup(_global_cpp.__dict__) def Namespace(name): if name == '': return _global_cpp else: return libPyROOT.LookupRootEntity(name) makeNamespace = Namespace def makeClass(name): return libPyROOT.MakeRootClass(name) def addressOf(obj):