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))