10 def __init__(self, name, function, type=float, help="", default=-99, mcOnly=False, filler=None):
22 if self.
mcOnly and not isMC:
return
25 if self.
mcOnly and not isMC:
return
26 treeNumpy.fill(self.
name, self(object))
28 return "<NTupleVariable[%s]>" % self.
name
31 def __init__(self,name,baseObjectTypes=[],mcOnly=[],variables=[]):
37 """Return only my vars, not including the ones from the bases"""
38 return [ v
for v
in self.
variables if (isMC
or not v.mcOnly) ]
40 """Return all vars, including the base ones. Duplicate bases are not added twice"""
42 if not isMC
and self.
mcOnly:
return []
44 if not isMC
and base.mcOnly:
continue
45 for var
in base.ownVars(isMC):
46 if var.name
in names:
raise RuntimeError,
"Duplicate definition of variable %s from %s and %s" % (var.name, base.name, names[var.name])
47 names[var.name] = base.name
50 if var.name
in names:
raise RuntimeError,
"Duplicate definition of variable %s from %s and %s" % (var.name, self.
name, names[var.name])
51 names[var.name] = self.
name
59 for b2
in b.allBases():
66 return "<NTupleObjectType[%s]>" % self.
name
69 def __init__(self, name, objectType, help="", mcOnly=False):
75 if not isMC
and self.
mcOnly:
return
76 allvars = self.objectType.allVars(isMC)
79 if self.
help: h =
"%s for %s" % ( h
if h
else v.name, self.
help )
80 treeNumpy.var(
"%s_%s" % (self.
name, v.name), type=v.type, default=v.default, title=h, filler=v.filler)
82 if self.
mcOnly and not isMC:
return
83 allvars = self.objectType.allVars(isMC)
85 treeNumpy.fill(
"%s_%s" % (self.
name, v.name),
v(object))
87 return "<NTupleObject[%s]>" % self.
name
91 def __init__(self, name, objectType, maxlen, help="", mcOnly=False, sortAscendingBy=None, sortDescendingBy=None, filter=None):
96 if objectType.mcOnly
and mcOnly ==
False:
97 print "collection %s is set to mcOnly since the type %s is mcOnly" % (name, objectType.name)
100 if sortAscendingBy !=
None and sortDescendingBy !=
None:
101 raise RuntimeError,
"Cannot specify two sort conditions"
106 if not isMC
and self.objectType.mcOnly:
return
107 treeNumpy.var(
"n"+self.
name, int)
108 allvars = self.objectType.allVars(isMC)
110 for i
in xrange(1,self.
maxlen+1):
112 if self.
help: h =
"%s for %s [%d]" % ( h
if h
else v.name, self.
help, i-1 )
113 treeNumpy.var(
"%s%d_%s" % (self.
name, i, v.name), type=v.type, default=v.default, title=h, filler=v.filler)
115 if not isMC
and self.objectType.mcOnly:
return
116 treeNumpy.var(
"n"+self.
name, int)
117 allvars = self.objectType.allVars(isMC)
120 if self.
help: h =
"%s for %s" % ( h
if h
else v.name, self.
help )
121 name=
"%s_%s" % (self.
name, v.name)
if v.name !=
"" else self.
name
122 treeNumpy.vector(name,
"n"+self.
name, self.
maxlen, type=v.type, default=v.default, title=h, filler=v.filler)
124 if not isMC
and self.objectType.mcOnly:
return
125 if self.
filter !=
None: collection = [ o
for o
in collection
if self.
filter(o) ]
129 treeNumpy.fill(
"n"+self.
name, num)
130 allvars = self.objectType.allVars(isMC)
131 for i
in xrange(num):
134 treeNumpy.fill(
"%s%d_%s" % (self.
name, i+1, v.name),
v(o))
136 if not isMC
and self.objectType.mcOnly:
return
137 if self.
filter !=
None: collection = [ o
for o
in collection
if self.
filter(o) ]
141 treeNumpy.fill(
"n"+self.
name, num)
142 allvars = self.objectType.allVars(isMC)
144 name=
"%s_%s" % (self.
name, v.name)
if v.name !=
"" else self.
name
145 treeNumpy.vfill(name, [
v(collection[i])
for i
in xrange(num) ])
147 return "<NTupleCollection[%s]>" % self.
name
151 for v
in self.objectType.allVars(isMC):
152 s += [
"{0} {1}__{2}[{3}];".
format(v.type.__name__, self.
name, v.name, self.
maxlen)]
156 s =
"class %s {\n" % self.
name
158 for v
in self.objectType.allVars(isMC):
159 s +=
" {0} {1};\n".
format(v.type.__name__, v.name)
164 s =
"class %s:\n" % self.
name
165 s +=
" def __init__(self, tree, n):\n"
166 for v
in self.objectType.allVars(isMC):
168 s +=
" self.{0} = tree.{1}_{2}[n];\n".
format(v.name, self.
name, v.name)
170 s +=
" self.{0} = tree.{0}[n];\n".
format(self.
name)
172 s +=
" @staticmethod\n"
173 s +=
" def make_array(event):\n"
174 s +=
" return [{0}(event.input, i) for i in range(event.input.n{0})]\n".
format(self.
name)
static std::string join(char **cmd)
def get_cpp_wrapper_class