From 4615da10897d8dba0f4428cf68bf98c003caee31 Mon Sep 17 00:00:00 2001
From: Tim Behrens <behrens@fmrib.ox.ac.uk>
Date: Wed, 8 Mar 2006 13:36:11 +0000
Subject: [PATCH] *** empty log message ***

---
 old_bedpostX          | 243 ++++++++++++++++++++++++++++++++++++++++++
 old_bedpostX_cleanup  |  21 ++++
 old_bedpostX_kill_pid |  21 ++++
 old_bedpostX_proc     |  40 +++++++
 old_bedpost_proc      |  12 +--
 probtrackxOptions.h   |  11 +-
 streamlines.cc        |   9 ++
 tractvolsx.h          |   2 +-
 xfibres.cc            |   8 +-
 9 files changed, 353 insertions(+), 14 deletions(-)
 create mode 100644 old_bedpostX
 create mode 100644 old_bedpostX_cleanup
 create mode 100644 old_bedpostX_kill_pid
 create mode 100644 old_bedpostX_proc

diff --git a/old_bedpostX b/old_bedpostX
new file mode 100644
index 0000000..b6a5563
--- /dev/null
+++ b/old_bedpostX
@@ -0,0 +1,243 @@
+#!/bin/sh
+
+#   SHCOPYRIGHT
+
+Usage() {
+    echo ""
+    echo "Usage: bedpostX <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
+}
+
+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
+
+
+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/avwmaths ${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/avwval ${subjdir}/data dim3`
+
+${FSLDIR}/bin/avwslice ${subjdir}/data
+${FSLDIR}/bin/avwslice ${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 ${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
+
+
+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 -oneperimage ${subjdir}.bedpostX/diff_slices/data_slice_0000/f*samples |wc -w`
+
+
+fib=1;
+while [ $fib -le $numfib ];do
+    ${FSLDIR}/bin/avwmerge -z ${subjdir}.bedpostX/merged_th${fib}samples `${FSLDIR}/bin/imglob -oneperimage ${subjdir}.bedpostX/diff_slices/data_slice_*/th${fib}samples`
+    ${FSLDIR}/bin/avwmerge -z ${subjdir}.bedpostX/merged_ph${fib}samples `${FSLDIR}/bin/imglob -oneperimage ${subjdir}.bedpostX/diff_slices/data_slice_*/ph${fib}samples`
+    ${FSLDIR}/bin/avwmerge -z ${subjdir}.bedpostX/merged_f${fib}samples  `${FSLDIR}/bin/imglob -oneperimage ${subjdir}.bedpostX/diff_slices/data_slice_*/f${fib}samples`
+    ${FSLDIR}/bin/avwmaths ${subjdir}.bedpostX/merged_th${fib}samples -Tmean ${subjdir}.bedpostX/mean_th${fib}samples
+    ${FSLDIR}/bin/avwmaths ${subjdir}.bedpostX/merged_ph${fib}samples -Tmean ${subjdir}.bedpostX/mean_ph${fib}samples
+    ${FSLDIR}/bin/avwmaths ${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
+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()
+
+
+
+
+
diff --git a/old_bedpostX_cleanup b/old_bedpostX_cleanup
new file mode 100644
index 0000000..908a46f
--- /dev/null
+++ b/old_bedpostX_cleanup
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+#   Copyright (C) 2004 University of Oxford
+#
+#   SHCOPYRIGHT
+
+if [ "x$FSLMACHINELIST" = "x" ] ; then
+    ${FSLDIR}/bin/bedpostX_kill_all
+else
+    unique_machines=`echo $FSLMACHINELIST |tr " " \\\n |sort -u`
+    echo $unique_machines;
+     for machine in $unique_machines; 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_all; else echo FSLDIR not set in any default location on machine `hostname`;fi" | $FSLREMOTECALL $machine /bin/sh  &
+     done
+fi
+
+if [ "x${FSLLOCKDIR}" != "x" ];then 
+    if [ -r ${FSLLOCKDIR}/.bedpostX.lock ];then
+	rm ${FSLLOCKDIR}/.bedpostX.lock
+    fi
+fi
\ No newline at end of file
diff --git a/old_bedpostX_kill_pid b/old_bedpostX_kill_pid
new file mode 100644
index 0000000..7adae14
--- /dev/null
+++ b/old_bedpostX_kill_pid
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+#   Copyright (C) 2004 University of Oxford
+#
+#   SHCOPYRIGHT
+
+Usage(){
+    echo "bedpostX_kill_pid <pid>"
+    echo ""
+    echo "<pid> is the pid of the bedpostX_proc"
+    echo "kills this process + all diff_pvm children"
+    echo ""
+    exit
+}
+
+[ "$1" = "" ] && Usage
+pid=$1
+
+i=`ps -fU  $USER |grep -v grep | grep xfibres |grep ${pid}| awk '{print $2}'`
+kill -KILL $pid $i 
+
diff --git a/old_bedpostX_proc b/old_bedpostX_proc
new file mode 100644
index 0000000..c9868ef
--- /dev/null
+++ b/old_bedpostX_proc
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+#   Copyright (C) 2004 University of Oxford
+#
+#   SHCOPYRIGHT
+
+Usage() {
+    echo ""
+    echo "Usage: bedpostX_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}.bedpostX/logs/.$slicezp ] ; then
+	echo `hostname`_${$} > ${subjdir}.bedpostX/logs/.$slicezp
+	sleep 10
+	if [ `hostname`_${$} = `cat ${subjdir}.bedpostX/logs/.$slicezp | sed -n '1p'` ] ; then
+	    nice ${FSLDIR}/bin/xfibres --data=$subjdir/data_slice_$slicezp --mask=$subjdir/nodif_brain_mask_slice_$slicezp -b $subjdir/bvals -r $subjdir/bvecs --forcedir --logdir=$subjdir.bedpostX/diff_slices/data_slice_$slicezp --nj=1000 --bi=2000 --bn=0 --se=20 --nfibres=2 --fudge=1.5> $subjdir.bedpostX/logs/log$slicezp 
+
+	    touch ${subjdir}.bedpostX/logs/.${slicezp}_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/old_bedpost_proc b/old_bedpost_proc
index 9c677c8..c611e04 100755
--- a/old_bedpost_proc
+++ b/old_bedpost_proc
@@ -6,7 +6,7 @@
 
 Usage() {
     echo ""
-    echo "Usage: bedpost_proc <subject_dir> <nslices> [piddir]"
+    echo "Usage: bedpostX_proc <subject_dir> <nslices> [piddir]"
     echo ""
     exit
 }
@@ -24,12 +24,12 @@ 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
+    if [ ! -f ${subjdir}.bedpostX/logs/.$slicezp ] ; then
+	echo `hostname`_${$} > ${subjdir}.bedpostX/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
+	if [ `hostname`_${$} = `cat ${subjdir}.bedpostX/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}.bedpostX/diff_slices/data_slice_$slicezp --nj=1300 --bi=300 --se=20 > ${subjdir}.bedpostX/logs/log$slicezp
+	    touch ${subjdir}.bedpostX/logs/.${slicezp}_finished
 	fi
     fi
     slice=`echo "$slice + 1" | bc`
diff --git a/probtrackxOptions.h b/probtrackxOptions.h
index 9e23fea..6025418 100644
--- a/probtrackxOptions.h
+++ b/probtrackxOptions.h
@@ -9,9 +9,9 @@
 #if !defined(probtrackxOptions_h)
 #define probtrackxOptions_h
 
-#include <string>
-#include <iostream>
-#include <fstream>
+#include <string> 
+#include <iostream.h>
+#include <fstream.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include "utils/options.h"
@@ -57,6 +57,7 @@ class probtrackxOptions {
   Option<float> steplength;
   Option<bool> loopcheck;
   Option<bool> usef;
+  Option<bool> randfib;
   Option<bool> modeuler;
   Option<int> rseed;
   void parse_command_line(int argc, char** argv,Log& logger);
@@ -174,6 +175,9 @@ class probtrackxOptions {
    usef(string("-f,--usef"), false, 
 	 string("Use anisotropy to constrain tracking"), 
 	 false, no_argument),
+  randfib(string("--randfib"), false, 
+	 string("Select randomly from the first two fibres when seeding"), 
+	 false, no_argument),
   modeuler(string("--modeuler"), false, 
 	   string("Use modified euler streamlining"), 
 	   false, no_argument),
@@ -215,6 +219,7 @@ class probtrackxOptions {
        options.add(steplength);
        options.add(loopcheck);
        options.add(usef);
+       options.add(randfib);
        options.add(modeuler);
        options.add(rseed);
      }
diff --git a/streamlines.cc b/streamlines.cc
index 765a4e8..8f3749e 100644
--- a/streamlines.cc
+++ b/streamlines.cc
@@ -538,6 +538,15 @@ namespace TRACT{
     //onewayonly for mesh things..
     cout <<x<<" "<<y<<" "<<z<<endl;
     int fibst=m_seeds(int(round(x)),int(round(y)),int(round(z)))-1;//fibre to start with is taken from seed volume..
+
+    if(opts.randfib.value()){
+      float tmp=rand()/RAND_MAX;
+      if(tmp>0.5)
+	fibst=0;
+      else
+	fibst=1;// fix this for > 2 fibres
+    }
+    
     for(int p=0;p<opts.nparticles.value();p++){
       if(opts.verbose.value()>1)
 	logger.setLogFile("particle"+num2str(p));
diff --git a/tractvolsx.h b/tractvolsx.h
index 0938b41..8ea1ed5 100644
--- a/tractvolsx.h
+++ b/tractvolsx.h
@@ -161,6 +161,7 @@ namespace TRACTVOLSX{
 	    init_sample=false;
 	  }
 	  else{
+	    
 	    for(unsigned int fib=0;fib<thsamples.size();fib++){
 	      if((*fsamples[fib])(int(newx),int(newy),int(newz),int(samp))>opts.fibthresh.value()){
 		float phtmp=(*phsamples[fib])(int(newx),int(newy),int(newz),int(samp));
@@ -176,7 +177,6 @@ namespace TRACTVOLSX{
 	      }
 	      
 	    }
-	    
 	    if(dotmax==0){
 	      theta=(*thsamples[0])(int(newx),int(newy),int(newz),int(samp));
 	      phi=(*phsamples[0])(int(newx),int(newy),int(newz),int(samp));
diff --git a/xfibres.cc b/xfibres.cc
index 9974ae7..7db3a1f 100644
--- a/xfibres.cc
+++ b/xfibres.cc
@@ -1,7 +1,7 @@
 /* Xfibres Diffusion Partial Volume Model  
 
     Tim Behrens - FMRIB Image Analysis Group
-
+ 
     Copyright (C) 2005 University of Oxford  */
 
 /*  CCOPYRIGHT  */
@@ -9,7 +9,7 @@
 #include <iostream>
 #include <fstream>
 #include <iomanip>
-#include <sstream>
+#include <strstream>
 #define WANT_STREAM
 #define WANT_MATH
 //  #include "newmatap.h"
@@ -368,8 +368,8 @@ public:
       sort(sfs.begin(),sfs.end());
       
       for(int samp=1;samp<=m_dsamples.Nrows();samp++){
-	for(int f=0;f<opts.nfibres.value();f++){
- 	  thsamples_out[f](samp,vox)=m_thsamples[sfs[(sfs.size()-1)-f].second](samp,vox);
+	for(int f=0;f<opts.nfibres.value();
+	  thsamples_out[f](samp,vox)=m_thsamples[sfs[(sfs.size()-1)-f].second](samp,vox);
 	  phsamples_out[f](samp,vox)=m_phsamples[sfs[(sfs.size()-1)-f].second](samp,vox);
 	  fsamples_out[f](samp,vox)=m_fsamples[sfs[(sfs.size()-1)-f].second](samp,vox);
 	  lamsamples_out[f](samp,vox)=m_lamsamples[sfs[(sfs.size()-1)-f].second](samp,vox);
-- 
GitLab