From 56ea425a38c73372a406aaaddbc19d342f1c1841 Mon Sep 17 00:00:00 2001 From: Jan Grewe <jan.grewe@g-node.org> Date: Fri, 15 Jan 2021 13:48:38 +0100 Subject: [PATCH] first version of loading data --- icons/nixview_quit.png | Bin 5767 -> 7951 bytes nixview/file_handler.py | 70 +++++++++++++++++++++++++++++++++++++++ nixview/ui/plotscreen.py | 17 +++++++--- 3 files changed, 83 insertions(+), 4 deletions(-) diff --git a/icons/nixview_quit.png b/icons/nixview_quit.png index 5a2cd119a73f95a60a105e6fcc7f49dc4553c738..3d3322d1a8ac2c540e6a17c1037f626c442cabcc 100644 GIT binary patch delta 6228 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 S>cJs^xs>JA<*H=OL;eqqVa+W7 delta 4026 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 diff --git a/nixview/file_handler.py b/nixview/file_handler.py index 75f237b..a4d484f 100644 --- a/nixview/file_handler.py +++ b/nixview/file_handler.py @@ -1,8 +1,12 @@ import os import nixio as nix +import numpy as np from enum import Enum import datetime as dt +from numpy.core.defchararray import not_equal +from nixview.constants import io_chunksize as chunksize + class ItemDescriptor(): def __init__(self, name=None, id=None, type=None, value=None, definition=None, block_id=None, entity_type=None, shape=None, metadata=None, data_type=None, source_id=None, created_at=None, updated_at=None) -> None: @@ -104,6 +108,54 @@ class NodeType(Enum): Feature="Feature" +class DataView(): + + def __init__(self, item_descriptor, file_handler) -> None: + super().__init__() + self._item_descriptor = item_descriptor + self._file_handler = file_handler + self._buffer = None + self._full_shape = item_descriptor.shape + self._offset = np.zeros(len(self._full_shape), dtype=int) + self._count = None + self._max_dim = None + self.init_buffer() + self.request_more() + + def request_more(self): + if self.fully_loaded: + return + data = self._file_handler.request_data(self._item_descriptor, self._offset, self._count) + if data is not None and self._buffer is None: + self._buffer = data + self._offset = data.shape + else: + print("need to fetch more!") + + def init_buffer(self): + buffer_shape = np.zeros(len(self._full_shape), dtype=int) + max_dim_count = chunksize + max_dim = np.argmax(self._full_shape) + for i, d in enumerate(self._full_shape): + if i != max_dim: + buffer_shape[i] = self._full_shape[i] + max_dim_count /= self._full_shape[i] + buffer_shape[max_dim] = max_dim_count + self._count = buffer_shape + self._max_dim = max_dim + + + @property + def fully_loaded(self): + return self._buffer is not None and self._full_shape == self._buffer.shape + + def __str__(self) -> str: + r = self._item_descriptor.name + " " + str(self._item_descriptor.entity_type) + r += "buffer size: " + str(self._buffer.shape) if self._buffer is not None else "" + "\n" + r += "chunk size:" + str(self._count) + r += "is fully loaded: " + str(self.fully_loaded) + return r + class Singleton(type): _instances = {} def __call__(cls, *args, **kwargs): @@ -195,6 +247,17 @@ class FileHandler(metaclass=Singleton): def filename(self): return self._filename + def request_data(self, entity_descriptor, offset=None, count=None): + entity = self._entity_buffer.get(entity_descriptor.id) + if entity is None: + print("need to do something else") + for i, (o, c) in enumerate(zip(offset, count)): + if o + c > entity.shape[i]: + count[i] = entity.shape[i] - o + seg = tuple([slice(o, o + c) for o, c in zip(offset, count)]) + print(seg) + return entity[seg] + def request_section_descriptor(self, id): fs = self._entity_buffer.get(id) if fs is None: @@ -271,6 +334,13 @@ class FileHandler(metaclass=Singleton): src = e.source if hasattr(e, "source") else None itd.source_id = src.id if src is not None else None infos.append(itd) + if entity_type == NodeType.DataArray: + itd.value = "%s %s entries" % (str(e.shape), e.dtype) + elif entity_type == NodeType.Tag: + point_or_segment = "segment" if e.extent else "point" + start = str(e.position) + end = ("to " + str(tuple(np.array(e.position) + np.array(e.extent)))) if e.extent else "" + itd.value = "tags %s %s %s" %(point_or_segment, start, end) # TODO set the value to something meaningful for the various entity types return infos diff --git a/nixview/ui/plotscreen.py b/nixview/ui/plotscreen.py index 0bc9197..5d9a5ce 100644 --- a/nixview/ui/plotscreen.py +++ b/nixview/ui/plotscreen.py @@ -4,11 +4,12 @@ import matplotlib matplotlib.use('Qt5Agg') from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg from matplotlib.figure import Figure - +import nixio as nix import numpy as np import matplotlib.pyplot as plt from matplotlib.widgets import Slider -import nixio as nix + +from nixview.file_handler import FileHandler, DataView @@ -323,8 +324,9 @@ class MplCanvas(FigureCanvasQTAgg): class PlotScreen(QWidget): close_signal = pyqtSignal() - def __init__(self, parent) -> None: + def __init__(self, parent=None) -> None: super().__init__(parent=parent) + self._file_handler = FileHandler() sc = MplCanvas(self, width=5, height=4, dpi=100) sc.axes.plot([0,1,2,3,4], [10,1,20,3,40]) @@ -335,9 +337,16 @@ class PlotScreen(QWidget): close_btn.clicked.connect(self.on_close) self.layout().addWidget(close_btn) + self._data_view = None def on_close(self): self.close_signal.emit() def plot(self, item): - print("plot!", item) \ No newline at end of file + print("plot!", item) + print(item.entity_type, item.shape) + self._data_view = DataView(item, self._file_handler) + self._data_view.request_more() + print(self._data_view) + + \ No newline at end of file