DAQ Config: All BeamlineSettingsModel settings are optional, changed way elements are updated + added lock

This commit is contained in:
2025-06-02 16:20:08 +02:00
parent 1e2dffed85
commit 92f8d6257c
2 changed files with 27 additions and 16 deletions
+15 -12
View File
@@ -169,17 +169,20 @@ class DAQStatusModel(BaseModel):
class BeamlineSettingsModel(BaseModel):
# Float properties
cryojet_park_position: float = 12.0
cryojet_measurement_position: float = 5.0
dtz_collection: float = 130
dtz_park: float = 150.0
dtz_wash_sample_distance: float = 150.0
dtz_bsz_safety_margin: float = 50.0
bsz: float = 25.0
cryojet_park_position: float | None = 12.0
cryojet_measurement_position: float | None = 5.0
camera_max_magnification: float = 1.0
camera_min_magnification: float = 500.0
camera_translation_factor_a: float = 0.00253
camera_translation_factor_b: float = 255.0
dtz_max: float | None = 1600.0
dtz_min: float | None = 120.0
dtz_collection: float | None = 130.0
dtz_park: float | None = 150.0
dtz_wash_sample_distance: float | None = 150.0
dtz_bsz_safety_margin: float | None = 50.0
bsz: float | None = 25.0
cryojet_in_use: bool = True
camera_max_magnification: float | None = 1.0
camera_min_magnification: float | None = 500.0
camera_translation_factor_a: float | None = 0.00253
camera_translation_factor_b: float | None = 255.0
cryojet_in_use: bool | None = True
+12 -4
View File
@@ -147,19 +147,27 @@ class BeamlineConfig:
* np.exp(cfg.camera_translation_factor_a * zoom)
)
@property
def settings(self) -> BeamlineSettingsModel:
def __get_settings(self) -> BeamlineSettingsModel:
tmp = self.__client.get(f"{self.__bl}:settings")
if tmp is None:
raise Exception("Beamline key not found")
return BeamlineSettingsModel()
data_dict = json.loads(tmp)
model = BeamlineSettingsModel(**data_dict)
return model
@property
def settings(self) -> BeamlineSettingsModel:
with redis_lock.Lock(self.__client, f"{self.__bl}:settings_lock", expire=10):
return self.__get_settings()
@settings.setter
def settings(self, data: BeamlineSettingsModel):
self.__client.set(f"{self.__bl}:settings", data.model_dump_json())
with redis_lock.Lock(self.__client, f"{self.__bl}:settings_lock", expire=10):
current = self.__get_settings()
updated_data = current.model_copy(update=data.model_dump(exclude_unset=True))
self.__client.set(f"{self.__bl}:settings", updated_data.model_dump_json())
def get_alc_bkg(self, zoom: float) -> np.ndarray | None:
return base64_to_numpy(self.__client.get(f"{self.__bl}:bkg{zoom:.1f}"))