Source code for qpformat.file_formats.series_hdf5_qpimage

import h5py
import qpimage

from .dataset import SeriesData


[docs]class SeriesHdf5Qpimage(SeriesData): """Qpimage series (HDF5 format)""" storage_type = "phase,amplitude" def __init__(self, *args, **kwargs): super(SeriesHdf5Qpimage, self).__init__(*args, **kwargs) self._dataset = None def __len__(self): with self._qpseries() as qps: return len(qps) def _qpseries(self): return qpimage.QPSeries(h5file=self.path, h5mode="r") @property def identifier(self): # Qpformat generates a new identifier that also depends on the given # keyword arguments. Thus, the identifiers of source and modified # dataset must not be identical. with self._qpseries() as qps: identifier = qps.identifier if identifier is None: identifier = "" else: identifier += "_" identifier += super(SeriesHdf5Qpimage, self).identifier return identifier def get_identifier(self, idx): """Return an identifier for the data at index `idx`""" with self._qpseries() as qps: if "identifier" in qps[idx]: identifier = qps[idx]["identifier"] else: identifier = super(SeriesHdf5Qpimage, self).get_identifier(idx) return identifier def get_qpimage(self, idx): """Return background-corrected QPImage of data at index `idx`""" if self._bgdata: # The user has explicitly chosen different background data # using `get_qpimage_raw`. qpi = super(SeriesHdf5Qpimage, self).get_qpimage(idx) else: # We can use the background data stored in the qpimage hdf5 file with self._qpseries() as qps: qpi = qps.get_qpimage(index=idx).copy() # Force meta data for key in self.meta_data: qpi[key] = self.meta_data[key] return qpi def get_qpimage_raw(self, idx): """Return QPImage without background correction""" with self._qpseries() as qps: qpi = qps.get_qpimage(index=idx).copy() # Remove previously performed background correction qpi.set_bg_data(None) # Force meta data for key in self.meta_data: qpi[key] = self.meta_data[key] return qpi @staticmethod def verify(path): """Verify that `path` has the qpimage series file format""" valid = False try: h5 = h5py.File(path, mode="r") qpi0 = h5["qpi_0"] except (OSError, KeyError): pass else: if ("qpimage version" in qpi0.attrs and "phase" in qpi0 and "amplitude" in qpi0 and "bg_data" in qpi0["phase"] and "bg_data" in qpi0["amplitude"]): valid = True return valid