Script shell to merge from the command line (like with hadd) the root files requiring...
[u/mrichter/AliRoot.git] / ANALYSIS / macros / mrgfl.sh
1 #!/bin/bash
2
3 Usage() {
4     echo Usage: mrgfl.sh [-f] outFile inpFile1 inpFile2 ....
5     echo Option -f will force overwriting existing output file
6     exit 1
7 }
8 #
9 if [ $# -lt 2 ] ; then Usage ;fi
10 #
11 force=0
12 if [ "$1" == "-f" ] ; then
13     force=1
14     shift 1 ;
15     if [ $# -lt 2 ] ; then Usage ;fi
16 fi
17 #
18 mrglst="_mrglst.txt"
19 if [ -e $mrglst ] ; then rm $mrglst ;fi
20 #
21 outf=$1
22 shift 1 ;
23
24 while [ $# -gt 0 ] ; do
25     echo $1
26     shift 1 ;
27 done > $mrglst
28
29 macroName="TmpMergeMacro"
30 if [ -e ${macroName}.C ] ; then rm ${macroName}.C ;fi
31 #
32 #cat > ${macroName}.C << "EOF"
33 echo \
34 void ${macroName}'(const char* outFile,const char* mrgLst,Bool_t force) {
35   gSystem->Load("libANALYSIS");
36   gSystem->Load("libANALYSISalice");
37   ifstream in;
38   in.open(mrgLst);
39   TFileMerger m(1);
40   TString line; 
41   while (in.good()) {
42     in >> line;
43     if (line.Length() == 0) continue;
44     TString fileName;
45     fileName.Form("%s", line.Data());
46     Printf("%s", fileName.Data());
47     m.AddFile(fileName);
48   }
49   m.SetFastMethod();
50   m.OutputFile(outFile,force);
51   m.Merge();
52 }' > ${macroName}.C
53
54 aliroot -b -q ${macroName}.C\(\"${outf}\",\"${mrglst}\",${force}\)
55
56 rm ${mrglst}
57 rm ${macroName}.C