Skip to content

Commit c28a615

Browse files
committed
rf: Calculate RMSD from motion transforms
1 parent d157171 commit c28a615

File tree

4 files changed

+9
-35
lines changed

4 files changed

+9
-35
lines changed

fmriprep/workflows/bold/base.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,6 @@ def init_bold_wf(
675675
('outputnode.bold_mask', 'inputnode.bold_mask'),
676676
('outputnode.hmc_boldref', 'inputnode.hmc_boldref'),
677677
('outputnode.motion_xfm', 'inputnode.motion_xfm'),
678-
('outputnode.rmsd_file', 'inputnode.rmsd_file'),
679678
('outputnode.boldref2anat_xfm', 'inputnode.boldref2anat_xfm'),
680679
('outputnode.dummy_scans', 'inputnode.skip_vols'),
681680
]),

fmriprep/workflows/bold/confounds.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
FMRISummary,
4141
FramewiseDisplacement,
4242
FSLMotionParams,
43+
FSLRMSDeviation,
4344
GatherConfounds,
4445
RenameACompCor,
4546
)
@@ -124,8 +125,6 @@ def init_bold_confs_wf(
124125
BOLD series mask
125126
motion_xfm
126127
ITK-formatted head motion transforms
127-
rmsd_file
128-
Root mean squared deviation as measured by ``fsl_motion_outliers`` [Jenkinson2002]_.
129128
skip_vols
130129
number of non steady state volumes
131130
t1w_mask
@@ -225,7 +224,6 @@ def init_bold_confs_wf(
225224
'bold_mask',
226225
'hmc_boldref',
227226
'motion_xfm',
228-
'rmsd_file',
229227
'skip_vols',
230228
't1w_mask',
231229
't1w_tpms',
@@ -269,7 +267,8 @@ def init_bold_confs_wf(
269267
motion_params = pe.Node(FSLMotionParams(), name='motion_params')
270268

271269
# Frame displacement
272-
fdisp = pe.Node(FramewiseDisplacement(), name='fdisp', mem_gb=mem_gb)
270+
fdisp = pe.Node(FramewiseDisplacement(), name='fdisp')
271+
rmsd = pe.Node(FSLRMSDeviation(), name='rmsd')
273272

274273
# Generate aCompCor probseg maps
275274
acc_masks = pe.Node(aCompCorMasks(is_aseg=freesurfer), name='acc_masks')
@@ -373,12 +372,6 @@ def init_bold_confs_wf(
373372
mem_gb=0.01,
374373
run_without_submitting=True,
375374
)
376-
add_rmsd_header = pe.Node(
377-
AddTSVHeader(columns=['rmsd']),
378-
name='add_rmsd_header',
379-
mem_gb=0.01,
380-
run_without_submitting=True,
381-
)
382375
concat = pe.Node(GatherConfounds(), name='concat', mem_gb=0.01, run_without_submitting=True)
383376

384377
# CompCor metadata
@@ -524,6 +517,8 @@ def _select_cols(table):
524517
('bold_mask', 'in_mask')]),
525518
(inputnode, motion_params, [('motion_xfm', 'xfm_file'),
526519
('hmc_boldref', 'boldref_file')]),
520+
(inputnode, rmsd, [('motion_xfm', 'xfm_file'),
521+
('hmc_boldref', 'boldref_file')]),
527522
(motion_params, fdisp, [('out_file', 'in_file')]),
528523
# Brain mask
529524
(inputnode, t1w_mask_tfm, [('t1w_mask', 'input_image'),
@@ -567,7 +562,6 @@ def _select_cols(table):
567562
(merge_rois, signals, [('out', 'label_files')]),
568563

569564
# Collate computed confounds together
570-
(inputnode, add_rmsd_header, [('rmsd_file', 'in_file')]),
571565
(dvars, add_dvars_header, [('out_nstd', 'in_file')]),
572566
(dvars, add_std_dvars_header, [('out_std', 'in_file')]),
573567
(signals, concat, [('out_file', 'signals')]),
@@ -577,7 +571,7 @@ def _select_cols(table):
577571
(rename_acompcor, concat, [('components_file', 'acompcor')]),
578572
(crowncompcor, concat, [('components_file', 'crowncompcor')]),
579573
(motion_params, concat, [('out_file', 'motion')]),
580-
(add_rmsd_header, concat, [('out_file', 'rmsd')]),
574+
(rmsd, concat, [('out_file', 'rmsd')]),
581575
(add_dvars_header, concat, [('out_file', 'dvars')]),
582576
(add_std_dvars_header, concat, [('out_file', 'std_dvars')]),
583577

fmriprep/workflows/bold/fit.py

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,6 @@ def init_bold_fit_wf(
178178
boldref2fmap_xfm
179179
Affine transform mapping from BOLD reference space to the fieldmap
180180
space, if applicable.
181-
rmsd_file
182-
Root mean squared deviation as measured by ``fsl_motion_outliers`` [Jenkinson2002]_.
183181
dummy_scans
184182
The number of dummy scans declared or detected at the beginning of the series.
185183
@@ -285,7 +283,6 @@ def init_bold_fit_wf(
285283
'motion_xfm',
286284
'boldref2anat_xfm',
287285
'boldref2fmap_xfm',
288-
'rmsd_file',
289286
],
290287
),
291288
name='outputnode',
@@ -299,9 +296,7 @@ def init_bold_fit_wf(
299296
name='hmcref_buffer',
300297
)
301298
fmapref_buffer = pe.Node(niu.Function(function=_select_ref), name='fmapref_buffer')
302-
hmc_buffer = pe.Node(
303-
niu.IdentityInterface(fields=['hmc_xforms', 'rmsd_file']), name='hmc_buffer'
304-
)
299+
hmc_buffer = pe.Node(niu.IdentityInterface(fields=['hmc_xforms']), name='hmc_buffer')
305300
fmapreg_buffer = pe.Node(
306301
niu.IdentityInterface(fields=['boldref2fmap_xfm']), name='fmapreg_buffer'
307302
)
@@ -354,7 +349,6 @@ def init_bold_fit_wf(
354349
(fmapreg_buffer, outputnode, [('boldref2fmap_xfm', 'boldref2fmap_xfm')]),
355350
(hmc_buffer, outputnode, [
356351
('hmc_xforms', 'motion_xfm'),
357-
('rmsd_file', 'rmsd_file'),
358352
]),
359353
(inputnode, func_fit_reports_wf, [
360354
('bold_file', 'inputnode.source_file'),
@@ -444,9 +438,6 @@ def init_bold_fit_wf(
444438
('bold_file', 'inputnode.bold_file'),
445439
]),
446440
(bold_hmc_wf, ds_hmc_wf, [('outputnode.xforms', 'inputnode.xforms')]),
447-
(bold_hmc_wf, hmc_buffer, [
448-
('outputnode.rmsd_file', 'rmsd_file'),
449-
]),
450441
(ds_hmc_wf, hmc_buffer, [('outputnode.xforms', 'hmc_xforms')]),
451442
]) # fmt:skip
452443
else:

fmriprep/workflows/bold/hmc.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,6 @@ def init_bold_hmc_wf(mem_gb: float, omp_nthreads: int, name: str = 'bold_hmc_wf'
7171
-------
7272
xforms
7373
ITKTransform file aligning each volume to ``ref_image``
74-
rmsd_file
75-
Root mean squared deviation as measured by ``fsl_motion_outliers`` [Jenkinson2002]_.
7674
7775
"""
7876
from niworkflows.engine.workflows import LiterateWorkflow as Workflow
@@ -89,27 +87,19 @@ def init_bold_hmc_wf(mem_gb: float, omp_nthreads: int, name: str = 'bold_hmc_wf'
8987
inputnode = pe.Node(
9088
niu.IdentityInterface(fields=['bold_file', 'raw_ref_image']), name='inputnode'
9189
)
92-
outputnode = pe.Node(niu.IdentityInterface(fields=['xforms', 'rmsd_file']), name='outputnode')
90+
outputnode = pe.Node(niu.IdentityInterface(fields=['xforms']), name='outputnode')
9391

9492
# Head motion correction (hmc)
95-
mcflirt = pe.Node(
96-
fsl.MCFLIRT(save_mats=True, save_plots=True, save_rms=True),
97-
name='mcflirt',
98-
mem_gb=mem_gb * 3,
99-
)
93+
mcflirt = pe.Node(fsl.MCFLIRT(save_mats=True), name='mcflirt', mem_gb=mem_gb * 3)
10094

10195
fsl2itk = pe.Node(MCFLIRT2ITK(), name='fsl2itk', mem_gb=0.05, n_procs=omp_nthreads)
10296

103-
def _pick_rel(rms_files):
104-
return rms_files[-1]
105-
10697
workflow.connect([
10798
(inputnode, mcflirt, [('raw_ref_image', 'ref_file'),
10899
('bold_file', 'in_file')]),
109100
(inputnode, fsl2itk, [('raw_ref_image', 'in_source'),
110101
('raw_ref_image', 'in_reference')]),
111102
(mcflirt, fsl2itk, [('mat_file', 'in_files')]),
112-
(mcflirt, outputnode, [(('rms_files', _pick_rel), 'rmsd_file')]),
113103
(fsl2itk, outputnode, [('out_file', 'xforms')]),
114104
]) # fmt:skip
115105

0 commit comments

Comments
 (0)