This commit is contained in:
gac-x06da
2025-03-11 12:15:17 +01:00
committed by mohacsi_i
parent 3b9a86c8c8
commit 5ca9972383
5 changed files with 28 additions and 27 deletions

View File

@@ -12,11 +12,11 @@ Standard bluesky interface:
AerotechAbrStage.kickoff()
AerotechAbrStage.stop()
Additional bluesky functionality:
Aerotech.is_homed()
Aerotech.do_homing(wait=True)
Aerotech.get_ready(ostart=None, orange=None, etime=None, wait=True)
@@ -66,7 +66,6 @@ from bec_lib import bec_logger
logger = bec_logger.logger
# pylint: disable=logging-fstring-interpolation
class AerotechAbrMixin(CustomPrepare):
"""Configuration class for the Aerotech A3200 controller for the ABR stage"""
@@ -84,7 +83,13 @@ class AerotechAbrMixin(CustomPrepare):
scanargs = self.parent.scaninfo.scan_msg.info["kwargs"]
scanname = self.parent.scaninfo.scan_msg.info["scan_name"]
if scanname in ("standardscan", "helicalscan", "helicalscan1", "helicalscan2", "helicalscan3"):
if scanname in (
"standardscan",
"helicalscan",
"helicalscan1",
"helicalscan2",
"helicalscan3",
):
d["scan_command"] = AbrCmd.MEASURE_STANDARD
d["var_1"] = scanargs["start"]
d["var_2"] = scanargs["range"]
@@ -295,9 +300,7 @@ class AerotechAbrStage(BECDeviceBase):
return bool(value == 0)
# Subscribe and wait for update
status = SubscriptionStatus(
self.scan_done, is_busy, timeout=timeout, settle_time=0.1
)
status = SubscriptionStatus(self.scan_done, is_busy, timeout=timeout, settle_time=0.1)
status.wait()
# return status
@@ -321,9 +324,7 @@ class AerotechAbrStage(BECDeviceBase):
# Subscribe and wait for update
# status = SubscriptionStatus(self.task1, is_idle, timeout=timeout, settle_time=0.5)
status = SubscriptionStatus(
self.scan_done, is_idle, timeout=timeout, settle_time=0.5
)
status = SubscriptionStatus(self.scan_done, is_idle, timeout=timeout, settle_time=0.5)
return status
def reset(self, settle_time=0.1, wait_after_reload=1) -> None:

View File

@@ -90,7 +90,7 @@ class A3200Axis(PVPositioner):
vmax = Component(Signal, kind=Kind.config)
offset = Component(EpicsSignal, "-OFF", put_complete=True, kind=Kind.config)
#pylint: disable=too-many-arguments
# pylint: disable=too-many-arguments
def __init__(
self,
prefix="",
@@ -255,5 +255,5 @@ class A3200Axis(PVPositioner):
# Automatically start an axis if directly invoked
if __name__ == "__main__":
omega = A3200Axis(prefix="X06DA-ES-DF1:OMEGA", base_pv='X06DA-ES', name="omega")
omega = A3200Axis(prefix="X06DA-ES-DF1:OMEGA", base_pv="X06DA-ES", name="omega")
omega.wait_for_connection()

View File

@@ -170,10 +170,10 @@ class SmarGonAxis(PVPositioner):
self.__class__.__dict__["setpoint"].kwargs["high_limit"] = high_limit
self.__class__.__dict__["sg_url"].kwargs["value"] = sg_url
# Fine-tune HTTP connection behavior
# NOTE: SmarGon has a few failed requests every one in a while
# NOTE: SmarGon has a few failed requests every one in a while
self._s = requests.Session()
retries = Retry(total=5, backoff_factor=0.05, status_forcelist=[ 500, 502, 503, 504 ])
self._s.mount('http://', HTTPAdapter(max_retries=retries))
retries = Retry(total=5, backoff_factor=0.05, status_forcelist=[500, 502, 503, 504])
self._s.mount("http://", HTTPAdapter(max_retries=retries))
super().__init__(
prefix=prefix,

View File

@@ -58,7 +58,7 @@ class LimitedSmarGonSignal(Signal):
if value > hil:
raise ValueError(f"Target {value} outside of limits {self.limits}")
def put(self, value, *, timestamp=None, force=False, metadata=None, **kwargs,):
def put(self, value, *, timestamp=None, force=False, metadata=None, **kwargs):
"""Overriden put to add communication with smargopolo"""
# Validate new value and get timestamp
if not force:
@@ -88,6 +88,7 @@ class SmarGonAxis(PVPositioner):
This class controls the SmarGon goniometer via the REST interface. All
SmarGon axes share a common mutex to manage actual HW access.
"""
USER_ACCESS = ["omove", "oldmove"]
# Status attributes
@@ -119,10 +120,10 @@ class SmarGonAxis(PVPositioner):
self.__class__.__dict__["setpoint"].kwargs["high_limit"] = high_limit
self.__class__.__dict__["sg_url"].kwargs["value"] = sg_url
# Fine-tune HTTP connection behavior
# NOTE: SmarGon has a few failed requests every one in a while
# NOTE: SmarGon has a few failed requests every one in a while
self._s = requests.Session()
retries = Retry(total=5, backoff_factor=0.05, status_forcelist=[ 500, 502, 503, 504 ])
self._s.mount('http://', HTTPAdapter(max_retries=retries))
retries = Retry(total=5, backoff_factor=0.05, status_forcelist=[500, 502, 503, 504])
self._s.mount("http://", HTTPAdapter(max_retries=retries))
super().__init__(
prefix=prefix,
@@ -149,7 +150,7 @@ class SmarGonAxis(PVPositioner):
# print(f"Readback: {rb}\tSetpoint: {sp}")
# Check if they're within tolerance
distance = abs(rb - sp)
done = 1 if distance<self._tol else 0
done = 1 if distance < self._tol else 0
self.done.put(done, force=True)
time.sleep(0.2)
@@ -181,7 +182,6 @@ class SmarGonAxis(PVPositioner):
d[str(self.name)] = d[f"{self.name}_readback"]
return d
def read(self) -> OrderedDict[str, dict]:
"""Workaround to schema expected by the BEC"""
d = super().read()

View File

@@ -51,7 +51,7 @@ class StdDaqPreviewMixin(CustomDetectorMixin):
self._mon.join(timeout=1)
# So also disconnect the socket
try:
#pylint: disable=protected-access
# pylint: disable=protected-access
self.parent._socket.disconnect(self.parent.url.get())
except zmq.error.ZMQError:
# Might be already closed
@@ -73,7 +73,7 @@ class StdDaqPreviewMixin(CustomDetectorMixin):
break
# pylint: disable=no-member
#pylint: disable=protected-access
# pylint: disable=protected-access
r = self.parent._socket.recv_multipart(flags=zmq.NOBLOCK)
# Length and throtling checks
@@ -105,7 +105,7 @@ class StdDaqPreviewMixin(CustomDetectorMixin):
# self.parent.array_data.put(data, force=True)
self.parent.shaped_image.put(image, force=True)
#pylint: disable=protected-access
# pylint: disable=protected-access
self.parent._last_image = image
self.parent._run_subs(sub_type=self.parent.SUB_MONITOR, value=image)
t_last = t_curr
@@ -133,7 +133,7 @@ class StdDaqPreviewDetector(PSIDetectorBase):
This was meant to provide live image stream directly from the StdDAQ but
also works with other ARRAY v1 streamers, like the AreaDetector ZMQ plugin.
Note that the preview stream must be already throtled in order to cope with
the incoming data and the python class might throttle it further.
the incoming data and the python class might throttle it further.
NOTE: As an explicit request, it does not record the image data.
@@ -185,8 +185,8 @@ class StdDaqPreviewDetector(PSIDetectorBase):
self._socket.connect(self.url.get())
def savemode(self, save=False):
""" Toggle save mode for the shaped image"""
#pylint: disable=protected-access
"""Toggle save mode for the shaped image"""
# pylint: disable=protected-access
if save:
self.shaped_image._kind = Kind.normal
else: