Source code for fmriprep.workflows.bold.t2s

# -*- coding: utf-8 -*-
# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*-
# vi: set ft=python sts=4 ts=4 sw=4 et:
"""
Generate T2* map from multi-echo BOLD images
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. autofunction:: init_bold_t2s_wf

"""
from niworkflows.nipype import logging
from niworkflows.nipype.pipeline import engine as pe
from niworkflows.nipype.interfaces import utility as niu

from ...interfaces.nilearn import Merge
from ...interfaces.multiecho import T2SMap
from ...interfaces import MultiApplyTransforms

from .util import init_skullstrip_bold_wf

DEFAULT_MEMORY_MIN_GB = 0.01
LOGGER = logging.getLogger('workflow')


# pylint: disable=R0914
[docs]def init_bold_t2s_wf(echo_times, mem_gb, omp_nthreads, name='bold_t2s_wf'): """ This workflow performs :abbr:`HMC (head motion correction)` on individual echo_files, uses T2SMap to generate a T2* image for coregistration instead of mean BOLD EPI. .. workflow:: :graph2use: orig :simple_form: yes from fmriprep.workflows.bold import init_bold_t2s_wf wf = init_bold_t2s_wf(echo_times=[13.6, 29.79, 46.59], mem_gb=3, omp_nthreads=1) **Parameters** echo_times list of TEs associated with each echo mem_gb : float Size of BOLD file in GB omp_nthreads : int Maximum number of threads an individual process may use name : str Name of workflow (default: ``bold_t2s_wf``) **Inputs** xforms ITKTransform file aligning each volume to ``ref_image`` echo_split 3D volumes of multi-echo BOLD EPI **Outputs** t2s_map the T2* map for the EPI run """ workflow = pe.Workflow(name=name) inputnode = pe.Node(niu.IdentityInterface(fields=['echo_split', 'xforms']), name='inputnode') outputnode = pe.Node(niu.IdentityInterface(fields=['t2s_map', 't2s_mask']), name='outputnode') LOGGER.log(25, 'Generating T2* map.') apply_hmc = pe.Node( MultiApplyTransforms(interpolation='NearestNeighbor', float=True, copy_dtype=True), mem_gb=(mem_gb * 3 * omp_nthreads), n_procs=omp_nthreads, name='apply_hmc') merge = pe.Node(Merge(compress=True), name='merge', mem_gb=mem_gb) t2s_map = pe.JoinNode(T2SMap(te_list=echo_times), joinfield='in_files', joinsource='inputnode', name='t2s_map') skullstrip_bold_wf = init_skullstrip_bold_wf() workflow.connect([ (inputnode, apply_hmc, [('hmc_xforms', 'transforms'), ('echo_split', 'input_image')]), (apply_hmc, merge, [('out_files', 'in_files')]), (merge, t2s_map, [('out_file', 'in_files')]), (t2s_map, skullstrip_bold_wf, [('output_image', 'inputnode.in_file')]), (skullstrip_bold_wf, outputnode, [('outputnode.skull_stripped_file', 't2s_map'), ('outputnode.mask_file', 't2s_mask')]) ]) return workflow