diff --git a/nixview/file_utils.py b/nixview/file_utils.py index e73e5bf..e4ef7e6 100644 --- a/nixview/file_utils.py +++ b/nixview/file_utils.py @@ -1,29 +1,7 @@ import nixio as nix -def guess_best_xdim(array): - data_extent = array.shape - if len(data_extent) > 2: - print("Cannot handle more than 2D, sorry!") - if len(data_extent) == 1: - return 0 - d1 = array.dimensions[0] - d2 = array.dimensions[1] - - if d1.dimension_type == nix.DimensionType.Sample: - return 0 - elif d2.dimension_type == nix.DimensionType.Sample: - return 1 - else: - if (d1.dimension_type == nix.DimensionType.Set) and \ - (d2.dimension_type == nix.DimensionType.Range): - return 1 - elif (d1.dimension_type == nix.DimensionType.Range) and \ - (d2.dimension_type == nix.DimensionType.Set): - return 0 - else: - return 0 def suggested_plotter(array): diff --git a/nixview/util/descriptors.py b/nixview/util/descriptors.py index b57615f..a31a0b5 100644 --- a/nixview/util/descriptors.py +++ b/nixview/util/descriptors.py @@ -17,6 +17,8 @@ class ItemDescriptor(): self.source_id = source_id self.created_at = None self.updated_at = None + self.best_xdim = None + self.suggested_plotter = None def to_html(self): descr = "

%s: %s

" % (self.type, self.name) diff --git a/nixview/util/file_handler.py b/nixview/util/file_handler.py index a39a3ea..0cbf260 100644 --- a/nixview/util/file_handler.py +++ b/nixview/util/file_handler.py @@ -1,9 +1,10 @@ +from nixview.file_utils import suggested_plotter import os import nixio as nix import numpy as np from nixview.util.descriptors import FileDescriptor, ItemDescriptor -from nixview.util.enums import NodeType +from nixview.util.enums import NodeType, PlotterTypes @@ -197,6 +198,8 @@ class FileHandler(metaclass=Singleton): infos.append(itd) if entity_type == NodeType.DataArray: itd.value = "%s %s entries" % (str(e.shape), e.dtype) + itd.best_xdim = self.guess_best_xdim(e) + itd.suggested_plotter = self.suggested_plotter(e) elif entity_type == NodeType.Tag: point_or_segment = "segment" if e.extent else "point" start = str(e.position) @@ -285,4 +288,74 @@ class FileHandler(metaclass=Singleton): sources = [] for src in srcs: sources.extend(get_subsources(src)) - return sources \ No newline at end of file + return sources + + def guess_best_xdim(self, array): + data_extent = array.shape + if len(data_extent) > 2: + print("Cannot handle more than 2D, sorry!") + return None + if len(data_extent) == 1: + return 0 + + d1 = array.dimensions[0] + d2 = array.dimensions[1] + + if d1.dimension_type == nix.DimensionType.Sample: + return 0 + elif d2.dimension_type == nix.DimensionType.Sample: + return 1 + else: + if (d1.dimension_type == nix.DimensionType.Set) and \ + (d2.dimension_type == nix.DimensionType.Range): + return 1 + elif (d1.dimension_type == nix.DimensionType.Range) and \ + (d2.dimension_type == nix.DimensionType.Set): + return 0 + else: + return 0 + + def suggested_plotter(self, array): + if len(array.dimensions) > 3: + print("cannot handle more than 3D") + return None + dim_types = [d.dimension_type for d in array.dimensions] + dim_count = len(dim_types) + if dim_count == 1: + if dim_types[0] == nix.DimensionType.Sample: + return PlotterTypes.LinePlotter + elif dim_types[0] == nix.DimensionType.Range: + if array.dimensions[0].is_alias: + return PlotterTypes.EventPlotter + else: + return PlotterTypes.LinePlotter + elif dim_types[0] == nix.DimensionType.Set: + return PlotterTypes.CategoryPlotter + else: + return None + elif dim_count == 2: + if dim_types[0] == nix.DimensionType.Sample: + if dim_types[1] == nix.DimensionType.Sample or \ + dim_types[1] == nix.DimensionType.Range: + return PlotterTypes.ImagePlotter + else: + return PlotterTypes.LinePlotter + elif dim_types[0] == nix.DimensionType.Range: + if dim_types[1] == nix.DimensionType.Sample or \ + dim_types[1] == nix.DimensionType.Range: + return PlotterTypes.ImagePlotter + else: + return PlotterTypes.LinePlotter + elif dim_types[0] == nix.DimensionType.Set: + if dim_types[1] == nix.DimensionType.Sample or \ + dim_types[1] == nix.DimensionType.Range: + return PlotterTypes.LinePlotter + else: + return PlotterTypes.CategoryPlotter + else: + print("Sorry, not a supported combination of dimensions!") + return None + elif dim_count == 3: + return PlotterTypes.ImagePlotter + else: + return None