Switch to unified view

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