removed controller.on methods from staging; improvements for detector sim
This commit is contained in:
parent
d60b58a5f5
commit
80e101a5ef
@ -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
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -1 +1 @@
|
|||||||
from .sim import SynAxisMonitor, SynAxisOPAAS, SynFlyer
|
from .sim import SynAxisMonitor, SynAxisOPAAS, SynFlyer, SynSLSDetector
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user