]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/scripts/makeCalibTree
Update master to aliroot
[u/mrichter/AliRoot.git] / TPC / scripts / makeCalibTree
1 #!/bin/bash
2
3
4 function usage {
5 echo "Usage:"
6 echo "makeCalibTree [options]"
7 echo
8 echo "options:"
9 echo " -r, --range       : create tree for the given range of runs"
10 echo "                     e.g. 70000-80000"
11 echo " -a, --auto        : create trees in chunks of \$NFILES for all the files"
12 echo "                     found in the OCDB entries of \$AUTOFILES"
13 echo " -l, --list        : text file with a list of runs to process"
14 echo " -d, --outdir      : output file directory"
15 echo " -f, --outfile     : output file name"
16 echo " -b, --batch       : run as batch job(s)"
17 echo " -o, --overwrite   : overwrite old files"
18 echo " -h, --help        : display this help"
19 echo ""
20 exit 0
21
22 }
23
24 #
25 # create a list of files in $RANGE which are also available in $AUTOFILES
26 #
27 function createRangeList {
28   #get first and last run from range
29   local first=$(echo $RANGE | sed 's|\(.*\)-.*|\1|')
30   local last=$(echo $RANGE | sed 's|.*-\(.*\)|\1|')
31   #create list with all TPC runs
32   local command=ls
33   if [ $WITHALIEN -eq 1 ]; then command=alien_ls; fi
34   local dir=$AUTOFILES
35   RUNS=($($command $dir | sed 's|Run\([0-9]\{1,6\}\)_.*|\1|' | sort -n))
36   #define filename
37   local filename=calibTreeTime_${first}_${last}
38   #remove old files
39   #test -d $TMPLISTDIR  && rm -rf $TMPLISTDIR
40   test -d $TMPLISTDIR
41   mkdir -p $TMPLISTDIR
42   for (( i=0; i<${#RUNS[*]}; i=i+1 )); do
43     if [ ${RUNS[$i]} -lt $first ]||[ ${RUNS[$i]} -gt $last ]; then continue; fi
44     echo ${RUNS[$i]} >> $TMPLISTDIR/$filename
45   done
46 }
47
48 #
49 # automatic list creation for runs in files in OCDB entry pointed to by $AUTOFILES
50 # crete as many lists as needed in chunks of $NFILES files
51 # respect the run range, if given
52 #
53 function createGuiLists {
54   local command=ls
55   if [ $WITHALIEN -eq 1 ]; then command=alien_ls; fi
56   local dir=$AUTOFILES
57   RUNS=($($command $dir | sed 's|Run\([0-9]\{1,6\}\)_.*|\1|' | sort -n))
58   local count=0
59   local iter=0
60   local skip=0
61   local filename=
62   local nfiles=$NFILES
63   #find first and last iterator
64   #get first and last run from range
65   local first=0
66   local last=999999999
67   local ifirst=0
68   local ilast=${#RUNS[*]}
69   if [ "x$RANGE" != "x" ]; then
70     first=$(echo $RANGE | sed 's|\(.*\)-.*|\1|')
71     last=$(echo $RANGE | sed 's|.*-\(.*\)|\1|')
72     echo $first-$last
73     for (( i=0; i<${#RUNS[*]}; i=i+1 )); do
74       if [ ${RUNS[i]} -ge $first ]&&[ $ifirst -eq 0 ]; then ifirst=$i; fi
75       if [ ${RUNS[i]} -gt $last ]&&[ $ilast -eq ${#RUNS[*]} ]; then ilast=$i; fi
76     done
77       echo $ifirst-$ilast
78       echo ${RUNS[$ifirst]}-${RUNS[$ilast-1]}
79   fi
80   #remove old files
81   #test -d $TMPLISTDIR  && rm -rf $TMPLISTDIR
82   test -d $TMPLISTDIR 
83   mkdir -p $TMPLISTDIR
84   for (( i=$ifirst; i<$ilast; i=i+1 )); do
85     if [ $count -eq $nfiles ]; then
86       count=0
87       let iter=$iter+1
88     fi
89     if [ $count -eq 0 ]; then
90        local firstLocal=$(echo "$iter*$nfiles+$ifirst" | bc)
91 #       local lastLocal=$(echo "if ($firstLocal+$nfiles-1>=$ilast-$ifirst) $ilast-1 else $firstLocal+$nfiles-1" | bc)
92        local lastLocal=$(echo "if (($iter+1)*$nfiles>=$ilast-$ifirst) $ilast-1 else $firstLocal+$nfiles-1" | bc)
93       filename=calibTreeTime_${RUNS[$firstLocal]}_${RUNS[$lastLocal]}
94     fi
95     echo ${RUNS[$i]} >> $TMPLISTDIR/$filename
96     let count=$count+1
97   done
98 }
99
100 function runJobs {
101   local count=0;
102   local filename=
103   for file in $TMPLISTDIR/*; do
104     if [ "x$OUTFILE" == "x" ]; then
105       filename=$(basename $file).root
106     else
107       filename=${OUTFILE}_${count}
108     fi
109     if [ $OVERWRITE -eq 0 ];then
110       test -f $OUTDIR/$filename && continue
111     fi
112     if [ $BATCH -eq 0 ]; then
113       $SCRIPTDIR/makeCalibTree -l $file -f $filename -d $OUTDIR
114     else
115       $SCRIPTDIR/makeCalibTree -l $file -f $filename -d $OUTDIR -b
116     fi
117   let count=$count+1
118   done
119 }
120
121 function runJobOnList {
122     if [ $OVERWRITE -eq 0 ];then
123       if [ -f $OUTDIR/$OUTFILE ]; then
124         echo "Not overwriting file '$OUTDIR/$OUTFILE' use -o to enforce it"
125         exit 0;
126       fi
127     fi
128     if [ $BATCH -eq 1 ]; then
129       $BATCHCOMMAND -oo $GUI_OUTDIR/logs/$OUTFILE.out.log  -eo $GUI_OUTDIR/logs/$OUTFILE.err.log /$SCRIPTDIR/makeCalibTreeList $LISTFILE $OUTDIR/$OUTFILE $SCRIPTDIR
130     else
131       $SCRIPTDIR/makeCalibTreeList $LISTFILE $OUTDIR/$OUTFILE $SCRIPTDIR
132     fi
133 }
134
135 if [ "x$SCRIPTDIR" == "x" ]; then
136   echo please run:
137   echo export SCRIPTDIR=whatever_is_you_path
138   echo
139   exit 1
140 fi
141 source $SCRIPTDIR/guiEnv.sh
142         
143       
144 #parse options
145 TEMP=`getopt -o r:l:f:d:aboh --long range:,list:,calibDir:,outfile:,outdir:,auto,batch,overwrite,help \
146 -n 'run' -- "$@"`
147
148 if [ $? != 0 ] ; then usage ; fi
149
150 eval set -- "$TEMP"
151
152 RANGE=
153 OUTFILE=
154 OVERWRITE=0
155 LISTFILE=
156 BATCH=0
157 COMMAND=
158 AUTO=0
159 OUTDIR=$GUI_OUTDIR_TIME
160
161 while true ; do
162   case "$1" in
163   -r|--range)     RANGE=$2;    shift 2;;
164   -l|--list)      LISTFILE=$2; shift 2;;
165   -f|--outfile)   OUTFILE=$2;  shift 2;;
166   -d|--outdir)    OUTDIR=$2;   shift 2;;
167   -a|--auto)      AUTO=1;      shift;;
168   -b|--batch)     BATCH=1;     shift;;
169   -o|--overwrite) OVERWRITE=1; shift;;
170   -h|--help)      usage;;
171   --) shift ; break ;;
172   *) echo "Internal error!" ; exit 1 ;;
173   esac
174 done
175
176
177
178 if [ $AUTO -eq 1 ]; then
179   test -d $OUTDIR || mkdir -p $OUTDIR
180   #remove last file if it does not contain $NFILES files
181   lastfile=$(ls $OUTDIR/* | tail -1)
182   if [ "x$lastfile" != "x" ]; then
183     nfiles=$(wc -l $lastfile | awk '{print $1}')
184     if [ $nfiles -ne $NFILES ]; then
185       rm $lastfile
186     fi
187   fi
188   createGuiLists
189   runJobs
190   echo "files written to '$OUTDIR'"
191   exit 0
192 fi
193
194 if [ "x$RANGE" != "x" ]&&[ "x$LISTFILE" == "x" ]; then
195   test -d $OUTDIR || mkdir -p $OUTDIR
196   createRangeList
197   runJobs
198   exit 0
199 fi
200
201 if [ "x$RANGE" == "x" ]&&[ "x$LISTFILE" != "x" ]; then
202   test -d $OUTDIR || mkdir -p $OUTDIR
203   runJobOnList
204   exit 0
205 fi
206
207 #we should have left already, so show usage
208 usage