Skip to content

Commit 67355b7

Browse files
batch_single_subject.sh: Turn multi-line commands into one-liners
1 parent 0b3c453 commit 67355b7

1 file changed

Lines changed: 16 additions & 81 deletions

File tree

single_subject/batch_single_subject.sh

Lines changed: 16 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,7 @@ sct_label_vertebrae -i t2.nii.gz -s t2_seg.nii.gz -c t2 -qc ~/qc_singleSubj
6969
# inter-vertebral disc level. The convention is: Value 3 —> C2-C3 disc, Value 4 —> C3-C4 disc, etc.
7070

7171
# OPTIONAL: If automatic labeling did not work, you can initialize with manual identification of C2-C3 disc:
72-
#sct_label_utils -i t2.nii.gz -create-viewer 3 -o label_c2c3.nii.gz \
73-
# -msg "Click at the posterior tip of C2/C3 inter-vertebral disc"
72+
#sct_label_utils -i t2.nii.gz -create-viewer 3 -o label_c2c3.nii.gz -msg "Click at the posterior tip of C2/C3 inter-vertebral disc"
7473
#sct_label_vertebrae -i t2.nii.gz -s t2_seg.nii.gz -c t2 -initlabel label_c2c3.nii.gz -qc ~/qc_singleSubj
7574

7675
# Create labels at C3 and T2 mid-vertebral levels. These labels are needed for template registration.
@@ -79,8 +78,7 @@ sct_label_utils -i t2_seg_labeled.nii.gz -vert-body 3,9 -o t2_labels_vert.nii.gz
7978
# OPTIONAL: You might want to completely bypass sct_label_vertebrae and do the labeling manually. In that case, we
8079
# provide a viewer to do so conveniently. In the example command below, we will create labels at the inter-vertebral
8180
# discs C2-C3 (value=3), C3-C4 (value=4) and C4-C5 (value=5).
82-
#sct_label_utils -i t2.nii.gz -create-viewer 3,4,5 -o labels_disc.nii.gz \
83-
# -msg "Place labels at the posterior tip of each inter-vertebral disc. E.g. Label 3: C2/C3, Label 4: C3/C4, etc."
81+
#sct_label_utils -i t2.nii.gz -create-viewer 3,4,5 -o labels_disc.nii.gz -msg "Place labels at the posterior tip of each inter-vertebral disc. E.g. Label 3: C2/C3, Label 4: C3/C4, etc."
8482

8583

8684

@@ -99,10 +97,7 @@ sct_warp_template -d t2.nii.gz -w warp_template2anat.nii.gz -a 0 -qc ~/qc_single
9997
# info_label.txt lists all template files.
10098

10199
# Check results using Fsleyes. Tips: use the right arrow key to switch overlay on/off.
102-
fsleyes t2.nii.gz -cm greyscale -a 100.0 \
103-
label/template/PAM50_t2.nii.gz -cm greyscale -dr 0 4000 -a 100.0 \
104-
label/template/PAM50_gm.nii.gz -cm red-yellow -dr 0.4 1 -a 50.0 \
105-
label/template/PAM50_wm.nii.gz -cm blue-lightblue -dr 0.4 1 -a 50.0 &
100+
fsleyes t2.nii.gz -cm greyscale -a 100.0 label/template/PAM50_t2.nii.gz -cm greyscale -dr 0 4000 -a 100.0 label/template/PAM50_gm.nii.gz -cm red-yellow -dr 0.4 1 -a 50.0 label/template/PAM50_wm.nii.gz -cm blue-lightblue -dr 0.4 1 -a 50.0 &
106101

107102

108103

@@ -132,15 +127,7 @@ sct_create_mask -i mt1.nii.gz -p centerline,mt1_seg.nii.gz -size 35mm -f cylinde
132127

133128
# Register template->mt1. The flag -initwarp ../t2/warp_template2anat.nii.gz initializes the registration using the
134129
# template->t2 transformation which was previously estimated
135-
sct_register_multimodal -i $SCT_DIR/data/PAM50/template/PAM50_t2.nii.gz \
136-
-iseg $SCT_DIR/data/PAM50/template/PAM50_cord.nii.gz \
137-
-d mt1.nii.gz \
138-
-dseg mt1_seg.nii.gz \
139-
-m mask_mt1.nii.gz \
140-
-initwarp ../t2/warp_template2anat.nii.gz \
141-
-param step=1,type=seg,algo=centermass:step=2,type=seg,algo=bsplinesyn,slicewise=1,iter=3 \
142-
-owarp warp_template2mt.nii.gz \
143-
-qc ~/qc_singleSubj
130+
sct_register_multimodal -i $SCT_DIR/data/PAM50/template/PAM50_t2.nii.gz -iseg $SCT_DIR/data/PAM50/template/PAM50_cord.nii.gz -d mt1.nii.gz -dseg mt1_seg.nii.gz -m mask_mt1.nii.gz -initwarp ../t2/warp_template2anat.nii.gz -param step=1,type=seg,algo=centermass:step=2,type=seg,algo=bsplinesyn,slicewise=1,iter=3 -owarp warp_template2mt.nii.gz -qc ~/qc_singleSubj
144131
# Tips: Here we only use the segmentations (type=seg) to minimize the sensitivity of the registration procedure to
145132
# image artifacts.
146133
# Tips: Step 1: algo=centermass to align source and destination segmentations, then Step 2: algo=bpslinesyn to adapt the
@@ -155,10 +142,7 @@ sct_register_multimodal -i $SCT_DIR/data/PAM50/template/PAM50_t2.nii.gz \
155142
# Warp template
156143
sct_warp_template -d mt1.nii.gz -w warp_template2mt.nii.gz -a 1 -qc ~/qc_singleSubj
157144
# Check results using Fsleyes. Tips: use the right arrow key to switch overlay on/off.
158-
fsleyes mt1.nii.gz -cm greyscale -a 100.0 \
159-
label/template/PAM50_t2.nii.gz -cm greyscale -dr 0 4000 -a 100.0 \
160-
label/template/PAM50_gm.nii.gz -cm red-yellow -dr 0.4 1 -a 50.0 \
161-
label/template/PAM50_wm.nii.gz -cm blue-lightblue -dr 0.4 1 -a 50.0 &
145+
fsleyes mt1.nii.gz -cm greyscale -a 100.0 label/template/PAM50_t2.nii.gz -cm greyscale -dr 0 4000 -a 100.0 label/template/PAM50_gm.nii.gz -cm red-yellow -dr 0.4 1 -a 50.0 label/template/PAM50_wm.nii.gz -cm blue-lightblue -dr 0.4 1 -a 50.0 &
162146

163147

164148

@@ -167,8 +151,7 @@ fsleyes mt1.nii.gz -cm greyscale -a 100.0 \
167151

168152
# Register mt0->mt1 using z-regularized slicewise translations (algo=slicereg)
169153
# Note: Segmentation and mask can be re-used from "MT registration" section
170-
sct_register_multimodal -i mt0.nii.gz -d mt1.nii.gz -dseg mt1_seg.nii.gz -m mask_mt1.nii.gz \
171-
-param step=1,type=im,algo=slicereg,metric=CC -x spline -qc ~/qc_singleSubj
154+
sct_register_multimodal -i mt0.nii.gz -d mt1.nii.gz -dseg mt1_seg.nii.gz -m mask_mt1.nii.gz -param step=1,type=im,algo=slicereg,metric=CC -x spline -qc ~/qc_singleSubj
172155
# Check results using Fsleyes. Tips: use the right arrow key to switch overlay on/off.
173156
fsleyes mt1.nii.gz mt0_reg.nii.gz &
174157
# Compute MTR
@@ -215,28 +198,11 @@ sct_extract_metric -i t2s.nii.gz -f t2s_gmseg.nii.gz -method bin -z 2:12 -o t2s_
215198

216199
# Register template->t2s (using warping field generated from template<->t2 registration)
217200
# Tips: Here we use the WM seg for the iseg/dseg fields in order to account for both the cord and the GM shape.
218-
sct_register_multimodal -i "${SCT_DIR}/data/PAM50/template/PAM50_t2s.nii.gz" \
219-
-iseg "${SCT_DIR}/data/PAM50/template/PAM50_wm.nii.gz" \
220-
-d t2s.nii.gz \
221-
-dseg t2s_wmseg.nii.gz \
222-
-initwarp ../t2/warp_template2anat.nii.gz \
223-
-initwarpinv ../t2/warp_anat2template.nii.gz \
224-
-owarp warp_template2t2s.nii.gz \
225-
-owarpinv warp_t2s2template.nii.gz \
226-
-param step=1,type=seg,algo=rigid:step=2,type=seg,algo=bsplinesyn,slicewise=1,iter=3 \
227-
-qc ~/qc_singleSubj
201+
sct_register_multimodal -i "${SCT_DIR}/data/PAM50/template/PAM50_t2s.nii.gz" -iseg "${SCT_DIR}/data/PAM50/template/PAM50_wm.nii.gz" -d t2s.nii.gz -dseg t2s_wmseg.nii.gz -initwarp ../t2/warp_template2anat.nii.gz -initwarpinv ../t2/warp_anat2template.nii.gz -owarp warp_template2t2s.nii.gz -owarpinv warp_t2s2template.nii.gz -param step=1,type=seg,algo=rigid:step=2,type=seg,algo=bsplinesyn,slicewise=1,iter=3 -qc ~/qc_singleSubj
228202

229203
cd ../mt
230204
# Register template->mt via t2s to account for GM segmentation
231-
sct_register_multimodal -i "${SCT_DIR}/data/PAM50/template/PAM50_t2.nii.gz" \
232-
-iseg "${SCT_DIR}/data/PAM50/template/PAM50_cord.nii.gz" \
233-
-d mt1.nii.gz \
234-
-dseg mt1_seg.nii.gz \
235-
-param step=1,type=seg,algo=centermass:step=2,type=seg,algo=bsplinesyn,slicewise=1,iter=3 \
236-
-m mask_mt1.nii.gz \
237-
-initwarp ../t2s/warp_template2t2s.nii.gz \
238-
-owarp warp_template2mt.nii.gz \
239-
-qc ~/qc_singleSubj
205+
sct_register_multimodal -i "${SCT_DIR}/data/PAM50/template/PAM50_t2.nii.gz" -iseg "${SCT_DIR}/data/PAM50/template/PAM50_cord.nii.gz" -d mt1.nii.gz -dseg mt1_seg.nii.gz -param step=1,type=seg,algo=centermass:step=2,type=seg,algo=bsplinesyn,slicewise=1,iter=3 -m mask_mt1.nii.gz -initwarp ../t2s/warp_template2t2s.nii.gz -owarp warp_template2mt.nii.gz -qc ~/qc_singleSubj
240206

241207

242208

@@ -246,10 +212,7 @@ sct_register_multimodal -i "${SCT_DIR}/data/PAM50/template/PAM50_t2.nii.gz" \
246212
# In order to use the PAM50 atlas to extract/aggregate image data, the atlas must first be transformed to the MT space
247213
sct_warp_template -d mt1.nii.gz -w warp_template2mt.nii.gz -a 1 -qc ~/qc_singleSubj
248214
# Check results
249-
fsleyes mt1.nii.gz -cm greyscale -a 100.0 \
250-
label/template/PAM50_t2.nii.gz -cm greyscale -dr 0 4000 -a 100.0 \
251-
label/template/PAM50_gm.nii.gz -cm red-yellow -dr 0.4 1 -a 100.0 \
252-
label/template/PAM50_wm.nii.gz -cm blue-lightblue -dr 0.4 1 -a 100.0 &
215+
fsleyes mt1.nii.gz -cm greyscale -a 100.0 label/template/PAM50_t2.nii.gz -cm greyscale -dr 0 4000 -a 100.0 label/template/PAM50_gm.nii.gz -cm red-yellow -dr 0.4 1 -a 100.0 label/template/PAM50_wm.nii.gz -cm blue-lightblue -dr 0.4 1 -a 100.0 &
253216

254217
# Extract MTR for each slice within the white matter (combined label: #51)
255218
# Tips: To list all available labels, type: "sct_extract_metric"
@@ -259,9 +222,7 @@ sct_extract_metric -i mtr.nii.gz -f label/atlas -method map -l 51 -o mtr_in_wm.c
259222
sct_extract_metric -i mtr.nii.gz -f label/atlas -method map -l 4,5 -z 5:15 -o mtr_in_cst.csv
260223
# You can specify the vertebral levels to extract MTR from. For example, to quantify MTR between C2 and C4 levels in the
261224
# dorsal column (combined label: #53) using weighted average:
262-
sct_extract_metric -i mtr.nii.gz -f label/atlas -method map -l 53 \
263-
-vert 2:4 -vertfile label/template/PAM50_levels.nii.gz \
264-
-o mtr_in_dc.csv
225+
sct_extract_metric -i mtr.nii.gz -f label/atlas -method map -l 53 -vert 2:4 -vertfile label/template/PAM50_levels.nii.gz -o mtr_in_dc.csv
265226

266227

267228
# Diffusion-weighted MRI
@@ -278,8 +239,7 @@ sct_deepseg_sc -i dmri_mean.nii.gz -c dwi -qc ~/qc_singleSubj
278239
sct_create_mask -i dmri_mean.nii.gz -p centerline,dmri_mean_seg.nii.gz -f cylinder -size 35mm
279240

280241
# Motion correction (moco)
281-
sct_dmri_moco -i dmri.nii.gz -m mask_dmri_mean.nii.gz -bvec bvecs.txt \
282-
-qc ~/qc_singleSubj -qc-seg dmri_mean_seg.nii.gz
242+
sct_dmri_moco -i dmri.nii.gz -m mask_dmri_mean.nii.gz -bvec bvecs.txt -qc ~/qc_singleSubj -qc-seg dmri_mean_seg.nii.gz
283243

284244
# Segment SC on motion-corrected mean dwi data (check results in the QC report)
285245
sct_deepseg_sc -i dmri_moco_dwi_mean.nii.gz -c dwi -qc ~/qc_singleSubj
@@ -289,16 +249,7 @@ sct_deepseg_sc -i dmri_moco_dwi_mean.nii.gz -c dwi -qc ~/qc_singleSubj
289249
# -param, so it will not make a difference here)
290250
# Note: the flag “-initwarpinv" provides a transformation dmri->template, in case you would like to bring all your DTI
291251
# metrics in the PAM50 space (e.g. group averaging of FA maps)
292-
sct_register_multimodal -i "${SCT_DIR}/data/PAM50/template/PAM50_t1.nii.gz" \
293-
-iseg "${SCT_DIR}/data/PAM50/template/PAM50_cord.nii.gz" \
294-
-d dmri_moco_dwi_mean.nii.gz \
295-
-dseg dmri_moco_dwi_mean_seg.nii.gz \
296-
-initwarp ../t2s/warp_template2t2s.nii.gz \
297-
-initwarpinv ../t2s/warp_t2s2template.nii.gz \
298-
-owarp warp_template2dmri.nii.gz \
299-
-owarpinv warp_dmri2template.nii.gz \
300-
-param step=1,type=seg,algo=centermass:step=2,type=seg,algo=bsplinesyn,slicewise=1,iter=3 \
301-
-qc ~/qc_singleSubj
252+
sct_register_multimodal -i "${SCT_DIR}/data/PAM50/template/PAM50_t1.nii.gz" -iseg "${SCT_DIR}/data/PAM50/template/PAM50_cord.nii.gz" -d dmri_moco_dwi_mean.nii.gz -dseg dmri_moco_dwi_mean_seg.nii.gz -initwarp ../t2s/warp_template2t2s.nii.gz -initwarpinv ../t2s/warp_t2s2template.nii.gz -owarp warp_template2dmri.nii.gz -owarpinv warp_dmri2template.nii.gz -param step=1,type=seg,algo=centermass:step=2,type=seg,algo=bsplinesyn,slicewise=1,iter=3 -qc ~/qc_singleSubj
302253
# Warp template (so 'label/atlas' can be used to extract metrics)
303254
sct_warp_template -d dmri_moco_dwi_mean.nii.gz -w warp_template2dmri.nii.gz -qc ~/qc_singleSubj
304255
# Check results in the QC report
@@ -308,10 +259,7 @@ sct_dmri_compute_dti -i dmri_moco.nii.gz -bval bvals.txt -bvec bvecs.txt
308259
# Tips: the flag "-method restore" estimates the tensor with robust fit (RESTORE method [2])
309260

310261
# Compute FA within the white matter from individual level 2 to 5
311-
sct_extract_metric -i dti_FA.nii.gz -f label/atlas \
312-
-l 51 -method map \
313-
-vert 2:5 -vertfile label/template/PAM50_levels.nii.gz -perlevel 1 \
314-
-o fa_in_wm.csv
262+
sct_extract_metric -i dti_FA.nii.gz -f label/atlas -l 51 -method map -vert 2:5 -vertfile label/template/PAM50_levels.nii.gz -perlevel 1 -o fa_in_wm.csv
315263

316264

317265

@@ -328,33 +276,20 @@ sct_register_multimodal -i ../t2/t2_seg.nii.gz -d fmri_mean.nii.gz -identity 1
328276
sct_create_mask -i fmri.nii.gz -p centerline,t2_seg_reg.nii.gz -size 35mm -f cylinder
329277

330278
# Motion correction (using mask)
331-
sct_fmri_moco -i fmri.nii.gz -m mask_fmri.nii.gz \
332-
-qc ~/qc_singleSubj -qc-seg t2_seg_reg.nii.gz
279+
sct_fmri_moco -i fmri.nii.gz -m mask_fmri.nii.gz -qc ~/qc_singleSubj -qc-seg t2_seg_reg.nii.gz
333280

334281
# Register the template to the fMRI scan.
335282
# Note: here we don't rely on the segmentation because it is difficult to obtain one automatically. Instead, we rely on
336283
# ANTs_SyN superpower to find a suitable transformation between the PAM50_t2s and the fMRI scan. We don't want to
337284
# put too many iterations because this registration is very sensitive to the artifacts (drop out) in the image.
338285
# Also, we want a 3D transformation (not 2D) because we need the through-z regularization.
339-
sct_register_multimodal -i "${SCT_DIR}/data/PAM50/template/PAM50_t2s.nii.gz" \
340-
-d fmri_moco_mean.nii.gz \
341-
-dseg t2_seg_reg.nii.gz \
342-
-param step=1,type=im,algo=syn,metric=CC,iter=5,slicewise=0 \
343-
-initwarp ../t2s/warp_template2t2s.nii.gz \
344-
-initwarpinv ../t2s/warp_t2s2template.nii.gz \
345-
-owarp warp_template2fmri.nii.gz \
346-
-owarpinv warp_fmri2template.nii.gz \
347-
-qc ~/qc_singleSubj
286+
sct_register_multimodal -i "${SCT_DIR}/data/PAM50/template/PAM50_t2s.nii.gz" -d fmri_moco_mean.nii.gz -dseg t2_seg_reg.nii.gz -param step=1,type=im,algo=syn,metric=CC,iter=5,slicewise=0 -initwarp ../t2s/warp_template2t2s.nii.gz -initwarpinv ../t2s/warp_t2s2template.nii.gz -owarp warp_template2fmri.nii.gz -owarpinv warp_fmri2template.nii.gz -qc ~/qc_singleSubj
348287
# Check results in the QC report
349288

350289
# Warp template with the spinal levels (-s 1)
351290
sct_warp_template -d fmri_moco_mean.nii.gz -w warp_template2fmri.nii.gz -s 1 -a 0 -qc ~/qc_singleSubj
352291
# Check results
353-
fsleyes --scene lightbox --hideCursor fmri_moco_mean.nii.gz -cm greyscale -dr 0 1000 \
354-
label/spinal_levels/spinal_level_03 -cm red \
355-
label/spinal_levels/spinal_level_04 -cm blue \
356-
label/spinal_levels/spinal_level_05 -cm green \
357-
label/spinal_levels/spinal_level_06 -cm yellow
292+
fsleyes --scene lightbox --hideCursor fmri_moco_mean.nii.gz -cm greyscale -dr 0 1000 label/spinal_levels/spinal_level_03 -cm red label/spinal_levels/spinal_level_04 -cm blue label/spinal_levels/spinal_level_05 -cm green label/spinal_levels/spinal_level_06 -cm yellow
358293

359294

360295

0 commit comments

Comments
 (0)