|
a |
|
b/depreciated/for_cluster/labfusion.sh |
|
|
1 |
# Structural Parcellation shell script (SGE) |
|
|
2 |
# Author: Ma Da (d.ma.11@ucl.ac.uk) |
|
|
3 |
#!/bin/bash |
|
|
4 |
# echo "Bash version ${BASH_VERSION}..." |
|
|
5 |
|
|
|
6 |
# $1: enquiry image |
|
|
7 |
# $2: atlas folder "in_vivo" or "ex_vivo" |
|
|
8 |
# $3: if exist, read user defined parameters |
|
|
9 |
echo "***************************************************" |
|
|
10 |
echo "* CAUTION!! DO NOT use the same name as the atlas *" |
|
|
11 |
echo "* if it is not for leave-one-out testing *" |
|
|
12 |
echo "***************************************************" |
|
|
13 |
echo "usage: parcellation.sh new_image corresponding_mask atlas_folder" |
|
|
14 |
|
|
|
15 |
# setup default value for parameters |
|
|
16 |
ROOT_DIR=$(pwd) |
|
|
17 |
export QSUB_CMD="qsub -l h_rt=5:00:00 -pe smp 1 -R y -l h_vmem=2G -l tmem=2G -j y -S /bin/sh -b y -cwd -V -o job_output -e job_error" # old flag: -l s_stack=128M |
|
|
18 |
export QSUB_CMD_ONE_CORE="qsub -l h_rt=5:00:00 -pe smp 1 -R y -l h_vmem=2G -l tmem=2G -j y -S /bin/sh -b y -cwd -V -o job_output -e job_error" # old flag: -l s_stack=128M |
|
|
19 |
export QSUB_SEG_MATH="qsub -l h_rt=1:00:00 -pe smp 1 -R y -l h_vmem=9G -l tmem=9G -j y -S /bin/sh -b y -cwd -V -o job_output -e job_error" # -l s_stack=128M |
|
|
20 |
PARCELLATION_NNR="-ln 4 -lp 4 -sx -3" |
|
|
21 |
DILATE=3 # value to be dilated for the result mask |
|
|
22 |
LABFUSION="-STEPS" |
|
|
23 |
LABFUSION_OPTION="-v 1" # parameter options for STAPLE or STEPS in seg_LabFusion |
|
|
24 |
MASK_AFF="" |
|
|
25 |
|
|
|
26 |
# Set STEPS parameters |
|
|
27 |
if [[ -z $k ]] && [[ -z $n ]]; then # if STEPS parameter is not set |
|
|
28 |
# set default STEPS parameter to: "3 8 " |
|
|
29 |
export k=3 |
|
|
30 |
export n=8 |
|
|
31 |
fi |
|
|
32 |
export STEPS_PARAMETER="${k} ${n} " |
|
|
33 |
|
|
|
34 |
FULL_TEST_NAME=$(basename $1) |
|
|
35 |
TEST_NAME=`echo "$FULL_TEST_NAME" | cut -d'.' -f1` |
|
|
36 |
echo "Creating parcellation label for: "$TEST_NAME |
|
|
37 |
ATLAS=$(basename $2) |
|
|
38 |
|
|
|
39 |
# Read user-defined parameters |
|
|
40 |
if [ ! -z $3 ]; then # check if there is a 4th argument |
|
|
41 |
if [ -f $3 ]; then # check if the file specified by 4th argument exist |
|
|
42 |
. $3 # if file of 4th argument exist, read the parameters from the file |
|
|
43 |
fi |
|
|
44 |
fi |
|
|
45 |
|
|
|
46 |
if [ ! -d job_output ]; then mkdir job_output; fi |
|
|
47 |
if [ ! -d job_error ]; then mkdir job_error; fi |
|
|
48 |
if [ ! -d temp/${ATLAS} ]; then mkdir -p temp/${ATLAS}; fi |
|
|
49 |
if [ ! -d mask/${ATLAS} ]; then mkdir -p mask/${ATLAS}; fi |
|
|
50 |
if [ ! -d label/${ATLAS} ]; then mkdir -p label/${ATLAS}; fi |
|
|
51 |
|
|
|
52 |
# echo "*********************************************" |
|
|
53 |
# echo "* Segmentation pipeline for mouse brain MRI *" |
|
|
54 |
# echo "* for ${TEST_NAME} *" |
|
|
55 |
# echo "* using multi-atlas label fusion methods *" |
|
|
56 |
# echo "* step 2 - structural parcellation *" |
|
|
57 |
# echo "*********************************************" |
|
|
58 |
# echo "usage: parcellation new_image mask atlas_type (in_vivo/ex_vivo)" |
|
|
59 |
|
|
|
60 |
# start structural parcellation |
|
|
61 |
echo "Creating label for: "$TEST_NAME |
|
|
62 |
PARAMETER_NUMBER=0 |
|
|
63 |
jid="$$" # generate a random number as job ID |
|
|
64 |
jid_reg="reg_${jid}" |
|
|
65 |
TEST_NAME=`echo "$(basename $1)" | cut -d'.' -f1` |
|
|
66 |
MASK=${MASK_FOLDER}/${TEST_NAME}${MASK_SUFFIX} |
|
|
67 |
MERGE_LABEL="" |
|
|
68 |
for G in `ls $2/template/` |
|
|
69 |
do |
|
|
70 |
NAME=`echo "$G" | cut -d'.' -f1` |
|
|
71 |
jname=${jid_reg}_${TEST_NAME}_${NAME} |
|
|
72 |
# Check testing image name is different from atlas template. If same, skip (for leave-one-out) |
|
|
73 |
if [[ ${3}/template/${NAME} != $1 ]] && [[ ${3}/template/${NAME}.nii != $1 ]] && [[ ${3}/template/${NAME}.nii.gz != $1 ]] && [[ ${3}/template/${NAME}.hdr != $1 ]] |
|
|
74 |
then |
|
|
75 |
# prepare parameters for label fusion |
|
|
76 |
if (( $PARAMETER_NUMBER==0 )); then |
|
|
77 |
FIRST_TEMPLATE="temp/${ATLAS}/${NAME}_${TEST_NAME}_f3d.nii.gz" |
|
|
78 |
FIRST_MASK="mask/${ATLAS}/${TEST_NAME}_nrr_mask_${NAME}.nii.gz" |
|
|
79 |
FIRST_LABEL="label/${ATLAS}/${TEST_NAME}_label_${NAME}.nii.gz" |
|
|
80 |
else |
|
|
81 |
MERGE_TEMPLATE="${MERGE_TEMPLATE} temp/${ATLAS}/${NAME}_${TEST_NAME}_f3d.nii.gz" |
|
|
82 |
MERGE_MASK="${MERGE_MASK} mask/${ATLAS}/${TEST_NAME}_nrr_mask_${NAME}.nii.gz" |
|
|
83 |
MERGE_LABEL="${MERGE_LABEL} label/${ATLAS}/${TEST_NAME}_label_${NAME}.nii.gz" |
|
|
84 |
fi |
|
|
85 |
let PARAMETER_NUMBER+=1 |
|
|
86 |
else |
|
|
87 |
echo -e "Atlas image name ${TEST_NAME} is same as test image, skipped" |
|
|
88 |
fi |
|
|
89 |
done |
|
|
90 |
let PARAMETER_NUMBER-=1 |
|
|
91 |
|
|
|
92 |
# Prepare 4D images for label fusion |
|
|
93 |
jid_4d="merge4d_${TEST_NAME}" |
|
|
94 |
|
|
|
95 |
# create average rough mask to reduce memory usage for label fusion |
|
|
96 |
if [ ! -f mask/${ATLAS}/${TEST_NAME}_nrr_mask_avg_bin.nii.gz ]; then |
|
|
97 |
jid_4d_nrr_mask_avg="${jid_4d}_nrr_mask_avg" |
|
|
98 |
${QSUB_CMD} -hold_jid ${jid_reg}_* -N ${jid_4d_nrr_mask_avg} \ |
|
|
99 |
reg_average mask/${ATLAS}/${TEST_NAME}_nrr_mask_avg.nii.gz -avg $FIRST_MASK $MERGE_MASK |
|
|
100 |
jid_4d_nrr_mask_avg_bin="${jid_4d}_nrr_mask_avg_bin" |
|
|
101 |
${QSUB_CMD} -hold_jid ${jid_4d_nrr_mask_avg}_* -N ${jid_4d_nrr_mask_avg_bin} \ seg_maths mask/${ATLAS}/${TEST_NAME}_nrr_mask_avg.nii.gz -bin -dil ${DILATE} mask/${ATLAS}/${TEST_NAME}_nrr_mask_avg_bin.nii.gz |
|
|
102 |
fi |
|
|
103 |
|
|
|
104 |
MASK="mask/${ATLAS}/${TEST_NAME}_nrr_mask_avg_bin.nii.gz" |
|
|
105 |
|
|
|
106 |
# merge 4D masks if not done yet |
|
|
107 |
if [ ! -f mask/${ATLAS}/${TEST_NAME}_nrr_mask_4D.nii.gz ]; then |
|
|
108 |
jid_4d_nrr_mask="${jid_4d}_nrr_mask"; |
|
|
109 |
${QSUB_SEG_MATH} -N ${jid_4d_nrr_mask} \ |
|
|
110 |
seg_maths $FIRST_MASK -v -merge $PARAMETER_NUMBER 4 $MERGE_MASK mask/${ATLAS}/${TEST_NAME}_nrr_mask_4D.nii.gz |
|
|
111 |
else |
|
|
112 |
jid_4d_nrr_mask="${jid_4d}_skip" |
|
|
113 |
${QSUB_CMD} -N ${jid_4d_nrr_mask} echo "4D mask already exist, skip merging again" |
|
|
114 |
fi |
|
|
115 |
# merge 4D labels if not done yet |
|
|
116 |
if [ ! -f label/${ATLAS}/${TEST_NAME}_label_4D.nii.gz ]; then |
|
|
117 |
jid_4d_label="${jid_4d}_label" |
|
|
118 |
${QSUB_SEG_MATH} -N ${jid_4d_label} \ |
|
|
119 |
seg_maths $FIRST_LABEL -v -merge $PARAMETER_NUMBER 4 $MERGE_LABEL label/${ATLAS}/${TEST_NAME}_label_4D.nii.gz |
|
|
120 |
else |
|
|
121 |
jid_4d_label="${jid_4d}_label" |
|
|
122 |
${QSUB_CMD} -N ${jid_4d_label} echo "4D label already exist, skip merging again" |
|
|
123 |
fi |
|
|
124 |
|
|
|
125 |
# Start label fusion |
|
|
126 |
export jid_LabFusion="LabFusion_${TEST_NAME}" |
|
|
127 |
# Determine which label fusion method to use |
|
|
128 |
if [ ${LABFUSION} == "-STEPS" ]; then |
|
|
129 |
# merge 4D template if not done yet |
|
|
130 |
if [ ! -f label/${ATLAS}/${TEST_NAME}_template_4D.nii.gz ]; then |
|
|
131 |
jid_4d_tempate="${jid_4d}_template" |
|
|
132 |
${QSUB_SEG_MATH} -N ${jid_4d_tempate} seg_maths $FIRST_TEMPLATE -v -merge $PARAMETER_NUMBER 4 $MERGE_TEMPLATE label/${ATLAS}/${TEST_NAME}_template_4D.nii.gz |
|
|
133 |
else |
|
|
134 |
jid_4d_tempate="${jid_4d}_template" |
|
|
135 |
${QSUB_CMD} -N ${jid_4d_tempate} echo "4D template already exist, skip merging again" |
|
|
136 |
fi |
|
|
137 |
# create final label using label fusion |
|
|
138 |
${QSUB_SEG_MATH} -hold_jid ${jid_4d}_* -N ${jid_LabFusion} \ |
|
|
139 |
seg_LabFusion\ |
|
|
140 |
-in label/${ATLAS}/${TEST_NAME}_label_4D.nii.gz \ |
|
|
141 |
-mask ${MASK}\ |
|
|
142 |
-STEPS ${k} ${n} $1 label/${ATLAS}/${TEST_NAME}_template_4D.nii.gz ${LABFUSION_OPTION} \ |
|
|
143 |
-out label/${TEST_NAME}_label_${ATLAS}_STEPS_${k}_${n}.nii.gz |
|
|
144 |
# jid_NRR_mask="NRR_mask_${TEST_NAME}" |
|
|
145 |
# ${QSUB_CMD} -hold_jid ${jid_4d}_* -N ${jid_NRR_mask} seg_LabFusion -in mask/${ATLAS}/${TEST_NAME}_nrr_mask_4D.nii.gz -mask ${MASK} -STEPS ${k} ${n} $1 label/${ATLAS}/${TEST_NAME}_template_4D.nii.gz ${LABFUSION_OPTION} -out mask/${TEST_NAME}_mask_${ATLAS}_NRR_STEPS_${k}_${n}.nii.gz |
|
|
146 |
# jid_NRR_mask_dilate="dil_NRR_mask_${TEST_NAME}" |
|
|
147 |
# ${QSUB_CMD} -hold_jid ${jid_NRR_mask} -N ${jid_NRR_mask_dilate} seg_maths mask/${TEST_NAME}_mask_${ATLAS}_NRR_STEPS_${k}_${n}.nii.gz -dil ${DILATE} mask/${TEST_NAME}_mask_${ATLAS}_NRR_STEPS_${k}_${n}_d${DILATE}.nii.gz |
|
|
148 |
elif [ ${LABFUSION} == "-STAPLE" ]; then |
|
|
149 |
${QSUB_SEG_MATH} -hold_jid ${jid_4d}_* -N ${jid_LabFusion} \ |
|
|
150 |
seg_LabFusion\ |
|
|
151 |
-in label/${ATLAS}/${TEST_NAME}_label_4D.nii.gz \ |
|
|
152 |
-mask ${MASK}\ |
|
|
153 |
-STAPLE ${LABFUSION_OPTION} \ |
|
|
154 |
-out label/${TEST_NAME}_label_${ATLAS}_STAPLE.nii.gz |
|
|
155 |
elif [ ${LABFUSION} == "-SBA" ]; then |
|
|
156 |
${QSUB_SEG_MATH} -hold_jid ${jid_4d}_* -N ${jid_LabFusion} \ |
|
|
157 |
seg_LabFusion\ |
|
|
158 |
-in label/${ATLAS}/${TEST_NAME}_label_4D.nii.gz \ |
|
|
159 |
-mask ${MASK}\ |
|
|
160 |
-SBA ${LABFUSION_OPTION} \ |
|
|
161 |
-out label/${TEST_NAME}_label_${ATLAS}_SBA.nii.gz |
|
|
162 |
else # elif [[ ${LABFUSION }== "-MV" ]]; then |
|
|
163 |
${QSUB_SEG_MATH} -hold_jid ${jid_4d}_* -N ${jid_LabFusion} \ |
|
|
164 |
seg_LabFusion\ |
|
|
165 |
-in label/${ATLAS}/${TEST_NAME}_label_4D.nii.gz \ |
|
|
166 |
-mask ${MASK}\ |
|
|
167 |
-MV ${LABFUSION_OPTION} \ |
|
|
168 |
-out label/${TEST_NAME}_label_${ATLAS}_MV.nii.gz |
|
|
169 |
fi |
|
|
170 |
|
|
|
171 |
|
|
|
172 |
|
|
|
173 |
|
|
|
174 |
|
|
|
175 |
|
|
|
176 |
|
|
|
177 |
|