diff --git a/old_bedpost b/old_bedpost index e8a8b74abb8046f955a89837d62c8a8cd30a3b17..54519820b35d69a4deae6b22e7238f3e7928326c 100755 --- a/old_bedpost +++ b/old_bedpost @@ -2,36 +2,80 @@ Usage() { echo "" - echo "Usage: Bedpost <subject directory> " + 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 "N.B. nodif_brain_mask has to be betted" echo "" - echo "If struct is in subject directory transforms will be made" - echo "NB: if there, struct should already be betted" exit } -ExitUnlock() { - rm /usr/people/dtiuser/locks/.bedpost.lock +trap Clean_Exit 2 + + +Clean_Exit(){ + + if [ -d ${subjdir}.bedpost/logs/pid_${$} ];then + i=`ls ${subjdir}.bedpost/logs/pid_${$}` + for j in ${i};do + host=`echo $j | awk --field-separator=_fdt_ '{print $1}'` + pid=`echo $j | awk --field-separator=_fdt_ '{print $2}'` + ${FSL_REMOTE_CALL} $host "kill -KILL $pid" #this leaves one child process per processor - what can you do? + done + fi + + ExitUnlock; +} + +Lock(){ + if [ x${FSL_LOCK_DIR} != "x" ];then + touch ${FSL_LOCK_DIR}/.bedpost.lock + fi +} + +ExitUnlock(){ + if [ -e ${FSL_LOCK_DIR}/.bedpost.lock ];then + rm ${FSL_LOCK_DIR}/.bedpost.lock + fi exit } +LockTest(){ + if [ x${FSL_LOCK_DIR} = "x" ];then + echo 1; + elif [ ! -e ${FSL_LOCK_DIR}/.bedpost.lock ];then + echo 1; + else + echo 0; + fi +} + +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 -if [ -e /usr/people/dtiuser/locks/.bedpost.lock ]; then +[ "$1" = "" ] && Usage + +if [ `LockTest` -eq 0 ]; then echo "bedpost is currently being run - try again later" exit fi -touch /usr/people/dtiuser/locks/.bedpost.lock +Lock(); -projdir=`pwd` -subjdir=`basename $1` -subjdir=${projdir}/${subjdir} +subjdir=`make_absolute $1` +subjdir=`echo $subjdir | sed 's/\/$/$/g'` echo subjectdir is $subjdir @@ -52,60 +96,39 @@ if [ ! -e ${subjdir}/bvals ]; then ExitUnlock fi -if [ ! -e ${subjdir}/data.hdr ]; then - echo "${subjdir}/data.hdr not found" +if [ `${FSLDIR}/bin/imtest ${subjdir}/data` -eq 0 ]; then + echo "${subjdir}/data not found" ExitUnlock fi -if [ ! -e ${subjdir}/nodif.hdr ]; then - echo "${subjdir}/nodif.hdr not found" +if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif` -eq 0 ]; then + echo "${subjdir}/nodif not found" ExitUnlock fi -if [ ! -e ${subjdir}/nodif_brain_mask.hdr ]; then - echo "${subjdir}/nodif_brain_mask.hdr not found" +if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif_brain_mask` -eq 0 ]; then + echo "${subjdir}/nodif_brain_mask not found" ExitUnlock fi -if [ ! -e ${subjdir}/data.img ]; then - echo "${subjdir}/data.img not found" - ExitUnlock -fi - -if [ ! -e ${subjdir}/nodif.img ]; then - echo "${subjdir}/nodif.img not found" - ExitUnlock -fi - -if [ ! -e ${subjdir}/nodif_brain_mask.img ]; then - echo "${subjdir}/nodif_brain_mask.img not found" - ExitUnlock -fi - - - echo making bedpost directory -mkdir ${subjdir}.bedpost/ -mkdir ${subjdir}.bedpost/diff_slices +mkdir -p ${subjdir}.bedpost/ +mkdir -p ${subjdir}.bedpost/diff_slices echo copying files to bedpost directory -cp ${subjdir}/bvecs ${subjdir}.bedpost -cp ${subjdir}/bvals ${subjdir}.bedpost -cp ${subjdir}/nodif.hdr ${subjdir}.bedpost -cp ${subjdir}/nodif.img ${subjdir}.bedpost -cp ${subjdir}/nodif_brain_mask.hdr ${subjdir}.bedpost -cp ${subjdir}/nodif_brain_mask.img ${subjdir}.bedpost - +cp ${subjdir}/bvecs ${subjdir}/bvals ${subjdir}.bedpost +${FSLDIR}/bin/imcp ${subjdir}/nodif ${subjdir}/nodif_brain_mask ${subjdir}.bedpost mkdir -p ${subjdir}.bedpost/logs +mkdir -p ${subjdir}.bedpost/logs/pid_${$} nslices=`avwval ${subjdir}/data dim3` -${FSLDIR}/bin/avwslice ${subjdir}/data -${FSLDIR}/bin/avwslice ${subjdir}/nodif_brain_mask +#${FSLDIR}/bin/avwslice ${subjdir}/data +#${FSLDIR}/bin/avwslice ${subjdir}/nodif_brain_mask #following need to be setup elsewhere #FSL_MACHINE_LIST="cayenne0 cayenne0 cayenne2 cayenne3" @@ -115,16 +138,23 @@ if [ "$FSL_MACHINE_LIST" = "" ] ; then ${FSLDIR}/bin/bedpost_proc $subjdir $nslices else for machine in $FSL_MACHINE_LIST; do - $FSL_REMOTE_CALL $machine ${FSLDIR}/bin/bedpost_proc $subjdir $nslices & + $FSL_REMOTE_CALL $machine "if [ -r /etc/fslconf/fsl.sh ];then . /etc/fslconf/fsl.sh; elif [ -r /usr/local/etc/fslconf/fsl.sh ];then . /usr/local/etc/fslconf/fsl.sh; elif [ -r \${HOME}/.fslconf/fsl.sh ]; then . \${HOME}/.fslconf/fsl.sh; fi; if [ x\${FSLDIR} != "x" ];then \${FSLDIR}/bin/bedpost_proc $subjdir $nslices ${subjdir}.bedpost/logs/pid_${$}; else echo FSLDIR not set in any default location on machine `hostname`;fi" & done fi -echo "DONE" +finished=0; +while [ $finished -eq 0 ];do + sleep 60; + nfin=`ls ${subjdir}.bedpost/logs/.*_finished |wc -w` #fix this (see Bedpost) + if [ $nfin -eq $nslices ];then + finished=1; + fi +done + #postprocessing #postprocess $subjdir - mkdir -p ${subjdir}.bedpost/xfms xfmdir=${subjdir}.bedpost/xfms echo 1 0 0 0 > ${xfmdir}/eye.mat @@ -132,7 +162,11 @@ 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" + +ExitUnlock() + + -rm /usr/people/dtiuser/locks/.bedpost.lock diff --git a/old_bedpost_proc b/old_bedpost_proc index ee26c49cc7f01048baa9473a3a6b81380bcc48bb..65b4f4570fe911a493ce0b747c6a103306249f0a 100755 --- a/old_bedpost_proc +++ b/old_bedpost_proc @@ -2,27 +2,29 @@ Usage() { echo "" - echo "Usage: bedpost_proc <subject_dir> <nslices>" + echo "Usage: bedpost_proc <subject_dir> <nslices> [piddir]" echo "" exit } [ "$2" = "" ] && Usage +[ "$3" = "" ] || touch ${3}/`hostname`_fdt_${$} subjdir=$1 nslices=$2 - + slice=0 while [ $slice -lt $nslices ];do - if [ ! -e ${subjdir}.bedpost/logs/.$slice ] ; then - echo `hostname` > ${subjdir}.bedpost/logs/.$slice + echo `hostname`_${$} > ${subjdir}.bedpost/logs/.$slice sleep 10 - if [ `hostname` = `cat ${subjdir}.bedpost/logs/.$slice` ] ; then + if [ `hostname`_${$} = `cat ${subjdir}.bedpost/logs/.$slice` ] ; then nice ${FSLDIR}/bin/diff_pvm --data=${subjdir}/data_slice_$slice --mask=${subjdir}/nodif_brain_mask_slice_$slice -b ${subjdir}/bvals -r ${subjdir}/bvecs --logdir=${subjdir}.bedpost/diff_slices/data_slice_$slice --nj=1300 --bi=300 --se=20 > ${subjdir}.bedpost/logs/log$slice + touch ${subjdir}.bedpost/logs/.${slice}_finished fi fi slice=`echo "$slice + 1" | bc` done - +[ "$3" = "" ] || rm ${3}/`hostname`_fdt_${$} +sleep 10 \ No newline at end of file diff --git a/pt_alltracts.cc b/pt_alltracts.cc index a74574b6dd297af2bb9fc4106cbe98dde85ec1a6..b7539af3744e97426760d7eb943e16af9f6d10d9 100644 --- a/pt_alltracts.cc +++ b/pt_alltracts.cc @@ -142,7 +142,7 @@ void alltracts(){ th_ph_f=vols.sample(part.x(),part.y(),part.z()); } else{ - if(skipmask((int)round(part.x()),(int)round(part.y()),(int)round(part.z()))==0) + if(skipmask(x_s,y_s,z_s)==0) th_ph_f=vols.sample(part.x(),part.y(),part.z()); } diff --git a/pt_matrix.cc b/pt_matrix.cc index eb167ea4194199cf007573070b561f28d24a27fc..1cbb068913c2537b3e53bca03895267e04dd749c 100644 --- a/pt_matrix.cc +++ b/pt_matrix.cc @@ -247,7 +247,7 @@ void matrix2(){ th_ph_f=vols.sample(part.x(),part.y(),part.z()); } else{ - if(skipmask((int)round(part.x()),(int)round(part.y()),(int)round(part.z()))==0) + if(skipmask(x_s,y_s,z_s)==0) th_ph_f=vols.sample(part.x(),part.y(),part.z()); } diff --git a/pt_matrix_mesh.cc b/pt_matrix_mesh.cc index b37aefd93f8ed8f5d30fd5078d269abdb950690d..acc5165067ff6c77c4f8a5341bfa1ee52d27e8db 100644 --- a/pt_matrix_mesh.cc +++ b/pt_matrix_mesh.cc @@ -231,8 +231,14 @@ void mesh_matrix2(){ th_ph_f=vols.sample(part.x(),part.y(),part.z()); } else{ - if(skipmask((int)round(part.x()),(int)round(part.y()),(int)round(part.z()))==0) + xyz_rubbish=vox_to_vox(xyz_dti,vols.dimensions(),dim_rubbish,Seeds_to_DTI.i()); + int x_s =(int)round((float)xyz_rubbish(1)); + int y_s =(int)round((float)xyz_rubbish(2)); + int z_s =(int)round((float)xyz_rubbish(3)); + + if(skipmask(x_s,y_s,z_s)==0) th_ph_f=vols.sample(part.x(),part.y(),part.z()); + } tmp2=rand(); tmp2/=RAND_MAX; diff --git a/pt_seeds_to_targets.cc b/pt_seeds_to_targets.cc index a3a07e5c99ae85c2e85279b086a3db43fbeb1bea..c1690e8b2ab0a056ce14053b4158ec36c53faf88 100644 --- a/pt_seeds_to_targets.cc +++ b/pt_seeds_to_targets.cc @@ -172,7 +172,7 @@ void seeds_to_targets() th_ph_f=vols.sample(part.x(),part.y(),part.z()); } else{ - if(skipmask((int)round(part.x()),(int)round(part.y()),(int)round(part.z()))==0) + if(skipmask(x_s,y_s,z_s)==0) th_ph_f=vols.sample(part.x(),part.y(),part.z()); } diff --git a/pt_twomasks.cc b/pt_twomasks.cc index b1479a9b3ec97d2f34c83879ab3c8c3f78fefbe7..d00a87574cc763be427573ef89dfd2ecfe2d898c 100644 --- a/pt_twomasks.cc +++ b/pt_twomasks.cc @@ -148,7 +148,7 @@ void twomasks_symm(){ th_ph_f=vols.sample(part.x(),part.y(),part.z()); } else{ - if(skipmask((int)round(part.x()),(int)round(part.y()),(int)round(part.z()))==0) + if(skipmask(x_s,y_s,z_s)==0) th_ph_f=vols.sample(part.x(),part.y(),part.z()); }