# mdt.visualization.maps package¶

## mdt.visualization.maps.base module¶

class mdt.visualization.maps.base.Clipping(vmin=0, vmax=0, use_min=False, use_max=False)[source]

Container for the map clipping information

apply(data)[source]

Apply the clipping to the given 2d array and return the new array.

Parameters: data (ndarray) – the data to clip
get_updated(**kwargs)[source]

Get a new Clipping object with updated arguments.

Parameters: **kwargs (dict) – the new keyword values, when given these take precedence over the current ones. a new scale with updated values. Clipping
visible_changes(old_clipping)[source]

Checks if there are any visible changes between this clipping and the other.

This method can implement knowledge that allows the visualization routine to check if it would need to update the plot or not.

It expects that the clipping you wish to use is the one on which this method is called.

Parameters: old_clipping (Clipping) – the previous clipping if the differences between this clipping and the other would result in visible differences. bool
class mdt.visualization.maps.base.ColorbarSettings(visible=None, nmr_ticks=None, location=None, power_limits=None, round_precision=None)[source]

Container for all colorbar related settings.

Parameters: visible (boolean) – if the colorbar is to be shown nmr_ticks (int) – the number of ticks location (str) – the location of the colorbar, one of ‘right’, ‘left’, ‘top’ or ‘bottom’ power_limits (tuple) – size thresholds for scientific notation. The default is (-3, 4) which uses scientific notation for numbers less than 1e-3 or greater than 1e4. round_precision (int) – how much digits (precision) after the decimal point.
static get_default()[source]
get_preferred(attr, other_settings=None)[source]

Get the preferred value for the requested attribute.

Other settings is a list of other colorbar settings object that are asked for the preferred value (in turn), if the value of this object is None.

As a fallback, this will always use the default colorbar settings ColorbarSettings.get_default() as a final default.

Parameters: attr (str) – the attribute requested other_settings (list of ColorbarSettings) – other settings to try. the value of the requested object object
class mdt.visualization.maps.base.ConvertibleConfig[source]

Bases: object

Base class for convertible configuration containers.

Objects implementing this interface return a conversion specification that describes how the implementing class can be converted to and from a simple dictionary containing only primitives and simple data structures.

classmethod get_conversion_info()[source]

Get the conversion specification information for this class.

Returns: the conversion specification mdt.visualization.dict_conversion.ConversionSpecification
class mdt.visualization.maps.base.DataInfo[source]

Bases: object

Information about the maps we are viewing.

get_bounding_box(dimension, slice_index, volume_index, rotate, map_names=None)[source]

Get the bounding box of the images.

Parameters: dimension (int) – the dimension to search in slice_index (int) – the slice index in that dimension volume_index (int) – the current volume index rotate (int) – the angle by which to rotate the image before getting the bounding box map_names (list of str) – if given we will only scan the given list of maps two points designating the upper left corner and the lower right corner of the bounding box. tuple of Point2d
get_file_path(map_name)[source]

Get the file name of the given map

Returns: None if the map could not be found on dir, else a string with the file path.
get_file_paths()[source]

Get the file paths to each of the maps.

If one of the maps does not have a file path, None is returned.

Returns: mapping map names to the file paths for each of the maps in this information container. dict
get_index_first_non_zero_slice(dimension, map_names=None)[source]

Get the index of the first non zero slice in the maps.

Parameters: dimension (int) – the dimension to search in map_names (list of str) – if given we will only scan the given list of maps the slice index with the first non zero values. int
get_map_data(map_name)[source]

Get the data for the indicated map.

Parameters: map_name (str) – the name of the map we want the data of the data of the given map ndarray
get_map_names()[source]

Get a list of the names of all the maps in this data info object.

Returns: the list of map names list
get_max_dimension(map_names=None)[source]

Get the minimum of the maximum dimension index over the maps

Parameters: map_names (list of str) – if given we will only scan the given list of maps either, 0, 1, 2 as the maximum dimension index in the maps. int
get_max_slice_index(dimension, map_names=None)[source]

Get the maximum slice index in the given map on the given dimension.

Parameters: dimension (int) – the dimension we want the slice index of (maximum 3) map_names (list of str) – if given we will only scan the given list of maps the minimum of the maximum slice indices over the given maps in the given dimension. int
get_max_volume_index(map_names=None)[source]

Get the maximum volume index in the given maps.

In contrast to the max dimension and max slice index functions, this gives the maximum over all the images. This since handling different volumes is implemented in the viewer.

Parameters: map_names (list of str) – if given we will only scan the given list of maps the maximum volume index in the given list of maps. Starts from 0. int
get_max_x_index(dimension, rotate=0, map_names=None)[source]

Get the maximum x index supported over the images.

In essence this gets the lowest x index found.

Parameters: dimension (int) – the dimension to search in rotate (int) – the rotation factor by which we rotate the slices within the given dimension map_names (list of str) – if given we will only scan the given list of maps the maximum x-index found. int
get_max_y_index(dimension, rotate=0, map_names=None)[source]

Get the maximum y index supported over the images.

In essence this gets the lowest y index found.

Parameters: dimension (int) – the dimension to search in rotate (int) – the rotation factor by which we rotate the slices within the given dimension map_names (list of str) – if given we will only scan the given list of maps the maximum y-index found. int
get_single_map_info(map_name)[source]

Get an information object for a single map.

Parameters: map_name (str) – the name of the map we want information about information object about that map SingleMapInfo
slice_has_data(dimension, slice_index, map_names=None)[source]

Check if at least one of the maps has non zero numbers on the given slice.

Parameters: dimension (int) – the dimension to search in slice_index (int) – the index of the slice in the given dimension map_names (list of str) – if given we will only scan the given list of maps true if at least on of the maps has data in the given slice bool
class mdt.visualization.maps.base.Font(family='sans-serif', size=14)[source]

Information about the font to use

Parameters: family – the name of the font to use size – the size of the font (> 0).
classmethod font_names()[source]

Get the name of supported fonts

Returns: the name of the supported fonts and font families. list of str
get_updated(**kwargs)[source]

Get a new Font object with updated arguments.

Parameters: **kwargs (dict) – the new keyword values, when given these take precedence over the current ones. a new Font with updated values. Font
name
class mdt.visualization.maps.base.MapPlotConfig(dimension=2, slice_index=0, volume_index=0, rotate=90, colormap='hot', colormap_masked_color=None, maps_to_show=None, font=None, grid_layout=None, show_axis=False, show_titles=True, zoom=None, map_plot_options=None, interpolation='bilinear', flipud=None, title=None, title_spacing=None, mask_name=None, colorbar_settings=None, annotations=None)[source]

Container for all plot related settings.

Parameters: dimension (int) – the dimension we are viewing slice_index (int) – the slice in the dimension we are viewing volume_index (int) – in the case of multiple volumes (4th dimension) which index we are in. rotate (int) – the rotation factor, multiple of 90. By default we rotate 90 degrees to show most in-vivo datasets in a natural way. colormap (str) – the name of the colormap to use colormap_masked_color (str) – the color for masked, NaN and infinity values. maps_to_show (list of str) – the names of the maps to show font (int) – the font settings grid_layout (GridLayout) – the layout of the grid show_axis (bool) – if we show the axis or not show_titles (boolean) – the global setting for enabling/disabling the plot titles zoom (Zoom) – the zoom setting for all the plots map_plot_options (dict of SingleMapConfig) – per map the map specific plot options interpolation (str) – one of the available interpolations flipud (boolean) – if True we flip the image upside down title (str) – the title to this plot title_spacing (float) – the spacing between the top of the plots and the title mask_name (str) – the name of the mask to apply to the maps prior to display annotations (list of VoxelAnnotation) – the voxel annotations colorbar_settings (ColorbarSettings) – all colorbar related settings
create_valid(data_info)[source]

Creates a new configuration object with valid values.

Parameters: data_info (mdt.visualization.maps.base.DataInfo) – the data information a valid map plot configuration MapPlotConfig
classmethod from_dict(config_dict)[source]
classmethod from_yaml(text)[source]
classmethod get_available_colormaps()[source]
classmethod get_available_interpolations()[source]
static get_default_values()[source]
to_dict(non_default_only=False)[source]

Export this configuration to a dictionary

Parameters: non_default_only (boolean) – if True, we will only export those options that are not set to their default. dict representation of the data dict
to_yaml(non_default_only=False)[source]

Convert this configuration to a YAML string.

Parameters: non_default_only (boolean) – if True, we will only export those options that are not set to their default. a YAML representation of this configuration. str
validate(data_info)[source]

Check if this configuration is valid given the provided data.

Parameters: data_info (mdt.visualization.maps.base.DataInfo) – the data information Exception – can raise multiple sorts of exceptions if this config is not valid given the data.
visible_changes(old_config)[source]

Checks if there are any visible changes between this configuration and the other.

This method can implement knowledge that allows the visualization routine to check if it would need to update the plot or not.

It expects that the configuration you wish to display is the one on which this method is called.

Parameters: old_config (MapPlotConfig) – the previous configuration if the differences between this configuration and the other would result in visible differences. bool
class mdt.visualization.maps.base.Point2d(x, y)[source]

Container for a single point

get_updated(**kwargs)[source]

Get a new Point2d with updated arguments.

Parameters: **kwargs (dict) – the new keyword values, when given these take precedence over the current ones. a new scale with updated values. Point2d
rotate90(nmr_rotations)[source]

Rotate this point around a 90 degree angle

Parameters: nmr_rotations (int) – the number of 90 degree rotations, can be negative the rotated point Point2d
class mdt.visualization.maps.base.Scale(vmin=0, vmax=0, use_min=False, use_max=False)[source]

Container the map scaling information

get_updated(**kwargs)[source]

Get a new Scale object with updated arguments.

Parameters: **kwargs (dict) – the new keyword values, when given these take precedence over the current ones. a new scale with updated values. Scale
visible_changes(old_scale)[source]

Checks if there are any visible changes between this scale and the other.

This method can implement knowledge that allows the visualization routine to check if it would need to update the plot or not.

It expects that the scale you wish to use is the one on which this method is called.

Parameters: old_scale (Scale) – the previous scale if the differences between this scale and the other would result in visible differences. bool
class mdt.visualization.maps.base.SimpleConvertibleConfig[source]

Bases: object

Offers an simplified implementation of convertible configs.

In addition to slightly simplifying the creation of the conversion specification, it also implements object equality checking (__eq__ and__ne__) as this is commonly used in the configuration objects, and it offers a default representation (__repr__) implementation based on the conversion specification.

classmethod get_conversion_info()[source]
class mdt.visualization.maps.base.SimpleDataInfo(maps)[source]

A container for basic information about the volume maps we are viewing.

Parameters: maps (dict) – the dictionary with the maps to view, these maps can either be arrays with values, nibabel proxy images or SingleMapInfo objects.
classmethod from_paths(paths)[source]

Load all the nifti files from the given paths.

For paths that are directories we load all the elements inside that directory (but without recursion).

Parameters: of str (list) – the list of paths to load (directories and files) the simple data info SimpleDataInfo
get_bounding_box(dimension, slice_index, volume_index, rotate, map_names=None)[source]

Get the bounding box of the images.

Parameters: dimension (int) – the dimension to search in slice_index (int) – the slice index in that dimension volume_index (int) – the current volume index rotate (int) – the angle by which to rotate the image before getting the bounding box map_names (list of str) – if given we will only scan the given list of maps two point designating first the upper left corner and second the lower right corner of the bounding box. tuple of Point
get_file_path(map_name)[source]

Get the file name of the given map

Returns: None if the map could not be found on dir, else a string with the file path.
get_file_paths()[source]

Get the file paths to each of the maps.

If one of the maps does not have a file path, None is returned.

Returns: mapping map names to the file paths for each of the maps in this information container. dict
get_index_first_non_zero_slice(dimension, map_names=None)[source]

Get the index of the first non zero slice in the maps.

Parameters: dimension (int) – the dimension to search in map_names (list of str) – if given we will only scan the given list of maps the slice index with the first non zero values. int
get_map_data(map_name)[source]

Get the data for the indicated map.

Parameters: map_name (str) – the name of the map we want the data of the data of the given map ndarray
get_map_names()[source]

Get a list of the names of all the maps in this data info object.

Returns: the list of map names list
get_max_dimension(map_names=None)[source]

Get the minimum of the maximum dimension index over the maps

Parameters: map_names (list of str) – if given we will only scan the given list of maps either, 0, 1, 2 as the maximum dimension index in the maps. int
get_max_slice_index(dimension, map_names=None)[source]

Get the maximum slice index in the given map on the given dimension.

Parameters: dimension (int) – the dimension we want the slice index of (maximum 3) map_names (list of str) – if given we will only scan the given list of maps the minimum of the maximum slice indices over the given maps in the given dimension. int
get_max_volume_index(map_names=None)[source]

Get the maximum volume index in the given maps.

In contrast to the max dimension and max slice index functions, this gives the maximum over all the images. This since handling different volumes is implemented in the viewer.

Parameters: map_names (list of str) – if given we will only scan the given list of maps the maximum volume index in the given list of maps. Starts from 0. int
get_max_x_index(dimension, rotate=0, map_names=None)[source]

Get the maximum x index supported over the images.

In essence this gets the lowest x index found.

Parameters: dimension (int) – the dimension to search in rotate (int) – the rotation factor by which we rotate the slices within the given dimension map_names (list of str) – if given we will only scan the given list of maps the maximum x-index found. int
get_max_y_index(dimension, rotate=0, map_names=None)[source]

Get the maximum y index supported over the images.

In essence this gets the lowest y index found.

Parameters: dimension (int) – the dimension to search in rotate (int) – the rotation factor by which we rotate the slices within the given dimension map_names (list of str) – if given we will only scan the given list of maps the maximum y-index found. int
get_single_map_info(map_name)[source]

Get an information object for a single map.

Parameters: map_name (str) – the name of the map we want information about information object about that map SingleMapInfo
get_updated(updates=None, removals=None)[source]

Get a new simple data info object that includes the given new maps.

In the case of double map names the old maps are overwritten.

Parameters: updates (dict) – the dictionary with the maps to view, these maps can either be arrays with values, nibabel proxy images or SingleMapInfo objects. removals (list) – a list of maps to remove a new updated data info object SimpleDataInfo
slice_has_data(dimension, slice_index, map_names=None)[source]

Check if at least one of the maps has non zero numbers on the given slice.

Parameters: dimension (int) – the dimension to search in slice_index (int) – the index of the slice in the given dimension map_names (list of str) – if given we will only scan the given list of maps true if at least on of the maps has data in the given slice bool
class mdt.visualization.maps.base.SingleMapConfig(title=None, scale=None, clipping=None, colormap=None, colormap_masked_color=None, colorbar_label=None, show_title=None, title_spacing=None, mask_name=None, interpret_as_colormap=False, colormap_weight_map=None, colormap_order=None, colorbar_settings=None)[source]

Creates the configuration for a single map plot.

Parameters: title (str) – the title of this plot, can contain latex using the matplotlib latex syntax scale (Scale) – the scaling for the values in this map clipping (Clipping) – the clipping to apply to the values prior to plotting colormap (str) – the matplotlib colormap to use colormap_masked_color (str) – the color for masked, NaN and infinity values. colorbar_label (str) – the label for the colorbar show_title (boolean) – if we want to show the title or not title_spacing (float) – the spacing between the top of the plots and the title mask_name (str) – the name of the mask used to mask the data prior to visualization interpret_as_colormap (boolean) – if this is set to True and the referring map is a 4d volume with a vector of length 3 on the last dimension, then we can interpret this map as a colormap. This means that the elements of the last dimensions are used as (R, G, B) scalar values. colormap_weight_map (str) – the name of another map to use as a scaling factor for this map. This is only used when interpret_as_colormap is set to True. This scales this map with the specified weight map. colormap_order (str) – only used if interpret_as_colormap is used. This defines the order of the RGB components of the data. Valid strings are permutations of the letters RGB. colorbar_settings (ColorbarSettings) – all colorbar related settings
classmethod from_dict(config_dict)[source]
classmethod from_yaml(text)[source]
classmethod get_available_colormaps()[source]
static get_default_values()[source]
to_dict(non_default_only=False)[source]

Export this configuration to a dictionary

Parameters: non_default_only (boolean) – if True, we will only export those options that are not set to their default. dict representation of the data dict
to_yaml(non_default_only=False)[source]

Convert this configuration to a YAML string.

Parameters: non_default_only (boolean) – if True, we will only export those options that are not set to their default. a YAML representation of this configuration. str
validate(data_info)[source]
visible_changes(old_config)[source]

Checks if there are any visible changes between this configuration and the other.

This method can implement knowledge that allows the visualization routine to check if it would need to update the plot or not.

It expects that the configuration you wish to display is the one on which this method is called.

Parameters: old_config (SingleMapConfig) – the previous configuration if the differences between this configuration and the other would result in visible differences. bool
class mdt.visualization.maps.base.SingleMapInfo(data, file_path=None)[source]

Bases: object

Holds information about a single map.

Parameters: data (ndarray or nibabel.spatialimages.SpatialImage) – the value of the map or the proxy to it file_path (str) – optionally, the file path with the location of this map. If not set we try to retreive it from the data if the data is of subclass mdt.lib.nifti.NiftiInfoDecorated.
data
file_path
classmethod from_file(nifti_path)[source]
get_bounding_box(dimension, slice_index, volume_index, rotate)[source]

Get the bounding box of this map when displayed using the given indicing.

This only works if the edges of the images are exactly zero, that is, it only works with masked datasets.

Parameters: dimension (int) – the dimension to search in slice_index (int) – the slice index in that dimension volume_index (int) – the current volume index rotate (int) – the angle by which to rotate the image before getting the bounding box two point designating first the upper left corner and second the lower right corner of the bounding box. tuple of Point
get_index_first_non_zero_slice(dimension)[source]

Get the index of the first non zero slice in this map.

Parameters: dimension (int) – the dimension to search in the slice index with the first non zero values. int
get_max_x_index(dimension, rotate=0)[source]

Get the maximum x index.

Parameters: dimension (int) – the dimension to search in rotate (int) – the value by which to rotate the slices in the given dimension the maximum x index int
get_max_y_index(dimension, rotate=0)[source]

Get the maximum y index.

Parameters: dimension (int) – the dimension to search in rotate (int) – the value by which to rotate the slices in the given dimension the maximum y index int
get_size_in_dimension(dimension, rotate=0)[source]

Get the shape of the 2d view on the data in the given dimension.

This basically returns a pair of (max_x, max_y).

Parameters: dimension (int) – the dimension to search in rotate (int) – the value by which to rotate the slices in the given dimension (max_x, max_y) tuple
has_nan()[source]

Check if this data has any NaNs in it.

Returns: True if there are NaN’s anywhere in the data, false otherwise. boolean
max(mask=None)[source]

Get the maximum value in this data.

If a mask is provided we get the maximum value within the given mask.

Parameters: mask (ndarray) – the mask, we only include elements for which the mask > 0 the maximum value float
max_dimension()[source]

Get the maximum dimension index in this map.

The maximum value returned by this method is 2 and the minimum is 0.

Returns: in the range 0, 1, 2 int
max_slice_index(dimension)[source]

Get the maximum slice index on the given dimension.

Parameters: dimension (int) – the dimension we want the slice index of (maximum 3) the maximum slice index in the given dimension. int
max_volume_index()[source]

Get the maximum volume index in this map.

The minimum is 0.

Returns: the maximum volume index. int
min(mask=None)[source]

Get the minimum value in this data.

If a mask is provided we get the minimum value within the given mask.

Parameters: mask (ndarray) – the mask, we only include elements for which the mask > 0 the minimum value float
min_max(mask=None)[source]

Get the minimum and maximum value in this data.

If a mask is provided we get the min and max value within the given mask.

Infinities and NaN’s are ignored by this algorithm.

Parameters: mask (ndarray) – the mask, we only include elements for which the mask > 0 (min, max) the minimum and maximum values tuple
shape
slice_has_data(dimension, slice_index)[source]

Check if this map has non zero values in the given slice index.

Parameters: dimension (int) – the dimension we want the slice index of (maximum 3) slice_index (int) – the slice index to look in the maximum slice index in the given dimension. int
class mdt.visualization.maps.base.VoxelAnnotation(voxel_index, font_size=None, text_template=None, marker_size=1, text_location='upper left', text_distance=0.05, arrow_width=1)[source]

Container for all voxel highlighting settings.

Parameters: voxel_index (tuple) – a tuple with the voxel index location font_size (int) – the size of the annotation text text_template (str) – the text template, can use the placeholders {voxel_index} and {value}. marker_size (float) – the rectangular size of the voxel marker text_location (str) – the location of the text. Valid items are: upper left, top left, upper right, top right, bottom right, lower right, bottom left, lower left, north, south, east, west, top, bottom, left , right. text_distance (float) – the distance of the textbox to the marker in relative coordinates (0, 1). arrow_width (float) – the width of the arrow
valid_text_locations = ['upper left', 'top left', 'upper right', 'top right', 'bottom right', 'lower right', 'bottom left', 'lower left', 'north', 'south', 'east', 'west', 'top', 'bottom', 'left', 'right']
validate(data_info)[source]
class mdt.visualization.maps.base.Zoom(p0, p1)[source]

Container for zooming a map between the two given points.

Parameters: p0 (Point2d) – the lower left corner of the zoomed area p1 (Point2d) – the upper right corner of the zoomed area
apply(data)[source]

Apply the zoom to the given 2d array and return the new array.

Parameters: data (ndarray) – the data to zoom in on
classmethod from_coords(x0, y0, x1, y1)[source]
get_rotated(rotation, x_dimension, y_dimension)[source]

Return a new Zoom instance rotated with the given factor.

This rotates the zoom box in the same way as the image is rotated.

Parameters: rotation (int) – the rotation by which to rotate in steps of 90 degrees x_dimension (int) – the dimension of the image in the x coordinate y_dimension (int) – the dimension of the image in the y coordinate the rotated instance Zoom
classmethod no_zoom()[source]

## mdt.visualization.maps.matplotlib_renderer module¶

class mdt.visualization.maps.matplotlib_renderer.AxisData(axis, map_name, map_info, plot_config)[source]

Bases: object

Contains a reference to a drawn matpotlib axis and to the accompanying data.

Parameters: axis (Axis) – the matpotlib axis map_name (str) – the name/key of this map map_info (mdt.visualization.maps.base.SingleMapInfo) – the map information plot_config (mdt.visualization.maps.base.MapPlotConfig) – the map plot configuration
coordinates_to_index(x, y)[source]

Converts data coordinates to index coordinates of the array.

Parameters: x (int) – The x-coordinate in data coordinates. y (int) – The y-coordinate in data coordinates.
Returns
tuple: Index coordinates of the map associated with the image (x, y, z, d).
get_value(index)[source]

Get the value of this axis data at the given index.

Parameters: index (tuple)) – the 3d or 4d index to the map corresponding to this axis data (x, y, z, [v]) the value at the given index. float
class mdt.visualization.maps.matplotlib_renderer.MapsVisualizer(data_info, figure)[source]

Bases: object

render(plot_config)[source]

Render all the maps to the figure. This is for use in GUI embedded situations.

Returns: the list with the drawn axes and the accompanying data list of AxisData
show(plot_config, block=True, maximize=False, window_title=None)[source]

Show the data contained in this visualizer using the specifics in this function call.

Parameters: plot_config (mdt.visualization.maps.base.MapPlotConfig) – the plot configuration block (boolean) – If we want to block after calling the plots or not. Set this to False if you do not want the routine to block after drawing. In doing so you manually need to block. maximize (boolean) – if we want to display the window maximized or not window_title (str) – the title of the window. If None, the default title is used
to_file(file_name, plot_config, **kwargs)[source]

Renders the figures to the given filename.

class mdt.visualization.maps.matplotlib_renderer.Renderer(data_info, figure, plot_config)[source]

Bases: object

Create a new renderer for the given volumes on the given figure using the given configuration.

This renders the images with flipped upside down with the origin at the bottom left. The upside down flip is necessary to allow counter-clockwise rotation.

Parameters: data_info (DataInfo) – the information about the maps to show figure (Figure) – the matplotlib figure to draw on plot_config (mdt.visualization.maps.base.MapPlotConfig) – the plot configuration
render()[source]

Render the maps

## mdt.visualization.maps.utils module¶

mdt.visualization.maps.utils.find_all_nifti_files(paths)[source]

Find the paths to the nifti files in the given paths.

For directories we add all the nifti files from that directory, for file we try to resolve them to nifti files.

Parameters: paths (list of str) – the list of file paths the list of all nifti files (no more directories) list of str
mdt.visualization.maps.utils.get_shortest_unique_names(paths)[source]

Get the shortest unique map name between two or more nifti file paths.

This function is useful when loading multiple maps like for example ./foo.nii and ./foo.nii.gz or ../directory0/foo.nii and ../directory1/foo.nii. In all cases the map name (foo) is similar, but we want to be able to show them distinctly. This function tries to find the shortest unique map names for each of the maps.

Example output: * [./foo.nii] -> foo * [./foo.nii, ./foo.nii.gz] -> [foo.nii, foo.nii.gz] * [../directory0/foo.nii, ../directory1/foo.nii] -> [directory0/foo, directory1/foo]

Parameters: paths (list of str) – the paths to the different nifti files the map names for the given set of paths (in the same order) tuple