Belle II Software development
__init__.py
1
8
9import argparse
10import basf2.utils as b2utils
11
12
14 '''
15 Wrapper around the variable manager class.
16 This is necessary for avoiding to import ROOT globally when 'variables' is imported.
17 '''
18
19 @classmethod
20 def _instance(self):
21 '''
22 Return an instance to the variable manager.
23 '''
24 # Always avoid the top-level 'import ROOT'.
25 import ROOT # noqa
26 instance = ROOT.Belle2.Variable.Manager.Instance()
27 return instance
28
29 def getVariable(self, *args):
30 '''
31 Wrapper around Manager::getVariable(std::string name) and
32 Manager::getVariable(const std::string& functionName, const std::vector<std::string>& functionArguments).
33 '''
34 instance = PythonVariableManager._instance()
35 return instance.getVariable(*args)
36
37 def getVariables(self, *args):
38 '''
39 Wrapper around Manager::getVariables(const std::vector<std::string>& variables) and
40 Manager::getVariables().
41 '''
42 instance = PythonVariableManager._instance()
43 return instance.getVariables(*args)
44
45 def addAlias(self, alias, variable):
46 '''
47 Wrapper around Manager::addAlias(const std::string& alias, const std::string& variable).
48 '''
49 instance = PythonVariableManager._instance()
50 if not instance.addAlias(alias, variable):
51 raise RuntimeError(f"Failed to add alias '{alias}' for variable '{variable}'")
52 return alias
53
54 def printAliases(self):
55 '''
56 Wrapper around Manager::printAliases().
57 '''
58 instance = PythonVariableManager._instance()
59 instance.printAliases()
60
61 def clearAliases(self):
62 '''
63 Wrapper around Manager::clearAliases().
64 '''
65 instance = PythonVariableManager._instance()
66 instance.clearAliases()
67
68 def resolveAlias(self, alias):
69 '''
70 Wrapper around Manager::resolveAlias(const std::string& alias).
71 '''
72 instance = PythonVariableManager._instance()
73 return instance.resolveAlias(alias)
74
75 def addCollection(self, *args):
76 '''
77 Wrapper around Manager::addCollection(const std::string& collection, const std::vector<std::string>& variables)
78 '''
79 instance = PythonVariableManager._instance()
80 if not instance.addCollection(*args):
81 raise RuntimeError(f"Failed to add collection with args: {args}")
82
83 def getCollection(self, collection):
84 '''
85 Wrapper around Manager::getCollection(const std::string& collection).
86 '''
87 instance = PythonVariableManager._instance()
88 return instance.getCollection(collection)
89
90 def resolveCollections(self, *args):
91 '''
92 Wrapper around Manager::resolveCollections(const std::vector<std::string>& variables).
93 '''
94 instance = PythonVariableManager._instance()
95 return instance.resolveCollections(*args)
96
97 def checkDeprecatedVariable(self, variable):
98 '''
99 Wrapper around Manager::checkDeprecatedVariable(const std::string& name).
100 '''
101 instance = PythonVariableManager._instance()
102 instance.checkDeprecatedVariable(variable)
103
104 def evaluate(self, variable, particle):
105 '''
106 Wrapper around Manager::evaluate(const std::string& varName, const Particle* p).
107 '''
108 instance = PythonVariableManager._instance()
109 return instance.evaluate(variable, particle)
110
111 def evaluateVariables(self, variables, plist):
112 '''
113 Wrapper around Manager::evaluateVariables(const std::vector<std::string>& varNames, const ParticleList* plist).
114 '''
115 instance = PythonVariableManager._instance()
116 return instance.evaluateVariables(variables, plist.obj())
117
118 def getNames(self):
119 '''
120 Wrapper around Manager::getNames().
121 '''
122 instance = PythonVariableManager._instance()
123 return instance.getNames()
124
125 def getAliasNames(self):
126 '''
127 Wrapper around Manager::getAliasNames().
128 '''
129 instance = PythonVariableManager._instance()
130 return instance.getAliasNames()
131
132 def assertValidName(self, variable):
133 '''
134 Wrapper around Manager::assertValidName(const std::string& name).
135 '''
136 instance = PythonVariableManager._instance()
137 instance.assertValidName(variable)
138
139
140
141variables = PythonVariableManager()
142
143
144def std_vector(*args):
145 """
146 Creates an std::vector which can be passed to pyROOT
147 """
148 # Always avoid the top-level 'import ROOT'.
149 import ROOT # noqa
150 v = ROOT.std.vector(type(args[0]))()
151 for x in args:
152 v.push_back(x)
153 return v
154
155
156def getCommandLineOptions():
157 """ Parses the command line options and returns the corresponding arguments. """
158 parser = argparse.ArgumentParser()
159 parser.add_argument('--no-pager', dest='pager', default=True, action='store_false',
160 help='Use a pager to show output or print to terminal.')
161 args = parser.parse_args()
162 return args
163
164
165def printVars(changedVariableNames=None, listVars=None):
166 """
167 Print list of all available variables.
168 """
169
170 if changedVariableNames:
171 print(changedVariableNames)
172 print('Available variables in Variable::Manager:')
173
174 if listVars is None:
175 listVars = variables.getVariables()
176 else:
177 listVars = [variables.getVariable(name) for name in listVars]
178
179 dict_VariableDataType = {0: 'double', 1: 'int', 2: 'bool'}
180
181 vars = []
182 for v in listVars:
183 vars.append((v.group, v.name, v.description,
184 dict_VariableDataType[v.variabletype]))
185
186 rows = []
187 current_group = ''
188 for (group, name, description, vartype) in sorted(vars):
189 if current_group != group:
190 current_group = group
191 rows.append([group])
192 rows.append([name, description, vartype])
193 b2utils.pretty_print_description_list(rows)
194
195
196def printVariableType(listVars=None):
197
198 if isinstance(listVars, str):
199 listVars = [listVars]
200
201 dict_VariableDataType = {0: 'double', 1: 'int', 2: 'bool'}
202
203 for var_name in listVars:
204 var = variables.getVariable(var_name)
205 print(f"{var_name}: {dict_VariableDataType[var.variabletype]}")
206
207
208def getAllTrgNames():
209 """
210 Return all PSNM trigger bit names
211 """
212 # Always avoid the top-level 'import ROOT'.
213 import ROOT # noqa
214 bits = ROOT.Belle2.PyDBObj('TRGGDLDBFTDLBits')
215 evt = ROOT.Belle2.EventMetaData()
216 ROOT.Belle2.DBStore.Instance().update(evt)
217 size = ROOT.Belle2.TRGSummary.c_ntrgWords * ROOT.Belle2.TRGSummary.c_trgWordSize
218 return [bits.getoutbitname(i) for i in range(size) if bits.getoutbitname(i) != '']
checkDeprecatedVariable(self, variable)
Definition __init__.py:97
addAlias(self, alias, variable)
Definition __init__.py:45
getCollection(self, collection)
Definition __init__.py:83
assertValidName(self, variable)
Definition __init__.py:132
evaluate(self, variable, particle)
Definition __init__.py:104
evaluateVariables(self, variables, plist)
Definition __init__.py:111