Skip to content
Snippets Groups Projects
addFriend.py 1.51 KiB
Newer Older
#!/usr/bin/env python

import argparse

import ROOT

parser = argparse.ArgumentParser(description='add a friend tree to a tree in another file')
parser.add_argument("infile", help="input file that contains the friend tree")
parser.add_argument("intree", help="name of the friend tree")
parser.add_argument("outfile", help="output file where the friend tree should be added")
parser.add_argument("outtree", help="name of the tree (in output file) to which the friend should be added")

args = parser.parse_args()

outfile = ROOT.TFile.Open(args.outfile, "UPDATE")
infile = ROOT.TFile.Open(args.infile)

for k in outfile.GetListOfKeys():
    if k.GetName() == args.intree:
        raise ValueError("Tree with name {} already exists in outputfile".format(args.intree))

outfile.cd()
outtree = outfile.Get(args.outtree)

if not outtree:
    raise KeyError("Tree {} not found in file {}".format(args.outtree, args.outfile))


if outtree.GetListOfFriends():
    for k in outtree.GetListOfFriends():
        if k.GetName() == args.intree:
            raise ValueError("Tree with name {} is already friend of {}".format(args.intree, args.outtree))

infile.cd()
intree = infile.Get(args.intree)

if not intree:
    raise KeyError("Tree {} not found in file {}".format(args.intree, args.infile))

# Add friend and write friend tree and original tree to outfile
outfile.cd()
outtree.AddFriend(intree)
outtree.Write(outtree.GetName())
outfile.cd()
clonetree = intree.CloneTree(-1, "fast")
clonetree.Write(intree.GetName())
infile.Close()
outfile.Close()