Source code for macapype.pipelines.extract_brain

"""
    Pipelines for brain extraction

"""
import nipype.interfaces.utility as niu
import nipype.pipeline.engine as pe

import nipype.interfaces.fsl as fsl
import nipype.interfaces.afni as afni

from ..nodes.extract_brain import AtlasBREX

from ..utils.utils_nodes import NodeParams, parse_key


[docs]def create_extract_pipe(params_template, params={}, name="extract_pipe"): """ Description: Extract T1 brain using AtlasBrex Params: - norm_intensity (see `N4BiasFieldCorrection <https://nipype.readthedocs\ .io/en/0.12.1/interfaces/generated/nipype.interfaces.ants.segmentation.\ html#n4biasfieldcorrection>`_ for arguments) - atlas_brex (see :class:`AtlasBREX \ <macapype.nodes.extract_brain.AtlasBREX>` for arguments) - also \ available as :ref:`indiv_params <indiv_params>` Inputs: inputnode: restore_T1: preprocessed (debiased/denoised) T1 file name restore_T2: preprocessed (debiased/denoised)T2 file name arguments: params_template: dictionary of info about template params: dictionary of node sub-parameters (from a json file) name: pipeline name (default = "extract_pipe") Outputs: smooth_mask.out_file: Computed mask (after some smoothing) """ # creating pipeline extract_pipe = pe.Workflow(name=name) # creating inputnode inputnode = pe.Node( niu.IdentityInterface(fields=['restore_T1', 'restore_T2', "indiv_params"]), name='inputnode') # atlas_brex atlas_brex = NodeParams(AtlasBREX(), params=parse_key(params, "atlas_brex"), name='atlas_brex') extract_pipe.connect(inputnode, "restore_T1", atlas_brex, 't1_restored_file') atlas_brex.inputs.NMT_file = params_template["template_head"] atlas_brex.inputs.NMT_SS_file = params_template["template_brain"] extract_pipe.connect( inputnode, ("indiv_params", parse_key, "atlas_brex"), atlas_brex, 'indiv_params') # mask_brex mask_brex = pe.Node(fsl.UnaryMaths(), name='mask_brex') mask_brex.inputs.operation = 'bin' extract_pipe.connect(atlas_brex, 'brain_file', mask_brex, 'in_file') # smooth_mask smooth_mask = pe.Node(fsl.UnaryMaths(), name='smooth_mask') smooth_mask.inputs.operation = "bin" smooth_mask.inputs.args = "-s 1 -thr 0.5 -bin" extract_pipe.connect(mask_brex, 'out_file', smooth_mask, 'in_file') # mult_T1 mult_T1 = pe.Node(afni.Calc(), name='mult_T1') mult_T1.inputs.expr = "a*b" mult_T1.inputs.outputtype = 'NIFTI_GZ' extract_pipe.connect(inputnode, "restore_T1", mult_T1, 'in_file_a') extract_pipe.connect(smooth_mask, 'out_file', mult_T1, 'in_file_b') # mult_T2 mult_T2 = pe.Node(afni.Calc(), name='mult_T2') mult_T2.inputs.expr = "a*b" mult_T2.inputs.outputtype = 'NIFTI_GZ' extract_pipe.connect(inputnode, 'restore_T2', mult_T2, 'in_file_a') extract_pipe.connect(smooth_mask, 'out_file', mult_T2, 'in_file_b') return extract_pipe
[docs]def create_extract_T1_pipe(params_template, params={}, name="extract_T1_pipe"): """ Description: Extract T1 brain using AtlasBrex Params: - norm_intensity (see `N4BiasFieldCorrection <https://nipype.readthedocs.\ io/en/0.12.1/interfaces/generated/nipype.interfaces.ants.segmentation.html\ #n4biasfieldcorrection>`_ for arguments) - atlas_brex (see :class:`AtlasBREX \ <macapype.nodes.extract_brain.AtlasBREX>` for arguments) - also available \ as :ref:`indiv_params <indiv_params>` Inputs: inputnode: restore_T1: preprocessed (debiased/denoised) T1 file name arguments: params_template: dictionary of info about template params: dictionary of node sub-parameters (from a json file) name: pipeline name (default = "extract_pipe") Outputs: smooth_mask.out_file: Computed mask (after some smoothing) """ # creating pipeline extract_pipe = pe.Workflow(name=name) # creating inputnode inputnode = pe.Node( niu.IdentityInterface(fields=['restore_T1', "indiv_params"]), name='inputnode') # atlas_brex atlas_brex = NodeParams(AtlasBREX(), params=parse_key(params, "atlas_brex"), name='atlas_brex') extract_pipe.connect(inputnode, 'restore_T1', atlas_brex, 't1_restored_file') atlas_brex.inputs.NMT_file = params_template["template_head"] atlas_brex.inputs.NMT_SS_file = params_template["template_brain"] extract_pipe.connect( inputnode, ("indiv_params", parse_key, "atlas_brex"), atlas_brex, 'indiv_params') # mask_brex mask_brex = pe.Node(fsl.UnaryMaths(), name='mask_brex') mask_brex.inputs.operation = 'bin' extract_pipe.connect(atlas_brex, 'brain_file', mask_brex, 'in_file') # smooth_mask smooth_mask = pe.Node(fsl.UnaryMaths(), name='smooth_mask') smooth_mask.inputs.operation = "bin" smooth_mask.inputs.args = "-s 1 -thr 0.5 -bin" extract_pipe.connect(mask_brex, 'out_file', smooth_mask, 'in_file') # mult_T1 mult_T1 = pe.Node(afni.Calc(), name='mult_T1') mult_T1.inputs.expr = "a*b" mult_T1.inputs.outputtype = 'NIFTI_GZ' extract_pipe.connect(inputnode, 'restore_T1', mult_T1, 'in_file_a') extract_pipe.connect(smooth_mask, 'out_file', mult_T1, 'in_file_b') return extract_pipe