Source code for mdt.cli_scripts.mdt_create_roi_slice

#!/usr/bin/env python
# PYTHON_ARGCOMPLETE_OK
"""Create a single slice mask that only includes the voxels in the selected slice."""
import argparse
import os
import mdt
from argcomplete.completers import FilesCompleter
import textwrap
from mdt.lib.nifti import load_nifti
import mdt.utils
from mdt.lib.shell_utils import BasicShellApplication

__author__ = 'Robbert Harms'
__date__ = "2015-08-18"
__maintainer__ = "Robbert Harms"
__email__ = "robbert@xkls.nl"


[docs]class CreateRoiSlice(BasicShellApplication): def _get_arg_parser(self, doc_parser=False): description = textwrap.dedent(__doc__) examples = textwrap.dedent(''' mdt-create-roi-slice mask.nii.gz mdt-create-roi-slice mask.nii.gz -d 1 -s 50 mdt-create-roi-slice mask.nii.gz -d 1 -s 50 -o my_roi_1_50.nii.gz ''') epilog = self._format_examples(doc_parser, examples) parser = argparse.ArgumentParser(description=description, epilog=epilog, formatter_class=argparse.RawTextHelpFormatter) parser.add_argument('mask', action=mdt.lib.shell_utils.get_argparse_extension_checker(['.nii', '.nii.gz', '.hdr', '.img']), help='the mask to select a slice from').completer = \ FilesCompleter(['nii', 'gz', 'hdr', 'img'], directories=False) parser.add_argument('-d', '--dimension', type=int, help="The dimension to index (0, 1, 2, ...). Default is 2.") parser.add_argument('-s', '--slice', type=int, help="The slice to use in the selected dimension (0, 1, 2, ...)." "Defaults to center of chosen dimension.") parser.add_argument('-o', '--output-name', action=mdt.lib.shell_utils.get_argparse_extension_checker(['.nii', '.nii.gz', '.hdr', '.img']), help='the filename of the output file. Default is <mask_name>_<dim>_<slice>.nii.gz').\ completer = FilesCompleter(['nii', 'gz', 'hdr', 'img'], directories=False) return parser
[docs] def run(self, args, extra_args): shape = load_nifti(args.mask).shape roi_dimension = args.dimension if args.dimension is not None else 2 if roi_dimension > len(shape)-1 or roi_dimension < 0: print('Error: the given mask has only {0} dimensions with slices {1}.'.format(len(shape), shape)) exit(1) roi_slice = args.slice if args.slice is not None else shape[roi_dimension] // 2 if roi_slice > shape[roi_dimension]-1 or roi_slice < 0: print('Error: dimension {0} has only {1} slices.'.format(roi_dimension, shape[roi_dimension])) exit(1) mask_base_name = os.path.splitext(os.path.realpath(args.mask))[0] mask_base_name = mask_base_name.replace('.nii', '') if args.output_name: output_name = os.path.realpath(args.output_name) else: output_name = mask_base_name + '_{0}_{1}.nii.gz'.format(roi_dimension, roi_slice) mdt.utils.write_slice_roi(os.path.realpath(args.mask), roi_dimension, roi_slice, output_name, overwrite_if_exists=True)
[docs]def get_doc_arg_parser(): return CreateRoiSlice().get_documentation_arg_parser()
if __name__ == '__main__': CreateRoiSlice().start()