Source code for fsl.wrappers.flirt

#!/usr/bin/env python
#
# flirt.py - Wrappers for FLIRT commands.
#
# Author: Sean Fitzgibbon <sean.fitzgibbon@ndcn.ox.ac.uk>
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
# Author: Fidel Alfaro Almagro <fidel.alfaroalmagro@ndcn.ox.ac.uk>
#
"""This module provides wrapper functions for the FSL `FLIRT
<https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FLIRT>`_ tool, and other related
tools.

.. autosummary::
   :nosignatures:

   flirt
   makerot
   applyxfm
   applyxfm4D
   invxfm
   concatxfm
   fixscaleskew
   mcflirt
   standard_space_roi
"""


import fsl.utils.assertions as asrt
from . import wrapperutils  as wutils


[docs] @wutils.fileOrImage('src', 'ref', 'out', 'wmseg', 'fieldmap', 'fieldmapmask') @wutils.fileOrArray('init', 'omat', 'wmcoords', 'wmnorms') @wutils.fslwrapper def flirt(src, ref, **kwargs): """Wrapper for the ``flirt`` command. The ``twod`` argument may be used in place of the ``2D`` command line option. """ asrt.assertIsNifti(src, ref) argmap = { 'twod' : '2D' } valmap = { 'usesqform' : wutils.SHOW_IF_TRUE, 'displayinit' : wutils.SHOW_IF_TRUE, 'noresample' : wutils.SHOW_IF_TRUE, 'forcescaling' : wutils.SHOW_IF_TRUE, 'applyxfm' : wutils.SHOW_IF_TRUE, 'nosearch' : wutils.SHOW_IF_TRUE, 'noclamp' : wutils.SHOW_IF_TRUE, 'noresampblur' : wutils.SHOW_IF_TRUE, '2D' : wutils.SHOW_IF_TRUE, 'v' : wutils.SHOW_IF_TRUE, } cmd = ['flirt', '-in', src, '-ref', ref] cmd += wutils.applyArgStyle('-', argmap=argmap, valmap=valmap, **kwargs) return cmd
[docs] def applyxfm(src, ref, mat, out, interp='spline', **kwargs): """Convenience function which runs ``flirt -applyxfm ...``. Note that the default value for ``-interp`` is ``spline``, which differs from the command-line default. """ return flirt(src, ref, out=out, applyxfm=True, init=mat, interp=interp, **kwargs)
[docs] @wutils.fileOrArray('mat') @wutils.fileOrImage('src', 'ref', 'out') @wutils.fslwrapper def applyxfm4D(src, ref, out, mat, **kwargs): """Wrapper for the ``applyxfm4D`` command. """ asrt.assertIsNifti(src, ref) valmap = { 'singlematrix' : wutils.SHOW_IF_TRUE, 'fourdigit' : wutils.SHOW_IF_TRUE, } cmd = ['applyxfm4D', src, ref, out, mat] cmd += wutils.applyArgStyle('-', valmap=valmap, **kwargs) return cmd
[docs] @wutils.fileOrArray() @wutils.fslwrapper def invxfm(inmat, omat): """Use ``convert_xfm`` to invert an affine.""" asrt.assertFileExists(inmat) return ['convert_xfm', '-omat', omat, '-inverse', inmat]
[docs] @wutils.fileOrArray('atob', 'atoc', 'btoc') @wutils.fslwrapper def concatxfm(atob, btoc, atoc): """Use ``convert_xfm`` to concatenate two affines. Note that the order of the input matrices is the opposite of the order expected by ``convert_xfm``. :arg atob: Input matrix, transforming from "A" to "B". :arg btoc: Input matrix, transforming from "B" to "C". :arg atoc: Output matrix, transforming from "A" to "C". """ asrt.assertFileExists(atob, btoc) cmd = ['convert_xfm', '-omat', atoc, '-concat', btoc, atob] return cmd
[docs] @wutils.fileOrArray('inmat1', 'inmat2', 'omat') @wutils.fslwrapper def fixscaleskew(inmat1, inmat2, omat): """Use ``convert_xfm`` to fix the skew scale of an affine. Note that the order of the input matrices is the opposite of the order expected by ``convert_xfm``. :arg inmat1: Input matrix to fix. :arg inmat2: Matrix to scale the skew to. :arg omat: Output matrix. """ asrt.assertFileExists(inmat1, inmat2) cmd = ['convert_xfm', '-fixscaleskew', inmat2, inmat1, '-omat', omat] return cmd
[docs] @wutils.fileOrImage('infile', 'out', 'reffile', outprefix='out') @wutils.fileOrArray('init', outprefix='out') @wutils.fslwrapper def mcflirt(infile, **kwargs): """Wrapper for the ``mcflirt`` command.""" asrt.assertIsNifti(infile) argmap = { 'twod' : '2d', } valmap = { '2d' : wutils.SHOW_IF_TRUE, 'gdt' : wutils.SHOW_IF_TRUE, 'meanvol' : wutils.SHOW_IF_TRUE, 'stats' : wutils.SHOW_IF_TRUE, 'mats' : wutils.SHOW_IF_TRUE, 'plots' : wutils.SHOW_IF_TRUE, 'report' : wutils.SHOW_IF_TRUE, } cmd = ['mcflirt', '-in', infile] cmd += wutils.applyArgStyle('-', argmap=argmap, valmap=valmap, **kwargs) return cmd
[docs] @wutils.fileOrImage('input', 'output', 'maskMASK', 'roiMASK', 'ssref', 'altinput') @wutils.fslwrapper def standard_space_roi(input, output, **kwargs): """Wrapper for the ``standard_space_roi`` command. Refer to the ``standard_space_roi`` command-line help for details on all arguments. """ asrt.assertIsNifti(input) argmap = { 'twod' : '2D' } valmap = { 'maskFOV' : wutils.SHOW_IF_TRUE, 'maskNONE' : wutils.SHOW_IF_TRUE, 'roiFOV' : wutils.SHOW_IF_TRUE, 'roiNONE' : wutils.SHOW_IF_TRUE, 'd' : wutils.SHOW_IF_TRUE, 'b' : wutils.SHOW_IF_TRUE, 'usesqform' : wutils.SHOW_IF_TRUE, 'displayinit' : wutils.SHOW_IF_TRUE, 'noresample' : wutils.SHOW_IF_TRUE, 'forcescaling' : wutils.SHOW_IF_TRUE, 'applyxfm' : wutils.SHOW_IF_TRUE, 'nosearch' : wutils.SHOW_IF_TRUE, 'noclamp' : wutils.SHOW_IF_TRUE, 'noresampblur' : wutils.SHOW_IF_TRUE, '2D' : wutils.SHOW_IF_TRUE, 'v' : wutils.SHOW_IF_TRUE } cmd = ['standard_space_roi', input, output] cmd += wutils.applyArgStyle('-', argmap=argmap, valmap=valmap, **kwargs) return cmd
[docs] @wutils.fileOrImage('cov') @wutils.fileOrArray('out') @wutils.fslwrapper def makerot(theta, **kwargs): """Wrapper for the ``makerot`` command.""" valmap = {'verbose' : wutils.SHOW_IF_TRUE} cmd = ['makerot', '-t', str(theta)] cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs) return cmd
[docs] @wutils.fileOrArray('output', 'transforms', outprefix='separate') @wutils.fileOrImage('template') @wutils.fslwrapper def midtrans(output, *transforms, **kwargs): """Wrapper for the ``midtrans`` command. """ valmap = { 'verbose' : wutils.SHOW_IF_TRUE, 'debug' : wutils.SHOW_IF_TRUE } cmd = ['midtrans'] cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs) cmd += ['-o', output] + list(transforms) return cmd