diff --git a/Makefile b/Makefile index b901520f8a82e76b218c7d98ac66f4bf0dcc7617..63f1c796f9ebe379c23e3565e966a07bc59a3177 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,6 @@ include ${FSLCONFDIR}/default.mk PROJNAME = misc_scripts -SCRIPTS = regscript remove_vols replacevols replace_and_average_fmrib +SCRIPTS = regscript remove_vols replacevols replace_and_average_fmrib bedpost bedpostX bedpostX_postproc.sh bedpostX_preproc.sh bedpostX_single_slice.sh bedpost_postproc.sh bedpost_preproc.sh bedpost_single_slice.sh linkbedpost all: diff --git a/bedpost b/bedpost new file mode 100755 index 0000000000000000000000000000000000000000..af8fde384bc2bc1d36e221d4a9f9699ef4083619 --- /dev/null +++ b/bedpost @@ -0,0 +1,128 @@ +#!/bin/sh + +# Copyright (C) 2004 University of Oxford +# +# SHCOPYRIGHT + +if [ "x$SGE_ROOT" = "x" ] ; then + . /usr/local/share/sge-6.0/default/common/settings.sh +fi + +Usage() { + echo "" + echo "Usage: bedpost <subject directory> " + echo "" + echo "expects to find bvals and bvecs in subject directory" + echo "expects to find data nodif_brain_mask nodif in subject directory" + echo "" + exit +} + +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 + +subjdir=`make_absolute $1` +subjdir=`echo $subjdir | sed 's/\/$/$/g'` + +echo subjectdir is $subjdir + +#check that all required files exist + +if [ ! -d $subjdir ]; then + echo "subject directory $1 not found" +fi + +if [ ! -e ${subjdir}/bvecs ]; then + echo "${subjdir}/bvecs not found" +fi + +if [ ! -e ${subjdir}/bvals ]; then + echo "${subjdir}/bvals not found" +fi + +if [ `${FSLDIR}/bin/imtest ${subjdir}/data` -eq 0 ]; then + echo "${subjdir}/data not found" +fi + +if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif` -eq 0 ]; then + echo "${subjdir}/nodif not found" +fi + +if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif_brain_mask` -eq 0 ]; then + echo "${subjdir}/nodif_brain_mask not found" +fi + +echo Making bedpost directory structure + +mkdir -p ${subjdir}.bedpost/ +mkdir -p ${subjdir}.bedpost/diff_slices +mkdir -p ${subjdir}.bedpost/logs +mkdir -p ${subjdir}.bedpost/logs/pid_${$} +mkdir -p ${subjdir}.bedpost/xfms + +mailto=`whoami`@fmrib.ox.ac.uk + +echo Queuing preprocessing stages +preprocid=`qsub -M $mailto -V -q short.q \ + -o ${subjdir}.bedpost/logs -e ${subjdir}.bedpost/logs \ + ${FSLDIR}/bin/bedpost_preproc.sh ${subjdir} | \ + awk '{print $3}'` + +echo Queuing parallel processing stage +nslices=`avwval ${subjdir}/data dim3` +bedpostid=`qsub -M $mailto -hold_jid $preprocid -V -q long.q -t 1-$nslices \ + -o ${subjdir}.bedpost/logs -e ${subjdir}.bedpost/logs \ + ${FSLDIR}/bin/bedpost_single_slice.sh $subjdir | \ + awk '{print $3}' | awk -F. '{print $1}'` + +echo Queuing post processing stage +mergeid=`qsub -M $mailto -hold_jid $bedpostid -V -q short.q \ + -o ${subjdir}.bedpost/logs -e ${subjdir}.bedpost/logs \ + ${FSLDIR}/bin/bedpost_postproc.sh $subjdir | \ + awk '{print $3}'` + +echo +echo Type ${subjdir}.bedpost/monitor to show progress. +cat <<EOM > ${subjdir}.bedpost/monitor +#!/bin/sh +finished=0 +logdir=${subjdir}.bedpost/logs +while [ \$finished -eq 0 ] ; do + nfin=0 + if [ -f \$logdir/bedpost.o$bedpostid.1 ] ; then + nfin=\`cat \$logdir/bedpost.o$bedpostid.* |\ + grep Done | wc -w | awk '{print \$1}'\` + fi + if [ \$nfin -eq $nslices ] ; then + finished=1 + fi + + echo "\$nfin slices processed" + sleep 600; +done +EOM +chmod +x ${subjdir}.bedpost/monitor + +echo Type ${subjdir}.bedpost/cancel to terminate the task. +cat <<EOC > ${subjdir}.bedpost/cancel +#!/bin/sh +qdel $mergeid $bedpostid $preprocid +EOC +chmod +x ${subjdir}.bedpost/cancel + +echo +echo You will get an email at the end of the post-processing stage. +echo diff --git a/bedpostX b/bedpostX new file mode 100755 index 0000000000000000000000000000000000000000..5b138c41299f334644a85c88fda3148ae4b9f47c --- /dev/null +++ b/bedpostX @@ -0,0 +1,128 @@ +#!/bin/sh + +# Copyright (C) 2004 University of Oxford +# +# SHCOPYRIGHT + +if [ "x$SGE_ROOT" = "x" ] ; then + . /usr/local/share/sge-6.0/default/common/settings.sh +fi + +Usage() { + echo "" + echo "Usage: bedpost <subject directory> " + echo "" + echo "expects to find bvals and bvecs in subject directory" + echo "expects to find data nodif_brain_mask nodif in subject directory" + echo "" + exit +} + +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 + +subjdir=`make_absolute $1` +subjdir=`echo $subjdir | sed 's/\/$/$/g'` + +echo subjectdir is $subjdir + +#check that all required files exist + +if [ ! -d $subjdir ]; then + echo "subject directory $1 not found" +fi + +if [ ! -e ${subjdir}/bvecs ]; then + echo "${subjdir}/bvecs not found" +fi + +if [ ! -e ${subjdir}/bvals ]; then + echo "${subjdir}/bvals not found" +fi + +if [ `${FSLDIR}/bin/imtest ${subjdir}/data` -eq 0 ]; then + echo "${subjdir}/data not found" +fi + +if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif` -eq 0 ]; then + echo "${subjdir}/nodif not found" +fi + +if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif_brain_mask` -eq 0 ]; then + echo "${subjdir}/nodif_brain_mask not found" +fi + +echo Making bedpost directory structure + +mkdir -p ${subjdir}.bedpost/ +mkdir -p ${subjdir}.bedpost/diff_slices +mkdir -p ${subjdir}.bedpost/logs +mkdir -p ${subjdir}.bedpost/logs/pid_${$} +mkdir -p ${subjdir}.bedpost/xfms + +mailto=`whoami`@fmrib.ox.ac.uk + +echo Queuing preprocessing stages +preprocid=`qsub -M $mailto -V -q short.q \ + -o ${subjdir}.bedpost/logs -e ${subjdir}.bedpost/logs \ + ${FSLDIR}/bin/bedpostX_preproc.sh ${subjdir} | \ + awk '{print $3}'` + +echo Queuing parallel processing stage +nslices=`avwval ${subjdir}/data dim3` +bedpostid=`qsub -M $mailto -hold_jid $preprocid -V -q long.q -t 1-$nslices \ + -o ${subjdir}.bedpost/logs -e ${subjdir}.bedpost/logs \ + ${FSLDIR}/bin/bedpostX_single_slice.sh $subjdir | \ + awk '{print $3}' | awk -F. '{print $1}'` + +echo Queuing post processing stage +mergeid=`qsub -M $mailto -hold_jid $bedpostid -V -q short.q \ + -o ${subjdir}.bedpost/logs -e ${subjdir}.bedpost/logs \ + ${FSLDIR}/bin/bedpostX_postproc.sh $subjdir | \ + awk '{print $3}'` + +echo +echo Type ${subjdir}.bedpost/monitor to show progress. +cat <<EOM > ${subjdir}.bedpost/monitor +#!/bin/sh +finished=0 +logdir=${subjdir}.bedpost/logs +while [ \$finished -eq 0 ] ; do + nfin=0 + if [ -f \$logdir/bedpost.o$bedpostid.1 ] ; then + nfin=\`cat \$logdir/bedpost.o$bedpostid.* |\ + grep Done | wc -w | awk '{print \$1}'\` + fi + if [ \$nfin -eq $nslices ] ; then + finished=1 + fi + + echo "\$nfin slices processed" + sleep 600; +done +EOM +chmod +x ${subjdir}.bedpost/monitor + +echo Type ${subjdir}.bedpost/cancel to terminate the task. +cat <<EOC > ${subjdir}.bedpost/cancel +#!/bin/sh +qdel $mergeid $bedpostid $preprocid +EOC +chmod +x ${subjdir}.bedpost/cancel + +echo +echo You will get an email at the end of the post-processing stage. +echo diff --git a/bedpostX_postproc.sh b/bedpostX_postproc.sh new file mode 100755 index 0000000000000000000000000000000000000000..0cf50fb3bf695f3340a27b71952fa7c2efeef0b6 --- /dev/null +++ b/bedpostX_postproc.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +subjdir=$1 + +#$ -S /bin/sh +#$ -V +#$ -N bp_postproc +#$ -m ae + + +echo cock \ No newline at end of file diff --git a/bedpostX_preproc.sh b/bedpostX_preproc.sh new file mode 100755 index 0000000000000000000000000000000000000000..fc010aebd95797891ebcadf02c3f258710d1bc06 --- /dev/null +++ b/bedpostX_preproc.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +subjdir=$1 + +#$ -S /bin/sh +#$ -V +#$ -N bpx_preproc +#$ -m a + +echo Copying files to bedpost directory +cp ${subjdir}/bvecs ${subjdir}/bvals ${subjdir}.bedpost +${FSLDIR}/bin/imcp ${subjdir}/nodif ${subjdir}/nodif_brain_mask ${subjdir}.bedpost +${FSLDIR}/bin/avwmaths\ + ${subjdir}/nodif\ + -mas ${subjdir}/nodif_brain_mask\ + ${subjdir}.bedpost/nodif_brain + +${FSLDIR}/bin/avwslice ${subjdir}/data +${FSLDIR}/bin/avwslice ${subjdir}/nodif_brain_mask +echo Done \ No newline at end of file diff --git a/bedpostX_single_slice.sh b/bedpostX_single_slice.sh new file mode 100755 index 0000000000000000000000000000000000000000..4172411c4a7c10c7d55b0cca462c05e4fabf1c20 --- /dev/null +++ b/bedpostX_single_slice.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +subjdir=$1 +slice=`expr $SGE_TASK_ID - 1` +slicezp=`${FSLDIR}/bin/zeropad $slice 4` + +#$ -cwd -q long.q +#$ -S /bin/sh +#$ -V -N bedpostX +#$ -l arch=tru64 +#$ -m a + +${FSLDIR}/bin/xfibres\ + --data=$subjdir/data_slice_$slicezp\ + --mask=$subjdir/nodif_brain_mask_slice_$slicezp\ + -b $subjdir/bvals -r $subjdir/bvecs\ + --forcedir --logdir=$subjdir.bedpost/diff_slices/data_slice_$slicezp\ + --nj=1000 --bi=600 --se=20 --upe=24 --nfibres=3 > $subjdir.bedpost/logs/log$slicezp && echo Done + diff --git a/bedpost_postproc.sh b/bedpost_postproc.sh new file mode 100644 index 0000000000000000000000000000000000000000..c4e8e4d4c16fa49cafa3b7b9334c860612fed813 --- /dev/null +++ b/bedpost_postproc.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +subjdir=$1 + +#$ -S /bin/sh +#$ -V +#$ -N bp_postproc +#$ -m ae + +echo Merging outputs into 4D files + +${FSLDIR}/bin/avwmerge -z ${subjdir}.bedpost/merged_thsamples `${FSLDIR}/bin/imglob -oneperimage ${subjdir}.bedpost/diff_slices/data_slice_*/th_samples` +${FSLDIR}/bin/avwmerge -z ${subjdir}.bedpost/merged_phsamples `${FSLDIR}/bin/imglob -oneperimage ${subjdir}.bedpost/diff_slices/data_slice_*/ph_samples` +${FSLDIR}/bin/avwmerge -z ${subjdir}.bedpost/merged_fsamples `${FSLDIR}/bin/imglob -oneperimage ${subjdir}.bedpost/diff_slices/data_slice_*/f_samples` +${FSLDIR}/bin/avwmaths ${subjdir}.bedpost/merged_thsamples -Tmean ${subjdir}.bedpost/mean_thsamples +${FSLDIR}/bin/avwmaths ${subjdir}.bedpost/merged_phsamples -Tmean ${subjdir}.bedpost/mean_phsamples +${FSLDIR}/bin/avwmaths ${subjdir}.bedpost/merged_fsamples -Tmean ${subjdir}.bedpost/mean_fsamples + +${FSLDIR}/bin/make_dyadic_vectors ${subjdir}.bedpost/merged_thsamples ${subjdir}.bedpost/merged_phsamples ${subjdir}.bedpost/nodif_brain_mask ${subjdir}.bedpost/dyadic_vectors + +echo Removing intermediate files + +if [ `imtest ${subjdir}.bedpost/merged_thsamples` -eq 1 ];then + if [ `imtest ${subjdir}.bedpost/merged_phsamples` -eq 1 ];then + if [ `imtest ${subjdir}.bedpost/merged_fsamples` -eq 1 ];then + rm -rf ${subjdir}.bedpost/diff_slices + rm -f ${subjdir}/data_slice_* + rm -f ${subjdir}/nodif_brain_mask_slice_* + fi + fi +fi + +echo Creating identity xfm + +xfmdir=${subjdir}.bedpost/xfms +echo 1 0 0 0 > ${xfmdir}/eye.mat +echo 0 1 0 0 >> ${xfmdir}/eye.mat +echo 0 0 1 0 >> ${xfmdir}/eye.mat +echo 0 0 0 1 >> ${xfmdir}/eye.mat + +echo Done \ No newline at end of file diff --git a/bedpost_preproc.sh b/bedpost_preproc.sh new file mode 100644 index 0000000000000000000000000000000000000000..34a527c21fe6c55204427c48596000ec44ec89f7 --- /dev/null +++ b/bedpost_preproc.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +subjdir=$1 + +#$ -S /bin/sh +#$ -V +#$ -N bp_preproc +#$ -m a + +echo Copying files to bedpost directory +cp ${subjdir}/bvecs ${subjdir}/bvals ${subjdir}.bedpost +${FSLDIR}/bin/imcp ${subjdir}/nodif ${subjdir}/nodif_brain_mask ${subjdir}.bedpost +${FSLDIR}/bin/avwmaths\ + ${subjdir}/nodif\ + -mas ${subjdir}/nodif_brain_mask\ + ${subjdir}.bedpost/nodif_brain + +${FSLDIR}/bin/avwslice ${subjdir}/data +${FSLDIR}/bin/avwslice ${subjdir}/nodif_brain_mask +echo Done \ No newline at end of file diff --git a/bedpost_single_slice.sh b/bedpost_single_slice.sh new file mode 100755 index 0000000000000000000000000000000000000000..310575dcc008fdbfa8db487ca52464e3589e5a30 --- /dev/null +++ b/bedpost_single_slice.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +subjdir=$1 +slice=`expr $SGE_TASK_ID - 1` +slicezp=`${FSLDIR}/bin/zeropad $slice 4` + +#$ -cwd -q long.q +#$ -S /bin/sh +#$ -V -N bedpost +#$ -l arch=tru64 +#$ -m a + +${FSLDIR}/bin/diff_pvm\ + --data=$subjdir/data_slice_$slicezp\ + --mask=$subjdir/nodif_brain_mask_slice_$slicezp\ + -b $subjdir/bvals -r $subjdir/bvecs\ + --forcedir --logdir=$subjdir.bedpost/diff_slices/data_slice_$slicezp\ + --nj=1300 --bi=300 --se=20 > $subjdir.bedpost/logs/log$slicezp && echo Done diff --git a/linkbedpost b/linkbedpost new file mode 100755 index 0000000000000000000000000000000000000000..f8788f501c3b8e2f673ac2c1291160a641886cd0 --- /dev/null +++ b/linkbedpost @@ -0,0 +1,30 @@ +#!/bin/sh + +if [ $# -lt 1 ];then + echo "Usage: linkbedpost <sourcedir>" + echo "" + echo "linkbedpost /usr/people/dtiuser/OCMR/CONTROLS/2mmdata/OCMR_20_001.bedpost" + exit +fi + + +source=$1; +targ=`basename $1` + + +mkdir $targ +mkdir ${targ}/xfms + +for i in `imglob ${source}/dti_* ${source}/mean_* ${source}/merged_* ${source}/dyad* ${source}/nodif_* ${source}/nodif_* ${source}/struct* ${source}/standard*`; do + j=`basename $i`; + ln -s $i ${targ}/$j +done + +for i in ${source}/xfms/*.mat;do + j=`basename $i`; + ln -s $i ${targ}/xfms/${j} +done +for i in ${source}/bv*;do + j=`basename $i`; + ln -s $i ${targ}/$j +done