Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Root histograms in multi-files

  1. Oct 16, 2015 #1


    User Avatar
    Gold Member

    Suppose I have a collection of 40 directories, each containing 1, 2 ,3 ,4 or 5 .root files with histograms and trees.
    What is an optimal way to merge those .root files so I would end up with 40 directories and 40 root files with the histos added together?
    One way I thought of was to start typing for the 40 different directories an "hadd" command in the terminal.

    "hadd sum1.root dir1/*.root"
    "hadd sum2.root dir2/*.root"
    "hadd sum40.root dir40/*.root"

    However I find this kind of tiring and stupid. Do you have any better solution?
    My problem with a macro is that I am not sure if it understands the *.root notation (so I cannot think of iterating).
    Finally I am not sure if a TChain can, apart from Trees in different root files, merge TH1s (histograms) too.

    THanks :)
  2. jcsd
  3. Oct 16, 2015 #2


    User Avatar
    Science Advisor
    Homework Helper
    Gold Member

    You could write a shell script that uses iteration to generate a text file containing a single line of the form:

    hadd sum1.root dir1/*.root & ; hadd sum1.root dir2/*.root & ; hadd sum3.root dir1/*.root & ; ..... ; hadd sum1.root dir40/*.root​

    then just copy the line to the command prompt and execute it
  4. Oct 17, 2015 #3


    User Avatar
    Gold Member

    Thanks for the reply...
    It helped me to try to do it manually... after the 3rd try, I figured out what "for loop" I had to use in the shell script...That's what I had to do:
    Code (Bash):

    for folder in directory_path_of_folders/*; do
        hadd -f target_directory/sumfile$((i++)).root $folder/*.root
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook