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