#!/bin/bash

# exemple d'execució: 
#./testadorRigAfiMRSPMHDW /home/yago/Desktop/ImatgeMedica/3D/Registration /home/yago/Desktop/dades/dadesMRI/3DRegSalem/Lesions/101/Basal/SALEM_101_t1.nii /home/yago/Desktop/dades/dadesMRI/3DRegSalem/Lesions/101/12M/SALEM_101_12M_t1.nii PPPPP 50 3

#definim parametres:
sourceDir=$1
fixed=$2
moving=$3 
outputDir=$4
iterations=$5
mRLevels=$6
regType=$7
lesionsBasal=$8
lesions12M=$9

#iterations divided 25 25 50
iterationsSPMHDW=$(( iterations /2 ))
iterationsRigAfi=$(( iterations /4 ))
iterationsRigAfi=$(( iterationsRigAfi / (mRLevels) ))

currentDir=$(pwd)
matlabScript=$currentDir/SPMHDW.m 

#ep, si cal fer link simbolic!!!
#yago@yago-despatx-gros:/usr/local/bin$ sudo ln -s /usr/local/MATLAB/R2011a/bin/matlab matlab

# Decide wheteher this is a temporal register
if [[ $regType = ATLAS || $regType = ATLASH ]]
then
	temporalRegister=false
else
	temporalRegister=true
fi

echo "********************************************************************************************************** " 
echo "* Testador RigAfi + SPM HDW: Parametres de la prova:"
echo "* Imatge Fixa: $fixed"
echo "* Imatge Mobil: $moving"
echo "* Prefix directori s: $outputDir"
echo "* iteracions, repartides 25,25,50: $iterationsRigAfi $iterationsSPMHDW "
echo "* nivells: $mRLevels  "
echo "********************************************************************************************************** " 

echo "                        **************************************************************************************************** " 
echo "                                 Primera part, registre rigid afi "		  
echo "********************************************************************************************************** " 

$sourceDir/BrainReg 2 $fixed $moving $mRLevels $iterationsRigAfi $mRLevels $iterationsRigAfi > sRigAfiMRSPMHDW$outputDir.txt

#compute moved ground truth so far
#$sourceDir/transformacioRigid rigidTransform.txt $lesionsBasal $lesions12M intermediate1.nii
#$sourceDir/transformacioAfi affineTransform.txt $lesionsBasal intermediate1.nii intermediate2.nii
if ( "$temporalRegister" -eq true ) ; then
$sourceDir/transformacioAfi affineTransform.txt $lesionsBasal $lesions12M intermediate2.nii
fi

echo " " 
echo "                        **************************************************************************************************** " 
echo "                                 PROVANT Registre SPM HDW "		  
echo " executo:  "
echo "                        **************************************************************************************************** " 

# Copy files to make it easier to compute jacobians
cp $fixed $currentDir"/Fixa.nii"
cp outputRigAfi.nii $currentDir"/Mobil.nii"

#write matlab script
echo "spm('defaults','fmri');" > $matlabScript
echo "spm_jobman('initcfg');" >> $matlabScript
echo "ref = '$currentDir"/Fixa.nii"'" >> $matlabScript
echo "mov = '$currentDir"/Mobil.nii"'" >> $matlabScript
echo "jac = '$currentDir"/jy_Mobil.nii"'" >> $matlabScript

echo "lesIntermediate = '$currentDir"/intermediate2.nii"'" >> $matlabScript

echo "matlabbatch{1}.spm.tools.hdw.data.ref = {ref};" >> $matlabScript
echo "matlabbatch{1}.spm.tools.hdw.data.mov = {mov};" >> $matlabScript
echo "matlabbatch{1}.spm.tools.hdw.bias_opts.nits = 8;" >> $matlabScript
echo "matlabbatch{1}.spm.tools.hdw.bias_opts.fwhm = 60;" >> $matlabScript
echo "matlabbatch{1}.spm.tools.hdw.bias_opts.reg = 1e-06;" >> $matlabScript
echo "matlabbatch{1}.spm.tools.hdw.bias_opts.lmreg = 1e-06;" >> $matlabScript
echo "matlabbatch{1}.spm.tools.hdw.warp_opts.nits = $iterationsSPMHDW;" >> $matlabScript
echo "matlabbatch{1}.spm.tools.hdw.warp_opts.reg = 4;" >> $matlabScript

echo "matlabbatch{2}.spm.util.imcalc.input = {mov,jac};" >> $matlabScript
echo "matlabbatch{2}.spm.util.imcalc.output = 'outputRigAfiMRSPMHDW.nii';" >> $matlabScript
echo "matlabbatch{2}.spm.util.imcalc.outdir = {''};" >> $matlabScript
echo "matlabbatch{2}.spm.util.imcalc.expression = 'i1.*(i2)';" >> $matlabScript
echo "matlabbatch{2}.spm.util.imcalc.options.dmtx = 0;" >> $matlabScript
echo "matlabbatch{2}.spm.util.imcalc.options.mask = 0;" >> $matlabScript
echo "matlabbatch{2}.spm.util.imcalc.options.interp = 1;" >> $matlabScript
echo "matlabbatch{2}.spm.util.imcalc.options.dtype = 4;" >> $matlabScript

if ( "$temporalRegister" -eq true ) ; then
echo "matlabbatch{3}.spm.util.imcalc.input = {lesIntermediate,jac};" >> $matlabScript
echo "matlabbatch{3}.spm.util.imcalc.output = 'deformedLesions.nii';" >> $matlabScript
echo "matlabbatch{3}.spm.util.imcalc.outdir = {''};" >> $matlabScript
echo "matlabbatch{3}.spm.util.imcalc.expression = 'i1.*(i2)';" >> $matlabScript
echo "matlabbatch{3}.spm.util.imcalc.options.dmtx = 0;" >> $matlabScript
echo "matlabbatch{3}.spm.util.imcalc.options.mask = 0;" >> $matlabScript
echo "matlabbatch{3}.spm.util.imcalc.options.interp = 1;" >> $matlabScript
echo "matlabbatch{3}.spm.util.imcalc.options.dtype = 4;" >> $matlabScript
fi

#cat $matlabScript

echo "addpath /home/yago/Desktop/ImatgeMedica/spm8">dummi.m
echo "addpath $currentDir" >>dummi.m
echo "spm_jobman('run', '$matlabScript');">>dummi.m
cat dummi.m

echo " executo: 	 "
matlab -nodisplay  <dummi.m >>sRigAfiMRSPMHDW$outputDir.txt

mkdir filesRigAfiMRSPMHDW\_$outputDir

# compute difference images
$sourceDir/imageDifference $fixed outputRigAfiMRSPMHDW.nii diffRigAfiMRSPMHDW"After".nii
if ( "$temporalRegister" -eq true ) ; then
$sourceDir/imageDifference $fixed $moving diffRigAfiMRSPMHDW"Before"r.nii
fi

#move dicom files
mv "diff"*.nii filesRigAfiMRSPMHDW\_$outputDir
mv outputRigAfiMRSPMHDW.nii filesRigAfiMRSPMHDW\_$outputDir
mv outputRigAfi.nii filesRigAfiMRSPMHDW\_$outputDir

#move lesion information
if ( "$temporalRegister" -eq true ) ; then
cp $lesionsBasal ./lesionsBasal.nii
cp $lesions12M ./lesions12M.nii

mv lesionsBasal.nii filesRigAfiMRSPMHDW\_$outputDir
mv lesions12M.nii filesRigAfiMRSPMHDW\_$outputDir
mv deformedLesions.nii filesRigAfiMRSPMHDW\_$outputDir
mv intermediate*.nii filesRigAfiMRSPMHDW\_$outputDir
fi

#move the rest
mv sRigAfiMRSPMHDW$outputDir.txt filesRigAfiMRSPMHDW\_$outputDir

#move rigid and affine transformations
mv affineTransform.txt filesRigAfiMRSPMHDW\_$outputDir
mv rigidTransform.txt filesRigAfiMRSPMHDW\_$outputDir
mv $currentDir"/jy_Mobil.nii" filesRigAfiMRSPMHDW\_$outputDir

rm $currentDir"/Fixa.nii"
rm $currentDir"/Mobil.nii"
#rm $matlabScript
rm dummi.m
