Create trees with branches of user-defined typesΒΆ
This example demonstrates how to fill and read trees with branches containing user-defined types.
Python source code: user_object.py
print(__doc__)
from rootpy.tree import Tree, TreeModel, IntCol, ObjectCol
from rootpy.io import root_open
import rootpy.compiled as C
from random import gauss
# compile our new type
C.register_code("""
class Thingy {
public:
int i;
float x;
double y;
};
""", ["Thingy"])
# alternatively you can ROOT.gSystem.Load() your library
# define the model
class Event(TreeModel):
event_number = IntCol()
thingy = ObjectCol(C.Thingy)
f = root_open("test.root", "recreate")
tree = Tree("test", model=Event)
# fill the tree
for i in range(20):
tree.event_number = i
tree.thingy.i = i
tree.thingy.x = gauss(.3, 2.)
tree.thingy.y = gauss(13., 42.)
tree.fill()
tree.write()
f.close()
# now to read the same tree
with root_open("test.root") as f:
tree = f.test
for event in tree:
thing = event.thingy
print("{0} {1} {2} {3}".format(
event.event_number, thing.i, thing.x, thing.y))