From 51abe03114cf7cc6f08071fb3f2de5d7cea3cfd9 Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauldmccarthy@gmail.com> Date: Fri, 2 Mar 2018 16:40:35 +0000 Subject: [PATCH] Clean up melodic module. Add alternate for flirt 2D option --- fsl/wrappers/flirt.py | 12 ++++- fsl/wrappers/melodic.py | 97 ++++++++++++++++++++++++++--------------- 2 files changed, 71 insertions(+), 38 deletions(-) diff --git a/fsl/wrappers/flirt.py b/fsl/wrappers/flirt.py index 7d3ef4769..dd4dadbf6 100644 --- a/fsl/wrappers/flirt.py +++ b/fsl/wrappers/flirt.py @@ -29,10 +29,18 @@ from . import wrapperutils as wutils @wutils.fileOrImage('src', 'ref', 'out', 'wmseg', 'fieldmap', 'fieldmapmask') @wutils.fileOrArray('init', 'omat', 'wmcoords', 'wmnorms') def flirt(src, ref, **kwargs): - """Wrapper for the ``flirt`` command. """ + """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, @@ -47,7 +55,7 @@ def flirt(src, ref, **kwargs): } cmd = ['flirt', '-in', src, '-ref', ref] - cmd += wutils.applyArgStyle('-', valmap=valmap, **kwargs) + cmd += wutils.applyArgStyle('-', argmap=argmap, valmap=valmap, **kwargs) return run.runfsl(cmd) diff --git a/fsl/wrappers/melodic.py b/fsl/wrappers/melodic.py index 82bf28844..16887284d 100644 --- a/fsl/wrappers/melodic.py +++ b/fsl/wrappers/melodic.py @@ -1,57 +1,82 @@ #!/usr/bin/env python # -# melodic.py - +# melodic.py - Wrappers for melodic. # +# Author: Sean Fitzgibbon <sean.fitzgibbon@ndcn.ox.ac.uk> # Author: Paul McCarthy <pauldmccarthy@gmail.com> # +"""This module provides wrapper functions for the FSL `MELODIC +<https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/MELODIC>`_ tool, and other +related utilities. + +.. autosummary:: + :nosignatures: + + melodic + fsl_regfilt +""" + import fsl.utils.run as run import fsl.utils.assertions as asrt +from . import wrapperutils as wutils -def melodic(input, outdir, dim=None, tr=None, mmthresh=None, report=True, - prefix=None, nomask=False, updatemask=False, nobet=False, - mask=None): +@wutils.fileOrArray('mix', 'Tdes', 'Tcon', 'Sdes', 'Scon') +@wutils.fileOrImage('input', 'mask', 'ICs', 'bgimage') +def melodic(input, **kwargs): """Multivariate Exploratory Linear Optimised ICA.""" + + valmap = { + 'Oall' : wutils.SHOW_IF_TRUE, + 'Ounmix' : wutils.SHOW_IF_TRUE, + 'Ostats' : wutils.SHOW_IF_TRUE, + 'Opca' : wutils.SHOW_IF_TRUE, + 'Owhite' : wutils.SHOW_IF_TRUE, + 'Oorig' : wutils.SHOW_IF_TRUE, + 'Omean' : wutils.SHOW_IF_TRUE, + 'verbose' : wutils.SHOW_IF_TRUE, + 'debug' : wutils.SHOW_IF_TRUE, + 'report' : wutils.SHOW_IF_TRUE, + 'CIFTI' : wutils.SHOW_IF_TRUE, + 'varnorm' : wutils.SHOW_IF_TRUE, + 'nomask' : wutils.SHOW_IF_TRUE, + 'nobet' : wutils.SHOW_IF_TRUE, + 'sep_vn' : wutils.SHOW_IF_TRUE, + 'disableMigp' : wutils.SHOW_IF_TRUE, + 'update_mask' : wutils.HIDE_IF_TRUE, + 'migp_shuffle' : wutils.HIDE_IF_TRUE, + 'no_mm' : wutils.SHOW_IF_TRUE, + 'logPower' : wutils.SHOW_IF_TRUE, + } + asrt.assertIsNifti(input) - cmd = "melodic -i {0} -v --Oall --outdir={1}".format(input, outdir) - - if mmthresh: - cmd += " --mmthresh={0}".format(mmthresh) - if dim: - cmd += " -d -{0}".format(dim) - if report: - cmd += " --report" - if tr: - cmd += " --tr={0}".format(tr) - if nomask: - cmd += " --nomask" - if updatemask: - cmd += " --update_mask" - if nobet: - cmd += " --nobet" - if prefix: - cmd = prefix + " " + cmd - if mask is not None: - cmd += " --mask={0}".format(mask) + cmd = ['melodic', '--in', input] + cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs) + return run.runfsl(cmd) -def fsl_regfilt(infile, outfile, mix, ics): - """Data de-noising by regression. +@wutils.fileOrImage('input', 'out', 'mask', 'out_data') +@wutils.fileOrArray('design', 'out_mix') +def fsl_regfilt(input, out, design, **kwargs): + """Wrapper for the ``fsl_regfilt``command. """ + + asrt.assertIsNifti(input, out) - Data de-noising by regressing out part of a design matrix - using simple OLS regression on 4D images - """ - asrt.assertIsNifti(infile, outfile) + valmap = { + 'freqfilt' : wutils.SHOW_IF_TRUE, + 'freq_ic' : wutils.HIDE_IF_TRUE, + 'vn' : wutils.SHOW_IF_TRUE, + 'v' : wutils.SHOW_IF_TRUE, + } - icstr = '"' - for i in range(0, len(ics) - 1): - icstr = icstr + '{0},'.format(ics[i] + 1) - icstr = icstr + '{0}"'.format(ics[-1] + 1) + cmd = ['fsl_regfilt', + '--in={}'.format(input), + '--out={}'.format(out), + '--design={}'.format(design)] + cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs) - cmd = "fsl_regfilt -i {0} -o {1} -d {2} -f {3}".format(infile, outfile, - mix, icstr) return run.runfsl(cmd) -- GitLab