@@ -45,21 +45,21 @@ label_if_does_not_exist() {
4545 # - If it doesn't, perform automatic labeling.
4646 # This allows you to add manual labels on a subject-by-subject basis without disrupting the pipeline.
4747 # ##
48- local file=" $1 "
49- local file_seg=" $2 "
48+ local file=" ${1} "
49+ local file_seg=" ${2} "
5050 # Update global variable with segmentation file name
51- FILELABEL=" ${file} _labels "
52- FILELABELMANUAL=" ${PATH_DATA} /derivatives/labels/${SUBJECT} /anat/${FILELABEL} -manual.nii.gz"
53- echo " Looking for manual label: $FILELABELMANUAL "
54- if [[ -e $ FILELABELMANUAL ]]; then
51+ FILELABEL=" ${file} " _labels
52+ FILELABELMANUAL=" ${PATH_DATA} " /derivatives/labels/" ${SUBJECT} " /anat/" ${FILELABEL} " -manual.nii.gz
53+ echo " Looking for manual label: ${ FILELABELMANUAL} "
54+ if [[ -e " ${ FILELABELMANUAL} " ]]; then
5555 echo " Found! Using manual labels."
56- rsync -avzh $ FILELABELMANUAL ${FILELABEL} .nii.gz
56+ rsync -avzh " ${ FILELABELMANUAL} " " ${FILELABEL} " .nii.gz
5757 else
5858 echo " Not found. Proceeding with automatic labeling."
5959 # Generate labeled segmentation
60- sct_label_vertebrae -i ${file} .nii.gz -s ${file_seg} .nii.gz -c t2 -qc " ${PATH_QC} " -qc-subject " ${SUBJECT} "
60+ sct_label_vertebrae -i " ${file} " .nii.gz -s " ${file_seg} " .nii.gz -c t2 -qc " ${PATH_QC} " -qc-subject " ${SUBJECT} "
6161 # Create labels in the cord at C3 and C5 mid-vertebral levels
62- sct_label_utils -i ${file_seg} _labeled.nii.gz -vert-body 3,5 -o ${FILELABEL} .nii.gz
62+ sct_label_utils -i " ${file_seg} " _labeled.nii.gz -vert-body 3,5 -o " ${FILELABEL} " .nii.gz
6363 fi
6464}
6565
@@ -70,21 +70,21 @@ segment_if_does_not_exist() {
7070 # - If it doesn't, perform automatic spinal cord segmentation.
7171 # This allows you to add manual segmentations on a subject-by-subject basis without disrupting the pipeline.
7272 # ##
73- local file=" $1 "
74- local contrast=" $2 "
73+ local file=" ${1} "
74+ local contrast=" ${2} "
7575 # Update global variable with segmentation file name
76- FILESEG=" ${file} _seg "
77- FILESEGMANUAL=" ${PATH_DATA} /derivatives/labels/${SUBJECT} /anat/${FILESEG} -manual.nii.gz"
76+ FILESEG=" ${file} " _seg
77+ FILESEGMANUAL=" ${PATH_DATA} " /derivatives/labels/" ${SUBJECT} " /anat/" ${FILESEG} " -manual.nii.gz
7878 echo
79- echo " Looking for manual segmentation: $FILESEGMANUAL "
80- if [[ -e $ FILESEGMANUAL ]]; then
79+ echo " Looking for manual segmentation: ${ FILESEGMANUAL} "
80+ if [[ -e " ${ FILESEGMANUAL} " ]]; then
8181 echo " Found! Using manual segmentation."
82- rsync -avzh $ FILESEGMANUAL ${FILESEG} .nii.gz
83- sct_qc -i ${file} .nii.gz -s ${FILESEG} .nii.gz -p sct_deepseg_sc -qc ${PATH_QC} -qc-subject ${SUBJECT}
82+ rsync -avzh " ${ FILESEGMANUAL} " " ${FILESEG} " .nii.gz
83+ sct_qc -i " ${file} " .nii.gz -s " ${FILESEG} " .nii.gz -p sct_deepseg_sc -qc " ${PATH_QC} " -qc-subject " ${SUBJECT} "
8484 else
8585 echo " Not found. Proceeding with automatic segmentation."
8686 # Segment spinal cord
87- sct_deepseg_sc -i ${file} .nii.gz -c $ contrast -qc ${PATH_QC} -qc-subject ${SUBJECT}
87+ sct_deepseg_sc -i " ${file} " .nii.gz -c " ${ contrast} " -qc " ${PATH_QC} " -qc-subject " ${SUBJECT} "
8888 fi
8989}
9090
@@ -93,61 +93,61 @@ segment_if_does_not_exist() {
9393# ======================================================================================================================
9494
9595# Retrieve input params
96- SUBJECT=$1
96+ SUBJECT=" ${1} "
9797
9898# get starting time:
99- start=` date +%s`
99+ start=" $( date +%s) "
100100
101101# Display useful info for the log, such as SCT version, RAM and CPU cores available
102102sct_check_dependencies -short
103103
104104# Go to folder where data will be copied and processed
105- cd $ PATH_DATA_PROCESSED
105+ cd " ${ PATH_DATA_PROCESSED} "
106106# Copy source images
107- rsync -avzh $ PATH_DATA/ $ SUBJECT .
107+ rsync -avzh " ${ PATH_DATA} " / " ${ SUBJECT} " .
108108
109109
110110# T2w
111111# ======================================================================================================================
112- cd " ${SUBJECT} /anat/"
113- file_t2=" ${SUBJECT} _T2w "
112+ cd " ${SUBJECT} " /anat/
113+ file_t2=" ${SUBJECT} " _T2w
114114# Segment spinal cord (only if it does not exist)
115115segment_if_does_not_exist " ${file_t2} " " t2"
116116file_t2_seg=" ${FILESEG} "
117117# Create labels in the cord at C2 and C5 mid-vertebral levels (only if it does not exist)
118118label_if_does_not_exist " ${file_t2} " " ${file_t2_seg} "
119119file_label=" ${FILELABEL} "
120120# Register to template
121- sct_register_to_template -i " ${file_t2} .nii.gz" -s " ${file_t2_seg} .nii.gz" -l " ${file_label} .nii.gz" -c t2 \
121+ sct_register_to_template -i " ${file_t2} " .nii.gz -s " ${file_t2_seg} " .nii.gz -l " ${file_label} " .nii.gz -c t2 \
122122 -param step=1,type=seg,algo=centermassrot:step=2,type=im,algo=syn,iter=5,slicewise=1,metric=CC,smooth=0 \
123123 -qc " ${PATH_QC} "
124124# Warp template
125125# Note: we don't need the white matter atlas at this point, therefore use flag "-a 0"
126- sct_warp_template -d " ${file_t2} .nii.gz" -w warp_template2anat.nii.gz -a 0 -ofolder label_T2w -qc " ${PATH_QC} "
126+ sct_warp_template -d " ${file_t2} " .nii.gz -w warp_template2anat.nii.gz -a 0 -ofolder label_T2w -qc " ${PATH_QC} "
127127# Compute average CSA between C2 and C3 levels (append across subjects)
128- sct_process_segmentation -i " ${file_t2_seg} .nii.gz" -vert 2:3 -vertfile label_T2w/template/PAM50_levels.nii.gz \
129- -o " ${PATH_RESULTS} /CSA.csv" -append 1 -qc " ${PATH_QC} "
128+ sct_process_segmentation -i " ${file_t2_seg} " .nii.gz -vert 2:3 -vertfile label_T2w/template/PAM50_levels.nii.gz \
129+ -o " ${PATH_RESULTS} " /CSA.csv -append 1 -qc " ${PATH_QC} "
130130
131131# MT
132132# ======================================================================================================================
133- file_mt1=" ${SUBJECT} _acq-MTon_MTS"
134- file_mt0=" ${SUBJECT} _acq-MToff_MTS"
133+ file_mt1=" ${SUBJECT} " _acq-MTon_MTS
134+ file_mt0=" ${SUBJECT} " _acq-MToff_MTS
135135# Segment spinal cord
136136segment_if_does_not_exist " ${file_mt1} " " t2s"
137- file_mt1_seg=$ FILESEG
137+ file_mt1_seg=" ${ FILESEG} "
138138# Create mask
139- sct_create_mask -i " ${file_mt1} .nii.gz" -p centerline," ${file_mt1_seg} .nii.gz" -size 45mm
139+ sct_create_mask -i " ${file_mt1} " .nii.gz -p centerline," ${file_mt1_seg} " .nii.gz -size 45mm
140140# Crop data for faster processing
141- sct_crop_image -i " ${file_mt1} .nii.gz" -m " mask_${file_mt1} .nii.gz" -o " ${file_mt1} _crop.nii.gz"
142- sct_crop_image -i " ${file_mt1_seg} .nii.gz" -m " mask_${file_mt1} .nii.gz" -o " ${file_mt1} _crop_seg.nii.gz"
143- file_mt1=" ${file_mt1} _crop "
141+ sct_crop_image -i " ${file_mt1} " .nii.gz -m " mask_${file_mt1} " .nii.gz -o " ${file_mt1} " _crop.nii.gz
142+ sct_crop_image -i " ${file_mt1_seg} " .nii.gz -m " mask_${file_mt1} " .nii.gz -o " ${file_mt1} " _crop_seg.nii.gz
143+ file_mt1=" ${file_mt1} " _crop
144144# Register mt0->mt1
145145# Tips: here we only use rigid transformation because both images have very
146146# similar sequence parameters. We don't want to use SyN/BSplineSyN to avoid
147147# introducing spurious deformations.
148- sct_register_multimodal -i " ${file_mt0} .nii.gz" \
149- -d " ${file_mt1} .nii.gz" \
150- -dseg " ${file_mt1} _seg.nii.gz" \
148+ sct_register_multimodal -i " ${file_mt0} " .nii.gz \
149+ -d " ${file_mt1} " .nii.gz \
150+ -dseg " ${file_mt1} " _seg.nii.gz \
151151 -param step=1,type=im,algo=rigid,slicewise=1,metric=CC \
152152 -x spline \
153153 -qc " ${PATH_QC} "
@@ -156,30 +156,30 @@ sct_register_multimodal -i "${file_mt0}.nii.gz" \
156156# Tips: First step: slicereg based on images, with large smoothing to capture
157157# potential motion between anat and mt, then at second step: bpslinesyn in order to
158158# adapt the shape of the cord to the mt modality (in case there are distortions between anat and mt).
159- sct_register_multimodal -i " ${SCT_DIR} /data/PAM50/template/PAM50_t2.nii.gz" \
160- -iseg " ${SCT_DIR} /data/PAM50/template/PAM50_cord.nii.gz" \
161- -d " ${file_mt1} .nii.gz" \
162- -dseg " ${file_mt1} _seg.nii.gz" \
159+ sct_register_multimodal -i " ${SCT_DIR} " /data/PAM50/template/PAM50_t2.nii.gz \
160+ -iseg " ${SCT_DIR} " /data/PAM50/template/PAM50_cord.nii.gz \
161+ -d " ${file_mt1} " .nii.gz \
162+ -dseg " ${file_mt1} " _seg.nii.gz \
163163 -param step=1,type=seg,algo=centermass:step=2,type=seg,algo=bsplinesyn,slicewise=1,iter=3 \
164164 -initwarp warp_template2anat.nii.gz \
165165 -initwarpinv warp_anat2template.nii.gz \
166166 -qc " ${PATH_QC} "
167167# Rename warping fields for clarity
168- mv " warp_PAM50_t22${file_mt1} .nii.gz" warp_template2mt.nii.gz
169- mv " warp_${file_mt1} 2PAM50_t2.nii.gz" warp_mt2template.nii.gz
168+ mv warp_PAM50_t22" ${file_mt1} " .nii.gz warp_template2mt.nii.gz
169+ mv warp_" ${file_mt1} " 2PAM50_t2.nii.gz warp_mt2template.nii.gz
170170# Warp template
171- sct_warp_template -d " ${file_mt1} .nii.gz" -w warp_template2mt.nii.gz -ofolder label_MT -qc " ${PATH_QC} "
171+ sct_warp_template -d " ${file_mt1} " .nii.gz -w warp_template2mt.nii.gz -ofolder label_MT -qc " ${PATH_QC} "
172172# Compute mtr
173- sct_compute_mtr -mt0 " ${file_mt0} _reg.nii.gz" -mt1 " ${file_mt1} .nii.gz"
173+ sct_compute_mtr -mt0 " ${file_mt0} " _reg.nii.gz -mt1 " ${file_mt1} " .nii.gz
174174# compute MTR in dorsal columns between levels C2 and C5 (append across subjects)
175175sct_extract_metric -i mtr.nii.gz -f label_MT/atlas -l 53 -vert 2:5 -vertfile label_MT/template/PAM50_levels.nii.gz \
176176 -method map -o " ${PATH_RESULTS} /MTR_in_DC.csv" -append 1
177177
178178# Verify presence of output files and write log file if error
179179# ======================================================================================================================
180180FILES_TO_CHECK=(
181- " $file_t2_seg .nii.gz"
182- " mtr.nii.gz"
181+ " ${ file_t2_seg} " .nii.gz
182+ mtr.nii.gz
183183)
184184for file in " ${FILES_TO_CHECK[@]} " ; do
185185 if [ ! -e " ${file} " ]; then
@@ -188,11 +188,11 @@ for file in "${FILES_TO_CHECK[@]}"; do
188188done
189189
190190# Display useful info for the log
191- end=` date +%s`
192- runtime=$(( end- start))
191+ end=" $( date +%s) "
192+ runtime=" $(( end- start)) "
193193echo
194194echo " ~~~"
195- echo " SCT version: ` sct_version` "
196- echo " Ran on: ` uname -nsr` "
197- echo " Duration: $(( $ runtime / 3600 )) hrs $(( ( $ runtime / 60 ) % 60 )) min $(( $ runtime % 60 )) sec"
195+ echo " SCT version: $( sct_version) "
196+ echo " Ran on: $( uname -nsr) "
197+ echo " Duration: $(( runtime / 3600 )) hrs $(( ( runtime / 60 ) % 60 )) min $(( runtime % 60 )) sec"
198198echo " ~~~"
0 commit comments