Skip to content
Snippets Groups Projects
Commit 494227da authored by FSL Automated Build Engineer's avatar FSL Automated Build Engineer
Browse files

Removed old bedpost

parent 4eb3c4ae
No related branches found
No related tags found
No related merge requests found
#!/bin/sh
# SHCOPYRIGHT
if [ "x$SGE_ROOT" != "x" ] && [ -f $FSLDIR/bin/sge_bedpostX ] ; then
exec $FSLDIR/bin/sge_bedpostX $@
fi
Usage() {
echo ""
echo "Usage: bedpostX <subject directory> [options]"
echo ""
echo "expects to find bvals and bvecs in subject directory"
echo "expects to find data nodif_brain_mask nodif in subject directory"
echo "options:"
echo "-n (number of fibres per voxel, default 2)"
echo "-w (ARD weight, more weight means less fibres killed per voxel, default 1)"
echo "-b (burnin period, default 1000)"
echo ""
exit
}
trap Clean_Exit 2
Clean_Exit(){
if [ -d ${subjdir}.bedpostX/logs/pid_${$} ];then
i=`ls ${subjdir}.bedpostX/logs/pid_${$}`
for j in ${i};do
host=`echo $j | awk -F _fdt_ '{print $1}'`
pid=`echo $j | awk -F _fdt_ '{print $2}'`
if [ "x${FSLMACHINELIST}" != "x" ]; then
# ${FSLREMOTECALL} $host "kill -KILL $pid" #this leaves one child process per processor - what can you do?
echo "if [ -r /usr/local/etc/fslconf/fsl.sh ];then . /usr/local/etc/fslconf/fsl.sh;fi; if [ -r /etc/fslconf/fsl.sh ];then . /etc/fslconf/fsl.sh;fi; if [ -r \${HOME}/.fslconf/fsl.sh ]; then . \${HOME}/.fslconf/fsl.sh; fi; if [ x\${FSLDIR} != "x" ];then \${FSLDIR}/bin/bedpostX_kill_pid ${pid} >/dev/null 2>&1; else echo FSLDIR not set in any default location on machine `hostname`;fi" | $FSLREMOTECALL $host /bin/sh >/dev/null 2>&1 &
else
${FSLDIR}/bin/bedpostX_kill_pid ${pid}
fi
rm ${subjdir}.bedpostX/logs/pid_${$}/${j}
done
fi
ExitUnlock;
}
Lock(){
if [ "x${FSLLOCKDIR}" != "x" ];then
touch ${FSLLOCKDIR}/.bedpostX.lock
fi
}
ExitUnlock(){
if [ -f ${FSLLOCKDIR}/.bedpostX.lock ];then
rm ${FSLLOCKDIR}/.bedpostX.lock
fi
#clean up slices
ndat_sl=`echo ${subjdir}/data_slice_* | grep -v "slice_\*" |wc -w`
nnodif_sl=`echo ${subjdir}/nodif_brain_mask_slice_* | grep -v "slice_\*" |wc -w`
if [ $ndat_sl -ge 0 ] ;then
rm -f ${subjdir}/data_slice_*
fi
if [ $nnodif_sl -ge 0 ] ;then
rm -f ${subjdir}/nodif_brain_mask_slice_*
fi
exit
}
LockTest(){
if [ "x${FSLLOCKDIR}" = "x" ];then
echo 1;
elif [ ! -f ${FSLLOCKDIR}/.bedpostX.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 [ `LockTest` -eq 0 ]; then
echo "bedpostX is currently being run - try again later"
exit
fi
if [ "x${FSLMACHINELIST}" != "x" ];then
if [ "x${FSLREMOTECALL}" = "x" ];then
echo "error: you must set FSLREMOTECALL if you have set FSLMACHINELIST"
exit
fi
fi
Lock;
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"
ExitUnlock
fi
if [ ! -f ${subjdir}/bvecs ]; then
echo "${subjdir}/bvecs not found"
ExitUnlock
fi
if [ ! -f ${subjdir}/bvals ]; then
echo "${subjdir}/bvals not found"
ExitUnlock
fi
if [ `${FSLDIR}/bin/imtest ${subjdir}/data` -eq 0 ]; then
echo "${subjdir}/data not found"
ExitUnlock
fi
if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif` -eq 0 ]; then
echo "${subjdir}/nodif not found"
ExitUnlock
fi
if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif_brain_mask` -eq 0 ]; then
echo "${subjdir}/nodif_brain_mask not found"
ExitUnlock
fi
#parse option arguments
nfibres=2
fudge=1
burnin=1000
while [ ! -z "$2" ]
do
case "$2" in
-n) nfibres=$3;shift;;
-w) fudge=$3;shift;;
-b) burnin=$3;shift;;
*) break;;
esac
shift
done
echo making bedpostX directory
mkdir -p ${subjdir}.bedpostX/
mkdir -p ${subjdir}.bedpostX/diff_slices
echo copying files to bedpostX directory
cp ${subjdir}/bvecs ${subjdir}/bvals ${subjdir}.bedpostX
${FSLDIR}/bin/imcp ${subjdir}/nodif ${subjdir}/nodif_brain_mask ${subjdir}.bedpostX
${FSLDIR}/bin/fslmaths ${subjdir}/nodif -mas ${subjdir}/nodif_brain_mask ${subjdir}.bedpostX/nodif_brain
mkdir -p ${subjdir}.bedpostX/logs
mkdir -p ${subjdir}.bedpostX/logs/pid_${$}
nslices=`${FSLDIR}/bin/fslval ${subjdir}/data dim3`
${FSLDIR}/bin/fslslice ${subjdir}/data
${FSLDIR}/bin/fslslice ${subjdir}/nodif_brain_mask
#for parallel processing, the following need to be setup elsewhere
#FSLMACHINELIST="list of machines (can be duplicated for two processors etc.)"
#FSLREMOTECALL="ssh (or rsh or whatever you want to use)"
if [ "x$FSLMACHINELIST" = "x" ] ; then
echo "processing data on local host"
${FSLDIR}/bin/bedpostX_proc $subjdir $nslices -n $nfibres -w $fudge -b $burnin ${subjdir}.bedpostX/logs/pid_${$} &
else
echo "processing data on hosts: $FSLMACHINELIST"
for machine in $FSLMACHINELIST; do
echo "if [ -r /usr/local/etc/fslconf/fsl.sh ];then . /usr/local/etc/fslconf/fsl.sh;fi; if [ -r /etc/fslconf/fsl.sh ];then . /etc/fslconf/fsl.sh;fi; if [ -r \${HOME}/.fslconf/fsl.sh ]; then . \${HOME}/.fslconf/fsl.sh; fi; if [ x\${FSLDIR} != "x" ];then \${FSLDIR}/bin/bedpostX_proc $subjdir $nslices ${subjdir}.bedpostX/logs/pid_${$}; else echo FSLDIR not set in any default location on machine `hostname`;fi"| $FSLREMOTECALL $machine /bin/sh &
done
fi
echo finished
b=0
finished=0;
while [ $finished -eq 0 ];do
b=`expr $b + 1 `
sleep 60;
nfin=`echo ${subjdir}.bedpostX/logs/.*_finished | grep -v ".\*" |wc -w`
if [ $nfin -eq $nslices ];then
finished=1;
fi
if [ $b -eq 10 ]; then
echo "$nfin slices processed"
b=0
fi
done
#postprocessing
#postprocess $subjdir
numfib=`${FSLDIR}/bin/imglob ${subjdir}.bedpostX/diff_slices/data_slice_0000/f*samples |wc -w`
echo number of fibres $numfib
fib=1;
while [ $fib -le $numfib ];do
${FSLDIR}/bin/fslmerge -z ${subjdir}.bedpostX/merged_th${fib}samples `${FSLDIR}/bin/imglob ${subjdir}.bedpostX/diff_slices/data_slice_*/th${fib}samples`
${FSLDIR}/bin/fslmerge -z ${subjdir}.bedpostX/merged_ph${fib}samples `${FSLDIR}/bin/imglob ${subjdir}.bedpostX/diff_slices/data_slice_*/ph${fib}samples`
${FSLDIR}/bin/fslmerge -z ${subjdir}.bedpostX/merged_f${fib}samples `${FSLDIR}/bin/imglob ${subjdir}.bedpostX/diff_slices/data_slice_*/f${fib}samples`
${FSLDIR}/bin/fslmaths ${subjdir}.bedpostX/merged_th${fib}samples -Tmean ${subjdir}.bedpostX/mean_th${fib}samples
${FSLDIR}/bin/fslmaths ${subjdir}.bedpostX/merged_ph${fib}samples -Tmean ${subjdir}.bedpostX/mean_ph${fib}samples
${FSLDIR}/bin/fslmaths ${subjdir}.bedpostX/merged_f${fib}samples -Tmean ${subjdir}.bedpostX/mean_f${fib}samples
${FSLDIR}/bin/make_dyadic_vectors ${subjdir}.bedpostX/merged_th${fib}samples ${subjdir}.bedpostX/merged_ph${fib}samples ${subjdir}.bedpostX/nodif_brain_mask ${subjdir}.bedpostX/dyads${fib}
fib=`echo "$fib +1"|bc`;
done
echo Removing intermediate files
if [ `imtest ${subjdir}.bedpostX/merged_th1samples` -eq 1 ];then
if [ `imtest ${subjdir}.bedpostX/merged_ph1samples` -eq 1 ];then
if [ `imtest ${subjdir}.bedpostX/merged_f1samples` -eq 1 ];then
rm -rf ${subjdir}.bedpostX/diff_slices
rm -f ${subjdir}/data_slice_*
rm -f ${subjdir}/nodif_brain_mask_slice_*
fi
fi
fi
echo Creating identity xfm
xfmdir=${subjdir}.bedpostX/xfms
mkdir -p $xfmdir
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
ExitUnlock
#!/bin/sh
# Copyright (C) 2004 University of Oxford
#
# SHCOPYRIGHT
j=`ps -U $USER |grep -v grep | grep bedpost|grep -v bedpost_kill | awk '{print $1}'`
if [ "x${j}" != "x" ];then
kill -KILL $j
fi
i=`ps -U $USER |grep -v grep | grep diff_pvm| awk '{print $1}'`
if [ "x${i}" != "x" ];then
kill -KILL $i
fi
#!/bin/sh
# Copyright (C) 2004 University of Oxford
#
# SHCOPYRIGHT
Usage(){
echo "bedpost_kill_pid <pid>"
echo ""
echo "<pid> is the pid of the bedpost_proc"
echo "kills this process + all diff_pvm children"
echo ""
exit
}
[ "$1" = "" ] && Usage
pid=$1
i=`ps -fU $USER |grep -v grep | grep diff_pvm |grep ${pid}| awk '{print $2}'`
kill -KILL $pid $i
#!/bin/sh
# Copyright (C) 2004 University of Oxford
#
# SHCOPYRIGHT
Usage() {
echo ""
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
slicezp=`${FSLDIR}/bin/zeropad $slice 4`
if [ ! -f ${subjdir}.bedpost/logs/.$slicezp ] ; then
echo `hostname`_${$} > ${subjdir}.bedpost/logs/.$slicezp
sleep 10
if [ `hostname`_${$} = `cat ${subjdir}.bedpost/logs/.$slicezp | sed -n '1p'` ] ; then
nice ${FSLDIR}/bin/diff_pvm --data=${subjdir}/data_slice_$slicezp --mask=${subjdir}/nodif_brain_mask_slice_$slicezp -b ${subjdir}/bvals -r ${subjdir}/bvecs --logdir=${subjdir}.bedpost/diff_slices/data_slice_$slicezp --nj=1300 --bi=300 --se=20 > ${subjdir}.bedpost/logs/log$slicezp
touch ${subjdir}.bedpost/logs/.${slicezp}_finished
fi
fi
slice=`echo "$slice + 1" | bc`
done
[ "$3" = "" ] || rm ${3}/`hostname`_fdt_${$}
sleep 10
\ No newline at end of file
/* Copyright (C) 2004 University of Oxford */
/* CCOPYRIGHT */
#include <iostream>
#include <fstream>
#include "newimage/newimageall.h"
#include "utils/log.h"
#include "meshclass/meshclass.h"
#include "probtrack.h"
using namespace std;
using namespace NEWIMAGE;
using namespace TRACT;
using namespace Utilities;
using namespace PARTICLE;
using namespace TRACTVOLS;
using namespace mesh;
//using namespace NEWMAT;
//////////////////////////
/////////////////////////
int main ( int argc, char **argv ){
probtrackOptions& opts =probtrackOptions::getInstance();
Log& logger = LogSingleton::getInstance();
opts.parse_command_line(argc,argv,logger);
srand(opts.rseed.value());
if(opts.verbose.value()>0){
opts.status();
}
if(opts.mode.value()=="simple")
track();
else if(opts.mode.value()=="seeds_to_targets")
seeds_to_targets();
else if(opts.mode.value()=="seedmask")
alltracts();
else if(opts.mode.value()=="twomasks_symm")
twomasks_symm();
else if(opts.mode.value()=="waypoints")
waypoints();
else if(opts.mode.value()=="matrix1")
matrix1();
else if(opts.mode.value()=="matrix2"){
if(opts.meshfile.value()=="")
matrix2();
else
mesh_matrix2();
}
else if(opts.mode.value()=="maskmatrix")
maskmatrix();
else if(opts.mode.value()=="meshlengths")
mesh_lengths();
else{
cout <<"Invalid setting for option mode -- try setting mode=help"<<endl;
}
return 0;
}
/* Copyright (C) 2004 University of Oxford */
/* CCOPYRIGHT */
#include "probtrackOptions.h"
#include "particle.h"
#include "tractvols.h"
#include "pt_simple.h"
#include "pt_twomasks.h"
#include "pt_seeds_to_targets.h"
#include "pt_alltracts.h"
#include "pt_matrix.h"
#include "pt_matrix_mesh.h"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment