CoolFace
Apppublic

Aluode/PerceptionLabPortable

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
HDF5Exporter.py76 linesDownload Raw Back to exporters
1import importlib.util2 3import numpy4 5from .. import PlotItem6from ..parametertree import Parameter7from ..Qt import QtCore8from .Exporter import Exporter9 10HAVE_HDF5 = importlib.util.find_spec("h5py") is not None11 12translate = QtCore.QCoreApplication.translate13 14__all__ = ['HDF5Exporter']15 16    17class HDF5Exporter(Exporter):18    Name = "HDF5 Export: plot (x,y)"19    windows = []20    allowCopy = False21 22    def __init__(self, item):23        Exporter.__init__(self, item)24        self.params = Parameter.create(name='params', type='group', children=[25            {'name': 'Name', 'title': translate("Exporter", 'Name'), 'type': 'str', 'value': 'Export', },26            {'name': 'columnMode', 'title': translate("Exporter", 'columnMode'), 'type': 'list',27             'limits': ['(x,y) per plot', '(x,y,y,y) for all plots'], 'value': '(x,y) per plot'},28        ])29        30    def parameters(self):31        return self.params32    33    def export(self, fileName=None):34        if not HAVE_HDF5:35            raise RuntimeError("This exporter requires the h5py package, "36                               "but it was not importable.")37        38        import h5py39 40        if not isinstance(self.item, PlotItem):41            raise Exception("Must have a PlotItem selected for HDF5 export.")42        43        if fileName is None:44            self.fileSaveDialog(filter=["*.h5", "*.hdf", "*.hd5"])45            return46        dsname = self.params['Name']47        fd = h5py.File(fileName, 'a')  # forces append to file... 'w' doesn't seem to "delete/overwrite"48        data = []49 50        appendAllX = self.params['columnMode'] == '(x,y) per plot'51        # Check if the arrays are ragged52        len_first = len(self.item.curves[0].getData()[0]) if self.item.curves[0] else None53        ragged = any(len(i.getData()[0]) != len_first for i in self.item.curves)54 55        if ragged:56            dgroup = fd.create_group(dsname)57            for i, c in enumerate(self.item.curves):58                d = c.getData()59                fdata = numpy.array([d[0], d[1]]).astype('double')60                cname = c.name() if c.name() is not None else str(i)61                dgroup.create_dataset(cname, data=fdata)62        else:63            for i, c in enumerate(self.item.curves):64                d = c.getData()65                if appendAllX or i == 0:66                    data.append(d[0])67                data.append(d[1])68 69            fdata = numpy.array(data).astype('double')70            fd.create_dataset(dsname, data=fdata)71 72        fd.close()73 74if HAVE_HDF5:75    HDF5Exporter.register()76 
Aluode/PerceptionLabPortable · CoolFace