Repository cleanup

This commit is contained in:
Mohacsi Istvan
2024-09-03 13:14:00 +02:00
committed by mohacsi_i
parent 5d08823768
commit 8e5ae633d7
3 changed files with 51 additions and 30 deletions
+9 -4
View File
@@ -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"
+33 -17
View File
@@ -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()
+9 -9
View File
@@ -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