Source code for ewoksid02.headers
import logging
import os
import h5py
import numpy
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
[docs]
def deserialize_value(value):
if isinstance(value, bytes):
value = value.decode("UTF-8")
try:
value = float(value)
except (TypeError, ValueError):
...
return value
[docs]
class HS32:
KEY_HS32_NB_PINS = "HS32Len"
KEY_HS32_NAME = "HS32N"
KEY_HS32_FACTOR = "HS32F"
KEY_HS32_ZERO_VALUE = "HS32Z"
KEY_HS32_COUNTERS = "HS32C"
KEY_HS32_VALUES = "HS32V"
KEY_EXPOSURE_TIME = "HSTime"
KEY_MONITOR_0 = "HSI0" # Monitor for beam intensity before the sample
KEY_MONITOR_0_FACTOR = "HSI0Factor"
KEY_MONITOR_1 = "HSI1" # Monitor for beam intensity after the sample
KEY_MONITOR_1_FACTOR = "HSI1Factor"
KEY_SOT = "ShutterOpeningTime"
KEY_SCT = "ShutterClosingTime"
KEY_STARTEPOCH = "HMStartEpoch"
KEY_STARTTIME = "HMStartTime"
KEY_TITLEEXTENSION_TEMPLATE = "TitleExtensionTemplate"
KEY_TITLEEXTENSION = "TitleExtension"
KEY_PIXEL_SIZE_1 = "PSize_1"
KEY_PIXEL_SIZE_2 = "PSize_2"
KEY_BINNING_1 = "BSize_1"
KEY_BINNING_2 = "BSize_2"
KEY_WAVELENGTH = "WaveLength"
KEY_SAMPLEDETECTOR_DISTANCE = "SampleDistance"
KEY_NORMALIZATION_FACTOR = "NormalizationFactor"
KEY_DETECTOR_MASK_FOLDER = "DetectorMaskFilePath"
KEY_DETECTOR_MASK_FILE = "DetectorMaskFileName"
KEY_BEAMSTOP_MASK_FOLDER = "MaskFilePath"
KEY_BEAMSTOP_MASK_FILE = "MaskFileName"
KEY_POLARIZATION_FACTOR = "polarization_factor"
KEY_POLARIZATION_AXIS = "polarization_axis_offset"
KEY_VARIANCE_FORMULA = "variance_formula"
KEY_WINDOW_ROI_SIZE = "WindowRoiSize"
KEY_DARK_FOLDER = "DarkFilePath"
KEY_DARK_FILE = "DarkFileName"
KEY_FLAT_FOLDER = "FlatfieldFilePath"
KEY_FLAT_FILE = "FlatfieldFileName"
KEY_WINDOW_FOLDER = "WindowFilePath"
KEY_WINDOW_FILE = "WindowFileName"
KEY_DUMMY = "Dummy"
KEY_DELTA_DUMMY = "DDummy"
KEY_CENTER_1 = "Center_1"
KEY_CENTER_2 = "Center_2"
KEY_NPT2_RAD = "npt2_rad"
KEY_NPT2_AZIM = "npt2_azim"
KEY_UNIT = "unit"
KEY_TITLEEXTENSION = "TitleExtension"
KEY_ALGORITHM_NORMALIZATION = "NormAlgorithm"
[docs]
@classmethod
def get_HS32_number_pins(cls, headers: dict) -> int:
"""
Get the number of HS32 pins, which will determine the shape of metadata arrays
"""
return int(float(headers.get(cls.KEY_HS32_NB_PINS)))
[docs]
@classmethod
def get_HS32_names(cls, headers: dict) -> dict:
nb_pins = cls.get_HS32_number_pins(headers=headers)
names = {}
for index_pin in range(nb_pins):
names[index_pin] = headers.get(f"{cls.KEY_HS32_NAME}{(index_pin + 1):02}")
return names
[docs]
@classmethod
def get_mask_window(cls, headers):
return cls.get_headers_filename(
headers=headers,
folder_key=cls.KEY_WINDOW_FOLDER,
file_key=cls.KEY_WINDOW_FILE,
)
[docs]
@classmethod
def get_mask_beamstop_filename(cls, headers):
return cls.get_headers_filename(
headers=headers,
folder_key=cls.KEY_BEAMSTOP_MASK_FOLDER,
file_key=cls.KEY_BEAMSTOP_MASK_FILE,
)
[docs]
@classmethod
def get_mask_gaps_filename(cls, headers):
return cls.get_headers_filename(
headers=headers,
folder_key=cls.KEY_DETECTOR_MASK_FOLDER,
file_key=cls.KEY_DETECTOR_MASK_FILE,
)
[docs]
@classmethod
def get_flat_filename(cls, headers):
return cls.get_headers_filename(
headers=headers,
folder_key=cls.KEY_FLAT_FOLDER,
file_key=cls.KEY_FLAT_FILE,
)
[docs]
@classmethod
def get_dark_filename(cls, headers, missing_ok: bool = False):
return cls.get_headers_filename(
headers=headers,
folder_key=cls.KEY_DARK_FOLDER,
file_key=cls.KEY_DARK_FILE,
missing_ok=missing_ok,
)