Source code for patato.io.ipasc.ipasc_export
import numpy as np
import pacfish as pf
from pacfish import MetaDatum
[docs]
class PatHDF5AdapterToIPASCFormat(pf.BaseAdapter):
def generate_device_meta_data(self) -> dict:
return {}
[docs]
def __init__(self, hdf5_file):
self.hdf5_file = hdf5_file
super(PatHDF5AdapterToIPASCFormat, self).__init__()
def generate_binary_data(self) -> np.ndarray:
# iThera definition: [frames, wavelengths, detectors, time_series]
# IPASC definition: [detectors, time_series, wavelength, frames]
time_series = self.hdf5_file["raw_data"]
time_series = np.swapaxes(
time_series, 2, 0
) # [detectors, wavelengths, frames, time_series]
time_series = np.swapaxes(
time_series, 3, 1
) # [detectors, time_series, frames, wavelength]
time_series = np.swapaxes(
time_series, 3, 2
) # [detectors, time_series, wavelength, frames]
return time_series
def generate_meta_data_device(self) -> dict:
device_metadata_creator = pf.DeviceMetaDataCreator()
for array_element in np.asarray(self.hdf5_file["GEOMETRY"]):
det_element = pf.DetectionElementCreator()
det_element.set_detector_position(array_element)
device_metadata_creator.add_detection_element(det_element.get_dictionary())
return device_metadata_creator.finalize_device_meta_data()
def set_metadata_value(self, metadata_tag: MetaDatum) -> object:
if metadata_tag == pf.MetadataAcquisitionTags.PULSE_ENERGY:
return np.asarray(self.hdf5_file["OverallCorrectionFactor"])
if metadata_tag == pf.MetadataAcquisitionTags.TEMPERATURE_CONTROL:
return np.asarray(self.hdf5_file["TEMPERATURE"])
if metadata_tag == pf.MetadataAcquisitionTags.MEASUREMENT_SPATIAL_POSES:
# TODO convert each element into [0, POS, 0, 0, 0, 0]
orig_shape = self.hdf5_file["Z-POS"]
poses = []
for y_pos in np.asarray(self.hdf5_file["Z-POS"]).reshape((-1,)):
poses.append([0, y_pos, 0, 0, 0])
return np.asarray(poses).reshape((orig_shape[0], orig_shape[1], -1))
if metadata_tag == pf.MetadataAcquisitionTags.MEASUREMENT_TIMESTAMPS:
return np.asarray(self.hdf5_file["timestamp"])
if metadata_tag == pf.MetadataAcquisitionTags.ACQUISITION_WAVELENGTHS:
return np.asarray(self.hdf5_file["wavelengths"])
return None