From 8e5ae633d72ff7f1255684c9435373f3a00f1fb0 Mon Sep 17 00:00:00 2001 From: Mohacsi Istvan Date: Thu, 27 Jun 2024 17:14:04 +0200 Subject: [PATCH] Repository cleanup --- tomcat_bec/devices/gigafrost/gfutils.py | 13 +++-- .../devices/gigafrost/gigafrostclient.py | 50 ++++++++++++------- tomcat_bec/devices/gigafrost/stddaq_ws.py | 18 +++---- 3 files changed, 51 insertions(+), 30 deletions(-) diff --git a/tomcat_bec/devices/gigafrost/gfutils.py b/tomcat_bec/devices/gigafrost/gfutils.py index ab45263..3e6c0b1 100644 --- a/tomcat_bec/devices/gigafrost/gfutils.py +++ b/tomcat_bec/devices/gigafrost/gfutils.py @@ -49,7 +49,8 @@ class GfCamNotFound(NoTraceBackWithLineNumber): def is_valid_url(url): - return(url.startswith('http://')) # FIXME: do more checks? + # FIXME: do more checks? + return(url.startswith('http://')) def is_valid_exposure_ms(e): @@ -114,7 +115,9 @@ def print_max_framerate(exposure_ms=_min_exposure_ms, shape='square'): _print_max_framerate(exposure_ms, roix=x, roiy=_max_roiy) if shape == 'landscape': - for y in valid_roix: # valid_roix is a subset of valid_roiy. Use the smaller set to get a more manageable amount of output lines + # valid_roix is a subset of valid_roiy. + # Use the smaller set to get a more manageable amount of output lines + for y in valid_roix: _print_max_framerate(exposure_ms, roix=_max_roix, roiy=y) @@ -186,7 +189,8 @@ def max_framerate_Hz(exposure_ms=_min_exposure_ms, # 2 line blocks per quarter roiy = max(((roiy + 3) / 4) * 4, PLB_IMG_SENS_COUNT_Y_OFFS * 4) - # print("CC_INTEGRATION_START_DELAY + CC_FRAME_OVERHEAD_TIME",CC_INTEGRATION_START_DELAY + CC_FRAME_OVERHEAD_TIME) + # print("CC_INTEGRATION_START_DELAY + CC_FRAME_OVERHEAD_TIME", + # CC_INTEGRATION_START_DELAY + CC_FRAME_OVERHEAD_TIME) # print("CC_ROW_OVERHEAD_TIME",CC_ROW_OVERHEAD_TIME) # print("CC_TIME_TSYS",CC_TIME_TSYS) @@ -210,7 +214,8 @@ layoutSchema = { "^[a-zA-Z0-9_.-]*$": { "type": "object", - "required":["writer","DaflClient", "zmq_stream", "live_preview", "ioc_name", "description"], + "required":["writer","DaflClient", "zmq_stream", "live_preview", "ioc_name", + "description"], "properties":{ "writer": { "type": "string" diff --git a/tomcat_bec/devices/gigafrost/gigafrostclient.py b/tomcat_bec/devices/gigafrost/gigafrostclient.py index b2d86b8..b81754c 100644 --- a/tomcat_bec/devices/gigafrost/gigafrostclient.py +++ b/tomcat_bec/devices/gigafrost/gigafrostclient.py @@ -53,22 +53,35 @@ class GigaFrostClient(Device): cmdSoftExposure = Component(EpicsSignal, "SOFT_EXP", put_complete=True) # Trigger configuration PVs - cfgCntStartBit = Component(EpicsSignal, "CNT_STARTBIT_RBV", write_pv="CNT_STARTBIT", put_complete=True) - cfgCntEndBit = Component(EpicsSignal, "CNT_ENDBIT_RBV", write_pv="CNT_ENDBIT", put_complete=True) + cfgCntStartBit = Component(EpicsSignal, "CNT_STARTBIT_RBV", write_pv="CNT_STARTBIT", + put_complete=True) + cfgCntEndBit = Component(EpicsSignal, "CNT_ENDBIT_RBV", write_pv="CNT_ENDBIT", + put_complete=True) # Enable modes - cfgTrigEnableExt = Component(EpicsSignal, "MODE_ENBL_EXT_RBV", write_pv="MODE_ENBL_EXT", put_complete=True) - cfgTrigEnableSoft = Component(EpicsSignal, "MODE_ENBL_SOFT_RBV", write_pv="MODE_ENBL_SOFT", put_complete=True) - cfgTrigEnableAuto = Component(EpicsSignal, "MODE_ENBL_AUTO_RBV", write_pv="MODE_ENBL_AUTO", put_complete=True) - cfgTrigVirtEnable = Component(EpicsSignal, "MODE_ENBL_EXP_RBV", write_pv="MODE_ENBL_EXP", put_complete=True) + cfgTrigEnableExt = Component(EpicsSignal, "MODE_ENBL_EXT_RBV", write_pv="MODE_ENBL_EXT", + put_complete=True) + cfgTrigEnableSoft = Component(EpicsSignal, "MODE_ENBL_SOFT_RBV", write_pv="MODE_ENBL_SOFT", + put_complete=True) + cfgTrigEnableAuto = Component(EpicsSignal, "MODE_ENBL_AUTO_RBV", write_pv="MODE_ENBL_AUTO", + put_complete=True) + cfgTrigVirtEnable = Component(EpicsSignal, "MODE_ENBL_EXP_RBV", write_pv="MODE_ENBL_EXP", + put_complete=True) # Trigger modes - cfgTrigExt = Component(EpicsSignal, "MODE_TRIG_EXT_RBV", write_pv="MODE_TRIG_EXT", put_complete=True) - cfgTrigSoft = Component(EpicsSignal, "MODE_TRIG_SOFT_RBV", write_pv="MODE_TRIG_SOFT", put_complete=True) - cfgTrigTimer = Component(EpicsSignal, "MODE_TRIG_TIMER_RBV", write_pv="MODE_TRIG_TIMER", put_complete=True) - cfgTrigAuto = Component(EpicsSignal, "MODE_TRIG_AUTO_RBV", write_pv="MODE_TRIG_AUTO", put_complete=True) + cfgTrigExt = Component(EpicsSignal, "MODE_TRIG_EXT_RBV", write_pv="MODE_TRIG_EXT", + put_complete=True) + cfgTrigSoft = Component(EpicsSignal, "MODE_TRIG_SOFT_RBV", write_pv="MODE_TRIG_SOFT", + put_complete=True) + cfgTrigTimer = Component(EpicsSignal, "MODE_TRIG_TIMER_RBV", write_pv="MODE_TRIG_TIMER", + put_complete=True) + cfgTrigAuto = Component(EpicsSignal, "MODE_TRIG_AUTO_RBV", write_pv="MODE_TRIG_AUTO", + put_complete=True) # Exposure modes - cfgTrigExpExt = Component(EpicsSignal, "MODE_EXP_EXT_RBV", write_pv="MODE_EXP_EXT", put_complete=True) - cfgTrigExpSoft = Component(EpicsSignal, "MODE_EXP_SOFT_RBV", write_pv="MODE_EXP_SOFT", put_complete=True) - cfgTrigExpTimer = Component(EpicsSignal, "MODE_EXP_TIMER_RBV", write_pv="MODE_EXP_TIMER", put_complete=True) + cfgTrigExpExt = Component(EpicsSignal, "MODE_EXP_EXT_RBV", write_pv="MODE_EXP_EXT", + put_complete=True) + cfgTrigExpSoft = Component(EpicsSignal, "MODE_EXP_SOFT_RBV", write_pv="MODE_EXP_SOFT", + put_complete=True) + cfgTrigExpTimer = Component(EpicsSignal, "MODE_EXP_TIMER_RBV", write_pv="MODE_EXP_TIMER", + put_complete=True) # Line swap selection cfgLineSwapSW = Component(EpicsSignal, "LS_SW", put_complete=True) @@ -90,9 +103,11 @@ class GigaFrostClient(Device): USER_ACCESS = ["exposure_mode", "fix_nframes_mode", "trigger_mode", "enable_mode"] - def __init__(self, prefix="", *, name, auto_soft_enable=False, timeout=10, backend_url=const.BE999_DAFL_CLIENT, - kind=None, read_attrs=None, configuration_attrs=None, parent=None, **kwargs): - super().__init__(prefix=prefix, name=name, kind=kind, read_attrs=read_attrs, configuration_attrs=configuration_attrs, parent=parent, **kwargs) + def __init__(self, prefix="", *, name, auto_soft_enable=False, timeout=10, + backend_url=const.BE999_DAFL_CLIENT, kind=None, read_attrs=None, + configuration_attrs=None, parent=None, **kwargs): + super().__init__(prefix=prefix, name=name, kind=kind, read_attrs=read_attrs, + configuration_attrs=configuration_attrs, parent=parent, **kwargs) self._auto_soft_enable = auto_soft_enable self._timeout = timeout self._backend_url = backend_url @@ -541,7 +556,8 @@ class GigaFrostClient(Device): # Automatically connect to MicroSAXS testbench if directly invoked if __name__ == "__main__": - gf = GigaFrostClient("X02DA-CAM-GF2:", name="gf2", backend_url="http://xbl-daq-28:8080", auto_soft_enable=True) + gf = GigaFrostClient("X02DA-CAM-GF2:", name="gf2", backend_url="http://xbl-daq-28:8080", + auto_soft_enable=True) gf.wait_for_connection() diff --git a/tomcat_bec/devices/gigafrost/stddaq_ws.py b/tomcat_bec/devices/gigafrost/stddaq_ws.py index d3368d9..8bdff69 100644 --- a/tomcat_bec/devices/gigafrost/stddaq_ws.py +++ b/tomcat_bec/devices/gigafrost/stddaq_ws.py @@ -1,6 +1,6 @@ -from ophyd import Device, Signal, Component, Kind +from ophyd import Device, Signal, Component, Kind import json -from time import sleep +from time import sleep from threading import Thread from websockets.sync.client import connect from websockets.exceptions import ConnectionClosedOK, ConnectionClosedError @@ -24,7 +24,8 @@ class StdDaqWsClient(Device): n_images = Component(Signal, value=10000, kind=Kind.config) file_path = Component(Signal, value="/gpfs/test/test-beamline", kind=Kind.config) - def __init__(self, *args, url: str="ws://localhost:8080", parent: Device = None, **kwargs) -> None: + def __init__(self, *args, url: str="ws://localhost:8080", parent: Device = None, + **kwargs) -> None: super().__init__(*args, parent=parent, **kwargs) self.status._metadata['write_access'] = False self._ws_url = url @@ -83,12 +84,14 @@ class StdDaqWsClient(Device): message = {"command":"start", "path": file_path, "n_image": n_image} reply = self.message(message) - + reply = json.loads(reply) if reply['status'] in ('creating_file'): self.status.put(reply['status'], force=True) - elif reply['status'] in ('rejected'): - raise RuntimeError(f"Start command rejected (might be already running): {reply['reason']}") + elif reply['status'] in ('rejected'): + raise RuntimeError( + f"Start command rejected (might be already running): {reply['reason']}" + ) self.t = Thread(target = self.poll) self.t.start() @@ -112,9 +115,6 @@ class StdDaqWsClient(Device): # The poller thread locks recv raising a RuntimeError self.message(message, wait_reply=False) - def abort(self): - return self.message({"command": "abort"}) - def message(self, d: dict, timeout=1, wait_reply=True): """Send a message to the StdDAQ and receive a reply