Try this one.
Saad
On 1 Feb 2012, at 11:45, Sean F Walsh wrote:
> Hi All,
>
> I am looking for some advice/help about rotating the gradient table for diffusion data after eddy-current/motion correction. I downloaded the rotate_bvecs script written by Martin Kavec. For some reason when I use this script it always changes the final line in the new rotated bvecs file into (0, 0, 0).
>
> The irritating thing is that the script used to work previously when I ran it on a different computer - although I can't remember if we had to change something first.
>
> I contacted Martin Kavec and he was helpful but unable to diagnose the problem (and has apparently finished his scientific career).
>
> Any ideas on how I could go about fixing this?
>
> Please find the version of the script that I have at the end of this message.
>
> Many thanks in advance,
>
> Sean
>
> #!/bin/bash
>
> if [[ $# -lt 3 ]] ; then
> echo "Incorrect Number of Paramaters Specified"
> echo "Usage: <original bvecs> <rotated bvecs> <ecclog> [-k]"
> echo ""
> echo "<ecclog> the output log file from ecc"
> echo "-k keep the mat files"
> echo ""
> exit 1;
> fi
>
> ECCLOG=$3;
> LIST="mat.list"
>
> if [ ! -e $1 ] ; then
> echo "Source bvecs $1 does not exist!"
> exit 1
> fi
>
>
> if [ -e $2 ] ; then
> echo "Target bvecs: $2 already exists!"
> exit 1
> fi
>
> if [ ! -e $ECCLOG ]; then
> echo "Ecc log file $3 does not exist!"
> exit 1
> fi
>
> if [ "$4" == "-k" ] ; then
> KEEP="YES"
> else
> KEEP="NO"
> fi
>
> ####################################################################
> # Create the mat files from input
> #
> # Here we read input ecclog file line by line, produce the FSL mat
> # file and fill it with respective trasformation. File listing all
> # the mat files generates is also created
>
> if [ -e ${LIST} ]
> then
> rm ${LIST}
> fi
>
> cat ${ECCLOG} | while read line; do
> #create a file name from processed volumes
> matfile=$(remove_ext $(echo ${line} | grep processing | awk '{print $2}'));
> if [ "${matfile}" != "" ] ; then
> matfile=${matfile}.mat;
> echo "Generating ... ${matfile}";
> echo ${matfile} >> ${LIST};
> # following two reads will deal with unimportant lines
> read line;
> read line;
> # read matrix and store it in the current matfile
> read line;
> echo ${line} > ${matfile};
> read line;
> echo ${line} >> ${matfile};
> read line;
> echo ${line} >> ${matfile};
> read line;
> echo ${line} >> ${matfile};
> fi
> done
> #
> ####################################################################
>
> ####################################################################
> # rotate bvecs
>
> newXs="";
> newYs="";
> newZs=""
>
>
> BVECS=$1;
> Xs=$(cat $BVECS | head -1 | tail -1)
> Ys=$(cat $BVECS | head -2 | tail -1)
> Zs=$(cat $BVECS | head -3 | tail -1)
>
> MATs=$(cat mat.list);
>
> VOLUMES=$(cat $BVECS | head -1 | tail -1 | wc -w)
>
> if [ $VOLUMES != $(echo ${MATs} | wc -w) ]
> then
> echo "Number of *.mat files in $3 is not equal to number"
> echo "of gradients in $BVECS!"
> exit 1
> fi
>
> i=1
> while [ $i -le $VOLUMES ] ; do
> MAT=$(echo ${MATs} | cut -d " " -f ${i});
> #echo $MAT
>
> output=$(avscale --allparams ${MAT} | head -2 | tail -1)
> m11=$(echo $output | cut -d " " -f 1)
> m12=$(echo $output | cut -d " " -f 2)
> m13=$(echo $output | cut -d " " -f 3)
> m11=$(printf "%1.7f" $m11)
> m12=$(printf "%1.7f" $m12)
> m13=$(printf "%1.7f" $m13)
>
> output=$(avscale --allparams ${MAT} | head -3 | tail -1)
> m21=$(echo $output | cut -d " " -f 1)
> m22=$(echo $output | cut -d " " -f 2)
> m23=$(echo $output | cut -d " " -f 3)
> m21=$(printf "%1.7f" $m21)
> m22=$(printf "%1.7f" $m22)
> m23=$(printf "%1.7f" $m23)
>
> output=$(avscale --allparams ${MAT} | head -4 | tail -1)
> m31=$(echo $output | cut -d " " -f 1)
> m32=$(echo $output | cut -d " " -f 2)
> m33=$(echo $output | cut -d " " -f 3)
> m31=$(printf "%1.7f" $m31)
> m32=$(printf "%1.7f" $m32)
> m33=$(printf "%1.7f" $m33)
>
> X=$(echo $Xs | cut -d " " -f "$i")
> Y=$(echo $Ys | cut -d " " -f "$i")
> Z=$(echo $Zs | cut -d " " -f "$i")
> X=$(printf "%1.7f" $X)
> Y=$(printf "%1.7f" $Y)
> Z=$(printf "%1.7f" $Z)
>
> rX=$(echo "scale=7; ($m11 * $X) + ($m12 * $Y) + ($m13 * $Z)" | bc -l);
> rY=$(echo "scale=7; ($m21 * $X) + ($m22 * $Y) + ($m23 * $Z)" | bc -l);
> rZ=$(echo "scale=7; ($m31 * $X) + ($m32 * $Y) + ($m33 * $Z)" | bc -l);
>
> rX=$(printf "%1.7f" $rX)
> rY=$(printf "%1.7f" $rY)
> rZ=$(printf "%1.7f" $rZ)
>
> # echo $rX" "$rY" "$rZ;
>
> rXs=${rXs}${rX}" ";
> rYs=${rYs}${rY}" ";
> rZs=${rZs}${rZ}" ";
>
> i=$(echo "$i + 1" | bc) ;
> done
>
> echo "$rXs" >> $2;
> echo "$rYs" >> $2;
> echo "$rZs" >> $2;
> #
> ####################################################################
>
> if [ "$KEEP" == "NO" ]; then
> rm $MATs $LIST
> fi
>
--
Saad Jbabdi
University of Oxford, FMRIB Centre
JR Hospital, Headington, OX3 9DU, UK
(+44)1865-222466 (fax 717)
www.fmrib.ox.ac.uk/~saad
|