From f332e0624062cbddec2843a8670017ff85d09089 Mon Sep 17 00:00:00 2001 From: gac-x12sa Date: Fri, 11 Jul 2025 15:46:44 +0200 Subject: [PATCH 1/4] feat:add frontend xbpm and slit motors to device config --- csaxs_bec/device_configs/frontend.yaml | 86 +++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/csaxs_bec/device_configs/frontend.yaml b/csaxs_bec/device_configs/frontend.yaml index 0dbb490..a03e2f8 100644 --- a/csaxs_bec/device_configs/frontend.yaml +++ b/csaxs_bec/device_configs/frontend.yaml @@ -7,4 +7,88 @@ idgap: enabled: true readoutPriority: baseline readOnly: true # put to false if you like to move it - softwareTrigger: false \ No newline at end of file + softwareTrigger: false + +xbpm1x: + description: 'X-ray BPM1 in frontend translation x' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X12SA-FE-XBPM1:TRX' + onFailure: raise + enabled: true + readoutPriority: baseline + readOnly: false + softwareTrigger: false + deviceTags: + - cSAXS + - frontend + +xbpm1y: + description: 'X-ray BPM1 in frontend translation y' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X12SA-FE-XBPM1:TRY' + onFailure: raise + enabled: true + readoutPriority: baseline + readOnly: false + softwareTrigger: false + deviceTags: + - cSAXS + - frontend + +sl1xr: + description: 'slit 1 (frontend) x ring' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X12SA-FE-SLDI1:TRXR' + onFailure: raise + enabled: true + readoutPriority: baseline + readOnly: false + softwareTrigger: false + deviceTags: + - cSAXS + - frontend + +sl1xw: + description: 'slit 1 (frontend) x wall' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X12SA-FE-SLDI1:TRXW' + onFailure: raise + enabled: true + readoutPriority: baseline + readOnly: false + softwareTrigger: false + deviceTags: + - cSAXS + - frontend + +sl1yb: + description: 'slit 1 (frontend) y bottom' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X12SA-FE-SLDI1:TRYB' + onFailure: raise + enabled: true + readoutPriority: baseline + readOnly: false + softwareTrigger: false + deviceTags: + - cSAXS + - frontend + +sl1yt: + description: 'slit 1 (frontend) y top' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X12SA-FE-SLDI1:TRYT' + onFailure: raise + enabled: true + readoutPriority: baseline + readOnly: false + softwareTrigger: false + deviceTags: + - cSAXS + - frontend \ No newline at end of file -- 2.49.1 From a4aa1da5ddc51e501703dc30ab4cecce58263d27 Mon Sep 17 00:00:00 2001 From: gac-x12sa Date: Tue, 15 Jul 2025 15:31:52 +0200 Subject: [PATCH 2/4] add xbpm1 current monitors and fix X12SA-UIND in idgap --- csaxs_bec/device_configs/frontend.yaml | 48 ++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/csaxs_bec/device_configs/frontend.yaml b/csaxs_bec/device_configs/frontend.yaml index a03e2f8..ea25451 100644 --- a/csaxs_bec/device_configs/frontend.yaml +++ b/csaxs_bec/device_configs/frontend.yaml @@ -2,7 +2,7 @@ idgap: description: 'Motor to control the IDGap of X12SA' deviceClass: ophyd_devices.devices.undulator.UndulatorGap deviceConfig: - prefix: 'X10SA-UIND:' + prefix: 'X12SA-UIND:' onFailure: raise # Consider changing to buffer enabled: true readoutPriority: baseline @@ -91,4 +91,48 @@ sl1yt: softwareTrigger: false deviceTags: - cSAXS - - frontend \ No newline at end of file + - frontend + +xbpm1c1: + description: 'XBPM1 (frontend) current 1' + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + read_pv: 'X12SA-FE-XBPM1:Current1:MeanValue_RBV' + onFailure: raise + enabled: true + readoutPriority: monitored + readOnly: true + softwareTrigger: false + +xbpm1c2: + description: 'XBPM1 (frontend) current 2' + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + read_pv: 'X12SA-FE-XBPM1:Current2:MeanValue_RBV' + onFailure: raise + enabled: true + readoutPriority: monitored + readOnly: true + softwareTrigger: false + +xbpm1c3: + description: 'XBPM1 (frontend) current 3' + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + read_pv: 'X12SA-FE-XBPM1:Current3:MeanValue_RBV' + onFailure: raise + enabled: true + readoutPriority: monitored + readOnly: true + softwareTrigger: false + +xbpm1c4: + description: 'XBPM1 (frontend) current 4' + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + read_pv: 'X12SA-FE-XBPM1:Current4:MeanValue_RBV' + onFailure: raise + enabled: true + readoutPriority: monitored + readOnly: true + softwareTrigger: false \ No newline at end of file -- 2.49.1 From 53d1798c84fc6de4c36ac5b9193ba124de739ece Mon Sep 17 00:00:00 2001 From: gac-x12sa Date: Tue, 15 Jul 2025 16:56:01 +0200 Subject: [PATCH 3/4] feat: added xbpm device and added in config --- csaxs_bec/device_configs/frontend.yaml | 11 ++++ csaxs_bec/devices/epics/xbpms.py | 78 ++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 csaxs_bec/devices/epics/xbpms.py diff --git a/csaxs_bec/device_configs/frontend.yaml b/csaxs_bec/device_configs/frontend.yaml index ea25451..be8936f 100644 --- a/csaxs_bec/device_configs/frontend.yaml +++ b/csaxs_bec/device_configs/frontend.yaml @@ -135,4 +135,15 @@ xbpm1c4: enabled: true readoutPriority: monitored readOnly: true + softwareTrigger: false + +xbpm1: + description: 'XBPM1 (frontend)' + deviceClass: csaxs_bec.devices.epics.xbpms.BPMDevice + deviceConfig: + prefix: 'X12SA-FE-XBPM1' + onFailure: raise + enabled: true + readoutPriority: monitored + readOnly: true softwareTrigger: false \ No newline at end of file diff --git a/csaxs_bec/devices/epics/xbpms.py b/csaxs_bec/devices/epics/xbpms.py new file mode 100644 index 0000000..27e5927 --- /dev/null +++ b/csaxs_bec/devices/epics/xbpms.py @@ -0,0 +1,78 @@ +from ophyd import Signal, Device, EpicsSignalRO +from ophyd import Component as Cpt + +class SumSignal(Signal): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._metadata.update(write_access=False) + + def wait_for_connection(self, timeout=0): + super().wait_for_connection(timeout) + self._metadata.update(connected=True) + + def get(self, **kwargs): + val1 = self.parent.current1.get() + val2 = self.parent.current2.get() + val3 = self.parent.current3.get() + val4 = self.parent.current4.get() + return val1 + val2 + val3 + val4 + + def describe(self): + desc = { + "shape": [], + "dtype": "number", + "source": "PV: {} / {}".format(self.parent.current1.pvname, self.parent.current1.pvname), + "units": "", + "precision": self.parent.current1.precision, + } + return desc + +class DiffXYSignal(Signal): + def __init__(self, sum1, sum2, *args, **kwargs): + self.sum1 = sum1 + self.sum2 = sum2 + super().__init__(*args, **kwargs) + self._metadata.update(write_access=False) + + def wait_for_connection(self, timeout=0): + super().wait_for_connection(timeout) + self._metadata.update(connected=True) + + def get(self, **kwargs): + summed_1 = 0 + summed_2 = 0 + for signal in self.sum1: + summed_1 += getattr(self.parent, signal).get() + for signal in self.sum2: + summed_2 += getattr(self.parent, signal).get() + + return summed_1 - summed_2 + + def describe(self): + desc = { + "shape": [], + "dtype": "number", + "source": "PV: {} / {}".format(self.parent.current1.pvname, self.parent.current1.pvname), + "units": "", + "precision": self.parent.current1.precision, + } + return desc + +class BPMDevice(Device): + current1 = Cpt(EpicsSignalRO, ":Current1:MeanValue_RBV", kind="normal") + current2 = Cpt(EpicsSignalRO, ":Current2:MeanValue_RBV", kind="normal") + current3 = Cpt(EpicsSignalRO, ":Current3:MeanValue_RBV", kind="normal") + current4 = Cpt(EpicsSignalRO, ":Current4:MeanValue_RBV", kind="normal") + sum = Cpt(SumSignal, kind="hinted") + x = Cpt(DiffXYSignal, sum1=["current1", "current2"], sum2=["current3", "current4"]) + y = Cpt(DiffXYSignal, sum1=["current1", "current3"], sum2=["current2", "current4"]) + + def __init__(self, prefix="", *args, **kwargs): + super().__init__(*args, prefix=prefix, **kwargs) + + + +if __name__ == "__main__": + dev = BPMDevice(name="bpm", prefix='X12SA-FE-XBPM1') + dev.wait_for_connection() + print(dev.read()) \ No newline at end of file -- 2.49.1 From 44a4dfc81890f28e4a3ab5388de0b55e005d95f3 Mon Sep 17 00:00:00 2001 From: gac-x12sa Date: Tue, 15 Jul 2025 17:02:26 +0200 Subject: [PATCH 4/4] add comments to mark devices as deprecated --- csaxs_bec/device_configs/frontend.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/csaxs_bec/device_configs/frontend.yaml b/csaxs_bec/device_configs/frontend.yaml index be8936f..5b86b5a 100644 --- a/csaxs_bec/device_configs/frontend.yaml +++ b/csaxs_bec/device_configs/frontend.yaml @@ -93,6 +93,14 @@ sl1yt: - cSAXS - frontend + +##################################### +#### XBPM ########################### +##################################### + +# Note: The following device may not be relevant anymore +# and can be fully replaced by the combined device "xbpm1", see below + xbpm1c1: description: 'XBPM1 (frontend) current 1' deviceClass: ophyd.EpicsSignalRO @@ -137,6 +145,10 @@ xbpm1c4: readOnly: true softwareTrigger: false +############################################ +######### End of xbpm sub devices ########## +############################################ + xbpm1: description: 'XBPM1 (frontend)' deviceClass: csaxs_bec.devices.epics.xbpms.BPMDevice -- 2.49.1