workflows.py: added safe dtz positon check
This commit is contained in:
+24
-2
@@ -98,6 +98,27 @@ class BeamlineConfig:
|
||||
host = cfg_get("daq.hardware.redis_url", f"{self.__bl}-redis.psi.ch")
|
||||
self.__client = redis.Redis(host=host, port=6379, db=0, decode_responses=True)
|
||||
self.simulated_detector = bl is MXBeamline.SIMULATED
|
||||
self._initialize_optional_yaml_defaults()
|
||||
|
||||
def _initialize_optional_yaml_defaults(self) -> None:
|
||||
raw_dtz_safe_position = cfg_get("daq.hardware.dtz_safe_position")
|
||||
|
||||
if raw_dtz_safe_position in (None, ""):
|
||||
return
|
||||
|
||||
if self.dtz_safe_position is not None:
|
||||
return
|
||||
|
||||
try:
|
||||
self.dtz_safe_position = float(raw_dtz_safe_position)
|
||||
logger.info(
|
||||
f"Initialized dtz_safe_position from beamline config: {self.dtz_safe_position}"
|
||||
)
|
||||
except (TypeError, ValueError) as e:
|
||||
logger.warning(
|
||||
f"Ignoring invalid daq.hardware.dtz_safe_position value: "
|
||||
f"{raw_dtz_safe_position!r} ({e})"
|
||||
)
|
||||
|
||||
#GUI session management
|
||||
|
||||
@@ -820,7 +841,7 @@ class BeamlineConfig:
|
||||
def dtz_safe_position(self) -> float | None:
|
||||
tmp = self.__client.get(f"{self.__bl}:dtz_safe_position")
|
||||
if tmp is None:
|
||||
return 200.0
|
||||
return None
|
||||
return float(tmp)
|
||||
|
||||
@dtz_safe_position.setter
|
||||
@@ -1197,4 +1218,5 @@ if __name__ == "__main__":
|
||||
cfg = BeamlineConfig(bl=mx_beamline())
|
||||
# cfg.allow_non_staff_request_from_staff = True
|
||||
# cfg.state_busy = False
|
||||
cfg.abr_meas_pos = AerotechCoordinate(at_mm=Coordinate(x=0.0,y=0.0,z=0.0))
|
||||
#fg.abr_meas_pos = AerotechCoordinate(at_mm=Coordinate(x=0.0,y=0.0,z=0.0))
|
||||
cfg.dtz_safe_position = 300.0
|
||||
@@ -1,10 +1,10 @@
|
||||
from aare.common.models import SampleCameraSettings
|
||||
from aare.daq.devices import BeamlineDevices
|
||||
from aare.daq.config import BeamlineConfig, ABR_POS_MOUNT, ABR_OMEGA_MOUNT
|
||||
from aare.common.logger_config import setup_logger
|
||||
|
||||
from aare.devices.area_detector import AutoEnum
|
||||
from aare.common.logger_config import setup_logger
|
||||
from aare.devices.bec_worker import BeamlineState
|
||||
from aare.daq.devices import BeamlineDevices
|
||||
from aare.daq.config import BeamlineConfig, ABR_POS_MOUNT, ABR_OMEGA_MOUNT
|
||||
|
||||
import time
|
||||
|
||||
@@ -12,7 +12,32 @@ logger = setup_logger("aareDAQ")
|
||||
|
||||
SAFE_POSITION = 600
|
||||
|
||||
|
||||
def _move_detector_to_safe_position_if_needed(devs: BeamlineDevices, cfg: BeamlineConfig):
|
||||
safe_position = cfg.dtz_safe_position
|
||||
current_dtz = cfg.dtz
|
||||
|
||||
if safe_position is None:
|
||||
logger.debug("No dtz_safe_position configured; skipping detector move")
|
||||
return
|
||||
|
||||
if current_dtz is None:
|
||||
logger.debug("Current dtz is unknown; skipping detector safe-position move")
|
||||
return
|
||||
|
||||
if current_dtz < safe_position:
|
||||
logger.info(f"Moving detector to safe position {safe_position}")
|
||||
return devs.bec_worker.det_z(value=safe_position)
|
||||
|
||||
logger.debug(
|
||||
f"Detector already at or beyond safe position "
|
||||
f"(current={current_dtz}, safe={safe_position}); skipping move"
|
||||
)
|
||||
return None
|
||||
|
||||
|
||||
def common_2rse(devs: BeamlineDevices, cfg: BeamlineConfig):
|
||||
_move_detector_to_safe_position_if_needed(devs, cfg)
|
||||
devs.bec_worker.move_to(BeamlineState.ROBOT_SAMPLE_EXCHANGE)
|
||||
print('move smargon home')
|
||||
devs.smargon_move_home()
|
||||
@@ -123,9 +148,7 @@ def sa2dc(devs: BeamlineDevices, cfg: BeamlineConfig):
|
||||
logger.info(f"sam cam auto exposure in {time.perf_counter() - start:.2f}")
|
||||
|
||||
def dc2sa(devs: BeamlineDevices, cfg: BeamlineConfig):
|
||||
status = None
|
||||
if cfg.dtz and cfg.dtz < SAFE_POSITION:
|
||||
status = devs.bec_worker.det_z(value=SAFE_POSITION)
|
||||
status = _move_detector_to_safe_position_if_needed(devs, cfg)
|
||||
devs.samcam_auto(AutoEnum.AUTO)
|
||||
devs.bec_worker.move_to(BeamlineState.SAMPLE_ALIGNMENT)
|
||||
devs.aerotech_pos = cfg.abr_meas_pos
|
||||
@@ -215,7 +238,6 @@ def common2maintenance(devs: BeamlineDevices, cfg: BeamlineConfig):
|
||||
|
||||
if __name__ == "__main__":
|
||||
from aare.common.beamline import mx_beamline
|
||||
import time
|
||||
beamline = mx_beamline()
|
||||
config = BeamlineConfig(beamline)
|
||||
devices = BeamlineDevices(beamline)
|
||||
|
||||
Reference in New Issue
Block a user