mirror of
https://github.com/bec-project/ophyd_devices.git
synced 2025-07-13 04:01:52 +02:00
online_changes
This commit is contained in:
@ -4,7 +4,7 @@ from typing import List
|
|||||||
|
|
||||||
from bec_utils import BECMessage, MessageEndpoints, bec_logger
|
from bec_utils import BECMessage, MessageEndpoints, bec_logger
|
||||||
from ophyd import Component as Cpt
|
from ophyd import Component as Cpt
|
||||||
from ophyd import Device, DeviceStatus, EpicsSignal, Signal
|
from ophyd import Device, DeviceStatus, EpicsSignal, Signal, EpicsSignalRO
|
||||||
|
|
||||||
logger = bec_logger.logger
|
logger = bec_logger.logger
|
||||||
|
|
||||||
@ -49,22 +49,21 @@ class _SLSDetectorConfigSignal(Signal):
|
|||||||
|
|
||||||
class Eiger1p5MDetector(Device):
|
class Eiger1p5MDetector(Device):
|
||||||
USER_ACCESS = []
|
USER_ACCESS = []
|
||||||
file_path = Cpt(
|
file_path = Cpt(EpicsSignal, name="file_path", read_pv="XOMNYI-DET-OUTDIR:0.DESC")
|
||||||
EpicsSignal, name="file_path", read_pv="XOMNYI-DET-OUTDIR:0.DESC", kind="config"
|
|
||||||
)
|
|
||||||
detector_out_scan_dir = Cpt(
|
detector_out_scan_dir = Cpt(
|
||||||
EpicsSignal, name="detector_out_scan_dir", read_pv="XOMNYI-DET-OUTDIR:1.DESC", kind="config"
|
EpicsSignal, name="detector_out_scan_dir", read_pv="XOMNYI-DET-OUTDIR:1.DESC"
|
||||||
)
|
)
|
||||||
frames = Cpt(EpicsSignal, name="frames", read_pv="XOMNYI-DET-CYCLES:0", kind="config")
|
frames = Cpt(EpicsSignal, name="frames", read_pv="XOMNYI-DET-CYCLES:0")
|
||||||
exp_time = Cpt(EpicsSignal, name="exp_time", read_pv="XOMNYI-DET-EXPTIME:0", kind="config")
|
exp_time = Cpt(EpicsSignal, name="exp_time", read_pv="XOMNYI-DET-EXPTIME:0")
|
||||||
index = Cpt(EpicsSignal, name="index", read_pv="XOMNYI-DET-INDEX:0", kind="config")
|
index = Cpt(EpicsSignal, name="index", read_pv="XOMNYI-DET-INDEX:0")
|
||||||
detector_control = Cpt(
|
detector_control = Cpt(
|
||||||
EpicsSignal, name="detector_control", read_pv="XOMNYI-DET-CONTROL:0.DESC", kind="config"
|
EpicsSignal, name="detector_control", read_pv="XOMNYI-DET-CONTROL:0.DESC"
|
||||||
)
|
)
|
||||||
|
framescaught = Cpt(EpicsSignalRO, name="framescaught", read_pv="XOMNYI-DET-CONTROL:0.VAL")
|
||||||
|
|
||||||
file_pattern = Cpt(_SLSDetectorConfigSignal, name="file_pattern", value="", kind="config")
|
file_pattern = Cpt(_SLSDetectorConfigSignal, name="file_pattern", value="")
|
||||||
burst = Cpt(_SLSDetectorConfigSignal, name="burst", value=1, kind="config")
|
burst = Cpt(_SLSDetectorConfigSignal, name="burst", value=1)
|
||||||
save_file = Cpt(_SLSDetectorConfigSignal, name="save_file", value=False, kind="config")
|
save_file = Cpt(_SLSDetectorConfigSignal, name="save_file", value=False)
|
||||||
|
|
||||||
def __init__(self, *, name, kind=None, parent=None, device_manager=None, **kwargs):
|
def __init__(self, *, name, kind=None, parent=None, device_manager=None, **kwargs):
|
||||||
self.device_manager = device_manager
|
self.device_manager = device_manager
|
||||||
@ -82,26 +81,6 @@ class Eiger1p5MDetector(Device):
|
|||||||
self.metadata = {}
|
self.metadata = {}
|
||||||
self.username = "e20588" # TODO get from config
|
self.username = "e20588" # TODO get from config
|
||||||
|
|
||||||
def trigger(self):
|
|
||||||
status = DeviceStatus(self)
|
|
||||||
|
|
||||||
self.subscribe(status._finished, event_type=self.SUB_ACQ_DONE, run=False)
|
|
||||||
|
|
||||||
# def acquire():
|
|
||||||
# try:
|
|
||||||
# for _ in range(self.burst.get()):
|
|
||||||
# ttime.sleep(self.exp_time.get())
|
|
||||||
# if self._stopped:
|
|
||||||
# raise DeviceStop
|
|
||||||
# except DeviceStop:
|
|
||||||
# pass
|
|
||||||
# finally:
|
|
||||||
# self._stopped = False
|
|
||||||
# self._done_acquiring()
|
|
||||||
|
|
||||||
# threading.Thread(target=acquire, daemon=True).start()
|
|
||||||
return status
|
|
||||||
|
|
||||||
def _get_current_scan_msg(self) -> BECMessage.ScanStatusMessage:
|
def _get_current_scan_msg(self) -> BECMessage.ScanStatusMessage:
|
||||||
msg = self.device_manager.producer.get(MessageEndpoints.scan_status())
|
msg = self.device_manager.producer.get(MessageEndpoints.scan_status())
|
||||||
return BECMessage.ScanStatusMessage.loads(msg)
|
return BECMessage.ScanStatusMessage.loads(msg)
|
||||||
@ -146,7 +125,7 @@ class Eiger1p5MDetector(Device):
|
|||||||
# wait for detector to be "armed"
|
# wait for detector to be "armed"
|
||||||
logger.info("Waiting for detector setup")
|
logger.info("Waiting for detector setup")
|
||||||
while True:
|
while True:
|
||||||
det_ctrl = self.detector_control.get()["detector_control"]["value"]
|
det_ctrl = self.detector_control.get()
|
||||||
if det_ctrl == "armed":
|
if det_ctrl == "armed":
|
||||||
break
|
break
|
||||||
time.sleep(0.005)
|
time.sleep(0.005)
|
||||||
@ -156,7 +135,21 @@ class Eiger1p5MDetector(Device):
|
|||||||
return super().stage()
|
return super().stage()
|
||||||
|
|
||||||
def unstage(self) -> List[object]:
|
def unstage(self) -> List[object]:
|
||||||
signals = {"config": self.read_configuration(), "data": self.file_name}
|
time_waited = 0
|
||||||
|
sleep_time = 0.2
|
||||||
|
framesexpected = self.frames.get()
|
||||||
|
while True:
|
||||||
|
framescaught = self.framescaught.get()
|
||||||
|
if self.framescaught.get() < framesexpected:
|
||||||
|
logger.info(
|
||||||
|
f"Waiting for frames: Transferred {framescaught} out of {framesexpected}"
|
||||||
|
)
|
||||||
|
time_waited += sleep_time
|
||||||
|
time.sleep(sleep_time)
|
||||||
|
continue
|
||||||
|
break
|
||||||
|
self.detector_control.put("stop")
|
||||||
|
signals = {"config": self.read(), "data": self.file_name}
|
||||||
msg = BECMessage.DeviceMessage(signals=signals, metadata=self.metadata)
|
msg = BECMessage.DeviceMessage(signals=signals, metadata=self.metadata)
|
||||||
self.device_manager.producer.set_and_publish(
|
self.device_manager.producer.set_and_publish(
|
||||||
MessageEndpoints.device_read(self.name), msg.dumps()
|
MessageEndpoints.device_read(self.name), msg.dumps()
|
||||||
@ -167,3 +160,8 @@ class Eiger1p5MDetector(Device):
|
|||||||
self.detector_control.put("stop")
|
self.detector_control.put("stop")
|
||||||
super().stop(success=success)
|
super().stop(success=success)
|
||||||
self._stopped = True
|
self._stopped = True
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
eiger = Eiger1p5MDetector(name="eiger1p5m", label="eiger1p5m")
|
||||||
|
breakpoint()
|
||||||
|
@ -450,9 +450,18 @@ class RtLamniController(Controller):
|
|||||||
)
|
)
|
||||||
|
|
||||||
time.sleep(0.03)
|
time.sleep(0.03)
|
||||||
# needs to be changed to configurable center psoition
|
|
||||||
self.get_device_manager().devices.lsamx.obj.move(8.866, wait=True)
|
lsamx_user_params = self.get_device_manager().devices.lsamx.user_parameter
|
||||||
self.get_device_manager().devices.lsamy.obj.move(10.18, wait=True)
|
if lsamx_user_params is None or lsamx_user_params.get("center") is None:
|
||||||
|
raise RuntimeError("lsamx center is not defined")
|
||||||
|
lsamy_user_params = self.get_device_manager().devices.lsamy.user_parameter
|
||||||
|
if lsamy_user_params is None or lsamy_user_params.get("center") is None:
|
||||||
|
raise RuntimeError("lsamy center is not defined")
|
||||||
|
lsamx_center = lsamx_user_params.get("center")
|
||||||
|
lsamy_center = lsamy_user_params.get("center")
|
||||||
|
|
||||||
|
self.get_device_manager().devices.lsamx.obj.move(lsamx_center, wait=True)
|
||||||
|
self.get_device_manager().devices.lsamy.obj.move(lsamy_center, wait=True)
|
||||||
self.socket_put("J1")
|
self.socket_put("J1")
|
||||||
|
|
||||||
_waitforfeedbackctr = 0
|
_waitforfeedbackctr = 0
|
||||||
|
Reference in New Issue
Block a user