Source code for ewoksid24.io.temperature

from dataclasses import dataclass

import numpy

from .bliss import read_counters


[docs]@dataclass class TemperatureData: filename: str scan_number: int label: str epoch: numpy.ndarray # shape: (nPoints,) wavelength: numpy.ndarray # units: nm, shape: (nPoints, nWavelength) response: numpy.ndarray # shape: (nPoints, nWavelength) planck_data: numpy.ndarray # shape: (nPoints, nWavelength) planck_fit: numpy.ndarray # shape: (nPoints, nWavelength) planck_fit_slice: slice planck_temperature: numpy.ndarray # units:K, shape: (nPoints,)
[docs]def read_temperature_data( filename: str, scan_number: int, subscan_number: int, laser_id: str, label: str, **retry_options, ) -> TemperatureData: laser_prefix = "laser_heating" laser_counters = [ "spectrum_lambdas", "max_data", "planck_data", "planck_fit", "T_planck", ] counters = ["epoch"] + [ f"{laser_prefix}_{laser_id}_{ctr}" for ctr in laser_counters ] keys = [ "epoch", "wavelength", "response", "planck_data", "planck_fit", "planck_temperature", ] data = read_counters( filename, scan_number, subscan_number, counters, **retry_options ) data = dict(zip(keys, data)) not_zero = numpy.any(numpy.abs(data["planck_fit"]) > 1, axis=0) fit_indices = numpy.where(not_zero)[0] data["planck_fit_slice"] = slice(fit_indices[0], fit_indices[-1] + 1) return TemperatureData( filename=filename, scan_number=scan_number, label=label, **data )