180 lines
6.2 KiB
Plaintext
180 lines
6.2 KiB
Plaintext
##################################################################################################################################
|
|
########################## ########################################
|
|
########################## Trinity PBS job submission with multi part dependencies ########################################
|
|
########################## ########################################
|
|
##################################################################################################################################
|
|
### Author: Josh Bowden, Alexie Papanicolaou, CSIRO
|
|
### Version 1.0
|
|
### Function definitions and PBS version specific information
|
|
##################################################################################################################################
|
|
|
|
######################################################################################################################
|
|
### Return usage information if user requests --help -h or another incorrect input flag.
|
|
######################################################################################################################
|
|
function F_USAGE {
|
|
echo ""
|
|
echo " Usage: "
|
|
echo ""
|
|
echo " To start an analysis: "
|
|
echo " trinity_pbs.sh <config.file> "
|
|
echo ""
|
|
echo " To stop previously started PBS jobs in the queue: "
|
|
echo " trinity_kill.pl OUTPUTDIR "
|
|
echo ""
|
|
echo " Where:"
|
|
echo " <config.file> = contains specific job details (see below)"
|
|
echo " OUTPUTDIR = is path to output data directory"
|
|
echo ""
|
|
echo " Note: Modify the values in CONFIG_FILE to suit compute cluster and "
|
|
echo " input data size and nameing conventions:"
|
|
echo ""
|
|
echo " <config.file> contains data and job input details and user defined variables "
|
|
echo " and user and cluster specific options:"
|
|
echo " UEMAIL, DATADIRECTORY, OUTPUTDIR, JOBPREFIX, ACCOUNT "
|
|
echo " STANDARD_JOB_DETAILS"
|
|
echo " per job details:"
|
|
echo " NCPU, WALLTIME, MEM, MEMDIR, NUMPERARRAYITEM"
|
|
echo ""
|
|
}
|
|
|
|
|
|
######################################################################################################################
|
|
### Function to return the PBS header information, depending on PBS type.
|
|
######################################################################################################################
|
|
# NODESCPUS=$(F_GETNODESTRING $1 $MEM $NCPU large $WALLTIME $JOBNAME $ACCOUNT $PBSUSER $MODTRINITY $JOBPREFIX)
|
|
# NODESCPUS=$(F_GETNODESTRING $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} )
|
|
function F_GETNODESTRING {
|
|
if [[ $1 = "--pbspro" ]] ; then
|
|
echo "
|
|
#PBS -l select=1:ncpus="$3":NodeType="$4":mem="$2"
|
|
#PBS -l walltime="$5"
|
|
#PBS -N "$6"
|
|
"$7"
|
|
#PBS -j oe
|
|
#PBS -m a
|
|
#PBS -V
|
|
"$8"
|
|
"$9"
|
|
"
|
|
elif [[ $1 = "--pbs" ]] ; then
|
|
echo "
|
|
#PBS -l nodes=1:ppn="$3"
|
|
#PBS -l vmem="$2"
|
|
#PBS -l walltime="$5"
|
|
#PBS -N "$6"
|
|
#PBS -j oe
|
|
#PBS -m a
|
|
"$8"
|
|
#PBS -V
|
|
"$9"
|
|
"
|
|
fi
|
|
echo " JOBNAME=$6"
|
|
echo " JOBPREFIX=${10}"
|
|
}
|
|
|
|
|
|
######################################################################################################################
|
|
### Do some checking that files exist etc.
|
|
######################################################################################################################
|
|
#DS=$(F_GETNODESTRING $FILENAMEINPUT $DATADIRECTORY $FILENAMESINGLE $FILENAMELEFT $FILENAMERIGHT)
|
|
# DS=$(F_GETNODESTRING $1 $2 $3 $4 $5 )
|
|
function SET_DS {
|
|
|
|
# add the correct filename extension so we can check if inchworm has been run in part 3 below
|
|
if [[ "$1" == *FR* ]] || [[ "$1" == *RF* ]] ;
|
|
then
|
|
DS="."
|
|
else
|
|
DS=".DS."
|
|
fi
|
|
|
|
}
|
|
|
|
#AP: i removed this because a) it didn't stop the script from progressing when there was an error, b) it was not handling multiple input files
|
|
function F_CHECKFILES {
|
|
|
|
# Check that input data file(s) exist.
|
|
if [[ "$1" == *--single* ]] ; then
|
|
if [ ! -f ""$2""$3"" ] ; then
|
|
echo "Input file does not exist: "
|
|
echo " "$2""$3""
|
|
exit 1
|
|
fi
|
|
else # check that both left and right filenames exist
|
|
if [ ! -f ""$2""$4"" ] ; then
|
|
echo "Input file does not exist: "
|
|
echo " "$2""$4""
|
|
exit 1
|
|
fi
|
|
if [ ! -f ""$2""$5"" ] ; then
|
|
echo "Input file does not exist: "
|
|
echo " "$2""$5""
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
######################################################################################################################
|
|
### Checking that files containing stage specific script data exist
|
|
######################################################################################################################
|
|
#F_WRITESCRIPT( scriptname $SOURCENAME )
|
|
#F_WRITESCRIPT( $1 $2 )
|
|
function F_WRITESCRIPT {
|
|
if [ -e "$2" ] ; then
|
|
source "$2"
|
|
else
|
|
echo ""$1" requires file \""$2"\" to be present in the current directory"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
|
|
##################################################################################################################################
|
|
# This is used to stop all jobs sent to the PBS queue
|
|
# requires path to the filename as second argument
|
|
# The order of the following tests is important.
|
|
##################################################################################################################################
|
|
if [[ "$1" = "--rm" ]] || [[ "$1" = "-rm" ]] ; then
|
|
if [[ -e $2/jobnumbers.out ]] ; then
|
|
cat $2/jobnumbers.out | while read LINE; do
|
|
qdel $LINE || { echo "continuing..." ;}
|
|
done
|
|
#echo " Any parallel "
|
|
else
|
|
echo " Could not stop jobs as could not open file: "
|
|
echo " $2"jobnumbers.out""
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
|
|
|
|
if [[ "$1" = "--help" ]] || [[ "$1" = "-h" ]] || [[ "$1" = "-?" ]]; then
|
|
F_USAGE
|
|
exit 0
|
|
fi
|
|
|
|
|
|
##################################################################################################################################
|
|
## User email information required from command line:
|
|
## Provide a valid email address so PBS can email user on start and finish of execution of individual parts (not part 4b or 5b though)
|
|
##################################################################################################################################
|
|
|
|
if [[ ! -e "$1" ]] ; then
|
|
echo "input file does not exist: "$1""
|
|
echo "Please provide an input file"
|
|
F_USAGE
|
|
exit 0
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|