Source code for prsctrl.measurement.offset

"""Tools for adding offset measurements to the measurement parameters."""
import numpy as np

[docs] def add_offset_measurements_in_time_intervals(wavelengths: list[float], time_per_wavelength: float, offset_intervals_minutes:list|None=[5, 10, 15, 30, 60]) -> list[float|str]: """Add offset measurements before, after and between spectral measurements based on the estimated measurement time. :param wavelengths: The wavelengths to measure. :param time_per_wavelength: The estimated time (in seconds) that a single measurement will take. :param offset_intervals_minutes: A list of intervals (in minutes) to wait between taking offsets. The last interval repeatedly, until the measurement is over. """ measurements: list[float|str] = ["offset_begin"] if offset_intervals_minutes: interval_idx = 0 offset_intervals_seconds = np.array(offset_intervals_minutes) * 60 t_since_offset = 0.0 for i in range(len(wavelengths)): measurements.append(wavelengths[i]) t_since_offset += time_per_wavelength # add an offset if the required time has passed and the remaining time is more than half the interval time if t_since_offset > offset_intervals_seconds[interval_idx] and (len(wavelengths) - i)*time_per_wavelength > offset_intervals_seconds[interval_idx] * 0.5: measurements.append(f"offset_after_{wavelengths[i]}nm") t_since_offset = 0.0 if interval_idx+1 < len(offset_intervals_seconds): interval_idx += 1 measurements.append("offset_end") return measurements
[docs] def add_hardcoded_offset_measurement(wavelengths: list[int|str], after_wl: int): """Add an offset measurement after the given wavelength.""" idx = wavelengths.index(after_wl) if isinstance(wavelengths[idx+1], str): pass else: wavelengths.insert(idx+1, f"offset_after_{after_wl}nm") wavelengths.insert(idx+2, f"offset_after_{after_wl}nm_2") return wavelengths