Source code for macapype.nodes.correct_bias

import os
from nipype.interfaces.base import (CommandLine, CommandLineInputSpec,
                                    TraitedSpec)
from nipype.interfaces.base import traits, File


# T1xT2BiasFieldCorrection
class T1xT2BiasFieldCorrectionInputSpec(CommandLineInputSpec):

    t1_file = File(
        exists=True,
        desc='Whole-head T1w image',
        mandatory=True, position=0, argstr="-t1 %s")

    t2_file = File(
        exists=True,
        desc='Whole-head T2w image (use -aT2 if T2w image is not in the T1w \
              space)',
        mandatory=True, position=1, argstr="-t2 %s")

    os = traits.String(
        "_debiased", usedefault=True,
        desc="Suffix for the bias field corrected images (default is \
              \"_debiased\")",
        argstr="-os %s", mandatory=False)

    aT2 = traits.Bool(
        False, usedefault=True,
        argstr="-aT2",
        desc="Will coregrister T2w to T1w using flirt. Output will have the\
            suffix provided. Will only work for spatially close images.",
        mandatory=False)

    # as -> opt_as, as is already a part of python keywords...
    opt_as = traits.String(
        "-in-T1w", usedefault=True, argstr="-as %s",
        desc="Suffix for T2w to T1w registration \
              (\"-in-T1w\" if not specified)",
        mandatory=False)

    s = traits.Int(
        4, usedefault=True,
        desc='size of gauss kernel in mm when performing mean filtering \
              (default=4)',
        argstr="-s %d", mandatory=False)

    # exists = True ???
    b = traits.File(
        argstr="-b %s",
        desc="Brain mask file. Will also output bias corrected brain files \
            with the format \"output_prefix_brain.nii.gz\"",
        mandatory=False)

    bet = traits.Int(
        0, usedefault=True,
        desc='Will try to "smart" BET the anat files to get a brain mask: n =\
            the number of iterations BET will be run to find center of gravity\
            (default=0, will not BET if option -b has been specified).',
        argstr="-bet %d", mandatory=False)

    bs = traits.String(
        "_BET", usedefault=True,
        desc="Suffix for the BET masked images (default is \"_BET\")",
        argstr="-bs %s", mandatory=False)

    f = traits.Float(
        0.5, usedefault=True,
        desc='-f options of BET: fractional intensity threshold (0->1); \
            default=0.5; smaller values give larger brain outline estimates',
        argstr="-f %f", mandatory=False)

    g = traits.Float(
        0.0, usedefault=True, desc='-g options of BET:\
                  vertical gradient in fractional intensity threshold (-1->1);\
                  default=0; positive values give larger brain outline at\
                  bottom, smaller at top',
        argstr="-g %f", mandatory=False)

    k = traits.Bool(
        False, usedefault=True, argstr="-k",
        desc="Will keep temporary files",
        mandatory=False)

    p = traits.String(
        desc="Prefix for running FSL functions\
              (can be a path or just a prefix)",
        argstr="-p %s", mandatory=False)


class T1xT2BiasFieldCorrectionOutputSpec(TraitedSpec):
    t1_debiased_file = File(
        exists=True,
        desc="debiased T1")

    t2_debiased_file = File(
        exists=True,
        desc="debiased T2")

    t2_coreg_file = File(
        desc="T2 on T1")

    t1_debiased_brain_file = File(
        desc="debiased bet T1")

    t2_debiased_brain_file = File(
        desc="debiased bet T2")

    debiased_mask_file = File(
        desc="debiased bet mask")


[docs]class T1xT2BiasFieldCorrection(CommandLine): """ Description: Bias field correction using T1w & T2w images. Provides an attempt of brain extration if wanted. Inputs: Mandatory: t1_file Whole-head T1w image t2_file Whole-head T2w image (use -aT2 if T2w image is not in the T1w space) Optional: os Suffix for the bias field corrected images (default is "_debiased") aT2 Will coregrister T2w to T1w using flirt. Output will have the\ suffix provided. Will only work for spatially close images. opt_as Suffix for T2w to T1w registration ("-in-T1w" if not specified) s size of gauss kernel in mm when performing mean filtering \ (default=4)argstr="-s %d", mandatory=False) b Brain mask file. Will also output bias corrected brain files \ with the format "output_prefix_brain.nii.gz" bet Will try to "smart" BET the anat files to get a brain mask: n = the number of iterations BET will be run to find center of gravity (default=0, will not BET if option -b has been specified). bs Suffix for the BET masked images (default is "_BET") f -f options of BET: fractional intensity threshold (0->1); \ default=0.5; smaller values give larger brain outline estimates g -g options of BET:\ vertical gradient in fractional intensity threshold (-1->1); default=0; positive values give larger brain outline at bottom, smaller at top k Will keep temporary files p Prefix for running FSL functions\ (can be a path or just a prefix) Outputs: t1_debiased_file debiased T1 t2_debiased_file debiased T2 t2_coreg_file T2 on T1 t1_debiased_brain_file debiased bet T1 t2_debiased_brain_file debiased bet T2 debiased_mask_file debiased bet mask """ input_spec = T1xT2BiasFieldCorrectionInputSpec output_spec = T1xT2BiasFieldCorrectionOutputSpec package_directory = os.path.dirname(os.path.abspath(__file__)) _cmd = 'bash {}/../bash/T1xT2BiasFieldCorrection.sh'.format( package_directory) def _list_outputs(self): import os from nipype.utils.filemanip import split_filename as split_f outputs = self._outputs().get() t1_path, t1_fname, ext = split_f(self.inputs.t1_file) t2_path, t2_fname, ext = split_f(self.inputs.t2_file) # !!!!warning, in Regis bash, only .nii.gz are handled outputs["t1_debiased_file"] = os.path.abspath( t1_fname + self.inputs.os + ".nii.gz") outputs["t2_debiased_file"] = os.path.abspath( t2_fname + self.inputs.os + ".nii.gz") if self.inputs.aT2: outputs["t2_coreg_file"] = os.path.abspath( t2_fname + self.inputs.opt_as + ".nii.gz") if self.inputs.bet: outputs["t1_debiased_brain_file"] = os.path.abspath( t1_fname + self.inputs.os + self.inputs.bs + ".nii.gz") outputs["t2_debiased_brain_file"] = os.path.abspath( t2_fname + self.inputs.os + self.inputs.bs + ".nii.gz") outputs["debiased_mask_file"] = os.path.abspath( t1_fname + self.inputs.os + self.inputs.bs + "_mask.nii.gz") elif self.inputs.b: outputs["t1_debiased_brain_file"] = os.path.abspath( t1_fname + self.inputs.os + "_brain.nii.gz") outputs["t2_debiased_brain_file"] = os.path.abspath( t2_fname + self.inputs.os + "_brain.nii.gz") return outputs