# -*- coding: utf-8 -*-
"""
Artefact removal and resizing
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. autofunction:: init_dwi_artifacts_wf
"""
from nipype.pipeline import engine as pe
from nipype.interfaces import utility as niu
from ...interfaces import mrtrix3
[docs]def init_dwi_artifacts_wf(ignore, output_resolution):
"""
This workflow performs denoising and unringing on the input dwi image.
.. workflow::
:graph2use: orig
:simple_form: yes
from dmriprep.workflows.dwi import init_dwi_artifacts_wf
wf = init_dwi_artifacts_wf(ignore=[], output_resolution=(1, 1, 1))
**Parameters**
ignore : :obj:`list`
List of artefact removal steps to skip (default: [])
**Inputs**
dwi_file : :obj:`str`
dwi NIfTI file
**Outputs**
out_file : :obj:`str`
dwi NIfTI file after artefact removal
"""
wf = pe.Workflow(name='dwi_artifacts_wf')
inputnode = pe.Node(niu.IdentityInterface(fields=['dwi_file']), name='inputnode')
outputnode = pe.Node(niu.IdentityInterface(fields=['out_file']), name='outputnode')
dwibuffer = pe.Node(niu.IdentityInterface(fields=['dwi_file']), name='dwibuffer')
denoise = pe.Node(mrtrix3.DWIDenoise(), name='denoise')
unring = pe.Node(mrtrix3.MRDeGibbs(), name='unring')
resize = pe.Node(mrtrix3.MRResize(), name='resize')
if ignore == ['denoising']:
wf.connect([
(inputnode, unring, [('dwi_file', 'in_file')]),
(unring, dwibuffer, [('out_file', 'dwi_file')])
])
elif ignore == ['unringing']:
wf.connect([
(inputnode, denoise, [('dwi_file', 'in_file')]),
(denoise, dwibuffer, [('out_file', 'dwi_file')])
])
elif ['denoising', 'unringing'] in ignore:
wf.connect([
(inputnode, dwibuffer, 'dwi_file', 'dwi_file')
])
else:
wf.connect([
(inputnode, denoise, [('dwi_file', 'in_file')]),
(denoise, unring, [('out_file', 'in_file')]),
(unring, dwibuffer, [('out_file', 'dwi_file')])
])
if output_resolution:
resize.inputs.voxel_size = output_resolution
wf.connect([
(dwibuffer, resize, [('dwi_file', 'in_file')]),
(resize, outputnode, [('out_file', 'out_file')])
])
else:
wf.connect([
(dwibuffer, outputnode, [('dwi_file', 'out_file')])
])
return wf