From e5c9dd288c571d29722497a2d40b000d1cffb475 Mon Sep 17 00:00:00 2001 From: wakonig_k Date: Mon, 24 Mar 2025 15:27:32 +0100 Subject: [PATCH] fix(positioner_box): if possible tweak should use the current setpoint instead of the readback --- .../positioner_box/positioner_box.py | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py b/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py index d4a0805d..5232a3a2 100644 --- a/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py +++ b/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py @@ -1,4 +1,4 @@ -""" Module for a PositionerBox widget to control a positioner device.""" +"""Module for a PositionerBox widget to control a positioner device.""" from __future__ import annotations @@ -212,12 +212,34 @@ class PositionerBox(PositionerBoxBase): @SafeSlot() def on_tweak_right(self): """Tweak motor right""" - self.dev[self.device].move(self.step_size, relative=True) + setpoint = self._get_setpoint() + if setpoint is None: + self.dev[self.device].move(self.step_size, relative=True) + return + target = setpoint + self.step_size + self.dev[self.device].move(target, relative=False) @SafeSlot() def on_tweak_left(self): """Tweak motor left""" - self.dev[self.device].move(-self.step_size, relative=True) + setpoint = self._get_setpoint() + if setpoint is None: + self.dev[self.device].move(-self.step_size, relative=True) + return + target = setpoint - self.step_size + self.dev[self.device].move(target, relative=False) + + def _get_setpoint(self) -> float | None: + """Get the setpoint of the motor""" + setpoint = getattr(self.dev[self.device], "setpoint", None) + if not setpoint: + setpoint = getattr(self.dev[self.device], "user_setpoint", None) + if not setpoint: + return None + try: + return float(setpoint.get()) + except Exception: + return None @SafeSlot() def on_setpoint_change(self):