Source code for nanslice.util

#!/usr/bin/env python
"""util.py

Utility functions for nanslice module
"""
from pathlib import Path
import numpy as np
from nibabel import load

[docs]def check_path(maybe_path): """Helper function to check if an object is path-like""" if isinstance(maybe_path, Path) or isinstance(maybe_path, str): return True else: return False
[docs]def ensure_image(maybe_path): """Helper function that lets either images or paths be passed around""" if check_path(maybe_path): return load(str(maybe_path)) else: return maybe_path
[docs]def center_of_mass(img): """Calculates the center of mass of the image""" idx0 = np.argmax(np.sum(img.get_data(), axis=(1, 2))) idx1 = np.argmax(np.sum(img.get_data(), axis=(0, 2))) idx2 = np.argmax(np.sum(img.get_data(), axis=(0, 1))) phys = np.dot(img.affine, np.array([idx0, idx1, idx2, 1]).T) return phys
[docs]def add_common_arguments(parser): """Defines a set of common arguments that are shared between nanviewer and nanslicer""" parser.add_argument('base_image', help='Base (structural image)', type=str) parser.add_argument('--mask', type=str, help='Mask image') parser.add_argument('--base_map', type=str, default='gist_gray', help='Base image colormap to use from Matplotlib, default = gist_gray') parser.add_argument('--base_lims', type=float, nargs=2, default=None, help='Specify base image window') parser.add_argument('--base_scale', type=float, default=1.0, help='Scaling for base image before mapping, default=1.0') parser.add_argument('--base_label', type=str, default='', help='Label for base color axis') parser.add_argument('--overlay', type=str, help='Add color overlay') parser.add_argument('--overlay_map', type=str, default='RdYlBu_r', help='Overlay colormap, default = RdYlBu_r') parser.add_argument('--overlay_lim', type=float, nargs=2, default=(-1, 1), help='Overlay window, default=-1 1') parser.add_argument('--overlay_mask', type=str, help='Mask color image') parser.add_argument('--overlay_mask_thresh', type=float, help='Overlay mask threshold') parser.add_argument('--overlay_scale', type=float, default=1.0, help='Scaling for overlay image before mapping, default=1.0') parser.add_argument('--overlay_label', type=str, default='', help='Label for overlay color axis') parser.add_argument('--overlay_alpha', type=str, help='Image for transparency-coding of overlay') parser.add_argument('--overlay_alpha_lim', type=float, nargs=2, default=(0.5, 1.0), help='Overlay Alpha/transparency window, default=0.5 1.0') parser.add_argument('--overlay_alpha_label', type=str, default='1-p', help='Label for overlay alpha/transparency axis') parser.add_argument('--contour', type=float, action='append', help='Add alpha image contours (can be multiple)') parser.add_argument('--contour_color', type=str, action='append', default='k', help='Choose contour colors') parser.add_argument('--contour_style', type=str, action='append', default='-', help='Choose contor line-styles') parser.add_argument('--samples', type=int, default=128, help='Number of samples for slicing, default=128') parser.add_argument('--interp', type=str, default='hanning', help='Display interpolation mode, default=hanning') parser.add_argument('--interp_order', type=int, default=1, help='Data interpolation order, default=1') parser.add_argument('--orient', type=str, default='clin', help='Clinical (clin) or Pre-clinical (preclin) orientation') return parser