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