DAQ Config: All BeamlineSettingsModel settings are optional, changed way elements are updated + added lock
This commit is contained in:
@@ -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
|
||||
@@ -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}"))
|
||||
|
||||
Reference in New Issue
Block a user