FAQ¶
This is a list of Frequently Asked Questions about root_numpy. Feel free to suggest new entries!
How do I add a new branch to an existing tree?¶
If your tree is large and the values of the new branch depend on values in
other branches, it is probably best to use ROOT directly and set up a loop that
fills a new branch entry-by-entry. Otherwise, you can simply use root_numpy’s
array2tree()
function and specify the existing tree you want the branch
added to with the tree
argument. Please see the documentation, examples,
and notes for array2tree()
. Note that even if the new branch will depend
on values in other branches, you can first convert the tree into a numpy array
(see tree2array()
) and define your new structured numpy array based on
columns in this array before adding the new branch(es) with array2tree()
.
How do I remove a branch from a tree?¶
You can use root_numpy to read an array from a tree with tree2array()
and
request only the branches you want kept in the branches
argument. Then
convert the array back into a new tree with array2tree()
. But, note that
this involves reading the tree into memory all at once. For large trees, this
won’t be efficient or might not even be possible if you don’t have enough
memory.
Instead, just use ROOT directly. Deactivate the branches before calling
the tree’s CloneTree()
method. Only the activated branches are copied:
from root_numpy import testdata
import ROOT
rfile = ROOT.TFile.Open(testdata.get_filepath('single1.root'))
tree = rfile.Get('tree')
print([b.GetName() for b in tree.GetListOfBranches()]) # prints ['n_int', 'f_float', 'd_double']
# remove the branch named 'd_double'
tree.SetBranchStatus('d_double', 0)
# copy the tree into a new file
rfile_out = ROOT.TFile.Open('output.root', 'recreate')
newtree = tree.CloneTree()
newtree.Write()
print([b.GetName() for b in newtree.GetListOfBranches()]) # prints ['n_int', 'f_float']