Source code for prsctrl.measurement.script


from typing import Optional
import numpy as np

[docs] class MeasurementScript: """ Class containing the measurement procedure. Handles things like measuring offsets. """ def __init__(self, time_per_wavelength: float, offset_intervals_minutes: list[int], wavelengths: Optional[list[float]], energies: Optional[list[float]], min_DC: float=0.08, max_DC: float = 9.95, ): if wavelengths is None and energies is None: raise ValueError(f"One of 'wavelengths' or 'energies' must be specified") self.wavelengths = wavelengths self.energies = energies self.time_per_wavelength = time_per_wavelength self.offset_intervals_minutes = offset_intervals_minutes self.min_DC = min_DC self.max_DC = max_DC self.current_step = -1 def get_next_action(self): pass def insert_action(self, index): pass def auto_add_offsets(self): pass def auto_determine_gain(self): pass def add_gain_adjustment_steps(self, wls: list[float], expectected_DC: dict[str, list[float]]): gain_changes = [] all_wls = [wl for wl in self.wavelengths if isinstance(wl, float)] # interpolate DC values to all wavelengths all_DCs = {key: np.interp(all_wls, wls, expectected_DC[key]) for key in expectected_DC.keys()} np.where() for i, wl in enumerate(wls): change = "" for mode_key, DCs in expectected_DC.items(): small_factor = self.min_DC / DCs[i] if small_factor > 1: # TODO: Handle cases where change += f"{mode_key}+1" break