Skip to content

Commit 1f57bdb

Browse files
committed
ENH: Add SCILPY prepare shell data singularity alternative script
Add `SCILPY` prepare shell data singularity alternative script.
1 parent 6c12ae4 commit 1f57bdb

File tree

1 file changed

+225
-0
lines changed

1 file changed

+225
-0
lines changed
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
#!/bin/bash
2+
3+
usage()
4+
{
5+
echo "usage: $(basename $0) [-h] [in_qsiprep_dirname] [out_dirname] [work_dirname] [in_nifti_fname] [in_bval_fname] [in_bvec_fname] [scilus_singularity_fname] [szbd_singularity_fname] [participant]"
6+
echo
7+
echo "Prepare preprocessed dMRI shell data for UKF tractography using SCILPY."
8+
echo
9+
echo "positional arguments:"
10+
echo " in_qsiprep_dirname Input data dirname"
11+
echo " out_dirname Output dirname"
12+
echo " work_dirname Singularity work dirname"
13+
echo " in_nifti_fname Input NIfTI filename (*.nii.gz)"
14+
echo " in_bval_fname Input bval filename (*.bval)"
15+
echo " in_bvec_fname Input bvec filename (*.bvec)"
16+
echo " scilus_singularity_fname Scilus singularity filename (*.sif)"
17+
echo " szbd_singularity_fname SZBD singularity filename (*.sif)"
18+
echo " participant Participant ID"
19+
echo
20+
echo "optional arguments:"
21+
echo " -h, --help show this help message and exit"
22+
1>&2; exit 1;
23+
}
24+
25+
# Parse input arguments
26+
args=""
27+
28+
while (( "$#" )); do
29+
case "$1" in
30+
"-h"|"--help")
31+
usage
32+
;;
33+
-*|--*=) # unsupported flags
34+
echo "Error: Unsupported flag $1" >&2
35+
usage
36+
;;
37+
*) # preserve positional arguments
38+
args="$args $1"
39+
shift
40+
;;
41+
esac
42+
done
43+
44+
# Set positional arguments in their proper place
45+
eval set -- "$args"
46+
47+
if test "${args[@]}" = "" || [ "$#" -lt 9 ]; then
48+
echo "Missing arguments."
49+
usage
50+
fi
51+
52+
in_qsiprep_dirname=$1
53+
out_root_dirname=$2
54+
work_dirname=$3
55+
in_nifti_fname=$4
56+
in_bval_fname=$5
57+
in_bvec_fname=$6
58+
scilus_singularity_fname=$7
59+
szbd_singularity_fname=$8
60+
participant=$9
61+
62+
dash="-"
63+
ext_sep="."
64+
bval_ext="bval"
65+
bvec_ext="bvec"
66+
nii_gz_ext="nii.gz"
67+
underscore="_"
68+
69+
fourd_label="4d"
70+
bval_label="b"
71+
b0_mean_label="b0_mean"
72+
73+
74+
function compose_filename_from_basename() {
75+
local in_fname="$1"
76+
local out_dirname="$2"
77+
local label="$3"
78+
local ext="$4"
79+
80+
# Get the basename without external command by stripping out longest leading
81+
# match of anything followed by /
82+
local base_fname=${in_fname##*/}
83+
84+
# Strip all extensions by stripping out longest trailing match of dot
85+
# followed by anything
86+
local root_fname=${base_fname%%.*}
87+
88+
echo ${out_dirname}/${root_fname}${underscore}${label}${ext_sep}${ext}
89+
}
90+
91+
# Create the output dirname
92+
out_participant_dirname=${out_root_dirname}/${participant}
93+
mkdir ${out_participant_dirname}
94+
95+
out_dirname=${out_participant_dirname}/dwi
96+
mkdir ${out_dirname}
97+
98+
# Extract mean b0
99+
100+
# https://scilpy.readthedocs.io/en/stable/scripts/scil_dwi_extract_b0.html
101+
102+
b0_thr=20
103+
104+
out_b0_mean_fname=$(compose_filename_from_basename ${in_nifti_fname} ${out_dirname} ${b0_mean_label} ${nii_gz_ext})
105+
106+
singularity exec \
107+
--bind ${in_qsiprep_dirname} \
108+
--bind ${out_dirname} \
109+
--bind ${work_dirname} \
110+
--workdir ${work_dirname} \
111+
${scilus_singularity_fname} \
112+
scil_dwi_extract_b0.py \
113+
${in_nifti_fname} \
114+
${in_bval_fname} \
115+
${in_bvec_fname} \
116+
${out_b0_mean_fname} \
117+
--b0_thr ${b0_thr} \
118+
--mean
119+
120+
echo "Mean b0 written to:"
121+
echo ${out_b0_mean_fname}
122+
123+
# Expand dimension to mean b0 data
124+
125+
out_b0_mean_4d_nifti_fname=$(compose_filename_from_basename ${out_b0_mean_fname} ${out_dirname} ${fourd_label} ${nii_gz_ext})
126+
127+
singularity exec \
128+
--bind ${out_dirname} \
129+
--bind ${work_dirname} \
130+
--workdir ${work_dirname} \
131+
${szbd_singularity_fname} \
132+
expand_dims_nifti.py \
133+
${out_b0_mean_fname} \
134+
${out_b0_mean_4d_nifti_fname}
135+
136+
echo "Mean b0 as 4D volume written to:"
137+
echo ${out_b0_mean_4d_nifti_fname}
138+
139+
# Create empty b0 bval and bvec
140+
141+
out_b0_mean_4d_bval_fname=$(compose_filename_from_basename ${out_b0_mean_fname} ${out_dirname} ${fourd_label} ${bval_ext})
142+
out_b0_mean_4d_bvec_fname=$(compose_filename_from_basename ${out_b0_mean_fname} ${out_dirname} ${fourd_label} ${bvec_ext})
143+
144+
singularity exec \
145+
--bind ${out_dirname} \
146+
--bind ${work_dirname} \
147+
--workdir ${work_dirname} \
148+
${szbd_singularity_fname} \
149+
create_mean_b0_bval_bvec_files.py \
150+
${out_b0_mean_4d_bval_fname} \
151+
${out_b0_mean_4d_bvec_fname}
152+
153+
154+
echo "Mean b0 bval and bvec files written to:"
155+
echo ${out_b0_mean_4d_bval_fname}
156+
echo ${out_b0_mean_4d_bvec_fname}
157+
158+
# Extract b-value
159+
160+
# https://scilpy.readthedocs.io/en/stable/scripts/scil_dwi_extract_shell.html
161+
162+
bval=3000
163+
bval_tol=100
164+
165+
bval_shell_label=${bval_label}${bval}
166+
167+
out_bval_shell_nifti_fname=$(compose_filename_from_basename ${in_nifti_fname} ${out_dirname} ${bval_shell_label} ${nii_gz_ext})
168+
out_bval_shell_bval_fname=$(compose_filename_from_basename ${in_nifti_fname} ${out_dirname} ${bval_shell_label} ${bval_ext})
169+
out_bval_shell_bvec_fname=$(compose_filename_from_basename ${in_nifti_fname} ${out_dirname} ${bval_shell_label} ${bvec_ext})
170+
171+
singularity exec \
172+
--bind ${in_qsiprep_dirname} \
173+
--bind ${out_dirname} \
174+
--bind ${work_dirname} \
175+
--workdir ${work_dirname} \
176+
${scilus_singularity_fname} \
177+
scil_dwi_extract_shell.py \
178+
${in_nifti_fname} \
179+
${in_bval_fname} \
180+
${in_bvec_fname} \
181+
${bval} \
182+
${out_bval_shell_nifti_fname} \
183+
${out_bval_shell_bval_fname} \
184+
${out_bval_shell_bvec_fname} \
185+
--tolerance ${bval_tol}
186+
187+
echo "b${bval} files written to:"
188+
echo ${out_bval_shell_nifti_fname}
189+
echo ${out_bval_shell_bval_fname}
190+
echo ${out_bval_shell_bvec_fname}
191+
192+
# Concatenate mean b0 and b-value data
193+
194+
# https://scilpy.readthedocs.io/en/stable/scripts/scil_dwi_concatenate.html
195+
196+
b0_mean_bval_shell_label=${b0_mean_label}${dash}${bval_label}${bval}
197+
198+
out_b0_mean_bval_shell_nifti_fname=$(compose_filename_from_basename ${in_nifti_fname} ${out_dirname} ${b0_mean_bval_shell_label} ${nii_gz_ext})
199+
out_b0_mean_bval_shell_bval_fname=$(compose_filename_from_basename ${in_nifti_fname} ${out_dirname} ${b0_mean_bval_shell_label} ${bval_ext})
200+
out_b0_mean_bval_shell_bvec_fname=$(compose_filename_from_basename ${in_nifti_fname} ${out_dirname} ${b0_mean_bval_shell_label} ${bvec_ext})
201+
202+
singularity exec \
203+
--bind ${in_qsiprep_dirname} \
204+
--bind ${out_dirname} \
205+
--bind ${work_dirname} \
206+
--workdir ${work_dirname} \
207+
${scilus_singularity_fname} \
208+
scil_dwi_concatenate.py \
209+
${out_b0_mean_bval_shell_nifti_fname} \
210+
${out_b0_mean_bval_shell_bval_fname} \
211+
${out_b0_mean_bval_shell_bvec_fname} \
212+
--in_dwis \
213+
${out_b0_mean_4d_nifti_fname} \
214+
${out_bval_shell_nifti_fname} \
215+
--in_bvals \
216+
${out_b0_mean_4d_bval_fname} \
217+
${out_bval_shell_bval_fname} \
218+
--in_bvecs \
219+
${out_b0_mean_4d_bvec_fname} \
220+
${out_bval_shell_bvec_fname}
221+
222+
echo "Concatenated b0 and b${bval} files written to:"
223+
echo ${out_b0_mean_bval_shell_nifti_fname}
224+
echo ${out_b0_mean_bval_shell_bval_fname}
225+
echo ${out_b0_mean_bval_shell_bvec_fname}

0 commit comments

Comments
 (0)