Lot of code quality improvements

This commit is contained in:
Mohacsi Istvan
2024-06-28 13:34:25 +02:00
committed by mohacsi_i
parent e978270bd9
commit 7b865f0ee1
4 changed files with 35 additions and 22 deletions
+8 -8
View File
@@ -87,18 +87,18 @@ def print_max_framerate(exposure_ms=_min_exposure_ms, shape="square"):
if shape not in valid_shapes:
raise ValueError("shape must be one of %s" % valid_shapes)
if shape == "square":
for r in valid_roix:
_print_max_framerate(exposure_ms, r, r)
for px_r in valid_roix:
_print_max_framerate(exposure_ms, px_r, px_r)
if shape == "portrait":
for x in valid_roix:
_print_max_framerate(exposure_ms, roix=x, roiy=_max_roiy)
for px_x in valid_roix:
_print_max_framerate(exposure_ms, roix=px_x, roiy=_max_roiy)
if shape == "landscape":
# 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)
for px_y in valid_roix:
_print_max_framerate(exposure_ms, roix=_max_roix, roiy=px_y)
def max_framerate_hz(exposure_ms=_min_exposure_ms, roix=_max_roix, roiy=_max_roiy, clk_mhz=62.5):
@@ -224,10 +224,10 @@ layoutSchema = {
}
def validateJson(jsonData):
def validate_json(json_data):
"""Silently validate a JSON data according to the predefined schema"""
try:
jsonschema.validate(instance=jsonData, schema=layoutSchema)
jsonschema.validate(instance=json_data, schema=layoutSchema)
except jsonschema.exceptions.ValidationError:
return False
return True
@@ -31,6 +31,10 @@ class GigaFrostClient(Device):
backend_url : str
Backend url address necessary to set up the camera's udp header.
(default: http://xbl-daq-23:8080)
Bugs:
----------
FRAMERATE : Ignored in soft trigger mode, period becomes 2xexposure time
"""
# pylint: disable=too-many-instance-attributes
@@ -281,7 +285,7 @@ class GigaFrostClient(Device):
exposure : float, optional
Exposure time [ms]. (default = 0.2)
period : float, optional
Exposure period [ms]. (default = 1.0)
Exposure period [ms], ignored in soft trigger mode. (default = 1.0)
roix : int, optional
ROI size in the x-direction [pixels] (default = 2016)
roiy : int, optional
@@ -394,7 +398,7 @@ class GigaFrostClient(Device):
"""
if exp_mode not in self._valid_exposure_modes:
raise ValueError(
"Invalid exposure mode! Valid modes are:\n" "{}".format(self._valid_exposure_modes)
f"Invalid exposure mode! Valid modes are:\n" "{self._valid_exposure_modes}"
)
if exp_mode == "external":
@@ -502,7 +506,7 @@ class GigaFrostClient(Device):
"""
if mode not in self._valid_trigger_modes:
raise ValueError(
"Invalid trigger mode! Valid modes are:\n" "{}".format(self._valid_trigger_modes)
"Invalid trigger mode! Valid modes are:\n" "{self._valid_trigger_modes}"
)
if mode == "auto":
@@ -563,7 +567,7 @@ class GigaFrostClient(Device):
"""
if mode not in self._valid_enable_modes:
raise ValueError(
"Invalid enable mode! Valid modes are:\n" "{}".format(self._valid_enable_modes)
"Invalid enable mode! Valid modes are:\n" "{self._valid_enable_modes}"
)
if mode == "soft":
@@ -601,6 +605,7 @@ class GigaFrostClient(Device):
return self._south_ip
def get_backend_url(self):
"""Method to read the configured backend URL"""
return self._backend_url
def set_backend_ip(self, north, south):
+4 -1
View File
@@ -1,9 +1,12 @@
# Gifgafrost camera at Tomcat
The GigaFrost camera IOC is a form from an ancient version of Helge's cameras.
As we're commissioning, the current folder also contains the standard DAQ client.
# Opening GigaFrost panel
The CaQtDM panel can be opened by:
'''
caqtdm -macro "CAM=X02DA-CAM-GF2" X_X02DA_GIGAFROST_camControl_user.ui &
'''
+14 -9
View File
@@ -40,12 +40,17 @@ class StdDaqWsClient(Device):
super().__init__(*args, parent=parent, **kwargs)
self.status._metadata["write_access"] = False
self._ws_url = url
self._mon = None
# Connect ro the DAQ
self.connect()
def connect(self):
# StdDAQ may reject connection for a few seconds
"""Connect to te StDAQs websockets interface
StdDAQ may reject connection for a few seconds, so if it fails, wait
a bit and try to connect again.
"""
try:
self._client = connect(self._ws_url)
except ConnectionRefusedError:
@@ -104,8 +109,8 @@ class StdDaqWsClient(Device):
f"Start command rejected (might be already running): {reply['reason']}"
)
self.t = Thread(target=self.poll)
self.t.start()
self._mon = Thread(target=self.poll)
self._mon.start()
return super().stage()
def unstage(self):
@@ -114,10 +119,10 @@ class StdDaqWsClient(Device):
WARN: This will also close the connection!!!
"""
message = {"command": "stop"}
self.message(message, wait_reply=False)
_ = self.message(message, wait_reply=False)
return super().unstage()
def stop(self, *, success=False):
def stop(self):
""" Stop a running acquisition
WARN: This will also close the connection!!!
@@ -126,16 +131,16 @@ class StdDaqWsClient(Device):
# The poller thread locks recv raising a RuntimeError
self.message(message, wait_reply=False)
def message(self, d: dict, timeout=1, wait_reply=True):
def message(self, message: dict, timeout=1, wait_reply=True):
"""Send a message to the StdDAQ and receive a reply
Note: finishing acquisition meang StdDAQ will close connections so
there's no idle state polling.
"""
if isinstance(d, dict):
msg = json.dumps(d)
if isinstance(message, dict):
msg = json.dumps(message)
else:
msg = str(d)
msg = str(message)
# Send message (reopen connection if needed)
try: