Source code for fmriprep.workflows.fieldmap.base

#!/usr/bin/env python
# -*- 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:
"""
Base fieldmap estimation
------------------------

* Subject can have phase-difference data.
* Subject can have a fieldmap acquisition.

"""
# from niworkflows.nipype import logging


[docs]def init_fmap_estimator_wf(fmap_bids, reportlets_dir, omp_nthreads, fmap_bspline): """ This workflow selects the fieldmap estimation data available for the subject and returns the estimated fieldmap in mm, along with a corresponding reference image. Current implementation applies the first type of fieldmap estimation found in the following order of precedence: * "Natural" fieldmaps * Phase-difference fieldmaps Outputs: fmap The estimated fieldmap itself IN UNITS OF Hz. fmap_ref the anatomical reference for the fieldmap (magnitude image, corrected SEm, etc.) fmap_mask a brain mask for the fieldmap """ # pybids type options: (phase1|phase2|phasediff|epi|fieldmap) # https://github.com/INCF/pybids/blob/213c425d8ee820f4b7a7ae96e447a4193da2f359/bids/grabbids/bids_layout.py#L63 if fmap_bids['type'] == 'fieldmap': from .fmap import init_fmap_wf fmap_wf = init_fmap_wf(reportlets_dir=reportlets_dir, omp_nthreads=omp_nthreads, fmap_bspline=fmap_bspline) # set inputs fmap_wf.inputs.inputnode.fieldmap = fmap_bids['fieldmap'] fmap_wf.inputs.inputnode.magnitude = fmap_bids['magnitude'] return fmap_wf if fmap_bids['type'] == 'phasediff': from .phdiff import init_phdiff_wf phdiff_wf = init_phdiff_wf(reportlets_dir=reportlets_dir, omp_nthreads=omp_nthreads) # set inputs phdiff_wf.inputs.inputnode.phasediff = fmap_bids['phasediff'] phdiff_wf.inputs.inputnode.magnitude = [ fmap_ for key, fmap_ in sorted(fmap_bids.items()) if key.startswith("magnitude") ] return phdiff_wf if fmap_bids['type'] in ['phase1', 'phase2']: raise NotImplementedError
[docs]def init_fmap_unwarp_report_wf(reportlets_dir, name='fmap_unwarp_report_wf'): """ This workflow generates and saves a reportlet showing the effect of fieldmap unwarping a BOLD image. .. workflow:: :graph2use: orig :simple_form: yes from fmriprep.workflows.fieldmap.base import init_fmap_unwarp_report_wf wf = init_fmap_unwarp_report_wf(reportlets_dir='.') **Parameters** reportlets_dir : str Directory in which to save reportlets name : str, optional Workflow name (default: fmap_unwarp_report_wf) **Inputs** in_pre Reference image, before unwarping in_post Reference image, after unwarping in_seg Segmentation of preprocessed structural image, including gray-matter (GM), white-matter (WM) and cerebrospinal fluid (CSF) in_xfm Affine transform from T1 space to BOLD space (ITK format) name_source BOLD series NIfTI file Used to recover original information lost during processing """ from niworkflows.nipype.pipeline import engine as pe from niworkflows.nipype.interfaces import utility as niu from niworkflows.interfaces.fixes import FixHeaderApplyTransforms as ApplyTransforms from niworkflows.interfaces import SimpleBeforeAfter from ...interfaces.images import extract_wm from ...interfaces import DerivativesDataSink DEFAULT_MEMORY_MIN_GB = 0.01 workflow = pe.Workflow(name=name) inputnode = pe.Node(niu.IdentityInterface( fields=['in_pre', 'in_post', 'in_seg', 'in_xfm', 'name_source']), name='inputnode') map_seg = pe.Node(ApplyTransforms( dimension=3, float=True, interpolation='NearestNeighbor'), name='map_seg', mem_gb=0.3) sel_wm = pe.Node(niu.Function(function=extract_wm), name='sel_wm', mem_gb=DEFAULT_MEMORY_MIN_GB) bold_rpt = pe.Node(SimpleBeforeAfter(), name='bold_rpt', mem_gb=0.1) bold_rpt_ds = pe.Node( DerivativesDataSink(base_directory=reportlets_dir, suffix='variant-hmcsdc_preproc'), name='bold_rpt_ds', mem_gb=DEFAULT_MEMORY_MIN_GB, run_without_submitting=True ) workflow.connect([ (inputnode, bold_rpt, [('in_post', 'after'), ('in_pre', 'before')]), (inputnode, bold_rpt_ds, [('name_source', 'source_file')]), (bold_rpt, bold_rpt_ds, [('out_report', 'in_file')]), (inputnode, map_seg, [('in_post', 'reference_image'), ('in_seg', 'input_image'), ('in_xfm', 'transforms')]), (map_seg, sel_wm, [('output_image', 'in_seg')]), (sel_wm, bold_rpt, [('out', 'wm_seg')]), ]) return workflow