11 import os,glob,argparse,ROOT,time
15 parser = argparse.ArgumentParser(description=
'Merge specific folder(s) in root files.')
16 parser.add_argument(
"-i",
"--input", help=
"path to the folder holding the samples (default: ./)", default=os.getcwd())
17 parser.add_argument(
"-o",
"--output", help=
"path for the output (default: ./merge.root", default=os.getcwd()+
"/merge.root")
18 parser.add_argument(
"-d",
"--dir", nargs=
'+', help=
"ROOT directory to be merged, multiple arguments are possible (default: Summary)", default=[
"Summary"])
19 parser.add_argument(
"-p",
"--pattern", help=
'pattern of files to merge (default: "*PHYSVAL*")', default=
"*PHYSVAL*")
20 args = parser.parse_args()
21 folder = os.path.abspath(args.input)
25 pattern = args.pattern
26 output_file = os.path.abspath(args.output)
29 files = glob.glob(folder +
"/" + pattern)
31 f = ROOT.TFile(output_file,
"recreate")
33 f2 = ROOT.TFile(files[1])
35 print(
"Target file: " + output_file)
37 print(
"Found input file: " + infile)
38 if os.path.samefile(output_file, infile):
39 print(
"Please make sure that the output file is not part of the input files! Stopping.")
45 print(
"Merging folder " + path)
48 error =
"ERROR: Cannot find directory " + path +
". Omitting."
52 dirlist = d.GetListOfKeys()
53 for subdir
in dirlist:
54 obj = subdir.ReadObj()
55 if obj.IsA().InheritsFrom(ROOT.TH1.Class()):
56 print(
"Now merging "+obj.GetName())
59 hname = hpath[hpath.find(
":")+2:]+
"/"+obj.GetName()
62 if tup==files[1]:
continue
63 nextfile = ROOT.TFile(tup)
64 h2 = nextfile.Get(hname)
66 error =
"ERROR: Cannot find " + hname +
" in file " + tup +
". Omitting."
71 subfolder = f.Get(hpath[hpath.find(
":")+2:])
74 if obj.IsA().InheritsFrom(ROOT.TDirectory.Class()):
75 print(
"Found subdirectory "+obj.GetName())
77 subfolder = f.mkdir(hpath[hpath.find(
":")+2:],obj.GetTitle())
81 for mergeDir
in mergeDirs:
82 newfolder = f.mkdir(mergeDir,mergeDir)
83 ROOT.TH1.AddDirectory(
False)
88 print(
"Summary of all errors:")
93 print(
"Wall time used: %s sec" % (end - start))