--- /dev/null
+----------
+Quickstart
+-----------
+Without thinking, you can do the follwoing to create a tree with calibration entries.
+The default settings should work, however you might want to change them for 'better' performance.
+
+Do the following:
+1. Setup environment
+ a. gui dependend variables
+
+export SCRIPTDIR=$ALICE_ROOT/TPC/scripts
+export PATH=$SCRIPTDIR:$PATH
+
+ b. Alien
+
+alien-token-init
+source /tmp/gclient_env_${UID}
+or
+$ALICE_ROOT/TPC/CalibMacros/alienSetupGSI.sh (GSI specific)
+
+2. Run tree creation
+ a. Run on a list of run numbers with name 'list.txt', one run number per line
+
+makeCalibTree -l list.txt
+
+ b. Run on a range of run numbers:
+
+makeCalibTree -r 75000-80000
+
+
+myrun=70000
+endrun=90000
+bdir=`pwd`
+while [ $myrun -le ${endrun} ] ; do
+ mydir=$GUI_OUTDIR/tmp/$myrun;
+ mkdirhier $mydir
+ cd $mydir;
+ $BATCHCOMMAND -oo $GUI_OUTDIR/logs/log$myrun.log -eo $GUI_OUTDIR/logs/err$myrun.out makeCalibTree -o -r $myrun-$(($myrun+500));
+ myrun=$(( $myrun +500 )) ;
+ echo $myrun;
+done;
+cd $bdir
+
+ c. Run automatic tree creation for all runs in the
+ data taking period which was set up (see below)
+ !!!WARNING!!! this will take quite some time
+
+makeCalibTree -a
+
+3. Start the GUI browser
+
+guiTime
+
+
+-------------------
+General information
+-------------------
+The macros and shell scripts used are stored in $ALICE_ROOT/TPC/CalibMacros/guiTime
+If you would like to modify some setting (see below), but do not have write access to this
+directory, you can copy the complete directory somewhere else and setup the environment
+variables accordingly:
+
+export SCRIPTDIR=path_to_my_directory
+export PATH=$SCRIPTDIR:$PATH
+
+- setup scripts
+All user relevant setup is done the shell script 'guiEnv' and the root macro 'ConfigOCDB.C'
+All other files don't need to be modified by the user.
+
+- scripts for the tree creation:
+makeCalibTree: Steering script to launch the tree creation
+makeCalibTreeList: script running the actual root process to create the tree
+
+- scripts to start the gui:
+gui 'filename': Start the CalibViewerGUI using the tree in file 'filename'. Invokes the script
+ startGUI.C
+guiTime ['filename']: Start the CalibViewerGUItime. Optionally a filename containing the calibration
+ calibration tree can be specified. Otherwise the trees from the directory setup
+ in guiEnv will be used (see below). Invokes the script startGUItime.C
+
+-oter scripts:
+loadlibsREC.C: Root macro to load only libraries needed to start the gui and tree creation.
+
+
+----------------
+Customised setup
+----------------
+
+- Defining the OCDB directories (ConfigOCDB.C):
+Before starting the tree creation or gui the macro 'ConfigOCDB.C' is exectued. This macro should contain
+all the setup needed to point to the proper OCDB directories. If alien is used, alien needs also to be
+setup in the macro. Open the macro for examples.
+
+- General output information (guiEnv):
+In the 'guiEnv' script environment variables defining default output directories etc. See comments in the
+file for explanations.
+
--- /dev/null
+#!/bin/bash
+
+
+function usage {
+echo "Usage:"
+echo "makeCalibTree [options]"
+echo
+echo "options:"
+echo " -r, --range : create tree for the given range of runs"
+echo " e.g. 70000-80000"
+echo " -a, --auto : create trees in chunks of \$NFILES for all the files"
+echo " found in the OCDB entries of \$AUTOFILES"
+echo " -l, --list : text file with a list of runs to process"
+echo " -d, --outdir : output file directory"
+echo " -f, --outfile : output file name"
+echo " -b, --batch : run as batch job(s)"
+echo " -o, --overwrite : overwrite old files"
+echo " -h, --help : display this help"
+echo ""
+exit 0
+
+}
+
+#
+# create a list of files in $RANGE which are also available in $AUTOFILES
+#
+function createRangeList {
+ #get first and last run from range
+ local first=$(echo $RANGE | sed 's|\(.*\)-.*|\1|')
+ local last=$(echo $RANGE | sed 's|.*-\(.*\)|\1|')
+ #create list with all TPC runs
+ local command=ls
+ if [ $WITHALIEN -eq 1 ]; then command=alien_ls; fi
+ local dir=$AUTOFILES
+ RUNS=($($command $dir | sed 's|Run\([0-9]\{5\}\)_.*|\1|'))
+ #define filename
+ local filename=calibTreeTime_${first}_${last}
+ #remove old files
+ #test -d $TMPLISTDIR && rm -rf $TMPLISTDIR
+ test -d $TMPLISTDIR
+ mkdir -p $TMPLISTDIR
+ for (( i=0; i<${#RUNS[*]}; i=i+1 )); do
+ if [ ${RUNS[$i]} -lt $first ]||[ ${RUNS[$i]} -gt $last ]; then continue; fi
+ echo ${RUNS[$i]} >> $TMPLISTDIR/$filename
+ done
+}
+
+#
+# automatic list creation for runs in files in OCDB entry pointed to by $AUTOFILES
+# crete as many lists as needed in chunks of $NFILES files
+# respect the run range, if given
+#
+function createGuiLists {
+ local command=ls
+ if [ $WITHALIEN -eq 1 ]; then command=alien_ls; fi
+ local dir=$AUTOFILES
+ RUNS=($($command $dir | sed 's|Run\([0-9]\{5\}\)_.*|\1|'))
+ local count=0
+ local iter=0
+ local skip=0
+ local filename=
+ local nfiles=$NFILES
+ #find first and last iterator
+ #get first and last run from range
+ local first=0
+ local last=999999999
+ local ifirst=0
+ local ilast=${#RUNS[*]}
+ if [ "x$RANGE" != "x" ]; then
+ first=$(echo $RANGE | sed 's|\(.*\)-.*|\1|')
+ last=$(echo $RANGE | sed 's|.*-\(.*\)|\1|')
+ for (( i=0; i<${#RUNS[*]}; i=i+1 )); do
+ if [ ${RUNS[i]} -ge $first ]&&[ $ifirst -eq 0 ]; then ifirst=$i; fi
+ if [ ${RUNS[i]} -gt $last ]&&[ $ilast -eq ${#RUNS[*]} ]; then ilast=$i; fi
+ done
+ fi
+ #remove old files
+ #test -d $TMPLISTDIR && rm -rf $TMPLISTDIR
+ test -d $TMPLISTDIR
+ mkdir -p $TMPLISTDIR
+ for (( i=$ifirst; i<$ilast; i=i+1 )); do
+ if [ $count -eq $nfiles ]; then
+ count=0
+ let iter=$iter+1
+ fi
+ if [ $count -eq 0 ]; then
+ local firstLocal=$(echo "$iter*$nfiles+$ifirst" | bc)
+ local lastLocal=$(echo "if ($firstLocal+$nfiles-1>=$ilast-$ifirst) $ilast-1 else $firstLocal+$nfiles-1" | bc)
+ filename=calibTreeTime_${RUNS[$firstLocal]}_${RUNS[$lastLocal]}
+ fi
+ echo ${RUNS[$i]} >> $TMPLISTDIR/$filename
+ let count=$count+1
+ done
+}
+
+function runJobs {
+ local count=0;
+ local filename=
+ for file in $TMPLISTDIR/*; do
+ if [ "x$OUTFILE" == "x" ]; then
+ filename=$(basename $file).root
+ else
+ filename=${OUTFILE}_${count}
+ fi
+ if [ $OVERWRITE -eq 0 ];then
+ test -f $OUTDIR/$filename && continue
+ fi
+ if [ $BATCH -eq 0 ]; then
+ $SCRIPTDIR/makeCalibTree -l $file -f $filename -d $OUTDIR
+ else
+ $SCRIPTDIR/makeCalibTree -l $file -f $filename -d $OUTDIR -b
+ fi
+ let count=$count+1
+ done
+}
+
+function runJobOnList {
+ if [ $OVERWRITE -eq 0 ];then
+ if [ -f $OUTDIR/$OUTFILE ]; then
+ echo "Not overwriting file '$OUTDIR/$OUTFILE' use -o to enforce it"
+ exit 0;
+ fi
+ fi
+ if [ $BATCH -eq 1 ]; then
+ $BATCHCOMMAND -oo $GUI_OUTDIR/logs/$OUTFILE.out.log -eo $GUI_OUTDIR/logs/$OUTFILE.err.log /$SCRIPTDIR/makeCalibTreeList $LISTFILE $OUTDIR/$OUTFILE $SCRIPTDIR
+ else
+ $SCRIPTDIR/makeCalibTreeList $LISTFILE $OUTDIR/$OUTFILE $SCRIPTDIR
+ fi
+}
+
+if [ "x$SCRIPTDIR" == "x" ]; then
+ echo please run:
+ echo export SCRIPTDIR=whatever_is_you_path
+ echo
+ exit 1
+fi
+source $SCRIPTDIR/guiEnv.sh
+
+
+#parse options
+TEMP=`getopt -o r:l:f:d:aboh --long range:,list:,calibDir:,outfile:,outdir:,auto,batch,overwrite,help \
+-n 'run' -- "$@"`
+
+if [ $? != 0 ] ; then usage ; fi
+
+eval set -- "$TEMP"
+
+RANGE=
+OUTFILE=
+OVERWRITE=0
+LISTFILE=
+BATCH=0
+COMMAND=
+AUTO=0
+OUTDIR=$GUI_OUTDIR_TIME
+
+while true ; do
+ case "$1" in
+ -r|--range) RANGE=$2; shift 2;;
+ -l|--list) LISTFILE=$2; shift 2;;
+ -f|--outfile) OUTFILE=$2; shift 2;;
+ -d|--outdir) OUTDIR=$2; shift 2;;
+ -a|--auto) AUTO=1; shift;;
+ -b|--batch) BATCH=1; shift;;
+ -o|--overwrite) OVERWRITE=1; shift;;
+ -h|--help) usage;;
+ --) shift ; break ;;
+ *) echo "Internal error!" ; exit 1 ;;
+ esac
+done
+
+
+
+if [ $AUTO -eq 1 ]; then
+ test -d $OUTDIR || mkdir -p $OUTDIR
+ #remove last file if it does not contain $NFILES files
+ lastfile=$(ls $OUTDIR/* | tail -1)
+ if [ "x$lastfile" != "x" ]; then
+ nfiles=$(wc -l $lastfile | awk '{print $1}')
+ if [ $nfiles -ne $NFILES ]; then
+ rm $lastfile
+ fi
+ fi
+ createGuiLists
+ runJobs
+ echo "files written to '$OUTDIR'"
+ exit 0
+fi
+
+if [ "x$RANGE" != "x" ]&&[ "x$LISTFILE" == "x" ]; then
+ test -d $OUTDIR || mkdir -p $OUTDIR
+ createRangeList
+ runJobs
+ exit 0
+fi
+
+if [ "x$RANGE" == "x" ]&&[ "x$LISTFILE" != "x" ]; then
+ test -d $OUTDIR || mkdir -p $OUTDIR
+ runJobOnList
+ exit 0
+fi
+
+#we should have left already, so show usage
+usage
\ No newline at end of file