]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/FORWARD/analysis2/gridAnalysis.sh
Merge branch 'workdir'
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis2 / gridAnalysis.sh
index 37be56a9a550d941e97550cb56f8cb7c8e091cdd..d276e8c2a670a468f9b3330fd808309b1a9871be 100755 (executable)
@@ -42,6 +42,7 @@
 # extract and upload the corrections to our local corrections folder
 # 
 #   $0 --what=corrs --step=upload 
+#   $0 --what=corrs --step=draw
 # 
 # Now we can submit our AOD generation jobs.  Do 
 # 
 # 
 #   $0 --what=dndeta --step=terminate 
 # 
-# enough times to get the final merged result.  Next, we need to download 
-# the results and we can draw the summary and final plot
+# enough times to get the final merged result.  If you passed the
+# option --sys=1 in the setup phase, then this will run 3 jobs for
+# real and MC each - one for INEL, INEL>0, and NSD (V0-AND). Next, we
+# need to download the results and we can draw the summary and final
+# plot
 # 
 #   $0 --what=dndeta --step=draw 
 # 
 # to Christian Holm Christensen <cholm@nbi.dk>
 # 
 # END_MANUAL
+if test ! -f $ALICE_ROOT/PWGLF/FORWARD/analysis2/baseAnalysis.sh  ; then 
+    echo "baseAnalysis not found!" > /dev/stderr 
+    exit 1
+fi
+. $ALICE_ROOT/PWGLF/FORWARD/analysis2/baseAnalysis.sh 
 
 runs=
 mcruns=
-name=
-sys=0
-snn=0
-field=0
-corrs=
-dotconf=.config
-here=${PWD}
 par=0
-noact=0
-# aliroot="&aliroot=v5-03-75pATF-AN"
-# root="root=v5-34-02-1"
-fwd_dir=$ALICE_ROOT/PWGLF/FORWARD/analysis2
-
 real_dir=
 real_pat=
 mc_dir=
 mc_pat=
 my_real_dir=
 my_mc_dir=
-uuopts=
 watch=0
 
 # === Various functions ==============================================
+
+
+# === Implement base functions =======================================
 # --- Usage ----------------------------------------------------------
-usage()
+setup_usage()
 {
     cat <<EOF
-Usage: $0 --what OPERATION [OPTIONS]
-
-Options:
   -r,--runs=FILENAME        Specify list of runs file ($runs)
   -R,--mc-runs=FILENAME     Specify list of MC runs file ($mcruns)
-  -n,--name=STRING          Base name of jobs ($name)
-  -S,--sys=SYSTEM           Collision system ($sys)
-  -E,--snn=ENERGY           Center of mass energy per nuclean pair ($snn)
-  -F,--field=FIELD          L3 magnetic field ($field)
   -d,--real-dir=ALIEN_DIR   Directory holding real data ($real_dir)
   -p,--real-pattern=PATTERN Glob pattern to match when searching ($real_pat)
   -D,--mc-dir=ALIEN_DIR     Directory holding MC data ($mc_dir)
   -P,--mc-pattern=PATTERN   Glob pattern to match when searching ($mc_pat)
-  -s,--step=STEP            Run stage ($step)
-  -w,--what=TRAINS          What to do 
-  -c,--corrections=DIR      Directory where corrections are stored ($corrs)
   -W,--watch                Watch for job status and terminate automatically
   -a,--par                  Use par files ($par)
-  -u,--url-opts=OPTIONS            Additional user options ($uuopts)
-  -M,--man                  Show the manual  
-  -N,--noact                Show what will be done 
-
-TRAINS is one of
-
-  clean       Clean directory
-  setup       Do intial setup 
-  corrs       Generate corrections 
-  aods        Generate AODs 
-  dndeta      Generate dNdeta 
-
-and must be executed in that order.  STEP is one of 
-
-  full        Run the analysis 
-  terminate   Terminate the job (may need iterations)
-  upload      Upload corrections (only for TRAINS=corrs)
-  draw        Draw (partial) results (not for TRAINS=corrs)
-EOF
-}
-
-# --- Manual ---------------------------------------------------------
-manual()
-{
-    prog=`basename $0`
-    grep ^# $0 | \
-       sed -n -e '/BEGIN_MANUAL/,/END_MANUAL/ p' | \
-       sed -e '/\(BEGIN\|END\)_MANUAL/ d' -e 's/^# //' \
-           -e "s,\$0,$prog,"
-}
-
-# === Utilities to execute scripts ===================================
-# --- Run script -----------------------------------------------------
-script()
-{
-    local scr=$1 ; shift 
-    local args=$1 ; shift
-    echo "Will run aliroot -l -b -q $scr($args)"
-    if test $noact -gt 0 ; then return ; fi
-    aliroot -l -b <<EOF
-.x $scr($args)
-.q
 EOF
 }
-# --- Run acceptance generation --------------------------------------
-accGen()
+handle_setup_option()
 {
-    local run=$1 
-    script ${fwd_dir}/corrs/ExtractAcceptance.C "${run}"
-}
-
+    local arg="$1"
+    local opt="$2"
+    # echo "Grid: Processing '$arg' ('$opt')"
+    case $arg in 
+       -r|--runs)         runs=$opt     ;; 
+       -R|--mc-runs)      mcruns=$opt   ;;
+       -d|--real-dir)     real_dir=$opt ;;
+       -p|--real-pattern) real_pat=$opt ;; 
+       -D|--mc-dir)       mc_dir=$opt   ;; 
+       -P|--mc-pattern)   mc_pat=$opt   ;; 
+       -W|--watch)        let watch=\!$watch ;;
+       -a|--par)          par=1         ;;
+       *) echo "$0: [SETUP] Unknown option $arg"  ; exit 1 ;; 
+    esac
+}    
 # --- Extract corrections --------------------------------------------
 terminate()
 {
     script Terminate.C 
 }
-# --- Extract corrections --------------------------------------------
-download()
-{
-    if test -f .download ; then 
-       echo "Already downloaded in `basename $PWD`"
-       return 0 
-    fi
-    script Download.C 
-    touch .download
-}
-# --- Extract corrections --------------------------------------------
-extract()
-{
-    test -f .extract && return 0 
-    script Extract.C 
-    touch .extract
-}
-# --- Extract corrections --------------------------------------------
-extract_up()
-{
-    if test -f .extract ; then 
-       echo "Aldready extracted in `basename $PWD`" 
-       return 0;
-    fi 
-    echo "= Extracting"
-    script ../Extract.C > /dev/null 2>&1
-    touch .extract
-}
-# --- Upload a file --------------------------------------------------
-upload()
-{
-    if test -f .upload ; then 
-       echo "Already uploaded in `basename $PWD`"
-       return 0 
-    fi
-    echo "= Uploading"
-    script Upload.C \"file://${here}/${name}_corrs_${now}/\" >/dev/null 2>&1
-    touch .upload 
-}
+
 # --- Extract and upload ---------------------------------------------
 extract_upload()
 {
@@ -245,7 +164,7 @@ extract_upload()
            unzip ../$i > /dev/null 2>&1
            touch .zip 
        fi
-       extract_up 
+       _extract ../Extract.C 
        upload
        cd ..
     done
@@ -254,27 +173,61 @@ extract_upload()
 # --- Draw -----------------------------------------------------------
 draw()
 {
-    local scr=$1 
+    local dd=`pwd` 
+    dd=`basename $dd` 
+    echo "=== Drawing in $dd using $1"
+    local scr=$1  ; shift    
+    case x$scr in 
+       x/*) ;; 
+       x*)  scr=../$scr ;; 
+    esac
+    # local args=$1 ; shift
     download 
     for i in *.zip ; do 
        if test "X$i" = "X*.zip" ; then continue ; fi
-       echo "Will extract $i"
+       echo "--- Will extract $i in $dd"
        d=`basename $i .zip` 
        if test ! -d $d ; then 
            mkdir -p $d 
            unzip $i -d $d
        fi
-       (cd $d && script $scr)
+       (cd $d && _draw $scr $@)
     done
 }
 dndeta_draw()
 {
-    local d=$1 
-    (cd $d && \
-       draw ${fwd_dir}/DrawdNdetaSummary.C && \
-       draw ../Draw.C)
+    echo "=== Drawing dN/deta in $1"
+    local top=$1 ; shift 
+    cd $top
+    download 
+    for i in *.zip ; do 
+       if test "X$i" = "X*.zip" ; then continue ; fi
+       echo "--- Will extract $i"
+       d=`basename $i .zip` 
+       if test ! -d $d ; then 
+           mkdir -p $d 
+           unzip $i -d $d
+       fi
+       (cd $d && \
+           script ${fwd_dir}/DrawdNdetaSummary.C && \
+           script ../Draw.C)
+    done
+    cd ..
 }
 
+# === Script specific functions ======================================
+# --- Extract corrections --------------------------------------------
+download()
+{
+    echo "=== Executing download in `pwd`"
+    if test -f .download ; then 
+       echo "--- Already downloaded in `basename $PWD`"
+       return 0 
+    fi
+    script Download.C 
+    touch .download
+}
+    
 # --- Get the grid home dir ------------------------------------------
 outputs()
 {
@@ -288,143 +241,51 @@ EOF`
     my_mc_dir="$l/${name}_mcaod_${now}/output"
 }
 
-# === Trains =========================================================
-# --- Run set-ups ----------------------------------------------------
-setup()
+
+run_for_acc()
 {
-    run_for_acc=`grep -v ^# $runs | awk '{FS=" \n\t"}{printf "%d\n", $1}' | head -n 1` 
-    if test x$run_for_acc = "x" || test $run_for_acc -lt 1; then 
+    local r=`grep -v ^# ../$runs | awk '{FS=" \n\t"}{printf "%d\n", $1}' | head -n 1` 
+    if test x$r = "x" || test $r -lt 1; then 
        echo "No run for acceptance correction specified" > /dev/stderr 
        exit 1
     fi
+    echo $r 
+}
 
-   now=`date '+%Y%m%d_%H%M'` 
-   outputs
-
-   # Write settings to a file, which we later can source 
-   dumpvar=
-   if test $par -gt 0 ; then dumpvar="--par " ; fi 
-   if test $watch -gt 0 ; then dumpvar="${dumpvar} --watch " ; fi 
-   cat > ${dotconf} <<EOF
-# Settings:
-name="$name"
-runs=${runs}
-mcruns=${mcruns}
-sys=$sys
-snn=$snn
-field=$field
-real_dir=${real_dir}
-real_pat=${real_pat}
-mc_dir=${mc_dir}
-mc_pat=${mc_pat}
-my_real_dir=${my_real_dir}
-my_mc_dir=${my_mc_dir}
-par=${par}
-now=${now}
-watch=${watch}
-uuopts="${uuopts}"
-# Options
-if false ; then 
-  $0 --what=setup --name="$name" --runs="$runs" --mcruns="$mcruns" \
-  --sys="$sys" --snn="$snn" --field="$field" \
-  --real-dir="${real_dir}" --real-pattern="${real_pat}" \
-  --mc-dir="${mc_dir}" --mc-pattern="${mc_pat}" \
-  --now=${now} --url-opts="${uuopts}" ${dumpvar}
-fi
-EOF
-   corrdir=${name}_corrs_${now}
-   if test "x$corrs" != "x" && test -d ${corrs} ; then 
-       echo "Linking ${corrs} to ${corrdir}"
-       ln -sf $corrs ${corrdir}
-       ln -sf $corrs last_${name}_corrs               
-       corrdir=$corrs
-   elif test $noact -lt 1 ; then 
-       mkdir -p ${name}_acc_${now}
-       mkdir -p ${corrdir}
-       rm -f last_${name}_acc last_${name}_corrs
-       ln -sf ${name}_acc_${now} last_${name}_acc
-       ln -sf ${name}_corrs_${now} last_${name}_corrs
-       cat <<-EOF > ${corrdir}/Browse.C
-       TObject* Browse()
-       {
-         const char* fwd = "$ALICE_ROOT/PWGLF/FORWARD/analysis2";
-         if (!gROOT->GetClass("AliOADBForward"))
-           gROOT->Macro(Form("%s/scripts/LoadLibs.C", fwd));
-         gROOT->LoadMacro(Form("%s/corrs/ForwardOADBGui.C++g", fwd));
-         
-         AliOADBForward* db = new AliOADBForward;
-         db->Open("fmd_corrections.root", "*");
-         
-         ForwardOADBGui(db);
-
-         return db;
-       }
+# --- Dump the setup -------------------------------------------------
+dump_setup()
+{
+    local out=$1 
+    cat >> ${out} <<-EOF 
+       # Real data 
+       runs=${runs}
+       real_dir=${real_dir}
+       real_pat=${real_pat}
+       # Simulated data
+       mcruns=${mcruns}
+       mc_dir=${mc_dir}
+       mc_pat=${mc_pat}
+       # Output directories 
+       my_real_dir=${my_real_dir}
+       my_mc_dir=${my_mc_dir}
+       # Other options 
+       par=${par}
+       watch=${watch}
        EOF
-       echo "Make acceptance corrections" 
-       (cd ${name}_acc_${now} && \
-           accGen $run_for_acc && \
-           upload )
-   fi
-   for i in fmd_corrections.root spd_corrections.root deadstrips.C ; do 
-       if test ! -f ${corrdir}/$i ; then continue ; fi 
-       echo "Linking ${corrdir}/$i here"
-       ln -fs ${corrdir}/$i . 
-   done
-}    
+}
 
 # --- Run set-ups ----------------------------------------------------
-cleanup()
+setup()
 {
-    rm -rf \
-       ${name}_acc_${now} \
-       ${name}_mccorr_${now} \
-       ${name}_mceloss_${now} \
-       ${name}_eloss_${now} \
-       ${name}_mcaod_${now} \
-       ${name}_aod_${now} \
-       ${name}_mcdndeta_*${now} \
-       ${name}_dndeta_*${now} \
-       ${name}_corrs_${now} \
-       last_${name}_acc \
-       last_${name}_corrs \
-       last_${name}_mceloss \
-       last_${name}_eloss \
-       last_${name}_mcaod \
-       last_${name}_aod \
-       last_${name}_mcdndeta* \
-       last_${name}_dndeta* \
-       build.log 
-    if test -L fmd_corrections.root ; then 
-       rm fmd_corrections.root
-    fi
-    if test -L spd_corrections.root ; then 
-       rm spd_corrections.root
-    fi
-}
+    _setup $@
+}    
 
-# --- Check AliEn token ----------------------------------------------
-check_token()
-{
-    uid=`id -u`
-    genv_file=/tmp/gclient_env_${uid}
-    
-    if test ! -f ${genv_file} ; then 
-       echo "No such file: ${genv_file}, please do alien-token-init" \
-           >/dev/stderr
-       exit 1
-    fi
-    . ${genv_file}
-    alien-token-info | grep -q "Token is still valid"
-    if test $? -ne 0 ; then 
-       echo "Token not valid, please re-new" > /dev/stderr 
-       exit 1
-    fi
-}
 
 # --- Check settings -------------------------------------------------
-check()
+check_setup()
 {
-    local w=$1
+    check_token
+
     if test "x$runs" = "x" || test ! -f $runs ; then 
        echo "List of run file $runs not found" > /dev/stderr 
        exit 1
@@ -434,22 +295,6 @@ check()
        echo "List of MC runs file $mcruns not found" > /dev/stderr 
        exit 1
     fi
-    if test "X$name" = X ; then 
-       echo "No name specified" > /dev/stderr 
-       exit 1
-    fi
-    # if test "x$sys" = "x" ; then 
-    #     echo "No collision system specified" > /dev/stderr 
-    #     exit 1
-    # fi
-    # if test "x$snn" = "x" ; then 
-    #     echo "No center of mass energy specified" > /dev/stderr 
-    #     exit 1
-    # fi
-    # if test "x$field" = "x" ; then 
-    #     echo "No L3 field setting specified" > /dev/stderr 
-    #     exit 1
-    # fi
     if test "x$real_dir" = "x" ; then 
        echo "No real data directory specified" > /dev/stderr 
        exit 1
@@ -466,119 +311,60 @@ check()
        echo "No MC data pattern specified" > /dev/stderr 
        exit 1
     fi
-    if test "X$w" != "Xsetup" && test "x$now" = "x" ; then 
-       echo "No date/time specified" > /dev/stderr 
-       exit 1
-    fi
-    # sys==0 is OK - autoselect
-    case x$sys in 
-        xpp|xp-p)              sys=1 ;; 
-       xpbpb|xpb-pb|xaa|xa-a) sys=2 ;; 
-       xppb|xp-pb|xpa|xp-a)   sys=3 ;;
-       x0|x1|x2|x3)                 ;; 
-       x)                     sys=0 ;;
-       *) echo "$0: Unknown system: $sys" ; exit 1 ;;
-    esac
 
-    check_token
 }
 
 # --- Show the setup -------------------------------------------------
 print_setup()
 {
-    cat <<EOF
-Name:                  $name
-Run file:              ${runs}
-MC Run file:            ${mcruns}
-Collision system:      $sys
-sqrt(s_NN):            ${snn}GeV
-L3 Field:              ${field}kG
-Real input directory:  ${real_dir}
-Real file pattern:     ${real_pat}
-MC input directory:    ${mc_dir}
-MC file pattern:       ${mc_pat}
-Real output:           ${my_real_dir}
-MC output directory:   ${my_mc_dir}
-Use PAR files:         ${par}
-Date & time:            ${now}
-Additional URL options: ${uuopts}
-EOF
+    cat <<-EOF
+       Real data:
+         Run file:             ${runs}
+         Directory:            ${real_dir}
+         Pattern:              ${real_pat}
+         Output:               ${my_real_dir}
+       MC data:
+         Run file:             ${mcruns}
+         Directory:            ${mc_dir}
+         Pattern:              ${mc_pat}
+         Output:               ${my_mc_dir}
+       Use PAR files:          ${par}
+       EOF
 }
 
-# --- Run the train --------------------------------------------------
-# Usage:
-# 
-allAboard()
+
+
+# --- Make URI -------------------------------------------------------
+# Must modify URL 
+url_opts()
 {
-    type=$1 ; shift 
-    trig=$1 ; shift
-    cl=
-    nme=${name}_${type}
-    tree=esdTree
-    opts="--batch"
-    uopt="&merge=50&split=50&aliroot=last,regular"
-    mc=0
-    dir=$real_dir
-    pat=$real_pat
-    rl=$runs
+    local mc=$1        ; shift
+    local type=$1      ; shift 
+    local trig=$1      ; shift
 
+    local uopt="&merge=50&split=50&aliroot=last,regular"
+
+    local dir=$real_dir
+    local pat=$real_pat
+    local rl=$runs
+    local tree=esdTree
+
+    if test $mc -gt 0 ; then 
+       dir=$mc_dir
+       pat=$mc_pat
+       rl=$mcruns
+    fi
     case $type in 
-       mc*) 
-           mc=1  
-           # Default dirs are production dirs 
-           dir=$mc_dir
-           pat=$mc_pat
-           rl=$mcruns
-           ;;
-       *) ;;
-    esac
-    case $type in 
-       *corr)  cl=MakeMCCorrTrain ; mc=1 ;;
-       *eloss) cl=MakeFMDELossTrain ;;  
-       *aod)   cl=MakeAODTrain 
-           opts="${opts} --corr=."
-           # opts="--corr=${name}_corrs_${now} --cent"
-           # if test $sys -gt 0 && test $snn -gt 0 ; then 
-           #   opts="$opts --sys=${sys} --snn=${snn} --field=${field}"
-           # fi
-           ;;
-       *dndeta) cl=MakedNdetaTrain 
-           tree=aodTree 
+       *dndeta|*multdists) 
            uopt="${uopt}&concat"
-           opts="${opts} --cut-edges"
-           case x$trig in 
-               xinel)    
-                   opts="$opts --scheme=trigger,event,background}" 
-                   opts="$opts --trig=INEL" 
-                   ;;
-               xnsd)     
-                   opts="$opts --scheme=trigger,event"
-                   opts="$opts --trig=V0AND"
-                   ;;
-               xinelgt0) 
-                   opts="$opts --scheme=trigger,event"
-                   opts="$opts --trig=INELGT0"
-                   ;;
-               x*) trig= ;;
-           esac
-           if test "x$trig" != "x" ; then 
-               nme="${nme}_${trig}"
-           fi
+           tree=aodTree 
            # Modify for input dir for our files
            dir=$my_real_dir
            pat="*/AliAOD.root"
            if test $mc -gt 0 ; then 
                dir=$my_mc_dir
-               opts="$opts --mc"
            fi
            ;;
-       *) echo "$0: Unknown type of train: $type" > /dev/stderr ; exit 1 ;;
-    esac
-    # add centrality flag if we do not know what collision system we're 
-    # looking at, or it's PbPb or pPb. 
-    case $sys in 
-       0|2|3) opts="$opts --cent" ;; 
-       1)                         ;;
     esac
     if test $mc -gt 0; then 
        uopt="${uopt}&mc"
@@ -589,14 +375,18 @@ allAboard()
     if test x$uuopts != x ; then 
        uopt="${uopt}&${uuopts}"
     fi
-    url="alien://${dir}?run=${rl}&pattern=${pat}${uopt}${aliroot}${root}#${tree}"
-    opts="${opts} --include=$ALICE_ROOT/PWGLF/FORWARD/analysis2/trains"
-    opts="${opts} --date=${now} --class=$cl --name=$nme --verbose=0"
-    
-    echo "Running train: runTrain2 ${opts} --url=${url} $@" 
-    if test $noact -gt 0 ; then return ; fi
+    url="alien://${dir}?run=${rl}&pattern=${pat}${uopt}#${tree}"    
+}
 
-    runTrain ${opts} --overwrite --url=${url} $@ 
+    
+# --- Run the train --------------------------------------------------
+# Usage:
+# 
+allAboard()
+{
+    local type=$1 ; shift
+    local trig=$1 ; shift
+    _allAboard "$type" "$trig" --batch $@ 
 
     if test $watch -lt 1 ; then 
        cat <<-EOF
@@ -604,13 +394,9 @@ allAboard()
        
        Remember to do 
        
-         (cd ${nme}_${now} && aliroot -l -b -q Terminate.C)
-       
-       until the final merge stage, and then do 
-               
-         (cd ${nme}_${now} && aliroot -l -b -q Download.C) 
+         $0 --what=... --step=terminate
        
-       to get the results. 
+       until the final merge stage to get the results. 
        EOF
        
        case $type in 
@@ -618,32 +404,18 @@ allAboard()
                cat <<-EOF
        Then, do 
        
-         (cd ${nme}_${now} && aliroot -l -b -q Extract.C)
-         (cd ${nme}_${now} && aliroot -l -b -q 'Upload.C("local://${here}/${nam        e}_corrs_${now}")')
+         $0 --what=... --step=upload 
        
        to upload the results to our local corrections store. 
        EOF
                ;; 
-           *aod)
+           *aod|*dndeta)
                cat <<-EOF
        Then, do 
         
-         (cd ${nme}_${now} && aliroot -l ${fwd_dir}/DrawAODSummary.C)
+         $0 --what=... --step=draw
        
-       to get a PDF of the diagnostics histograms
-       EOF
-               ;;
-           *dndeta)
-               cat <<-EOF
-       Then, do 
-        
-         (cd ${nme}_${now} && aliroot -l ${fwd_dir}/DrawdNdetaSummary.C)
-       
-       to get a PDF of the diagnostics histograms, and 
-       
-         (cd ${nme}_${now} && aliroot -l Draw.C)
-       
-       to get the final plot. 
+       to get a PDF of the diagnostics histograms and the final plots. 
        EOF
                ;;
        esac
@@ -655,169 +427,26 @@ allAboard()
     fi
 }
 
-
-# === Wrappers =======================================================
-# --- Run all correction jobs ----------------------------------------
-corrs()
+# --- Collect a directory --------------------------------------------
+collect_files()
 {
-    allAboard mccorr "" $@
-    allAboard mceloss "" $@
-    allAboard eloss "" $@
-}
-corrs_terminate() 
-{
-    (cd ${name}_mccorr_${now}  && terminate)
-    (cd ${name}_mceloss_${now} && terminate)
-    (cd ${name}_eloss_${now}   && terminate)
-}
-corrs_upload() 
-{
-    (cd ${name}_mccorr_${now}  && extract_upload)
-    (cd ${name}_mceloss_${now} && extract_upload)
-    (cd ${name}_eloss_${now}   && extract_upload)
-    rm -f fmd_corrections.root spd_corrections.root 
-    ln -s ${name}_corrs_${now}/fmd_corrections.root .
-    ln -s ${name}_corrs_${now}/spd_corrections.root .
-}
-corrs_draw()
-{
-    echo "Draw does not make sense for Correction jobs"
-}
-# --- Run all AOD jobs -----------------------------------------------
-aods()
-{
-    allAboard mcaod "" $@
-    allAboard aod "" $@
-}
-aods_terminate() 
-{
-    (cd ${name}_mcaod_${now} && terminate)
-    (cd ${name}_aod_${now}   && terminate)
-}
-aods_upload()
-{
-    echo "Upload does not make sense for AOD jobs"
-}
-aods_draw() 
-{
-    (cd ${name}_mcaod_${now} && draw ${fwd_dir}/DrawAODSummary.C)
-    (cd ${name}_aod_${now}   && draw ${fwd_dir}/DrawAODSummary.C)
-}
-
-# --- Run all dN/deta jobs -------------------------------------------
-dndetas()
-{
-    allAboard mcdndeta $@
-    if test $sys -eq 1 ; then 
-       allAboard dndeta inel $@
-       allAboard dndeta nsd $@
-       allAboard dndeta inelgt0 $@
-    else
-       allAboard dndeta "" $@
-    fi
-}
-dndetas_terminate() 
-{
-    (cd ${name}_mcdndeta_${now} && terminate)
-    if test $sys -eq 1 ; then 
-       (cd ${name}_dndeta_inel_${now}      && terminate)
-       (cd ${name}_dndeta_nsd_${now}       && terminate)
-       (cd ${name}_dndeta_inelgt0_${now}   && terminate)
-    else
-       (cd ${name}_dndeta_${now}   && terminate)
-    fi
-}
-dndetas_upload()
-{
-    echo "Upload does not make sense for dN/deta jobs"
-}
-dndetas_draw() 
-{
-    dndeta_draw ${name}_mcdndeta_${now}
-    if test $sys -eq 1 ; then 
-       dndeta_draw ${name}_dndeta_inel_${now} 
-       dndeta_draw ${name}_dndeta_nsd_${now} 
-       dndeta_draw ${name}_dndeta_inelgt0_${now} 
-    else
-       dndeta_draw ${name}_dndeta_${now} 
-    fi
+    local dir=$1 ; shift
+    local d=$1 ; shift 
+    local M=$1 ; shift 
+    local out=$1 ; shift
+    local r=$1 ; shift
+    local files="$1"
+
+    for ad in $dir/root_archive_* ; do 
+       if test ! -d $ad ; then continue ; fi 
+       local r=`basename $ad | sed 's/root_archive_0*//'` 
+       _collect_files "$ad" "$d" "$M" "$out" "$r" "$files"
+    done # for ad in ...
 }
 
+    
 # === Procedual code =================================================
-# --- Source settings if found ---------------------------------------
-if test -f $dotconf ; then 
-    source $dotconf 
-fi
-
-
-# --- Process command line -------------------------------------------
-what=
-step=
-while test $# -gt 0 ; do
-    arg=$1 
-    opt=
-    case $1 in 
-       --) shift ; break ;;
-       --*=*) 
-           arg=`echo $1 | sed 's/=.*//'` ;
-           opt=`echo $1 | sed 's/--[^=][^=]*=//'` 
-           ;;
-       --*)
-           ;;
-       -h|-N|-H|-a) ;;
-       -*) opt=$2 ; shift ;; 
-    esac
-    shift 
-
-    case $arg in 
-       -r|--runs)         runs=$opt     ;; 
-       -R|--mc-runs)      mcruns=$opt   ;;
-       -n|--name)         name=$opt     ;; 
-       -S|--sys)          sys=`echo $opt | tr '[A-Z]' '[a-z]'` ;;
-       -E|--snn)          snn=$opt      ;; 
-       -F|--field)        field=$opt    ;;
-       -d|--real-dir)     real_dir=$opt ;;
-       -p|--real-pattern) real_pat=$opt ;; 
-       -D|--mc-dir)       mc_dir=$opt   ;; 
-       -P|--mc-pattern)   mc_pat=$opt   ;; 
-       -w|--what)         what=`echo $opt | tr '[A-Z]' '[a-z]'`  ;; 
-       -s|--step)         step=`echo $opt | tr '[A-Z]' '[a-z]'`  ;; 
-       -W|--watch)        let watch=\!$watch ;;
-       -N|--noact)        noact=1            ;;
-       -c|--corrections)  corrs=$opt    ;;
-       -a|--par)          par=1         ;;
-       -u|--url-opts)     uuopts="$opt" ;;
-       -h|--help)         usage         ; exit 0 ;; 
-       -H|--manual)       manual        ; exit 0 ;;
-       *) echo "$0: Unknown option $arg"  ; exit 1 ;; 
-    esac
-done 
-
-# --- Check settings -------------------------------------------------
-check $what
-
-# --- Select what to do ----------------------------------------------
-func=
-case $what in 
-    setup)   setup ; exit 0 ;; 
-    clean)   cleanup ; exit 0 ;;
-    corr*)   func=corrs;; 
-    aod*)    func=aods ;; 
-    dndeta*) func=dndetas ;; 
-    *) echo "$0: Unknown operation: $what" > /dev/stderr ; exit 1 ;;
-esac
-print_setup
-
-case x$step in 
-    x|xfull) ;; 
-    xterm*) func=${func}_terminate ;; 
-    xup*)   func=${func}_upload ;; 
-    xdr*)   func=${func}_draw ;;
-    *) echo "$0: Unknown step $step" > /dev/stderr ; exit 1 ;;
-esac
-
-echo "Will execute $func" 
-$func $@ 
+runIt $@
 
 #
 # EOF