Repository cleanup
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user