diff --git a/tomcat_bec/devices/gigafrost/gigafrostcamera.py b/tomcat_bec/devices/gigafrost/gigafrostcamera.py index b7b1d5f..bb54858 100644 --- a/tomcat_bec/devices/gigafrost/gigafrostcamera.py +++ b/tomcat_bec/devices/gigafrost/gigafrostcamera.py @@ -445,6 +445,12 @@ class GigaFrostCamera(PSIDetectorBase): prefix="", *, name, + kind=None, + read_attrs=None, + configuration_attrs=None, + parent=None, + device_manager=None, + sim_mode=False, auto_soft_enable=False, backend_url=const.BE999_DAFL_CLIENT, **kwargs, @@ -455,7 +461,7 @@ class GigaFrostCamera(PSIDetectorBase): self._signals_to_be_set['backend_url'] = backend_url # super() will call the mixin class - super().__init__(prefix=prefix, name=name, **kwargs) + super().__init__(prefix=prefix, name=name, kind=kind, read_attrs=read_attrs, configuration_attrs=configuration_attrs, parent=parent, device_manager=device_manager, **kwargs) def _init(self): """Ugly hack: values must be set before on_init() is called""" @@ -586,15 +592,6 @@ class GigaFrostCamera(PSIDetectorBase): else: raise RuntimeError(f"Unsupported trigger mode: {trigger_mode}") - def stage(self): - """ Standard stage command""" - if not self._initialized: - logger.warning( - f"[{self.name}] Ophyd device havent ran the initialization sequence," - "IOC might be in unknown configuration." - ) - return super().stage() - @property def exposure_mode(self): """Returns the current exposure mode of the GigaFRost camera. diff --git a/tomcat_bec/devices/gigafrost/stddaq_client.py b/tomcat_bec/devices/gigafrost/stddaq_client.py index cb9f2af..1060491 100644 --- a/tomcat_bec/devices/gigafrost/stddaq_client.py +++ b/tomcat_bec/devices/gigafrost/stddaq_client.py @@ -36,7 +36,7 @@ class StdDaqMixin(CustomDeviceMixin): # Fish out our configuration from scaninfo (via explicit or generic addressing) scanparam = self.parent.scaninfo.scan_msg.info alias = self.parent.parent.name if self.parent.parent is not None else self.parent.name - logger.warning(f"[{alias}] Scan parameters:\n{self.parent.scaninfo}") + logger.warning(f"[{alias}] Scan parameters:\n{scanparam}") d = {} if 'kwargs' in scanparam: scanargs = scanparam['kwargs'] @@ -173,15 +173,23 @@ class StdDaqClient(PSIDeviceBase): cfg_pixel_height = Component(Signal, kind=Kind.config) cfg_pixel_width = Component(Signal, kind=Kind.config) + def __init__( self, - *args, + prefix="", + *, + name, + kind=None, + read_attrs=None, + configuration_attrs=None, + parent=None, + device_manager=None, + sim_mode=False, ws_url: str = "ws://localhost:8080", rest_url: str = "http://localhost:5000", - parent: Device = None, - **kwargs + **kwargs, ) -> None: - super().__init__(*args, parent=parent, **kwargs) + super().__init__(prefix=prefix, name=name, kind=kind, read_attrs=read_attrs, configuration_attrs=configuration_attrs, parent=parent, device_manager=device_manager, **kwargs) self.status._metadata["write_access"] = False self.ws_url._metadata["write_access"] = False self.ws_url.set(ws_url, force=True).wait() @@ -294,14 +302,10 @@ class StdDaqClient(PSIDeviceBase): cfg = self.get_daq_config() if cfg['image_pixel_height'] != self.cfg_pixel_height.get() or cfg['image_pixel_width'] != self.cfg_pixel_width.get(): # Stop running acquisition - self.safestop() - sleep(1) - cfg = self.get_daq_config() - changes = { - 'image_pixel_height': int(self.cfg_pixel_height.get()), - 'image_pixel_width': int(self.cfg_pixel_width.get()), - } - cfg = cfg.update(changes) + self.unstage() + # Update retrieved config + cfg['image_pixel_height'] = int(self.cfg_pixel_height.get()) + cfg['image_pixel_width'] = int(self.cfg_pixel_width.get()) self.set_daq_config(cfg) self.read_daq_config() @@ -330,8 +334,9 @@ class StdDaqClient(PSIDeviceBase): def set_daq_config(self, config): """Write a full configuration to the DAQ """ + url = self.rest_url.get() + '/api/config/set' r = requests.post( - self.rest_url.get() + '/api/config/set', + url, params={"user": "ioc"}, json=config, timeout=2, @@ -358,7 +363,7 @@ class StdDaqClient(PSIDeviceBase): try: if self._wsclient is not None: self._wsclient.close() - self._wsclient = connect(self._ws_url) + self._wsclient = connect(self.ws_url.get()) msg = json.dumps({"command": "stop"}) self._wsclient.send(msg) except (ConnectionClosedError, ConnectionClosedOK, ConnectionRefusedError):