diff --git a/rotate_bvecs b/rotate_bvecs new file mode 100755 index 0000000000000000000000000000000000000000..2e7dec8e30ba7a9fad3d18b2e514c147f8f6f155 --- /dev/null +++ b/rotate_bvecs @@ -0,0 +1,93 @@ +#!/bin/sh + +if [ "$2" == "" ];then + echo "" + echo "Usage: rotate_bvecs <ecclogfile> <bvecs>" + echo "will save bvecs file into <bvecs>_old and create new bvecs file called <bvecs>" + echo "" + exit 1 +fi + +ecclog=$1 +bvecs=$2 +/bin/cp ${bvecs} ${bvecs}_old +#/bin/rm -f ${bvecs} + + +# this only works if the bvecs are in lines... +Xs=$(cat ${bvecs}_old | head -1 | tail -1) +Ys=$(cat ${bvecs}_old | head -2 | tail -1) +Zs=$(cat ${bvecs}_old | head -3 | tail -1) + +rnd=${$} +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=/tmp/grot${rnd}_${matfile}.mat; + + # 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 + +# now use these files +i=1 +for matfile in /tmp/grot${rnd}_*.mat;do + + # read that file from disk and extract params + output=`avscale --allparams ${matfile} | head -2 | tail -1` + m11=`echo $output | awk '{print $1}' | sed 's/E/\\*10\\^/' | sed 's/e/\\*10\\^/' | sed 's/+//'` + m12=`echo $output | awk '{print $2}' | sed 's/E/\\*10\\^/' | sed 's/e/\\*10\\^/' | sed 's/+//'` + m13=`echo $output | awk '{print $3}' | sed 's/E/\\*10\\^/' | sed 's/e/\\*10\\^/' | sed 's/+//'` + + output=`avscale --allparams ${matfile} | head -3 | tail -1` + m21=`echo $output | awk '{print $1}' | sed 's/E/\\*10\\^/' | sed 's/e/\\*10\\^/' | sed 's/+//'` + m22=`echo $output | awk '{print $2}' | sed 's/E/\\*10\\^/' | sed 's/e/\\*10\\^/' | sed 's/+//'` + m23=`echo $output | awk '{print $3}' | sed 's/E/\\*10\\^/' | sed 's/e/\\*10\\^/' | sed 's/+//'` + + output=`avscale --allparams ${matfile} | head -4 | tail -1` + m31=`echo $output | awk '{print $1}' | sed 's/E/\\*10\\^/' | sed 's/e/\\*10\\^/' | sed 's/+//'` + m32=`echo $output | awk '{print $2}' | sed 's/E/\\*10\\^/' | sed 's/e/\\*10\\^/' | sed 's/+//'` + m33=`echo $output | awk '{print $3}' | sed 's/E/\\*10\\^/' | sed 's/e/\\*10\\^/' | sed 's/+//'` + + X=`echo $Xs | cut -d " " -f "$i" | sed 's/E/\\*10\\^/' | sed 's/e/\\*10\\^/' | sed 's/+//'` + Y=`echo $Ys | cut -d " " -f "$i" | sed 's/E/\\*10\\^/' | sed 's/e/\\*10\\^/' | sed 's/+//'` + Z=`echo $Zs | cut -d " " -f "$i" | sed 's/E/\\*10\\^/' | sed 's/e/\\*10\\^/' | sed 's/+//'` + + # apply rotation + 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); + + + # reformat + rX=$(printf "%1.7g" $rX) + rY=$(printf "%1.7g" $rY) + rZ=$(printf "%1.7g" $rZ) + + + # concatenate + rXs=${rXs}${rX}" "; + rYs=${rYs}${rY}" "; + rZs=${rZs}${rZ}" "; + + i=$(echo "$i + 1" | bc) ; +done + +echo "$rXs" > ${bvecs}; +echo "$rYs" >> ${bvecs}; +echo "$rZs" >> ${bvecs}; +