From bd8d081c5b4b5511624f9d2606745db0b0a5b1cc Mon Sep 17 00:00:00 2001 From: Klaus Wakonig Date: Wed, 2 Nov 2022 11:18:55 +0100 Subject: [PATCH 1/5] added beamlineinfo --- ophyd_devices/sls_devices/sls_devices.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ophyd_devices/sls_devices/sls_devices.py b/ophyd_devices/sls_devices/sls_devices.py index 930884e..aa00cc6 100644 --- a/ophyd_devices/sls_devices/sls_devices.py +++ b/ophyd_devices/sls_devices/sls_devices.py @@ -21,3 +21,22 @@ class SLSOperatorMessages(Device): # for i in range(5): # setattr(SLSOperatorMessages, f"message{i}", Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-MSG{i}", auto_monitor=True)) # setattr(SLSOperatorMessages, f"message_date{i}", Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-DATE{i}", auto_monitor=True)) + + +class BeamlineInfo(Device): + eh_t02_avg_temperature = Cpt(EpicsSignalRO, "ILUUL-02AV:TEMP", auto_monitor=True) + eh_t02_temperature_t0204_axis_16 = Cpt( + EpicsSignalRO, "ILUUL-0200-EB104:TEMP", auto_monitor=True + ) + eh_t02_temperature_t0205_axis_18 = Cpt( + EpicsSignalRO, "ILUUL-0200-EB105:TEMP", auto_monitor=True + ) + operation = Cpt(EpicsSignalRO, "ACOAU-ACCU:OP-MODE.VAL", auto_monitor=True) + injection_mode = Cpt(EpicsSignalRO, "ALIRF-GUN:INJ-MODE", auto_monitor=True) + current_threshold = Cpt(EpicsSignalRO, "ALIRF-GUN:CUR-LOWLIM", auto_monitor=True) + current_deadband = Cpt(EpicsSignalRO, "ALIRF-GUN:CUR-DBAND", auto_monitor=True) + filling_pattern = Cpt(EpicsSignalRO, "ACORF-FILL:PAT-SELECT", auto_monitor=True) + filling_life_time = Cpt(EpicsSignalRO, "ARIDI-PCT:TAU-HOUR", auto_monitor=True) + orbit_feedback_mode = Cpt(EpicsSignalRO, "ARIDI-BPM:OFB-MODE", auto_monitor=True) + fast_orbit_feedback = Cpt(EpicsSignalRO, "ARIDI-BPM:FOFBSTATUS-G", auto_monitor=True) + ring_current = Cpt(EpicsSignalRO, "ARIDI-PCT:CURRENT", auto_monitor=True) From bd7b18c1efc50206db1693de25d66eae6cac987c Mon Sep 17 00:00:00 2001 From: Klaus Wakonig Date: Wed, 2 Nov 2022 11:22:28 +0100 Subject: [PATCH 2/5] added beamlineinfo to int --- ophyd_devices/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ophyd_devices/__init__.py b/ophyd_devices/__init__.py index b88c1f3..3402f8a 100644 --- a/ophyd_devices/__init__.py +++ b/ophyd_devices/__init__.py @@ -2,5 +2,5 @@ from .galil.galil_ophyd import GalilMotor from .npoint.npoint import NPointAxis from .rt_lamni import RtLamniMotor from .sim.sim import SynAxisMonitor, SynAxisOPAAS, SynFlyer, SynSignalRO, SynSLSDetector -from .sls_devices.sls_devices import SLSOperatorMessages +from .sls_devices.sls_devices import BeamlineInfo, SLSOperatorMessages from .smaract.smaract_ophyd import SmaractMotor From bba61093300a0aecd531e3c789003834074e9b42 Mon Sep 17 00:00:00 2001 From: Klaus Wakonig Date: Fri, 11 Nov 2022 09:45:06 +0100 Subject: [PATCH 3/5] added eiger1p5M --- ophyd_devices/__init__.py | 1 + ophyd_devices/eiger1p5m_csaxs/eiger1p5m.py | 169 +++++++++++++++++++++ ophyd_devices/sim/sim.py | 1 - ophyd_devices/sls_devices/cSAXS/xeye.py | 9 ++ 4 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 ophyd_devices/eiger1p5m_csaxs/eiger1p5m.py create mode 100644 ophyd_devices/sls_devices/cSAXS/xeye.py diff --git a/ophyd_devices/__init__.py b/ophyd_devices/__init__.py index 3402f8a..05c9b20 100644 --- a/ophyd_devices/__init__.py +++ b/ophyd_devices/__init__.py @@ -1,3 +1,4 @@ +from .eiger1p5m_csaxs.eiger1p5m import Eiger1p5MDetector from .galil.galil_ophyd import GalilMotor from .npoint.npoint import NPointAxis from .rt_lamni import RtLamniMotor diff --git a/ophyd_devices/eiger1p5m_csaxs/eiger1p5m.py b/ophyd_devices/eiger1p5m_csaxs/eiger1p5m.py new file mode 100644 index 0000000..92038a4 --- /dev/null +++ b/ophyd_devices/eiger1p5m_csaxs/eiger1p5m.py @@ -0,0 +1,169 @@ +import os +import time +from typing import List + +from bec_utils import BECMessage, MessageEndpoints, bec_logger +from ophyd import Component as Cpt +from ophyd import Device, DeviceStatus, EpicsSignal, Signal + +logger = bec_logger.logger + + +class _SLSDetectorConfigSignal(Signal): + def put(self, value, *, timestamp=None, force=False): + self._readback = value + self.parent.sim_state[self.name] = value + + def get(self): + self._readback = self.parent.sim_state[self.name] + return self.parent.sim_state[self.name] + + +# if (_eigerinvac_is_on == 1) { +# tic("setup eiger in vac") +# epics_put("X12SA-ES1-DOUBLE-02",0) +# unix(sprintf("mkdir -p /sls/X12SA/data/%s/Data10/eiger_4/S%05d-%05d/S%05d",_username,int((SCAN_N+1)/1000)*1000,int((SCAN_N+1)/1000)*1000+999,SCAN_N+1)) + +# epics_put("XOMNYI-DET-OUTDIR:0.DESC",sprintf("/sls/X12SA/data/%s/Data10/eiger_4/",_username)) +# epics_put("XOMNYI-DET-OUTDIR:1.DESC",sprintf("S%05d-%05d/S%05d",int((SCAN_N+1)/1000)*1000,int((SCAN_N+1)/1000)*1000+999,SCAN_N+1)) +# epics_put("XOMNYI-DET-CYCLES:0", _lamni_scan_numberofpts) +# epics_put("XOMNYI-DET-EXPTIME:0", $2) +# epics_put("XOMNYI-DET-INDEX:0", SCAN_N+1) + +# epics_put("XOMNYI-DET-CONTROL:0.DESC", "begin") +# if(_eigerinvac_burst==0) +# { +# epics_put("XOMNYI-DET-CYCLES:0", _lamni_scan_numberofpts) +# epics_put("XOMNYI-DET-EXPTIME:0", $2) +# metadata_set("eiger_burst", "int", 1, 1) +# } +# else +# { +# metadata_set("eiger_burst", "int", 1, (int($2/0.0085))) +# epics_put("XOMNYI-DET-CYCLES:0", _lamni_scan_numberofpts*(int($2/0.0085))) +# epics_put("XOMNYI-DET-EXPTIME:0", 0.005) +# } +# global _DC_acquisition_ID +# _DC_acquisition_ID = SCAN_N+1 + + +class Eiger1p5MDetector(Device): + USER_ACCESS = [] + file_path = Cpt( + EpicsSignal, name="file_path", read_pv="XOMNYI-DET-OUTDIR:0.DESC", kind="config" + ) + detector_out_scan_dir = Cpt( + EpicsSignal, name="detector_out_scan_dir", read_pv="XOMNYI-DET-OUTDIR:1.DESC", kind="config" + ) + frames = Cpt(EpicsSignal, name="frames", read_pv="XOMNYI-DET-CYCLES:0", kind="config") + exp_time = Cpt(EpicsSignal, name="exp_time", read_pv="XOMNYI-DET-EXPTIME:0", kind="config") + index = Cpt(EpicsSignal, name="index", read_pv="XOMNYI-DET-INDEX:0", kind="config") + detector_control = Cpt( + EpicsSignal, name="detector_control", read_pv="XOMNYI-DET-CONTROL:0.DESC", kind="config" + ) + + file_pattern = Cpt(_SLSDetectorConfigSignal, name="file_pattern", value="", kind="config") + burst = Cpt(_SLSDetectorConfigSignal, name="burst", value=1, kind="config") + save_file = Cpt(_SLSDetectorConfigSignal, name="save_file", value=False, kind="config") + + 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) + self.sim_state = { + f"{self.name}_file_path": "~/Data10/data/", + f"{self.name}_file_pattern": f"{self.name}_{{:05d}}.h5", + f"{self.name}_frames": 1, + f"{self.name}_burst": 1, + f"{self.name}_save_file": False, + f"{self.name}_exp_time": 0, + } + self._stopped = False + self.file_name = "" + self.metadata = {} + 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: + msg = self.device_manager.producer.get(MessageEndpoints.scan_status()) + return BECMessage.ScanStatusMessage.loads(msg) + + def _get_scan_dir(self, scan_bundle, scan_number, leading_zeros=None): + if leading_zeros is None: + leading_zeros = len(str(scan_bundle)) + floor_dir = scan_number // scan_bundle * scan_bundle + return f"S{floor_dir:0{leading_zeros}d}-{floor_dir+scan_bundle-1:0{leading_zeros}d}/S{scan_number:0{leading_zeros}d}" + + def stage(self) -> List[object]: + scan_msg = self._get_current_scan_msg() + self.metadata = { + "scanID": scan_msg.content["scanID"], + "RID": scan_msg.content["info"]["RID"], + "queueID": scan_msg.content["info"]["queueID"], + } + scan_number = scan_msg.content["info"]["scan_number"] + exp_time = scan_msg.content["info"]["exp_time"] + + # set base path for detector output + self.file_path.set(f"/sls/X12SA/data/{self.username}/Data10/eiger_4/") + + # set scan directory (e.g. S00000-00999/S00020) + scan_dir = self._get_scan_dir(scan_bundle=1000, scan_number=scan_number, leading_zeros=5) + self.detector_out_scan_dir.set(scan_dir) + + self.file_name = os.path.join(f"/sls/X12SA/data/{self.username}/Data10/eiger_4/", scan_dir) + + # set the scan number + self.index.set(scan_number) + + # set the number of frames + self.frames.set(scan_msg.content["info"]["num_points"]) + + # set the exposure time + self.exp_time.set(exp_time) + + # send the "begin" flag to start processing the above commands + self.detector_control.set("begin") + + # wait for detector to be "armed" + logger.info("Waiting for detector setup") + while True: + det_ctrl = self.detector_control.get()["detector_control"]["value"] + if det_ctrl == "armed": + break + time.sleep(0.005) + + self.detector_control.put("acquiring") + + return super().stage() + + def unstage(self) -> List[object]: + signals = {"config": self.read_configuration(), "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() + + def stop(self, *, success=False): + self.detector_control.put("stop") + super().stop(success=success) + self._stopped = True diff --git a/ophyd_devices/sim/sim.py b/ophyd_devices/sim/sim.py index 57ec57f..b734a1a 100644 --- a/ophyd_devices/sim/sim.py +++ b/ophyd_devices/sim/sim.py @@ -271,7 +271,6 @@ class SynSLSDetector(Device): 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"] diff --git a/ophyd_devices/sls_devices/cSAXS/xeye.py b/ophyd_devices/sls_devices/cSAXS/xeye.py new file mode 100644 index 0000000..f62cc60 --- /dev/null +++ b/ophyd_devices/sls_devices/cSAXS/xeye.py @@ -0,0 +1,9 @@ +from ophyd import Component as Cpt +from ophyd import Device, EpicsSignal + + +class Xeye(Device): + save_frame = Cpt(EpicsSignal, "XOMNY-XEYE-SAVEFRAME:0") + acquisition_done = Cpt(EpicsSignal, "XOMNY-XEYE-ACQDONE:0") + acquisition = Cpt(EpicsSignal, "XOMNY-XEYE-ACQ:0") + x_width = Cpt(EpicsSignal, "XOMNY-XEYE-XWIDTH_X:0") From 7b221ea9794ac6079e3392c55ad8b8c0c0605b8e Mon Sep 17 00:00:00 2001 From: e20588 Date: Fri, 11 Nov 2022 11:34:15 +0100 Subject: [PATCH 4/5] online_changes --- ophyd_devices/eiger1p5m_csaxs/eiger1p5m.py | 66 +++++++++++----------- ophyd_devices/rt_lamni/rt_lamni_ophyd.py | 15 ++++- 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/ophyd_devices/eiger1p5m_csaxs/eiger1p5m.py b/ophyd_devices/eiger1p5m_csaxs/eiger1p5m.py index 92038a4..ba0ebfd 100644 --- a/ophyd_devices/eiger1p5m_csaxs/eiger1p5m.py +++ b/ophyd_devices/eiger1p5m_csaxs/eiger1p5m.py @@ -4,7 +4,7 @@ from typing import List from bec_utils import BECMessage, MessageEndpoints, bec_logger 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 @@ -49,22 +49,21 @@ class _SLSDetectorConfigSignal(Signal): class Eiger1p5MDetector(Device): USER_ACCESS = [] - file_path = Cpt( - EpicsSignal, name="file_path", read_pv="XOMNYI-DET-OUTDIR:0.DESC", kind="config" - ) + file_path = Cpt(EpicsSignal, name="file_path", read_pv="XOMNYI-DET-OUTDIR:0.DESC") 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") - exp_time = Cpt(EpicsSignal, name="exp_time", read_pv="XOMNYI-DET-EXPTIME:0", kind="config") - index = Cpt(EpicsSignal, name="index", read_pv="XOMNYI-DET-INDEX: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") + index = Cpt(EpicsSignal, name="index", read_pv="XOMNYI-DET-INDEX:0") 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") - burst = Cpt(_SLSDetectorConfigSignal, name="burst", value=1, kind="config") - save_file = Cpt(_SLSDetectorConfigSignal, name="save_file", value=False, kind="config") + file_pattern = Cpt(_SLSDetectorConfigSignal, name="file_pattern", value="") + burst = Cpt(_SLSDetectorConfigSignal, name="burst", value=1) + save_file = Cpt(_SLSDetectorConfigSignal, name="save_file", value=False) def __init__(self, *, name, kind=None, parent=None, device_manager=None, **kwargs): self.device_manager = device_manager @@ -82,26 +81,6 @@ class Eiger1p5MDetector(Device): self.metadata = {} 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: msg = self.device_manager.producer.get(MessageEndpoints.scan_status()) return BECMessage.ScanStatusMessage.loads(msg) @@ -146,7 +125,7 @@ class Eiger1p5MDetector(Device): # wait for detector to be "armed" logger.info("Waiting for detector setup") while True: - det_ctrl = self.detector_control.get()["detector_control"]["value"] + det_ctrl = self.detector_control.get() if det_ctrl == "armed": break time.sleep(0.005) @@ -156,7 +135,21 @@ class Eiger1p5MDetector(Device): return super().stage() 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) self.device_manager.producer.set_and_publish( MessageEndpoints.device_read(self.name), msg.dumps() @@ -167,3 +160,8 @@ class Eiger1p5MDetector(Device): self.detector_control.put("stop") super().stop(success=success) self._stopped = True + + +if __name__ == "__main__": + eiger = Eiger1p5MDetector(name="eiger1p5m", label="eiger1p5m") + breakpoint() diff --git a/ophyd_devices/rt_lamni/rt_lamni_ophyd.py b/ophyd_devices/rt_lamni/rt_lamni_ophyd.py index e878401..5e1d752 100644 --- a/ophyd_devices/rt_lamni/rt_lamni_ophyd.py +++ b/ophyd_devices/rt_lamni/rt_lamni_ophyd.py @@ -450,9 +450,18 @@ class RtLamniController(Controller): ) time.sleep(0.03) - # needs to be changed to configurable center psoition - self.get_device_manager().devices.lsamx.obj.move(8.866, wait=True) - self.get_device_manager().devices.lsamy.obj.move(10.18, wait=True) + + lsamx_user_params = self.get_device_manager().devices.lsamx.user_parameter + 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") _waitforfeedbackctr = 0 From c7cabc3eeb41d0ded3c5b05e4de3941437f857d0 Mon Sep 17 00:00:00 2001 From: e20588 Date: Fri, 11 Nov 2022 18:07:23 +0100 Subject: [PATCH 5/5] cleanup --- ophyd_devices/__init__.py | 2 +- ophyd_devices/sls_devices/sls_devices.py | 44 +++++++++--------------- 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/ophyd_devices/__init__.py b/ophyd_devices/__init__.py index 05c9b20..d67e40f 100644 --- a/ophyd_devices/__init__.py +++ b/ophyd_devices/__init__.py @@ -3,5 +3,5 @@ from .galil.galil_ophyd import GalilMotor from .npoint.npoint import NPointAxis from .rt_lamni import RtLamniMotor from .sim.sim import SynAxisMonitor, SynAxisOPAAS, SynFlyer, SynSignalRO, SynSLSDetector -from .sls_devices.sls_devices import BeamlineInfo, SLSOperatorMessages +from .sls_devices.sls_devices import SLSInfo, SLSOperatorMessages from .smaract.smaract_ophyd import SmaractMotor diff --git a/ophyd_devices/sls_devices/sls_devices.py b/ophyd_devices/sls_devices/sls_devices.py index aa00cc6..3bbd103 100644 --- a/ophyd_devices/sls_devices/sls_devices.py +++ b/ophyd_devices/sls_devices/sls_devices.py @@ -1,36 +1,24 @@ -from ophyd import Component as Cpt +from ophyd import Component as Cpt, DynamicDeviceComponent as Dcpt from ophyd import Device, EpicsSignalRO class SLSOperatorMessages(Device): - message1 = Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-MSG1", auto_monitor=True) - message_date1 = Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-DATE1", auto_monitor=True) - message2 = Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-MSG2", auto_monitor=True) - message_date2 = Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-DATE2", auto_monitor=True) - message3 = Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-MSG3", auto_monitor=True) - message_date3 = Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-DATE3", auto_monitor=True) - message4 = Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-MSG4", auto_monitor=True) - message_date4 = Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-DATE4", auto_monitor=True) - message5 = Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-MSG5", auto_monitor=True) - message_date5 = Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-DATE5", auto_monitor=True) + messages_info = { + f"message{i}": (EpicsSignalRO, f"ACOAU-ACCU:OP-MSG{i}", {}) for i in range(1, 6) + } + messages = Dcpt(messages_info) + date_info = {f"message{i}": (EpicsSignalRO, f"ACOAU-ACCU:OP-DATE{i}", {}) for i in range(1, 6)} + date = Dcpt(date_info) -# class SLSOperatorMessages(Device): -# pass - -# for i in range(5): -# setattr(SLSOperatorMessages, f"message{i}", Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-MSG{i}", auto_monitor=True)) -# setattr(SLSOperatorMessages, f"message_date{i}", Cpt(EpicsSignalRO, f"ACOAU-ACCU:OP-DATE{i}", auto_monitor=True)) - - -class BeamlineInfo(Device): - eh_t02_avg_temperature = Cpt(EpicsSignalRO, "ILUUL-02AV:TEMP", auto_monitor=True) - eh_t02_temperature_t0204_axis_16 = Cpt( - EpicsSignalRO, "ILUUL-0200-EB104:TEMP", auto_monitor=True - ) - eh_t02_temperature_t0205_axis_18 = Cpt( - EpicsSignalRO, "ILUUL-0200-EB105:TEMP", auto_monitor=True - ) +class SLSInfo(Device): + # eh_t02_avg_temperature = Cpt(EpicsSignalRO, "ILUUL-02AV:TEMP", auto_monitor=True) + # eh_t02_temperature_t0204_axis_16 = Cpt( + # EpicsSignalRO, "ILUUL-0200-EB104:TEMP", auto_monitor=True + # ) + # eh_t02_temperature_t0205_axis_18 = Cpt( + # EpicsSignalRO, "ILUUL-0200-EB105:TEMP", auto_monitor=True + # ) operation = Cpt(EpicsSignalRO, "ACOAU-ACCU:OP-MODE.VAL", auto_monitor=True) injection_mode = Cpt(EpicsSignalRO, "ALIRF-GUN:INJ-MODE", auto_monitor=True) current_threshold = Cpt(EpicsSignalRO, "ALIRF-GUN:CUR-LOWLIM", auto_monitor=True) @@ -40,3 +28,5 @@ class BeamlineInfo(Device): orbit_feedback_mode = Cpt(EpicsSignalRO, "ARIDI-BPM:OFB-MODE", auto_monitor=True) fast_orbit_feedback = Cpt(EpicsSignalRO, "ARIDI-BPM:FOFBSTATUS-G", auto_monitor=True) ring_current = Cpt(EpicsSignalRO, "ARIDI-PCT:CURRENT", auto_monitor=True) + machine_status = Cpt(EpicsSignalRO, "ACOAU-ACCU:OP-MODE", auto_monitor=True) + crane_usage = Cpt(EpicsSignalRO, "IBWKR-0101-QH10003:D01_H_D-WA", auto_monitor=True)