Skip to content

Commit 649737c

Browse files
committed
revise documentation & add mcflirt flag
1 parent 93c712b commit 649737c

File tree

6 files changed

+167
-112
lines changed

6 files changed

+167
-112
lines changed

.circleci/config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@ jobs:
537537
-e FMRIPREP_DEV 1 \
538538
--config $PWD/nipype.cfg -w /tmp/ds054/work \
539539
/tmp/data/ds054 /tmp/ds054/derivatives participant \
540-
--fs-no-reconall --sloppy \
540+
--fs-no-reconall --sloppy --hmc-use-mcflirt \
541541
--output-space T1w template \
542542
--template-resampling-grid 2mm \
543543
--mem_mb 4096 --nthreads 2 -vv
@@ -778,7 +778,7 @@ workflows:
778778
- get_regression_data
779779
filters:
780780
branches:
781-
ignore:
781+
ignore:
782782
- /docs?\/.*/
783783
- /ds005\/.*/
784784
- /ds054\/.*/

docs/workflows.rst

Lines changed: 61 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -19,38 +19,40 @@ is presented below:
1919
:simple_form: yes
2020

2121
from fmriprep.workflows.base import init_single_subject_wf
22-
wf = init_single_subject_wf(subject_id='test',
23-
name='single_subject_wf',
24-
task_id='',
25-
longitudinal=False,
26-
t2s_coreg=False,
27-
omp_nthreads=1,
28-
freesurfer=True,
29-
reportlets_dir='.',
30-
output_dir='.',
31-
bids_dir='.',
32-
skull_strip_template='OASIS',
33-
skull_strip_fixed_seed=False,
34-
template='MNI152NLin2009cAsym',
35-
output_spaces=['T1w', 'fsnative',
36-
'template', 'fsaverage5'],
37-
medial_surface_nan=False,
38-
cifti_output=False,
39-
ignore=[],
40-
debug=False,
41-
low_mem=False,
42-
anat_only=False,
43-
hires=True,
44-
use_bbr=True,
45-
bold2t1w_dof=9,
46-
fmap_bspline=False,
47-
fmap_demean=True,
48-
use_syn=True,
49-
force_syn=True,
50-
template_out_grid='native',
51-
use_aroma=False,
52-
aroma_melodic_dim=None,
53-
ignore_aroma_err=False)
22+
wf = init_single_subject_wf(
23+
subject_id='test',
24+
name='single_subject_wf',
25+
task_id='',
26+
longitudinal=False,
27+
t2s_coreg=False,
28+
omp_nthreads=1,
29+
freesurfer=True,
30+
reportlets_dir='.',
31+
output_dir='.',
32+
bids_dir='.',
33+
skull_strip_template='OASIS',
34+
skull_strip_fixed_seed=False,
35+
template='MNI152NLin2009cAsym',
36+
output_spaces=['T1w', 'fsnative', 'template', 'fsaverage5'],
37+
medial_surface_nan=False,
38+
cifti_output=False,
39+
ignore=[],
40+
debug=False,
41+
low_mem=False,
42+
anat_only=False,
43+
hires=True,
44+
use_bbr=True,
45+
bold2t1w_dof=9,
46+
fmap_bspline=False,
47+
fmap_demean=True,
48+
use_syn=True,
49+
force_syn=True,
50+
template_out_grid='native',
51+
use_aroma=False,
52+
aroma_melodic_dim=None,
53+
ignore_aroma_err=False,
54+
use_mcflirt=False,
55+
)
5456

5557

5658
T1w/T2w preprocessing
@@ -248,30 +250,32 @@ BOLD preprocessing
248250
:simple_form: yes
249251

250252
from fmriprep.workflows.bold import init_func_preproc_wf
251-
wf = init_func_preproc_wf('/completely/made/up/path/sub-01_task-nback_bold.nii.gz',
252-
omp_nthreads=1,
253-
ignore=[],
254-
freesurfer=True,
255-
reportlets_dir='.',
256-
output_dir='.',
257-
template='MNI152NLin2009cAsym',
258-
output_spaces=['T1w', 'fsnative',
259-
'template', 'fsaverage5'],
260-
medial_surface_nan=False,
261-
cifti_output=False,
262-
debug=False,
263-
low_mem=False,
264-
use_bbr=True,
265-
t2s_coreg=False,
266-
bold2t1w_dof=9,
267-
fmap_bspline=True,
268-
fmap_demean=True,
269-
use_syn=True,
270-
force_syn=True,
271-
template_out_grid='native',
272-
use_aroma=False,
273-
aroma_melodic_dim=None,
274-
ignore_aroma_err=False)
253+
wf = init_func_preproc_wf(
254+
'/completely/made/up/path/sub-01_task-nback_bold.nii.gz',
255+
omp_nthreads=1,
256+
ignore=[],
257+
freesurfer=True,
258+
reportlets_dir='.',
259+
output_dir='.',
260+
template='MNI152NLin2009cAsym',
261+
output_spaces=['T1w', 'fsnative', 'template', 'fsaverage5'],
262+
medial_surface_nan=False,
263+
cifti_output=False,
264+
debug=False,
265+
low_mem=False,
266+
use_bbr=True,
267+
t2s_coreg=False,
268+
bold2t1w_dof=9,
269+
fmap_bspline=True,
270+
fmap_demean=True,
271+
use_syn=True,
272+
force_syn=True,
273+
template_out_grid='native',
274+
use_aroma=False,
275+
aroma_melodic_dim=None,
276+
ignore_aroma_err=False,
277+
use_mcflirt=False,
278+
)
275279

276280
Preprocessing of :abbr:`BOLD (blood-oxygen level-dependent)` files is
277281
split into multiple sub-workflows described below.
@@ -332,6 +336,7 @@ Head-motion estimation
332336

333337
from fmriprep.workflows.bold import init_bold_hmc_wf
334338
wf = init_bold_hmc_wf(
339+
use_mcflirt=False,
335340
mem_gb=1,
336341
omp_nthreads=1)
337342

fmriprep/cli/run.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,10 @@ def get_parser():
160160
'--medial-surface-nan', required=False, action='store_true', default=False,
161161
help='Replace medial wall values with NaNs on functional GIFTI files. Only '
162162
'performed for GIFTI files mapped to a freesurfer subject (fsaverage or fsnative).')
163+
g_conf.add_argument(
164+
'--hmc-use-mcflirt', required=False, action='store_true', default=False,
165+
help='Head-Motion Correction (HMC) - use FSL\'s ``mcflirt`` instead '
166+
'of AFNI\'s ``3dVolreg``.')
163167

164168
# ICA_AROMA options
165169
g_aroma = parser.add_argument_group('Specific options for running ICA_AROMA')
@@ -554,6 +558,7 @@ def build_workflow(opts, retval):
554558
use_aroma=opts.use_aroma,
555559
aroma_melodic_dim=opts.aroma_melodic_dimensionality,
556560
ignore_aroma_err=opts.ignore_aroma_denoising_errors,
561+
use_mcflirt=opts.hmc_use_mcflirt,
557562
)
558563
retval['return_code'] = 0
559564

fmriprep/workflows/base.py

Lines changed: 47 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ def init_fmriprep_wf(subject_list, task_id, run_uuid, work_dir, output_dir, bids
3838
omp_nthreads, skull_strip_template, skull_strip_fixed_seed,
3939
freesurfer, output_spaces, template, medial_surface_nan, cifti_output, hires,
4040
use_bbr, bold2t1w_dof, fmap_bspline, fmap_demean, use_syn, force_syn,
41-
use_aroma, ignore_aroma_err, aroma_melodic_dim, template_out_grid):
41+
use_aroma, ignore_aroma_err, aroma_melodic_dim, template_out_grid,
42+
use_mcflirt):
4243
"""
4344
This workflow organizes the execution of FMRIPREP, with a sub-workflow for
4445
each subject.
@@ -84,7 +85,8 @@ def init_fmriprep_wf(subject_list, task_id, run_uuid, work_dir, output_dir, bids
8485
use_aroma=False,
8586
ignore_aroma_err=False,
8687
aroma_melodic_dim=None,
87-
template_out_grid='native')
88+
template_out_grid='native',
89+
use_mcflirt=False)
8890
8991
9092
Parameters
@@ -162,6 +164,8 @@ def init_fmriprep_wf(subject_list, task_id, run_uuid, work_dir, output_dir, bids
162164
template_out_grid : str
163165
Keyword ('native', '1mm' or '2mm') or path of custom reference
164166
image for normalization
167+
use_mcflirt : bool
168+
Use FSL ``mcflirt`` for head motion correction, instead of AFNI ``3dVolreg``.
165169
166170
"""
167171
fmriprep_wf = Workflow(name='fmriprep_wf')
@@ -177,37 +181,40 @@ def init_fmriprep_wf(subject_list, task_id, run_uuid, work_dir, output_dir, bids
177181

178182
reportlets_dir = os.path.join(work_dir, 'reportlets')
179183
for subject_id in subject_list:
180-
single_subject_wf = init_single_subject_wf(subject_id=subject_id,
181-
task_id=task_id,
182-
name="single_subject_" + subject_id + "_wf",
183-
reportlets_dir=reportlets_dir,
184-
output_dir=output_dir,
185-
bids_dir=bids_dir,
186-
ignore=ignore,
187-
debug=debug,
188-
low_mem=low_mem,
189-
anat_only=anat_only,
190-
longitudinal=longitudinal,
191-
t2s_coreg=t2s_coreg,
192-
omp_nthreads=omp_nthreads,
193-
skull_strip_template=skull_strip_template,
194-
skull_strip_fixed_seed=skull_strip_fixed_seed,
195-
freesurfer=freesurfer,
196-
output_spaces=output_spaces,
197-
template=template,
198-
medial_surface_nan=medial_surface_nan,
199-
cifti_output=cifti_output,
200-
hires=hires,
201-
use_bbr=use_bbr,
202-
bold2t1w_dof=bold2t1w_dof,
203-
fmap_bspline=fmap_bspline,
204-
fmap_demean=fmap_demean,
205-
use_syn=use_syn,
206-
force_syn=force_syn,
207-
template_out_grid=template_out_grid,
208-
use_aroma=use_aroma,
209-
aroma_melodic_dim=aroma_melodic_dim,
210-
ignore_aroma_err=ignore_aroma_err)
184+
single_subject_wf = init_single_subject_wf(
185+
subject_id=subject_id,
186+
task_id=task_id,
187+
name="single_subject_" + subject_id + "_wf",
188+
reportlets_dir=reportlets_dir,
189+
output_dir=output_dir,
190+
bids_dir=bids_dir,
191+
ignore=ignore,
192+
debug=debug,
193+
low_mem=low_mem,
194+
anat_only=anat_only,
195+
longitudinal=longitudinal,
196+
t2s_coreg=t2s_coreg,
197+
omp_nthreads=omp_nthreads,
198+
skull_strip_template=skull_strip_template,
199+
skull_strip_fixed_seed=skull_strip_fixed_seed,
200+
freesurfer=freesurfer,
201+
output_spaces=output_spaces,
202+
template=template,
203+
medial_surface_nan=medial_surface_nan,
204+
cifti_output=cifti_output,
205+
hires=hires,
206+
use_bbr=use_bbr,
207+
bold2t1w_dof=bold2t1w_dof,
208+
fmap_bspline=fmap_bspline,
209+
fmap_demean=fmap_demean,
210+
use_syn=use_syn,
211+
force_syn=force_syn,
212+
template_out_grid=template_out_grid,
213+
use_aroma=use_aroma,
214+
aroma_melodic_dim=aroma_melodic_dim,
215+
ignore_aroma_err=ignore_aroma_err,
216+
use_mcflirt=use_mcflirt,
217+
)
211218

212219
single_subject_wf.config['execution']['crashdump_dir'] = (
213220
os.path.join(output_dir, "fmriprep", "sub-" + subject_id, 'log', run_uuid)
@@ -229,7 +236,7 @@ def init_single_subject_wf(subject_id, task_id, name, reportlets_dir, output_dir
229236
freesurfer, output_spaces, template, medial_surface_nan,
230237
cifti_output, hires, use_bbr, bold2t1w_dof, fmap_bspline, fmap_demean,
231238
use_syn, force_syn, template_out_grid,
232-
use_aroma, aroma_melodic_dim, ignore_aroma_err):
239+
use_aroma, aroma_melodic_dim, ignore_aroma_err, use_mcflirt):
233240
"""
234241
This workflow organizes the preprocessing pipeline for a single subject.
235242
It collects and reports information about the subject, and prepares
@@ -276,7 +283,8 @@ def init_single_subject_wf(subject_id, task_id, name, reportlets_dir, output_dir
276283
template_out_grid='native',
277284
use_aroma=False,
278285
aroma_melodic_dim=None,
279-
ignore_aroma_err=False)
286+
ignore_aroma_err=False,
287+
use_mcflirt=False)
280288
281289
Parameters
282290
@@ -353,6 +361,8 @@ def init_single_subject_wf(subject_id, task_id, name, reportlets_dir, output_dir
353361
Perform ICA-AROMA on MNI-resampled functional series
354362
ignore_aroma_err : bool
355363
Do not fail on ICA-AROMA errors
364+
use_mcflirt : bool
365+
Use FSL ``mcflirt`` for head motion correction, instead of AFNI ``3dVolreg``.
356366
357367
Inputs
358368
@@ -491,7 +501,8 @@ def init_single_subject_wf(subject_id, task_id, name, reportlets_dir, output_dir
491501
use_aroma=use_aroma,
492502
aroma_melodic_dim=aroma_melodic_dim,
493503
ignore_aroma_err=ignore_aroma_err,
494-
num_bold=len(subject_data['bold']))
504+
num_bold=len(subject_data['bold']),
505+
use_mcflirt=use_mcflirt)
495506

496507
workflow.connect([
497508
(anat_preproc_wf, func_preproc_wf,

fmriprep/workflows/bold/base.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def init_func_preproc_wf(bold_file, ignore, freesurfer,
5353
use_aroma, ignore_aroma_err, aroma_melodic_dim,
5454
medial_surface_nan, cifti_output,
5555
debug, low_mem, template_out_grid,
56-
layout=None, num_bold=1):
56+
use_mcflirt, layout=None, num_bold=1):
5757
"""
5858
This workflow controls the functional preprocessing stages of FMRIPREP.
5959
@@ -86,6 +86,7 @@ def init_func_preproc_wf(bold_file, ignore, freesurfer,
8686
use_aroma=False,
8787
ignore_aroma_err=False,
8888
aroma_melodic_dim=None,
89+
use_mcflirt=False,
8990
num_bold=1)
9091
9192
**Parameters**
@@ -146,6 +147,8 @@ def init_func_preproc_wf(bold_file, ignore, freesurfer,
146147
template_out_grid : str
147148
Keyword ('native', '1mm' or '2mm') or path of custom reference
148149
image for normalization
150+
use_mcflirt : bool
151+
Use FSL ``mcflirt`` for head motion correction, instead of AFNI ``3dVolreg``.
149152
layout : BIDSLayout
150153
BIDSLayout structure to enable metadata retrieval
151154
num_bold : int
@@ -403,7 +406,8 @@ def init_func_preproc_wf(bold_file, ignore, freesurfer,
403406
mem_gb=mem_gb['filesize'] * 3)
404407

405408
# HMC on the BOLD
406-
bold_hmc_wf = init_bold_hmc_wf(name='bold_hmc_wf',
409+
bold_hmc_wf = init_bold_hmc_wf(use_mcflirt=use_mcflirt,
410+
name='bold_hmc_wf',
407411
mem_gb=mem_gb['filesize'],
408412
omp_nthreads=omp_nthreads)
409413

0 commit comments

Comments
 (0)