--- a +++ b/GWR/groupwise_niftyreg_run.sh @@ -0,0 +1,557 @@ +#!/bin/sh + +#### What could be done ################################################################## +# - add a preprocessing step in order to intensity normalise all the input images ??? +# - Any other ? +########################################################################################## + + +if [ $# -lt 1 ] +then + echo "" + echo "*******************************************************************************" + echo "One argument is expected to run this script:" + echo "- File with contains the altas creation parameters" + echo "example: $0 param_groupwise_niftyreg.sh " + echo "*******************************************************************************" + echo "" + exit +fi + + +############################################################################# +# read the input parameters +. $1 + +############################################################################# +## the argument value are checked +if [ ${#IMG_INPUT[@]} -lt 2 ] +then + echo "Less than 2 images have been specified" + echo "Exit ..." + exit +fi + +if [ ! -e ${TEMPLATE} ] +then + echo "The template image (${TEMPLATE}) does not exist" + echo "Exit ..." + exit +fi + +if [ "${TEMPLATE_MASK}" != "" ] && [ ! -f ${TEMPLATE_MASK} ] +then + echo "The template image mask (${TEMPLATE_MASK}) does not exist" + echo "Exit ..." +fi + +IMG_NUMBER=${#IMG_INPUT[@]} +MASK_NUMBER=${#IMG_INPUT_MASK[@]} +if [ ${MASK_NUMBER} -gt 0 ] && [ ! -f ${IMG_INPUT_MASK[0]} ] \ + && [ ${MASK_NUMBER} != ${IMG_NUMBER} ] +then + echo "The number of images is different from the number of floating masks" + echo "Exit ..." + exit +fi + +############################################################################# +## SET UP THE NIFTYREG EXECUTABLES +AFFINE=reg_aladin +NRR=reg_f3d +RES=reg_resample +AVERAGE=reg_average +TRANS=reg_transform +TOOLS=reg_tools + +############################################################################# +echo "" +echo "************************************************************" +echo ">>> There are ${IMG_NUMBER} input images to groupwise register <<<" +echo ">>> The template image to initialise the registration is ${TEMPLATE} <<<" +echo "************************************************************" +echo "" +############################################################################# +# CREATE THE RESULT FOLDER +if [ ! -d ${RES_FOLDER} ] +then + echo "The output image folder (${RES_FOLDER}) does not exist" + mkdir ${RES_FOLDER} + if [ ! -d ${RES_FOLDER} ] + then + echo "Unable to create the ${RES_FOLDER} folder" + echo "Exit ..." + exit + else + echo "The output image folder (${RES_FOLDER}) has been created" + fi +fi + +############################################################################# +############################################################################# +# PERFORM THE RIGID/AFFINE REGISTRATION + +# The initial average image is as specified by the user +averageImage=${TEMPLATE} + +# Loop over all iterations +for (( CUR_IT=1; CUR_IT<=${AFF_IT_NUM}; CUR_IT++ )) +do + # Check if the iteration has already been performed + if [ ! -f ${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz ] + then + ############################# + # Create a folder to store the result + if [ ! -d ${RES_FOLDER}/aff_${CUR_IT} ] + then + mkdir ${RES_FOLDER}/aff_${CUR_IT} + fi + + ############################# + # Run the rigid or affine registration + if [ "`which sbatch 2> /dev/null`" == "" ] + then + # All registration are performed serially + for (( i=0 ; i<${IMG_NUMBER}; i++ )) + do + name=`basename ${IMG_INPUT[${i}]} .gz` + name=`basename ${name} .nii` + name=`basename ${name} .hdr` + name=`basename ${name} .img` + # Check if the registration has already been performed + if [ ! -f ${RES_FOLDER}/aff_${CUR_IT}/aff_mat_${name}_it${CUR_IT}.txt ] + then + aladin_args="" + # Registration is forced to be rigid for the first step + if [ ${CUR_IT} == 1 ] + then + aladin_args="-rigOnly" + else + # Check if a previous affine can be use for initialisation + if [ -f ${RES_FOLDER}/aff_`expr ${CUR_IT} - 1`/aff_mat_${name}_it`expr ${CUR_IT} - 1`.txt ] + then + aladin_args="-inaff \ + ${RES_FOLDER}/aff_`expr ${CUR_IT} - 1`/aff_mat_${name}_it`expr ${CUR_IT} - 1`.txt" + fi + fi + # Check if a mask has been specified for the reference image + if [ "${TEMPLATE_MASK}" != "" ] + then + aladin_args="${aladin_args} -rmask ${TEMPLATE_MASK}" + fi + # Check if a mask has been specified for the floating image + if [ ${MASK_NUMBER} == ${IMG_NUMBER} ] + then + aladin_args="${aladin_args} -fmask ${IMG_INPUT_MASK[${i}]}" + fi + result="/dev/null" + if [ "${CUR_IT}" == "${AFF_IT_NUM}" ] + then + result="${RES_FOLDER}/aff_${CUR_IT}/aff_res_${name}_it${CUR_IT}.nii.gz" + fi + # Perform the registration + reg_aladin ${AFFINE_args} ${aladin_args} \ + -ref ${averageImage} \ + -flo ${IMG_INPUT[${i}]} \ + -aff ${RES_FOLDER}/aff_${CUR_IT}/aff_mat_${name}_it${CUR_IT}.txt \ + -res ${result} > ${RES_FOLDER}/aff_${CUR_IT}/aff_log_${name}_it${CUR_IT}.txt + if [ ! -f ${RES_FOLDER}/aff_${CUR_IT}/aff_mat_${name}_it${CUR_IT}.txt ] + then + echo "Error when creating \ + ${RES_FOLDER}/aff_${CUR_IT}/aff_mat_${name}_it${CUR_IT}.txt" + exit + fi + fi + done + else + # Create shell script to run all jobs in an array + echo \#\!/bin/bash > ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + + if [ $[avg_aff_`expr ${CUR_IT} - 1`_${$}] -ne 0 ]; then + echo "#SBATCH --dependency=afterok:$[avg_aff_`expr ${CUR_IT} - 1`_${$}]" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + fi + + # Define the current image index + echo "img_number=\`expr \$SLURM_ARRAY_TASK_ID - 1\`" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + echo ". `readlink -f $1`" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + # Extract the name of the file without the path and the extension + echo "name=\`basename \${IMG_INPUT[\$img_number]} .gz\`" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + echo "name=\`basename \$name .nii\`" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + echo "name=\`basename \$name .hdr\`" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + echo "name=\`basename \$name .img\`" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + # Check that the registration has not already been performed + echo "if [ ! -e ${RES_FOLDER}/aff_${CUR_IT}/aff_mat_\${name}_it${CUR_IT}.txt ]" >> \ + ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + echo "then" >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + # Check if an input affine is available + echo "trans_affine=${RES_FOLDER}/aff_`expr ${CUR_IT} - 1`/aff_mat_\${name}_it`expr ${CUR_IT} - 1`.txt" >> \ + ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + # Set up the registration argument + echo "${AFFINE} ${AFFINE_args} \\" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + echo "-ref ${averageImage} \\" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + echo "-flo \${IMG_INPUT[img_number]} \\" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + echo "-aff ${RES_FOLDER}/aff_${CUR_IT}/aff_mat_\${name}_it${CUR_IT}.txt \\" >> \ + ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + result="/dev/null" + if [ "${CUR_IT}" == "${AFF_IT_NUM}" ] + then + result="${RES_FOLDER}/aff_${CUR_IT}/aff_res_\${name}_it${CUR_IT}.nii.gz" + fi + echo "-res ${result} \\" >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + if [ "${TEMPLATE_MASK}" != "" ]; then + echo "-rmask ${TEMPLATE_MASK} \\" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + fi + if [ ${MASK_NUMBER} == ${IMG_NUMBER} ]; then + echo "-fmask \${IMG_INPUT_MASK[\$img_number]} \\" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + fi + # If this is the first iteration. The registration is forced to be rigid + # Otherwise the previous affine is used for initialisation + if [ ${CUR_IT} == 1 ] + then + echo "-rigOnly" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + else + echo "-inaff \${trans_affine}" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + fi + echo "fi" >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh + ## Run the rigid/affine registration - Submit the job array + # Wait to see if the previous iteration average has been created + ID=$(${SBATCH_CMD} \ + --output=${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.out \ + --job-name=aladin_${CUR_IT}_${$} \ + --array=1-${IMG_NUMBER} \ + ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_aladin_${CUR_IT}_${$}.sh) + echo $ID + declare "aladin_${CUR_IT}_${$}=${ID##* }" + fi + + ############################# + if [ "${CUR_IT}" != "${AFF_IT_NUM}" ] + then + # The transformation are demean'ed to create the average image + # Note that this is not done for the last iteration step + list_average="" + for img in ${IMG_INPUT[@]} + do + name=`basename ${img} .gz` + name=`basename ${name} .nii` + name=`basename ${name} .hdr` + name=`basename ${name} .img` + list_average="${list_average} \ + ${RES_FOLDER}/aff_${CUR_IT}/aff_mat_${name}_it${CUR_IT}.txt ${img}" + done + if [ "`which sbatch 2> /dev/null`" == "" ] + then + # The average is created on the host + echo "reg_average \ + ${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz \ + -demean ${averageImage} \ + ${list_average}" + reg_average \ + ${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz \ + -demean ${averageImage} \ + ${list_average} + if [ ! -f ${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz ] + then + echo "Error when creating \ + ${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz" + exit + fi + else # if [ "`which qsub 2> /dev/null`" == "" ] + # The average is performed through the cluster + + echo \#\!/bin/bash > ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.sh + echo "${AVERAGE} \\" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.sh + echo "${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz \\" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.sh + echo "-demean ${averageImage} \\" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.sh + echo "${list_average}" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.sh + + ID=$(${SBATCH_CMD} \ + --dependency=afterok:$[aladin_${CUR_IT}_${$}] \ + --output=${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.out \ + --job-name=avg_aff_${CUR_IT}_${$} \ + ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.sh) + echo $ID + declare "avg_aff_${CUR_IT}_${$}=${ID##* }" + fi # if [ "`which qsub 2> /dev/null`" == "" ] + else # if [ "${CUR_IT}" != "${AFF_IT_NUM}" ] + # All the result images are directly averaged during the last step + if [ "`which sbatch 2> /dev/null`" == "" ] + then + reg_average \ + ${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz \ + -avg \ + `ls ${RES_FOLDER}/aff_${CUR_IT}/aff_res_*_it${CUR_IT}.nii*` + if [ ! -f ${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz ] + then + echo "Error when creating \ + ${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz" + exit + fi + else # if [ "`which qsub 2> /dev/null`" == "" ] + # The average is performed through the cluster + + echo \#\!/bin/bash > ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.sh + echo "${AVERAGE} \\" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.sh + echo "${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz \\" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.sh + echo "-avg ${RES_FOLDER}/aff_${CUR_IT}/aff_res_*_it${CUR_IT}.nii*" \ + >> ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.sh + + ID=$(${SBATCH_CMD} \ + --dependency=afterok:$[aladin_${CUR_IT}_${$}] \ + --output=${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.out \ + --job-name=avg_aff_${CUR_IT}_${$} \ + ${RES_FOLDER}/aff_${CUR_IT}/run_gw_niftyReg_avg_aff_${CUR_IT}_${$}.sh) + echo $ID + declare "avg_aff_${CUR_IT}_${$}=${ID##* }" + fi # if [ "`which qsub 2> /dev/null`" == "" ] + fi # if [ "${CUR_IT}" != "${AFF_IT_NUM}" ] + else # if [ ! -f ${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz ] + echo "${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz already exists" + fi # if [ ! -f ${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz ] + # Update the average image used as a reference + averageImage=${RES_FOLDER}/aff_${CUR_IT}/average_affine_it_${CUR_IT}.nii.gz +done # Loop over affine iteration + + +############################################################################# +############################################################################# +### Non rigid registration loop + +for (( CUR_IT=1; CUR_IT<=${NRR_IT_NUM}; CUR_IT++ )) +do + + ############################# + # Check if the current average image has already been created + if [ ! -f ${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz ] + then + + ############################# + # Create a folder to store the current results + if [ ! -d ${RES_FOLDER}/nrr_${CUR_IT} ] + then + mkdir ${RES_FOLDER}/nrr_${CUR_IT} + fi + + ############################# + # Run the nonrigid registrations + if [ "`which sbatch 2> /dev/null`" == "" ] + then + for (( i=0 ; i<${IMG_NUMBER}; i++ )) + do + name=`basename ${IMG_INPUT[${i}]} .gz` + name=`basename ${name} .nii` + name=`basename ${name} .hdr` + name=`basename ${name} .img` + # Check if the registration has already been performed + if [ ! -f ${RES_FOLDER}/nrr_${CUR_IT}/nrr_cpp_${name}_it${CUR_IT}.nii* ] + then + f3d_args="" + # Check if a mask has been specified for the reference image + if [ "${TEMPLATE_MASK}" != "" ] + then + f3d_args="${f3d_args} -rmask ${TEMPLATE_MASK}" + fi + # Check if a mask has been specified for the floating image + if [ ${MASK_NUMBER} == ${IMG_NUMBER} ] + then + f3d_args="${f3d_args} -fmask ${IMG_INPUT_MASK[${i}]}" + fi + if [ ${AFF_IT_NUM} -gt 0 ] + then + f3d_args="${f3d_args} -aff \ + ${RES_FOLDER}/aff_${AFF_IT_NUM}/aff_mat_${name}_it${AFF_IT_NUM}.txt" + fi + result="/dev/null" + if [ "${CUR_IT}" == "${NRR_IT_NUM}" ] + then + result="${RES_FOLDER}/nrr_${CUR_IT}/nrr_res_${name}_it${CUR_IT}.nii.gz" + fi + # Perform the registration + reg_f3d ${NRR_args} ${f3d_args} \ + -ref ${averageImage} \ + -flo ${IMG_INPUT[${i}]} \ + -cpp ${RES_FOLDER}/nrr_${CUR_IT}/nrr_cpp_${name}_it${CUR_IT}.nii.gz \ + -res ${result} > ${RES_FOLDER}/nrr_${CUR_IT}/nrr_log_${name}_it${CUR_IT}.txt + fi + done + else + echo \#\!/bin/bash > ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + + if [ $[avg_nrr_`expr ${CUR_IT} - 1`_${$}] -ne 0 ] + then + echo "#SBATCH --dependency=afterok:$[avg_aff_${AFF_IT_NUM}_${$}],$[avg_nrr_`expr ${CUR_IT} - 1`_${$}]" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + else + echo "#SBATCH --dependency=afterok:$[avg_aff_${AFF_IT_NUM}_${$}]" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + fi + + # Define the current image index + echo "img_number=\`expr \$SLURM_ARRAY_TASK_ID - 1\`" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + echo ". `readlink -f $1`" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + # Extract the name of the file without the path and the extension + echo "name=\`basename \${IMG_INPUT[\$img_number]} .gz\`" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + echo "name=\`basename \$name .nii\`" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + echo "name=\`basename \$name .hdr\`" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + echo "name=\`basename \$name .img\`" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + # Check that the registration has not already been performed + echo "if [ ! -e ${RES_FOLDER}/nrr_${CUR_IT}/nrr_cpp_\${name}_it${CUR_IT}.nii* ]" >> \ + ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + echo "then" >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + # Set up the registration argument + echo "${NRR} ${NRR_args} \\" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + echo "-ref ${averageImage} \\" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + if [ "${TEMPLATE_MASK}" != "" ]; then + echo "-rmask ${TEMPLATE_MASK} \\" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + fi + echo "-flo \${IMG_INPUT[\$img_number]} \\" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + if [ ${AFF_IT_NUM} -gt 0 ] + then + echo "-aff ${RES_FOLDER}/aff_${AFF_IT_NUM}/aff_mat_\${name}_it${AFF_IT_NUM}.txt \\" >> \ + ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + fi + if [ ${MASK_NUMBER} == ${IMG_NUMBER} ]; then + echo "-fmask \${IMG_INPUT_MASK[\$img_number]} \\" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + fi + echo "-cpp ${RES_FOLDER}/nrr_${CUR_IT}/nrr_cpp_\${name}_it${CUR_IT}.nii.gz \\" >> \ + ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + result="/dev/null" + if [ "${CUR_IT}" == "${NRR_IT_NUM}" ] + then + result="${RES_FOLDER}/nrr_${CUR_IT}/nrr_res_\${name}_it${CUR_IT}.nii.gz" + fi + echo "-res ${result}" >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + echo "fi" >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh + ## Run the nonrigid registrations - Submit the job array + ID=$(${SBATCH_CMD} \ + --output=${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.out \ + --job-name=f3d_${CUR_IT}_${$} \ + --array=1-${IMG_NUMBER} \ + ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_f3d_${CUR_IT}_${$}.sh) + echo $ID + declare "f3d_${CUR_IT}_${$}=${ID##* }" + + fi + + ############################# + # The transformation are demean'ed to create the average image + # Note that this is not done for the last iteration step + if [ "${CUR_IT}" != "${NRR_IT_NUM}" ] + then + list_average="" + for img in ${IMG_INPUT[@]} + do + name=`basename ${img} .gz` + name=`basename ${name} .nii` + name=`basename ${name} .hdr` + name=`basename ${name} .img` + list_average="${list_average} \ + ${RES_FOLDER}/aff_${AFF_IT_NUM}/aff_mat_${name}_it${AFF_IT_NUM}.txt \ + ${RES_FOLDER}/nrr_${CUR_IT}/nrr_cpp_${name}_it${CUR_IT}.nii.gz ${img}" + done + if [ "`which sbatch 2> /dev/null`" == "" ] + then + # The average is created on the host + reg_average \ + ${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz \ + -demean_noaff ${averageImage} \ + ${list_average} + if [ ! -f ${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz ] + then + echo "Error when creating \ + ${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz" + exit + fi + else # if [ "`which qsub 2> /dev/null`" == "" ] + # The average is performed through the cluster + + echo \#\!/bin/bash > ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.sh + echo "${AVERAGE} \\" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.sh + echo "${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz \\" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.sh + echo "-demean_noaff ${averageImage} \\" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.sh + echo "${list_average}" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.sh + + ID=$(${SBATCH_CMD} \ + --dependency=afterok:$[f3d_${CUR_IT}_${$}] \ + --output=${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.out \ + --job-name=avg_nrr_${CUR_IT}_${$} \ + ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.sh) + echo $ID + declare "avg_nrr_${CUR_IT}_${$}=${ID##* }" + fi # if [ "`which qsub 2> /dev/null`" == "" ] + else # if [ "${CUR_IT}" != "${NRR_IT_NUM}" ] + # All the result images are directly averaged during the last step + if [ "`which sbatch 2> /dev/null`" == "" ] + then + reg_average \ + ${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz \ + -avg \ + `ls ${RES_FOLDER}/nrr_${CUR_IT}/nrr_res_*_it${CUR_IT}.nii*` + if [ ! -f ${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz ] + then + echo "Error when creating \ + ${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz" + exit + fi + else # if [ "`which qsub 2> /dev/null`" == "" ] + # The average is performed through the cluster + + echo \#\!/bin/bash > ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.sh + echo "${AVERAGE} \\" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.sh + echo "${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz \\" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.sh + echo "-avg ${RES_FOLDER}/nrr_${CUR_IT}/nrr_res_*_it${CUR_IT}.nii*" \ + >> ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.sh + + ID=$(${SBATCH_CMD} \ + --dependency=afterok:$[f3d_${CUR_IT}_${$}] \ + --output=${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.out \ + --job-name=avg_nrr_${CUR_IT}_${$} \ + ${RES_FOLDER}/nrr_${CUR_IT}/run_gw_niftyReg_avg_nrr_${CUR_IT}_${$}.sh) + echo $ID + declare "avg_nrr_${CUR_IT}_${$}=${ID##* }" + fi # if [ "`which qsub 2> /dev/null`" == "" ] + fi # if [ "${CUR_IT}" != "${NRR_IT_NUM}" ] + else # if [ ! -f ${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz ] + echo "${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz already exists" + fi # if [ ! -f ${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz ] + # Update the average image + averageImage=${RES_FOLDER}/nrr_${CUR_IT}/average_nonrigid_it_${CUR_IT}.nii.gz +done +#############################################################################