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 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 . import assets
from .dictlist import DictList from .dictlist import DictList
from .exampledata import exampledata from .exampledata import exampledata
from .io import write_dict from .io import write_dict, read_dict
from .mdi import MDIArea, MDISubMultiPlot, MDISubPlot, MDIWindowMode from .mdi import MDIArea, MDISubMultiPlot, MDISubPlot, MDIWindowMode
from .menus import BarMenu from .menus import BarMenu
from .plotdesc import PlotDescription from .plotdesc import PlotDescription
@ -44,8 +44,10 @@ class MainWindow(QMainWindow):
bar = self.menuBar() bar = self.menuBar()
self.menu_file = menu = BarMenu(bar, "&File") self.menu_file = menu = BarMenu(bar, "&File")
menu.addAction("Open...", self.on_file_open)
menu.addAction("Save as...", self.on_file_save) menu.addAction("Save as...", self.on_file_save)
shortcut(self, "Ctrl+O", self.on_file_open)
shortcut(self, "Ctrl+S", self.on_file_save) shortcut(self, "Ctrl+S", self.on_file_save)
self.menu_settings = menu = BarMenu(bar, "&Settings") self.menu_settings = menu = BarMenu(bar, "&Settings")
@ -134,11 +136,34 @@ class MainWindow(QMainWindow):
data = {} data = {}
for name, item in self.lst.items.items(): for name, item in self.lst.items.items():
desc = item.value 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) 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 # Plumbing
def plot_single_item(self, item): def plot_single_item(self, item):

View File

@ -1,13 +1,13 @@
class PlotDescription: 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.name = name
self.title = title self.title = title
self.xlabel = xlabel self.xlabel = xlabel
self.ylabel = ylabel self.ylabel = ylabel
self.xs = [] self.xs = [] if xs is None else list(xs)
self.ys = [] self.ys = [] if ys is None else list(ys)
@property @property