From 00beba96d0d6cbd2c26f0c6e0e1d3a5f390543d1 Mon Sep 17 00:00:00 2001 From: Stamatios Sotiropoulos <stam@fmrib.ox.ac.uk> Date: Fri, 21 Jun 2013 12:21:02 +0000 Subject: [PATCH] Added gradient nonlinearity correction and filtering modes options --- rubix_parallel.sh | 204 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 152 insertions(+), 52 deletions(-) diff --git a/rubix_parallel.sh b/rubix_parallel.sh index 6ebbc37..f702494 100644 --- a/rubix_parallel.sh +++ b/rubix_parallel.sh @@ -4,6 +4,11 @@ # # Stamatios Sotiropoulos + +devel_dir=/home/stam/fsldev/fdt # Where the binary is +script_dir=/home/stam/Rubix_src # Where the scripts are + + if [ "x$SGE_ROOT" = "x" ] ; then if [ -f /usr/local/share/sge/default/common/settings.sh ] ; then . /usr/local/share/sge/default/common/settings.sh @@ -14,97 +19,192 @@ fi Usage() { echo "" - echo "Usage: rubix_parallel dataLR maskLR bvecsLR bvalsLR dataHR bvecsHR bvalsHR out_dir nfib nModes modelnum other_rubix_params" - echo " Call rubix help menu, for other_rubix_params (usually need --fsumPrior --dPrior)" + echo "Usage: rubix_parallel <subject_directory> [options]" + echo "" + echo "ORIGINAL MODE" + echo "expects to find bvalsLR, bvecsLR, bvalsHR, bvecsHR in subject directory" + echo "expects to find dataLR, dataHR and nodif_brain_maskLR in subject directory" + echo "expects to find grad_devLR and grad_devHR in subject directory, if -g is set" echo "" + echo "FILTERING MODE (use -f)" + echo "expects to find bvals, bvecs in subject directory" + echo "expects to find data and nodif_brain_mask in subject directory" + echo "expects to find grad_dev in subject directory, if -g is set" + echo "" + echo "options" + echo "-f (runs rubix on a bedpostx directory as an anisotropic filter, default off)" + echo "-n (number of fibres per HR voxel, default 2)" + echo "-p (number of orientation prior modes per LR voxel, default 4)" + echo "-w (ARD weight, more weight means less secondary fibres per voxel, default 1)" + echo "-b (burnin period, default 5000)" + echo "-j (number of jumps, default 1250)" + echo "-s (sample every, default 25)" + echo "-model (1 for monoexponential, 2 for multiexponential, default 1)" + echo "-g (consider gradient nonlinearities, default off)" + echo "" + echo "" + echo "ADDITIONALLY: you can pass on rubix options onto directly rubix_parallel" + echo " For example: eubix_parallel <subject directory> --fsumPrior --dPrior" + echo " Type 'rubix --help' for a list of available options " exit 1 } -[ "$1" = "" ] && Usage +make_absolute(){ + dir=$1; + if [ -d ${dir} ]; then + OLDWD=`pwd` + cd ${dir} + dir_all=`pwd` + cd $OLDWD + else + dir_all=${dir} + fi + echo ${dir_all} +} +[ "$1" = "" ] && Usage -devel_dir=/home/stam/fsldev/fdt # Where the binary is -script_dir=/home/stam/Rubix_src # Where the scripts are +subjdir=`make_absolute $1` +subjdir=`echo $subjdir | sed 's/\/$/$/g'` -#option arguments -burnin=5000 +echo subjectdir is $subjdir -dataLR=`${FSLDIR}/bin/imglob $1`; shift; #Remove ending if exists -maskLR=`${FSLDIR}/bin/imglob $1`; shift; -bvecsLR=$1; shift; -bvalsLR=$1; shift; -dataHR=`${FSLDIR}/bin/imglob $1`; shift; -bvecsHR=$1; shift; -bvalsHR=$1; shift; -out_dir=$1; shift; -nfibres=$1; shift; -nModes=$1; shift; -modelnum=$1; shift; -opts="$*"; +#parse option arguments +nfibres=2 +nmodes=4 +fudge=1 +burnin=5000 +njumps=1250 +sampleevery=25 +model=1 +gflag=0 +filterflag=0 + +shift +while [ ! -z "$1" ] +do + case "$1" in + -f) filterflag=1;; + -n) nfibres=$2;shift;; + -p) nmodes=$2;shift;; + -w) fudge=$2;shift;; + -b) burnin=$2;shift;; + -j) njumps=$2;shift;; + -s) sampleevery=$2;shift;; + -model) model=$2;shift;; + -g) gflag=1;; + *) break;; + esac + shift +done + +opts="--nf=$nfibres --nM=$nmodes --fudge=$fudge --bi=$burnin --nj=$njumps --se=$sampleevery --model=$model" +defopts="--fsumPrior --dPrior" +opts="$opts $defopts $*" #check that all required files exist - -if [ ! -e $bvecsLR ]; then - echo "bvecsLR not found" +if [ ! -d ${subjdir} ]; then + echo "subject directory $1 not found" exit 1 fi -if [ ! -e $bvalsLR ]; then - echo "$bvalsLR not found" +if [ ${filterflag} -eq 1 ]; then + echo "Running RubiX in Filter Mode" + + if [ ! -e ${subjdir}/bvecs ]; then + echo "${subjdir}/bvecs not found" exit 1 -fi - + fi -if [ ! -e $bvecsHR ]; then - echo "bvecsHR not found" + if [ ! -e ${subjdir}/bvals ]; then + echo "${subjdir}/bvals not found" exit 1 -fi + fi -if [ ! -e $bvalsHR ]; then - echo "$bvalsHR not found" + if [ `${FSLDIR}/bin/imtest ${subjdir}/data` -eq 0 ]; then + echo "${subjdir}/data not found" exit 1 -fi + fi -if [ `${FSLDIR}/bin/imtest $dataLR` -eq 0 ]; then - echo "dataLR not found" + if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif_brain_mask` -eq 0 ]; then + echo "${subjdir}/nodif_brain_mask not found" exit 1 -fi + fi -if [ `${FSLDIR}/bin/imtest $dataHR` -eq 0 ]; then - echo "dataHR not found" + if [ ${gflag} -eq 1 ]; then + if [ `${FSLDIR}/bin/imtest ${subjdir}/grad_dev` -eq 0 ]; then + echo "${subjdir}/grad_dev not found" + exit 1 + fi + fi +else + if [ ! -e ${subjdir}/bvecsLR ]; then + echo "${subjdir}/bvecsLR not found" exit 1 -fi - -if [ `${FSLDIR}/bin/imtest $maskLR` -eq 0 ]; then - echo "brain maskLR not found" + fi + if [ ! -e ${subjdir}/bvalsLR ]; then + echo "${subjdir}/bvalsLR not found" + exit 1 + fi + if [ ! -e ${subjdir}/bvecsHR ]; then + echo "${subjdir}/bvecsHR not found" + exit 1 + fi + if [ ! -e ${subjdir}/bvalsHR ]; then + echo "${subjdir}/bvalsHR not found" exit 1 + fi + if [ `${FSLDIR}/bin/imtest ${subjdir}/dataLR` -eq 0 ]; then + echo "${subjdir}/dataLR not found" + exit 1 + fi + if [ `${FSLDIR}/bin/imtest ${subjdir}/dataHR` -eq 0 ]; then + echo "${subjdir}/dataHR not found" + exit 1 + fi + if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif_brain_maskLR` -eq 0 ]; then + echo "${subjdir}/nodif_brain_maskLR not found" + exit 1 + fi + if [ ${gflag} -eq 1 ]; then + if [ `${FSLDIR}/bin/imtest ${subjdir}/grad_devLR` -eq 0 ]; then + echo "${subjdir}/grad_devLR not found" + exit 1 + fi + if [ `${FSLDIR}/bin/imtest ${subjdir}/grad_devHR` -eq 0 ]; then + echo "${subjdir}/grad_devHR not found" + exit 1 + fi + fi fi +exit 1 +echo Making rubix directory structure - -mkdir -p $out_dir -mkdir -p $out_dir/diff_slices -mkdir -p $out_dir/logs - +mkdir -p ${subjdir}.rubiX +mkdir -p ${subjdir}.rubiX/diff_slices +mkdir -p ${subjdir}.rubiX/logs nslices=`$FSLDIR/bin/fslval $dataLR dim3` echo Queuing preprocessing stage -preprocid=`$FSLDIR/bin/fsl_sub -T 60 -R 8000 -N rubix_pre -l $out_dir/logs $script_dir/rubix_preproc.sh $dataLR $maskLR $dataHR $out_dir` - +preprocid=`$FSLDIR/bin/fsl_sub -T 60 -R 8000 -N rubix_pre -l ${subjdir}.rubiX/logs $script_dir/rubix_preproc.sh ${subjdir} ${filterflag} ${gflag}` echo Queuing parallel processing stage -[ -f $out_dir/commands.txt ] && rm $out_dir/commands.txt +[ -f ${subjdir}.rubiX/commands.txt ] && rm ${subjdir}.rubiX/commands.txt slice=0 while [ $slice -lt $nslices ] do slicezp=`$FSLDIR/bin/zeropad $slice 4` - echo "$devel_dir/rubix --dLR=${out_dir}/${dataLR}_slice_${slicezp} --mLR=${out_dir}/${maskLR}_slice_${slicezp} --rLR=$bvecsLR --bLR=$bvalsLR --dHR=${out_dir}/${dataHR}_newslice_${slicezp} --rHR=$bvecsHR --bHR=$bvalsHR --forcedir --nf=$nfibres --nM=$nModes --bi=$burnin --model=$modelnum --logdir=$out_dir/diff_slices/data_slice_$slicezp ${opts}" >> $out_dir/commands.txt + if [ ${gflag} -eq 1 ]; then + opts="$opts --gLR=${subjdir}.rubiX/grad_devLR_slice_${slicezp} --gHR=${subjdir}.rubiX/grad_devHR_newslice_${slicezp}" + fi + echo "$devel_dir/rubix --dLR=${subjdir}.rubiX/dataLR_slice_${slicezp} --mLR=${subjdir}.rubiX/nodif_brain_maskLR_slice_${slicezp} --rLR=${subjdir}.rubiX/bvecsLR --bLR=${subjdir}.rubiX/bvalsLR --dHR=${subjdir}.rubiX/dataHR_newslice_${slicezp} --rHR=${subjdir}.rubiX/bvecsHR --bHR=${subjdir}.rubiX/bvalsHR --forcedir --nf=$nfibres --nM=$nModes --bi=$burnin --model=$modelnum --logdir=${subjdir}.rubiX/diff_slices/data_slice_$slicezp ${opts}" >> ${subjdir}.rubiX/commands.txt slice=$(($slice + 1)) done - RubiXid=`${FSLDIR}/bin/fsl_sub -T 1400 -j $preprocid -l $out_dir/logs -N rubix -t $out_dir/commands.txt` + RubiXid=`${FSLDIR}/bin/fsl_sub -T 1400 -j $preprocid -l ${subjdir}.rubiX/logs -N rubix -t ${subjdir}.rubiX/commands.txt` echo Queuing post processing stage - mergeid=`${FSLDIR}/bin/fsl_sub -T 60 -R 8000 -j $RubiXid -N rubix_post -l $out_dir/logs $script_dir/rubix_postproc.sh $out_dir $dataLR $maskLR $dataHR` \ No newline at end of file + mergeid=`${FSLDIR}/bin/fsl_sub -T 60 -R 8000 -j $RubiXid -N rubix_post -l ${subjdir}.rubiX/logs $script_dir/rubix_postproc.sh ${subjdir} ${filterflag}` \ No newline at end of file -- GitLab