#!/usr/bin/env bash #------------------------------------------------------------------------------ # usage: cdfopr/scripts/submit_stnfit dataset[:book] [user:]job sec1:sec2 [caf[:queue]] [mode[:nevents]] # # edit the script to put in # - right location of the tarball # - queue # - logic defining output directory # - user email address for CAF # # examples: # --------- # # ./submit_stnfit gjt10d_533nt:stntuple/dev_242 strip_em_object 1:28 caf # ./submit_stnfit gjt10d_533nt:stntuple/dev_242 strip_mjr2010 1:28 cafcondor:short debug # # mode: "submit" : just submit # "debug" : produce debug output, submit # "debug_submit_stnfit" : produce debug output, do not submit # # can also do : submit[:nevents] #------------------------------------------------------------------------------ user=`klist | grep Default | awk '{print $3}' | awk -F @ '{print $1}'` tarball="undefined" dataset=`echo $1 | awk -F : '{print $1}'` book=`echo $1 | awk -F : '{print $2}'` ; if [ .$book == "." ] ; then book="stntuple/dev_242" ; fi root_script="undefined" x=`echo $2 | awk -F : '{print $2}'` if [ .$x == '.' ] ; then job=`echo $2 | awk -F : '{print $1}'` ; echo [submit_stnfit]: job=$job else user=`echo $2 | awk -F : '{print $1}'` ; echo [submit_stnfit]: user=$user job=`echo $2 | awk -F : '{print $2}'` ; echo [submit_stnfit]: job=$job fi job1=`echo $3 | awk -F : '{print $1}'` job2=`echo $3 | awk -F : '{print $2}'` caf="local"; queue="undefined" group="common" if [ .$4 != "." ] ; then caf=`echo $4 | awk -F : '{print $1}'` if [ $caf == "cafcondor" ] ; then queue=medium ; else queue=medium ; fi x=`echo $4 | awk -F : '{print $2}'`; if [ .$x != "." ] ; then queue=$x ; fi x=`echo $4 | awk -F : '{print $3}'`; if [ .$x != "." ] ; then group=$x ; fi fi mode="submit"; nevents="undefined" if [ .$5 != "." ] ; then x=`echo $5 | awk -F : '{print $1}'` ; if [ ".$x" != "." ] ; then mode=$x ; fi x=`echo $5 | awk -F : '{print $2}'` ; dbg_flag=`echo $5 | awk -F : '{print $3}'` ; if [ ".$x" != "." ] ; then nevents=$x ; fi if [ ."$dbg_flag" != "." ] ; then nevents=$nevents:$dbg_flag ; fi fi echo [submit_stnfit]: book=$book dataset=$dataset mode=$mode caf=$caf tcl_file= host=`hostname -f` tar=stnfit_5.3.3_dev_242_17.tgz #----------------------------------------------------------------------- # determine which tarball to use #----------------------------------------------------------------------- echo tarball=$tarball if [ $tarball == "undefined" ] ; then x=`cat .rootrc | grep Stnfit.Tarball | awk '{print $2}'` if [ ."$x" != "." ] ; then tarball=$x; fi fi echo [ submit_stnfit:$LINENO ]: tarball=$tarball if [ ".$CDF_TARBALL_DIR" != "." ] ; then tarball_dir=$CDF_TARBALL_DIR else case $host in "ncdf131.fnal.gov" ) tarball_dir=/cdf/data01/tarballs ;; "fcdflnx3.fnal.gov" ) tarball_dir=/cdf/opr/cdfopr/tarballs ;; * ) tarball_dir= ;; esac fi if [ .$tarball == "." ] ; then tarball=$tarball_dir/$tar ; fi dsid=`echo $dataset | sed 's#/#_#g'` output_node=murat@ncdf131.fnal.gov output_dir=/cdf/data37a/s1/datasets/$book/$dsid/tmp if [ .$book == "." ] ; then book="cdfpewk" ; fi cmd="rsh -n fcdflnx4.fnal.gov /cdf/home/cdfopr/cafdfc/scripts/get_key" fs_base=$dataset:4 if [ .$book == ".file" ] ; then fs_base="undefined" elif [ .$book == ".pythia" ] ; then fs_base="undefined" fi echo [submit_stnfit:$LINENO]: fs_base=$fs_base #----------------------------------------------------------------------- # default: get definition of the dataset and job parameters # from tikiwiki database wiki page named "$book.$dataset" #----------------------------------------------------------------------- ruser=$USER rhost=`hostname -f` rdir=$PWD tiki_host=www-cdf.fnal.gov if [ .$book != ".pythia" ] ; then delimitor=dataset.parameters parameter_file=dataset.parameters.$$ page=`echo $book | sed 's#/#_#g'`.$dsid echo [submit_stnfit:$LINENO]: . cdfopr/scripts/tiki_get_data $tiki_host wiki_page . $page $delimitor . cdfopr/scripts/tiki_get_data $tiki_host wiki_page . $page $delimitor > $parameter_file cat $parameter_file get_parameter=cdfopr/scripts/tiki_get_parameter mc_flag=`$get_parameter $parameter_file mc_flag` grl=`$get_parameter $parameter_file good_run_list` fs_base=`$get_parameter $parameter_file fs_base` export DSID=`$get_parameter $parameter_file DSID` echo [submit_stnfit]: "mc_flag = "$mc_flag echo [submit_stnfit]: "fs_base = "$fs_base echo [submit_stnfit]: "DSID = "$DSID echo [submit_stnfit]: "grl = "$grl rm $parameter_file fi #----------------------------------------------------------------------- # default: get definition of the job from tikiwiki (wiki pages) # from a wiki page named "$user.stnana.$job" # allow redefinition of the good_run_list in the job definition # finally, it should be possible to define good run list from the command line #----------------------------------------------------------------------- delimitor=stnana.parameters parameter_file=$job.$delimitor page=$user.stnana.$job echo [submit_stnfit:$LINENO]: . cdfopr/scripts/tiki_get_data $tiki_host wiki_page . $page $delimitor . cdfopr/scripts/tiki_get_data $tiki_host wiki_page . $page $delimitor > $parameter_file cat $parameter_file get_parameter=cdfopr/scripts/tiki_get_parameter root_script=`$get_parameter $parameter_file root_script 1` ruser=`$get_parameter $parameter_file ruser 1` rhost=`$get_parameter $parameter_file rhost 1` grl1=`$get_parameter $parameter_file good_run_list 1` rdir=`$get_parameter $parameter_file rdir 1 | \ awk '{gsub("ENV_DSID",ENVIRON["DSID"]); print $0}'` if [ .$grl1 != "." ] ; then grl=$grl1 ; fi rm $parameter_file delimitor=stnana.script script_file=$job.$delimitor echo . cdfopr/scripts/tiki_get_data $tiki_host wiki_page . $page $delimitor . cdfopr/scripts/tiki_get_data $tiki_host wiki_page . $page $delimitor > $script_file cat $script_file . $script_file extra_parameters=" -x USE_TIKI=1" for w in $EXTRA_PARAMETERS ; do extra_parameters=$extra_parameters" -x $w" done echo extra_parameters=$extra_parameters #----------------------------------------------------------------------- # form root_script line #----------------------------------------------------------------------- if [ .$mc_flag != "." ] ; then root_script=$root_script/mc=$mc_flag ; fi if [ .$grl != "." ] ; then root_script=$root_script/grl=$grl/ ; fi echo [submit_stnfit]: "tarball_2="$tarball echo [submit_stnfit]: "root_script="$root_script echo [submit_stnfit]: "ruser ="$ruser echo [submit_stnfit]: "rhost ="$rhost echo [submit_stnfit]: "rdir ="$rdir #------------------------------------------------------------------------------ if [ $queue == "undefined" ] ; then queue=short ; fi parameters="-e bin/$BFARCH/stnfit.exe -j $job:stnana -b $book -d $dataset -f $fs_base" parameters=${parameters}" -R $root_script" echo [submit_stnfit]: rdir=$rdir if [ $caf == "local" ] && [ `hostname -f` == $rhost ] ; then index=`printf "%04i" $job1` parameters=${parameters}" -o $rdir" else parameters=${parameters}" -o ${ruser}@${rhost}:${rdir}" fi parameters=${parameters}" -x CAF=$caf" if [ $caf == "local" ] ; then parameters=${parameters}" -x USE_SCP=yes" fi if [ .$rhost == ".icaf" ] ; then output_tarball=icaf:stnfit_${dsid}.$.tgz else output_tarball=${ruser}@${rhost}:${rdir}/stnfit_${dsid}.$.tgz fi if [ .$tcl_file != "." ] ; then parameters=${parameters}" -i $tcl_file " fi #----------------------------------------------------------------------- # nevents=0 means process all events #----------------------------------------------------------------------- if [ $nevents == "undefined" ] ; then nevents=0 ; fi parameters=${parameters}" -n $nevents " parameters=${parameters}${extra_parameters} echo [submit_stnfit]: parameters=$parameters echo [submit_stnfit]: queue=$queue if [ $queue == "test" ] ; then if [ $caf == "local" ] ; then #----------------------------------------------------------------------- # local test job #----------------------------------------------------------------------- cmd="./cdfopr/scripts/run.sh -v -J $job1 $parameters &" echo [submit_stnfit]: local:test $cmd else #----------------------------------------------------------------------- # test remote job #----------------------------------------------------------------------- source ~cdfsoft/cdf2.shrc setup cdfsoft2 development if [ $caf == "caf" ] ; then queue=test ; fi if [ $caf == "cafcondor" ] ; then queue=test ; fi cmd="CafSubmit --tarFile=$tarball \ --outLocation=$output_tarball \ --dhaccess=None \ --dataset=$dataset \ --procType=$queue \ --group=$group \ --email=${user}@fnal.gov \ --farm=$caf \ --start=$job1 --end=$job2 \ ./cdfopr/scripts/run.sh -V debug -J $ $parameters " fi else #----------------------------------------------------------------------- # remote job #----------------------------------------------------------------------- if [ $caf == "local" ] ; then #----------------------------------------------------------------------- # local job #----------------------------------------------------------------------- cmd="./cdfopr/scripts/run.sh -v -J $job1 $parameters &" else source ~cdfsoft/cdf2.shrc setup cdfsoft2 development cmd="CafSubmit --tarFile=$tarball \ --outLocation=$output_tarball \ --dhaccess=None \ --dataset=$dataset \ --procType=$queue \ --group=$group \ --email=${user}@fnal.gov \ --farm=$caf \ --start=$job1 --end=$job2 \ ./cdfopr/scripts/run.sh -V debug -J $ $parameters" fi fi #----------------------------------------------------------------------- # make sure output directory exists and submit the job, use ssh for that #----------------------------------------------------------------------- ssh -l $ruser $rhost mkdir -p $rdir echo [submit_stnfit:$LINENO]: $cmd if [ $mode != "debug_submit_stnfit" ] ; then $cmd ; fi