-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathload.py
More file actions
102 lines (89 loc) · 3.77 KB
/
load.py
File metadata and controls
102 lines (89 loc) · 3.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/env python
'''@package docstring
Module that catalogs C++ objects known to ROOT/PandaCore.
Load libraries on-demand
'''
class Library():
'''Simple class that defines a library'''
def __init__(self,name,objects,deps=[]):
self.name = name
self.objects = objects
self.deps = deps
_loaded = []
DEBUG = False
libraries = [
Library(name='PandaCoreUtils', objects = ['Logger']),
Library(name='PandaCoreTools', objects = [ 'Functions',
'Common',
'TreeTools',
'DuplicateRemover',
'Normalizer',
'Cutter',
'BranchAdder',
'EventSyncher',
'splitPandaExpress'
]
),
Library(name='PandaCoreLearning', objects = [ 'TMVATrainer',
'TMVABranchAdder',
]
),
Library(name='PandaCoreStatistics', objects = [ 'RooExpErf',
]
),
Library(name='PandaCoreDrawers', objects = ['CanvasDrawer',
'GraphDrawer',
'GraphErrDrawer',
'GraphAsymmErrDrawer',
'HistogramDrawer',
'PlotUtility',
'ROCTool',
]
),
Library(name='PandaAnalysisFlat', objects = ['PandaAnalyzer',
'PandaLeptonicAnalyzer',
'GenAnalyzer',
'LimitTreeBuilder',
'TagAnalyzer',
'SFTreeBuilder',
'BTagTreeBuilder',
]
),
Library(name='RedPandaCluster', objects = ['Clusterer',
'Camera',
'PFAnalyzer',
]
),
]
from ROOT import gROOT, gSystem, gInterpreter
import ROOT as root
from os import getenv
from logging import *
def load_lib(libpath):
logger.info('PandaCore.Utils.load','Loading %s'%libpath)
gSystem.Load(libpath)
def Load(request):
'''
Function that loads any necessary shared object files
@type request: str
@param request: Name of library or class
'''
requested_lib = None
for l in libraries:
if l.name==request or request in l.objects:
requested_lib = l
break
if requested_lib in _loaded:
if DEBUG:
logger.warning('PandaCore.Utils.load','Requested %s has already been _loaded in %s'%(request, requested_lib.name))
return
if not requested_lib:
logger.error('PandaCore.Utils.load','Could not load lib %s'%request)
raise Exception('LoadError')
for d in requested_lib.deps:
if 'CMSSW' in d:
load_lib(d)
else:
load_lib('lib'+d+'.so')
_loaded.append(requested_lib)
load_lib('lib'+requested_lib.name+'.so')