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 nipype import logging
from nipype.pipeline import engine as pe
from nipype.interfaces import utility as niu

from ...engine import Workflow
from ...interfaces.multiecho import (T2SMap, MaskT2SMap)
from .resampling import init_bold_preproc_trans_wf

from .util import init_skullstrip_bold_wf

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


# pylint: disable=R0914
[docs]def init_bold_t2s_wf(bold_echos, echo_times, mem_gb, omp_nthreads, name='bold_t2s_wf', use_compression=True, use_fieldwarp=False): """ 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( bold_echos=['echo1', 'echo2', 'echo3'], echo_times=[13.6, 29.79, 46.59], mem_gb=3, omp_nthreads=1) **Parameters** bold_echos list of ME-BOLD files 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``) use_compression : bool Save registered BOLD series as ``.nii.gz`` use_fieldwarp : bool Include SDC warp in single-shot transform from BOLD to MNI **Inputs** name_source (one echo of) the original BOLD series NIfTI file Used to recover original information lost during processing hmc_xforms ITKTransform file aligning each volume to ``ref_image`` **Outputs** t2s_map the T2* map for the EPI run oc_mask the skull-stripped optimal combination mask """ workflow = Workflow(name=name) inputnode = pe.Node(niu.IdentityInterface( fields=['bold_echos', 'name_source', 'hmc_xforms']), name='inputnode') inputnode.iterables = ('bold_echos', bold_echos) outputnode = pe.Node(niu.IdentityInterface(fields=['t2s_map', 'oc_mask']), name='outputnode') LOGGER.log(25, 'Generating T2* map.') # Apply transforms in 1 shot bold_bold_trans_wf = init_bold_preproc_trans_wf( mem_gb=mem_gb, omp_nthreads=omp_nthreads, use_compression=use_compression, use_fieldwarp=use_fieldwarp, name='bold_bold_trans_wf', split_file=True, interpolation='NearestNeighbor' ) t2s_map = pe.JoinNode(T2SMap( te_list=echo_times), joinsource='inputnode', joinfield=['in_files'], name='t2s_map') skullstrip_bold_wf = init_skullstrip_bold_wf() mask_t2s = pe.Node(MaskT2SMap(), name='mask_t2s') workflow.connect([ (inputnode, bold_bold_trans_wf, [ ('bold_echos', 'inputnode.bold_file'), ('name_source', 'inputnode.name_source'), ('hmc_xforms', 'inputnode.hmc_xforms')]), (bold_bold_trans_wf, t2s_map, [('outputnode.bold', 'in_files')]), (t2s_map, skullstrip_bold_wf, [('opt_comb', 'inputnode.in_file')]), (t2s_map, mask_t2s, [('t2s_vol', 'image')]), (skullstrip_bold_wf, outputnode, [('outputnode.mask_file', 'oc_mask')]), (skullstrip_bold_wf, mask_t2s, [('outputnode.mask_file', 'mask')]), (mask_t2s, outputnode, [('masked_t2s', 't2s_map')]) ]) return workflow
def _first(inlist): return inlist[0][0]