removed controller.on methods from staging; improvements for detector sim

This commit is contained in:
wakonig_k 2022-09-08 21:50:31 +02:00
parent d60b58a5f5
commit 80e101a5ef
6 changed files with 37 additions and 30 deletions

View File

@ -1,6 +1,6 @@
from .galil.galil_ophyd import GalilMotor from .galil.galil_ophyd import GalilMotor
from .npoint.npoint import NPointAxis from .npoint.npoint import NPointAxis
from .rt_lamni import RtLamniMotor from .rt_lamni import RtLamniMotor
from .sim.sim import SynAxisMonitor, SynAxisOPAAS, SynFlyer from .sim.sim import SynAxisMonitor, SynAxisOPAAS, SynFlyer, SynSLSDetector
from .sls_devices.sls_devices import SLSOperatorMessages from .sls_devices.sls_devices import SLSOperatorMessages
from .smaract.smaract_ophyd import SmaractMotor from .smaract.smaract_ophyd import SmaractMotor

View File

@ -4,14 +4,14 @@ import time
from typing import List from typing import List
import numpy as np import numpy as np
from bec_utils import bec_logger
from ophyd import Component as Cpt from ophyd import Component as Cpt
from ophyd import Device, PositionerBase, Signal from ophyd import Device, PositionerBase, Signal
from ophyd.status import wait as status_wait from ophyd.status import wait as status_wait
from ophyd.utils import ReadOnlyError, LimitError from ophyd.utils import LimitError, ReadOnlyError
from ophyd_devices.utils.controller import Controller, threadlocked from ophyd_devices.utils.controller import Controller, threadlocked
from ophyd_devices.utils.socket import SocketIO, SocketSignal, raise_if_disconnected from ophyd_devices.utils.socket import SocketIO, SocketSignal, raise_if_disconnected
from prettytable import PrettyTable from prettytable import PrettyTable
from bec_utils import bec_logger
logger = bec_logger.logger logger = bec_logger.logger
@ -542,11 +542,9 @@ class GalilMotor(Device, PositionerBase):
return "mm" return "mm"
def stage(self) -> List[object]: def stage(self) -> List[object]:
self.controller.on()
return super().stage() return super().stage()
def unstage(self) -> List[object]: def unstage(self) -> List[object]:
self.controller.off()
return super().unstage() return super().unstage()
def stop(self, *, success=False): def stop(self, *, success=False):

View File

@ -773,11 +773,9 @@ class RtLamniMotor(Device, PositionerBase):
# how is this used later? # how is this used later?
def stage(self) -> List[object]: def stage(self) -> List[object]:
self.controller.on()
return super().stage() return super().stage()
def unstage(self) -> List[object]: def unstage(self) -> List[object]:
self.controller.off()
return super().unstage() return super().unstage()
def stop(self, *, success=False): def stop(self, *, success=False):

View File

@ -1 +1 @@
from .sim import SynAxisMonitor, SynAxisOPAAS, SynFlyer from .sim import SynAxisMonitor, SynAxisOPAAS, SynFlyer, SynSLSDetector

View File

@ -1,6 +1,8 @@
import os
import threading import threading
import time as ttime import time as ttime
import warnings import warnings
from email.message import Message
from typing import List from typing import List
import numpy as np import numpy as np
@ -194,16 +196,6 @@ class SynAxisMonitor(Device):
self.readback.name = self.name self.readback.name = self.name
class _SLSDetectorAcquireSignal(Signal):
def put(self, value, *, timestamp=None, force=False):
self._readback = value
self.parent.set(value)
def get(self):
self._readback = self.parent.sim_state["acquire"]
return self.parent.sim_state["acquire"]
class _SLSDetectorConfigSignal(Signal): class _SLSDetectorConfigSignal(Signal):
def put(self, value, *, timestamp=None, force=False): def put(self, value, *, timestamp=None, force=False):
self._readback = value self._readback = value
@ -216,24 +208,27 @@ class _SLSDetectorConfigSignal(Signal):
class SynSLSDetector(Device): class SynSLSDetector(Device):
USER_ACCESS = [] USER_ACCESS = []
acquire = Cpt(_SLSDetectorAcquireSignal, value=0, kind="hinted")
exp_time = Cpt(_SLSDetectorConfigSignal, name="exp_time", value=1, kind="config") exp_time = Cpt(_SLSDetectorConfigSignal, name="exp_time", value=1, kind="config")
file_path = Cpt(_SLSDetectorConfigSignal, name="file_path", value="", kind="config") file_path = Cpt(_SLSDetectorConfigSignal, name="file_path", value="", kind="config")
file_pattern = Cpt(_SLSDetectorConfigSignal, name="file_pattern", value="", kind="config") file_pattern = Cpt(_SLSDetectorConfigSignal, name="file_pattern", value="", kind="config")
frames = Cpt(_SLSDetectorConfigSignal, name="frames", value=1, kind="config") frames = Cpt(_SLSDetectorConfigSignal, name="frames", value=1, kind="config")
burst = Cpt(_SLSDetectorConfigSignal, name="burst", value=1, kind="config")
save_file = Cpt(_SLSDetectorConfigSignal, name="save_file", value=False, kind="config") save_file = Cpt(_SLSDetectorConfigSignal, name="save_file", value=False, kind="config")
def __init__(self, *, name, kind=None, parent=None, **kwargs): def __init__(self, *, name, kind=None, parent=None, device_manager=None, **kwargs):
self.device_manager = device_manager
super().__init__(name=name, parent=parent, kind=kind, **kwargs) super().__init__(name=name, parent=parent, kind=kind, **kwargs)
self.sim_state = { self.sim_state = {
"acquire": 0, f"{self.name}_file_path": "~/Data10/data/",
f"{self.name}_file_path": "", f"{self.name}_file_pattern": f"{self.name}_{{:05d}}.h5",
f"{self.name}_file_pattern": "",
f"{self.name}_frames": 1, f"{self.name}_frames": 1,
f"{self.name}_burst": 1,
f"{self.name}_save_file": False, f"{self.name}_save_file": False,
f"{self.name}_exp_time": 1, f"{self.name}_exp_time": 0,
} }
self._stopped = False self._stopped = False
self.file_name = ""
self.metadata = {}
def trigger(self): def trigger(self):
status = DeviceStatus(self) status = DeviceStatus(self)
@ -242,7 +237,7 @@ class SynSLSDetector(Device):
def acquire(): def acquire():
try: try:
for _ in range(self.frames.get()): for _ in range(self.burst.get()):
ttime.sleep(self.exp_time.get()) ttime.sleep(self.exp_time.get())
if self._stopped: if self._stopped:
raise DeviceStop raise DeviceStop
@ -256,9 +251,27 @@ class SynSLSDetector(Device):
return status return status
def stage(self) -> List[object]: def stage(self) -> List[object]:
msg = self.device_manager.producer.get(MessageEndpoints.scan_status())
scan_msg = BECMessage.ScanStatusMessage.loads(msg)
self.metadata = {
"scanID": scan_msg.content["scanID"],
"RID": scan_msg.content["info"]["RID"],
"RID": scan_msg.content["info"]["RID"],
"queueID": scan_msg.content["info"]["queueID"],
}
scan_number = scan_msg.content["info"]["scan_number"]
self.frames.set(scan_msg.content["info"]["num_points"])
self.file_name = os.path.join(
self.file_path.get(), self.file_pattern.get().format(scan_number)
)
return super().stage() return super().stage()
def unstage(self) -> List[object]: def unstage(self) -> List[object]:
signals = {"config": self.sim_state, "data": self.file_name}
msg = BECMessage.DeviceMessage(signals=signals, metadata=self.metadata)
self.device_manager.producer.set_and_publish(
MessageEndpoints.device_read(self.name), msg.dumps()
)
return super().unstage() return super().unstage()
def stop(self, *, success=False): def stop(self, *, success=False):
@ -331,7 +344,7 @@ class SynFlyer(Device, PositionerBase):
positions = np.asarray(positions) positions = np.asarray(positions)
def produce_data(device, metadata): def produce_data(device, metadata):
buffer_time = 1 buffer_time = 0.5
elapsed_time = 0 elapsed_time = 0
bundle = BECMessage.BundleMessage() bundle = BECMessage.BundleMessage()
for ii in range(num_pos): for ii in range(num_pos):

View File

@ -4,15 +4,15 @@ import time
from typing import List from typing import List
import numpy as np import numpy as np
from bec_utils import bec_logger
from ophyd import Component as Cpt from ophyd import Component as Cpt
from ophyd import Device, PositionerBase, Signal from ophyd import Device, PositionerBase, Signal
from ophyd.status import wait as status_wait from ophyd.status import wait as status_wait
from ophyd.utils import ReadOnlyError, LimitError from ophyd.utils import LimitError, ReadOnlyError
from ophyd_devices.smaract.smaract_controller import SmaractController from ophyd_devices.smaract.smaract_controller import SmaractController
from ophyd_devices.smaract.smaract_errors import SmaractCommunicationError, SmaractError from ophyd_devices.smaract.smaract_errors import SmaractCommunicationError, SmaractError
from ophyd_devices.utils.controller import threadlocked from ophyd_devices.utils.controller import threadlocked
from ophyd_devices.utils.socket import SocketIO, SocketSignal, raise_if_disconnected from ophyd_devices.utils.socket import SocketIO, SocketSignal, raise_if_disconnected
from bec_utils import bec_logger
logger = bec_logger.logger logger = bec_logger.logger
@ -273,11 +273,9 @@ class SmaractMotor(Device, PositionerBase):
return "mm" return "mm"
def stage(self) -> List[object]: def stage(self) -> List[object]:
self.controller.on()
return super().stage() return super().stage()
def unstage(self) -> List[object]: def unstage(self) -> List[object]:
self.controller.off()
return super().unstage() return super().unstage()
def stop(self, *, success=False): def stop(self, *, success=False):