Source code for qpformat.file_formats.single_npy_numpy

import copy
from functools import lru_cache
import pathlib

import numpy as np
import qpimage

from .dataset import SingleData


[docs]class SingleNpyNumpy(SingleData): """Numpy complex field or phase data (numpy binary format) The experimental data given in `path` consist of a single 2D ndarray (no pickled objects). The ndarray is either complex-valued (scattered field) or real-valued (phase). """ # storage type is implemented as a property @property @lru_cache(maxsize=32) def storage_type(self): """Depending on input data type, the storage type is either "field" (complex) or "phase" (real).""" nf = np.load(str(self.path), mmap_mode="c", allow_pickle=False) if np.iscomplexobj(nf): st = "field" else: st = "phase" return st def get_qpimage_raw(self, idx=0): """Return QPImage without background correction""" # Load experimental data nf = np.load(str(self.path), mmap_mode="c", allow_pickle=False) meta_data = copy.copy(self.meta_data) qpi = qpimage.QPImage(data=nf, which_data=self.storage_type, meta_data=meta_data, h5dtype=self.as_type) # get identifier qpi["identifier"] = self.get_identifier(idx) return qpi @staticmethod def verify(path): """Verify that `path` has a supported numpy file format""" path = pathlib.Path(path) valid = False if path.suffix == ".npy": try: nf = np.load(str(path), mmap_mode="r", allow_pickle=False) except (OSError, ValueError, IsADirectoryError): pass else: if len(nf.shape) == 2: valid = True return valid