From 438f7e9333431dfd3bc53e875359a1d0dbf048d2 Mon Sep 17 00:00:00 2001 From: ahheckel Date: Mon, 2 Mar 2015 20:01:25 +0100 Subject: [PATCH] new file: rsc/fsl/fsl5/fsl_sub_v5.6_patched_NOPOSIX --- rsc/fsl/fsl5/fsl_sub_v5.6_patched_NOPOSIX | 487 ++++++++++++++++++++++ 1 file changed, 487 insertions(+) create mode 100755 rsc/fsl/fsl5/fsl_sub_v5.6_patched_NOPOSIX diff --git a/rsc/fsl/fsl5/fsl_sub_v5.6_patched_NOPOSIX b/rsc/fsl/fsl5/fsl_sub_v5.6_patched_NOPOSIX new file mode 100755 index 0000000..4cdc59f --- /dev/null +++ b/rsc/fsl/fsl5/fsl_sub_v5.6_patched_NOPOSIX @@ -0,0 +1,487 @@ +#!/bin/sh + +# Copyright (C) 2007-2013 University of Oxford +# Authors: Dave Flitney, Stephen Smith and Matthew Webster + +# Part of FSL - FMRIB's Software Library +# http://www.fmrib.ox.ac.uk/fsl +# fsl@fmrib.ox.ac.uk +# +# Developed at FMRIB (Oxford Centre for Functional Magnetic Resonance +# Imaging of the Brain), Department of Clinical Neurology, Oxford +# University, Oxford, UK +# +# +# LICENCE +# +# FMRIB Software Library, Release 5.0 (c) 2012, The University of +# Oxford (the "Software") +# +# The Software remains the property of the University of Oxford ("the +# University"). +# +# The Software is distributed "AS IS" under this Licence solely for +# non-commercial use in the hope that it will be useful, but in order +# that the University as a charitable foundation protects its assets for +# the benefit of its educational and research purposes, the University +# makes clear that no condition is made or to be implied, nor is any +# warranty given or to be implied, as to the accuracy of the Software, +# or that it will be suitable for any particular purpose or for use +# under any specific conditions. Furthermore, the University disclaims +# all responsibility for the use which is made of the Software. It +# further disclaims any liability for the outcomes arising from using +# the Software. +# +# The Licensee agrees to indemnify the University and hold the +# University harmless from and against any and all claims, damages and +# liabilities asserted by third parties (including claims for +# negligence) which arise directly or indirectly from the use of the +# Software or the sale of any products based on the Software. +# +# No part of the Software may be reproduced, modified, transmitted or +# transferred in any form or by any means, electronic or mechanical, +# without the express permission of the University. The permission of +# the University is not required if the said reproduction, modification, +# transmission or transference is done without financial return, the +# conditions of this Licence are imposed upon the receiver of the +# product, and all original and amended source code is included in any +# transmitted product. You may be held legally responsible for any +# copyright infringement that is caused or encouraged by your failure to +# abide by these terms and conditions. +# +# You are not permitted under this Licence to use this Software +# commercially. Use for which any financial return is received shall be +# defined as commercial use, and includes (1) integration of all or part +# of the source code or the Software into a product for sale or license +# by or on behalf of Licensee to third parties or (2) use of the +# Software or any derivative of it for research with the final aim of +# developing software products for sale or license to a third party or +# (3) use of the Software or any derivative of it for research with the +# final aim of developing non-software products for sale or license to a +# third party, or (4) use of the Software to provide any service to an +# external organisation for which payment is received. If you are +# interested in using the Software commercially, please contact Isis +# Innovation Limited ("Isis"), the technology transfer company of the +# University, to negotiate a licence. Contact details are: +# innovation@isis.ox.ac.uk quoting reference DE/9564. + +########################################################################### +# Edit this file in order to setup FSL to use your local compute +# cluster. +########################################################################### + + +########################################################################### +# The following section determines what to do when fsl_sub is called +# by an FSL program. If SGE_ROOT is set it will attempt to pass the +# commands onto the cluster, otherwise it will run the commands +# itself. There are two values for the METHOD variable, "SGE" and +# "NONE". Note that a user can unset SGE_ROOT if they don't want the +# cluster to be used. +########################################################################### +METHOD=SGE +unset module +if [ "x$SGE_ROOT" = "x" ] ; then + METHOD=NONE +fi + +# stop submitted scripts from submitting jobs themselves +if [ "X$FSLSUBALREADYRUN" = "Xtrue" ] ; then + METHOD=NONE + echo "Warning: job on queue attempted to submit parallel jobs - running jobs serially instead" >&2 +fi + +FSLSUBALREADYRUN=true +export FSLSUBALREADYRUN + +########################################################################### +# The following auto-decides what cluster queue to use. The calling +# FSL program will probably use the -T option when calling fsl_sub, +# which tells fsl_sub how long (in minutes) the process is expected to +# take (in the case of the -t option, how long each line in the +# supplied file is expected to take). You need to setup the following +# list to map ranges of timings into your cluster queues - it doesn't +# matter how many you setup, that's up to you. +########################################################################### + +map_qname () +{ + if [ $1 -le 20 ] ; then + queue=veryshort.q + elif [ $1 -le 120 ] ; then + queue=short.q + elif [ $1 -le 1440 ] ; then + queue=long.q + else + queue=verylong.q + fi + queueCmd=" -q $queue " + + #echo "Estimated time was $1 mins: queue name is $queue" +} + +########################################################################### +# Don't change the following (but keep scrolling down!) +########################################################################### + +OLD_POSIXLY_CORRECT=${POSIXLY_CORRECT} +POSIXLY_CORRECT=1 +export POSIXLY_CORRECT +command=`basename $0` + +usage () +{ + cat < + +$command gzip *.img *.hdr +$command -q short.q gzip *.img *.hdr +$command -a darwin regscript rawdata outputdir ... + + -T Estimated job length in minutes, used to auto-set queue name + -q Possible values for are "verylong.q", "long.q" + and "short.q". See below for details + Default is "long.q". + -a Architecture [e.g., darwin or lx24-amd64] + -p Lower priority [0:-1024] default = 0 + -M Who to email, default = `whoami`@fmrib.ox.ac.uk + -j Place a hold on this task until job jid has completed + -t Specify a task file of commands to execute in parallel + -N Specify jobname as it will appear on queue + -l Where to output logfiles + -m Change the SGE mail options, see qsub for details + -z If image or file already exists, do nothing and exit + -F Use flags embedded in scripts to set SGE queuing options + -s , Submit a multi-threaded task - requires a PE () to be + configured for the requested queues. + specifies the number of threads to run + -v Verbose mode. + +Queues: + +There are several batch queues configured on the cluster, each with defined CPU +time limits. All queues, except bigmem.q, have a 8GB memory limit. + +veryshort.q:This queue is for jobs which last under 30mins. +short.q: This queue is for jobs which last up to 4h. +long.q: This queue is for jobs which last less than 24h. Jobs run with a + nice value of 10. +verylong.q: This queue is for jobs which will take longer than 24h CPU time. + There is one slot per node, and jobs on this queue have a nice value + of 15. +bigmem.q: This queue is like the verylong.q but has no memory limits. + +EOF + + exit 1 +} + +nargs=$# +if [ $nargs -eq 0 ] ; then + usage +fi + +set -- `getopt T:q:a:p:M:j:t:z:N:Fvm:l:s: $*` +result=$? +if [ $result != 0 ] ; then + echo "What? Your arguments make no sense!" +fi + +if [ $nargs -eq 0 ] || [ $result != 0 ] ; then + usage +fi + +POSIXLY_CORRECT=${OLD_POSIXLY_CORRECT} +#export POSIXLY_CORRECT # HKL +unset POSIXLY_CORRECT # added by HKL to please recon-all + + +########################################################################### +# If you have a Parallel Environment configured for OpenMP tasks then +# the variable omp_pe should be set to the name you have defined for that +# PE. The script will work out which queues have that PE setup on them. +# Note, we support openmp tasks even when Grid Engine is not in use. +########################################################################### + +omp_pe='openmp' + +########################################################################### +# The following sets up the default queue name, which you may want to +# change. It also sets up the basic emailing control. +########################################################################### + +queue=long.q +queueCmd=" -q long.q " +mailto=`whoami`@fmrib.ox.ac.uk +MailOpts="n" + + +########################################################################### +# In the following, you might want to change the behaviour of some +# flags so that they prepare the right arguments for the actual +# cluster queue submission program, in our case "qsub". +# +# -a sets is the cluster submission flag for controlling the required +# hardware architecture (normally not set by the calling program) +# +# -p set the priority of the job - ignore this if your cluster +# environment doesn't have priority control in this way. +# +# -j tells the cluster not to start this job until cluster job ID $jid +# has completed. You will need this feature. +# +# -t will pass on to the cluster software the name of a text file +# containing a set of commands to run in parallel; one command per +# line. +# +# -N option determines what the command will be called when you list +# running processes. +# +# -l tells the cluster what to call the standard output and standard +# -error logfiles for the submitted program. +########################################################################### + +if [ -z $FSLSUBVERBOSE ] ; then + verbose=0 +else + verbose=$FSLSUBVERBOSE; + echo "METHOD=$METHOD : args=$@" >&2 +fi + +scriptmode=0 +sge_rsc="-l mem_free=500M" # added by HKL + +while [ $1 != -- ] ; do + case $1 in + -z) + if [ -e $2 -o `${FSLDIR}/bin/imtest $2` = 1 ] ; then + exit 0 + fi + shift;; + -T) + map_qname $2 + shift;; + -q) + queue=$2 + queueCmd=" -q $queue " + qconf -sq $queue 2>&1 >/dev/null + if [ $? -eq 1 ]; then + echo "Invalid queue specified!" + exit 127 + fi + shift;; + -a) + acceptable_arch=no + available_archs=`qhost | tail -n +4 | awk '{print $2}' | sort | uniq` + for a in $available_archs; do + if [ $2 = $a ] ; then + acceptable_arch=yes + fi + done + if [ $acceptable_arch = yes ]; then + sge_arch="-l arch=$2" + else + echo "Sorry arch of $2 is not supported on this SGE configuration!" + echo "Should be one of:" $available_archs + exit 127 + fi + shift;; + -p) + sge_priority="-p $2" + shift;; + -M) + mailto=$2 + shift;; + -j) + jid=$2 + sge_hold="-hold_jid $jid" + shift;; + -t) + taskfile=$2 + tasks=`wc -l $taskfile | awk '{print $1}'` + sge_tasks="-t 1-$tasks" + shift;; + -N) + JobName=$2; + shift;; + -m) + MailOpts=$2; + shift;; + -l) + LogOpts="-o $2 -e $2"; + LogDir="${2}/"; + mkdir -p $2; + shift;; + -F) + scriptmode=1; + ;; + -v) + verbose=1 + ;; + -s) + pe_string=$2; + peName=`echo $pe_string | cut -d',' -f 1` + peThreads=`echo $pe_string | cut -d',' -f 2` + shift;; + esac + shift # next flag +done +shift + +########################################################################### +# Don't change the following (but keep scrolling down!) +########################################################################### + +if [ "x$JobName" = x ] ; then + if [ "x$taskfile" != x ] ; then + JobName=`basename $taskfile` + else + JobName=`basename $1` + fi +fi + +if [ "x$tasks" != x ] && [ ! -f "$taskfile" ] ; then + echo $taskfile: invalid input! + echo Should be a text file listing all the commands to run! + exit -1 +fi + +if [ "x$tasks" != "x" ] && [ "x$@" != "x" ] ; then + echo $@ + echo Spurious input after parsing command line! + exit -1 +fi + +if [ "x$peName" != "x" ]; then + # If the PE name is 'openmp' then limit the number of threads to those specified + + if [ "X$peName" = "X$omp_pe" ]; then + OMP_NUM_THREADS=$peThreads + export OMP_NUM_THREADS + fi + +fi + +case $METHOD in + +########################################################################### +# The following is the main call to the cluster, using the "qsub" SGE +# program. If $tasks has not been set then qsub is running a single +# command, otherwise qsub is processing a text file of parallel +# commands. +########################################################################### + + SGE) + ########################################################################### + # Test Parallel environment options + ########################################################################### + if [ "x$peName" != x ]; then + # Is this a configured PE? + + qconf -sp $peName 2>&1 >/dev/null + + if [ $? -eq 1 ]; then + echo $@ + echo "$peName is not a valid PE" + exit -1 + fi + + # Get a list of queues configured for this PE and confirm that the queue + # we have submitted to has that PE set up. + qstat -g c -pe $peName 2>&1 >/dev/null + if [ $? -eq 1 ]; then + echo "No parallel environments configured!" + exit -1 + fi + + qstat -g c -pe $peName | sed '1,2d' | awk '{ print $1 }' | grep ^$queue 2>&1 >/dev/null + + if [ $? -eq 1 ]; then + echo $@ + echo "PE $peName is not configured on $queue" + exit -1 + fi + + # The -w e option will result in the job failing if there are insufficient slots + # on any of the cluster nodes + pe_options="-pe $peName $peThreads -w e" + + fi + + if [ "x$tasks" = "x" ] ; then + if [ $scriptmode -ne 1 ] ; then + sge_command="qsub -V -cwd -shell n -b y -r y $queueCmd $pe_options -M $mailto -N $JobName -m $MailOpts $LogOpts $sge_arch $sge_hold $sge_rsc" # sge_rsc added by HKL + else + sge_command="qsub $LogOpts $sge_arch $sge_hold $sge_rsc" # sge_rsc added by HKL + fi + if [ $verbose -eq 1 ] ; then + echo sge_command: $sge_command >&2 + echo executing: $@ >&2 + fi + exec $sge_command $@ | awk '{print $3}' | tee -a $GRID_JOB_ID_FILE # tee -a added by HKL + else + sge_command="qsub -V -cwd $queueCmd $pe_options -M $mailto -N $JobName -m $MailOpts $LogOpts $sge_arch $sge_hold $sge_tasks $sge_rsc" # sge_rsc added by HKL + if [ $verbose -eq 1 ] ; then + echo sge_command: $sge_command >&2 + echo control file: $taskfile >&2 + fi + exec $sge_command <&2 + fi + + /bin/sh < ${LogDir}${JobName}.o$$ 2> ${LogDir}${JobName}.e$$ +$@ +EOF1 + ERR=$? + if [ $ERR -ne 0 ] ; then + cat ${LogDir}${JobName}.e$$ >&2 + exit $ERR + fi + else + if [ $verbose -eq 1 ] ; then + echo "Running commands in: $taskfile" >&2 + fi + + n=1 + while [ $n -le $tasks ] ; do + line=`sed -n -e ''${n}'p' $taskfile` + if [ $verbose -eq 1 ] ; then + echo executing: $line >&2 + fi + /bin/sh < ${LogDir}${JobName}.o$$.$n 2> ${LogDir}${JobName}.e$$.$n +$line +EOF2 + n=`expr $n + 1` + done + fi + echo $$ | tee -a $GRID_JOB_ID_FILE # tee -a added by HKL + ;; + +esac + +########################################################################### +# Done. +########################################################################### +