added first try on reading back the data from the hdf5 dumps
This commit is contained in:
29
grum/io.py
29
grum/io.py
@ -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
|
||||
|
||||
|
||||
|
||||
|
@ -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):
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user