added first try on reading back the data from the hdf5 dumps

This commit is contained in:
2023-01-26 12:52:27 +01:00
parent 3b09441ab9
commit 357fa5839b
3 changed files with 59 additions and 5 deletions

View File

@ -23,4 +23,33 @@ def flatten_dict(d, parent="", sep="/"):
return res
def read_dict(fn):
res = {}
def visit(name, node):
if isinstance(node, h5py.Dataset):
data = node[()]
if isinstance(data, bytes):
data = data.decode("utf-8")
res[node.name] = data
with h5py.File(fn, "r") as f:
f.visititems(visit)
return unflatten_dict(res)
def unflatten_dict(d, sep="/"):
res = {}
for k, v in d.items():
current = res
levels = k.split(sep)
for l in levels[1:-1]:
if l not in current:
current[l] = {}
current = current[l]
current[levels[-1]] = v
return res

View File

@ -4,7 +4,7 @@ from PyQt5.QtWidgets import QMainWindow, QSplitter, QFileDialog
from . import assets
from .dictlist import DictList
from .exampledata import exampledata
from .io import write_dict
from .io import write_dict, read_dict
from .mdi import MDIArea, MDISubMultiPlot, MDISubPlot, MDIWindowMode
from .menus import BarMenu
from .plotdesc import PlotDescription
@ -44,8 +44,10 @@ class MainWindow(QMainWindow):
bar = self.menuBar()
self.menu_file = menu = BarMenu(bar, "&File")
menu.addAction("Open...", self.on_file_open)
menu.addAction("Save as...", self.on_file_save)
shortcut(self, "Ctrl+O", self.on_file_open)
shortcut(self, "Ctrl+S", self.on_file_save)
self.menu_settings = menu = BarMenu(bar, "&Settings")
@ -134,11 +136,34 @@ class MainWindow(QMainWindow):
data = {}
for name, item in self.lst.items.items():
desc = item.value
data[name] = {k: v for k, v in desc.__dict__.items() if not k.startswith("_") and v is not None}
data[name] = {k: v for k, v in desc.__dict__.items() if not k.startswith("_") and k != "name" and v is not None}
write_dict(fn, data)
def on_file_open(self):
filters = [
"HDF5 files (*.h5)",
"All files (*)"
]
filters = ";;".join(filters)
fns, _chosen_filter = QFileDialog.getOpenFileNames(self, filter=filters)
if not fns:
return
cb = self.menu_settings.checkboxes["Open new plots"]
state = cb.isChecked()
cb.setChecked(False)
for fn in fns:
data = read_dict(fn)
for k, v in data.items():
self.new_plot(k, v)
cb.setChecked(state)
# Plumbing
def plot_single_item(self, item):

View File

@ -1,13 +1,13 @@
class PlotDescription:
def __init__(self, name, title=None, xlabel=None, ylabel=None):
def __init__(self, name, title=None, xlabel=None, ylabel=None, xs=None, ys=None):
self.name = name
self.title = title
self.xlabel = xlabel
self.ylabel = ylabel
self.xs = []
self.ys = []
self.xs = [] if xs is None else list(xs)
self.ys = [] if ys is None else list(ys)
@property