[file_handler] add best xdim, suggested plotter to item Description

This commit is contained in:
Jan Grewe 2021-01-17 23:53:12 +01:00
parent b388c7c68c
commit d2e58b9a6f
3 changed files with 77 additions and 24 deletions

View File

@ -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):

View File

@ -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 = "<html><h4>%s: %s</h4>" % (self.type, self.name)

View File

@ -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
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