Пример #1
0
    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)
Пример #2
0
            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)
Пример #3
0
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):