From 0467e857df937f283aa9ce4e7f4a3c226fa28927 Mon Sep 17 00:00:00 2001 From: x10sa Date: Thu, 19 Feb 2026 12:04:50 +0100 Subject: [PATCH] updates to PV names and collision protection --- .../device_configs/pxii-autogenerated.yaml | 2488 ++++++++--------- pxii_bec/macros/pxii_energy.py | 1 + pxii_bec/macros/pxii_guards.py | 280 ++ pxii_bec/macros/pxii_parameters.py | 168 +- pxii_bec/macros/update_PD_from_yaml.py | 59 + 5 files changed, 1586 insertions(+), 1410 deletions(-) create mode 100644 pxii_bec/macros/pxii_guards.py create mode 100644 pxii_bec/macros/update_PD_from_yaml.py diff --git a/pxii_bec/device_configs/pxii-autogenerated.yaml b/pxii_bec/device_configs/pxii-autogenerated.yaml index e5078d6..b6ae89b 100644 --- a/pxii_bec/device_configs/pxii-autogenerated.yaml +++ b/pxii_bec/device_configs/pxii-autogenerated.yaml @@ -1,1934 +1,1918 @@ sls_current: description: SLS current deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: ARS07-DPCT-0100:CURR - auto_monitor: true + deviceConfig: {read_pv: 'ARS07-DPCT-0100:CURR', auto_monitor: true} onFailure: buffer - enabled: true + enabled: True readoutPriority: monitored deviceTags: - - SLS - readOnly: true + - SLS + readOnly: True softwareTrigger: false + fe_bpm1: description: FE XBPM Signal 1 deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-FE-XBPM1:Current1:MeanValue_RBV - auto_monitor: true + deviceConfig: {read_pv: 'X10SA-FE-XBPM1:Current1:MeanValue_RBV', auto_monitor: true} onFailure: buffer - enabled: true + enabled: True readoutPriority: monitored deviceTags: - - bpm - readOnly: true + - bpm + readOnly: True softwareTrigger: false + fe_bpm2: description: FE XBPM Signal 2 deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-FE-XBPM1:Current2:MeanValue_RBV - auto_monitor: true + deviceConfig: {read_pv: 'X10SA-FE-XBPM1:Current2:MeanValue_RBV', auto_monitor: true} onFailure: buffer - enabled: true + enabled: True readoutPriority: monitored deviceTags: - - bpm - readOnly: true + - bpm + readOnly: True softwareTrigger: false + fe_bpm3: description: FE XBPM Signal 3 deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-FE-XBPM1:Current3:MeanValue_RBV - auto_monitor: true + deviceConfig: {read_pv: 'X10SA-FE-XBPM1:Current3:MeanValue_RBV', auto_monitor: true} onFailure: buffer - enabled: true + enabled: True readoutPriority: monitored deviceTags: - - bpm - readOnly: true + - bpm + readOnly: True softwareTrigger: false + fe_bpm4: description: FE XBPM Signal 4 deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-FE-XBPM1:Current4:MeanValue_RBV - auto_monitor: true + deviceConfig: {read_pv: 'X10SA-FE-XBPM1:Current4:MeanValue_RBV', auto_monitor: true} onFailure: buffer - enabled: true + enabled: True readoutPriority: monitored deviceTags: - - bpm - readOnly: true + - bpm + readOnly: True softwareTrigger: false + fe_bpmsum: description: FE XBPM Summed deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-FE-XBPM1:SumAll:MeanValue_RBV - auto_monitor: true + deviceConfig: {read_pv: 'X10SA-FE-XBPM1:SumAll:MeanValue_RBV', auto_monitor: true} onFailure: buffer - enabled: true + enabled: True readoutPriority: monitored deviceTags: - - bpm - readOnly: true - softwareTrigger: false -lu_bpm1: - description: LU BPM Signal 1 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-OP-LUBPM:Current1:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -lu_bpm2: - description: LU BPM Signal 2 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-OP-LUBPM:Current2:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -lu_bpm3: - description: LU BPM Signal 3 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-OP-LUBPM:Current3:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -lu_bpm4: - description: LU BPM Signal 4 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-OP-LUBPM:Current4:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -lu_bpmsum: - description: LU BPM Summed - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-OP-LUBPM:SumAll:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -bsc_bpm1: - description: BSC BPM Signal 1 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-SSBPM1:Current1:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -bsc_bpm2: - description: BSC BPM Signal 2 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-SSBPM1:Current2:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -bsc_bpm3: - description: BSC BPM Signal 3 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-SSBPM1:Current3:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -bsc_bpm4: - description: BSC BPM Signal 4 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-SSBPM1:Current4:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -bsc_bpmsum: - description: BSC BPM Summed - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-SSBPM1:SumAll:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -bcu_bpm1: - description: BCU BPM Signal 1 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-ESBPM1:Current1:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -bcu_bpm2: - description: BCU BPM Signal 2 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-ESBPM1:Current2:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -bcu_bpm3: - description: BCU BPM Signal 3 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-ESBPM1:Current3:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -bcu_bpm4: - description: BCU BPM Signal 4 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-ESBPM1:Current4:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -bcu_bpmsum: - description: BCU BPM Summed - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-ESBPM1:SumAll:MeanValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -i1: - description: i1 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-KBOX_K:READOUT - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -i2: - description: i2 - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-XEYE_K:READOUT - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bpm - readOnly: true - softwareTrigger: false -samcam_x: - description: sample cam X - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-SAMCAM:Stats5:CentroidX_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - scam - readOnly: true - softwareTrigger: false -samcam_xsig: - description: sample cam X sigma - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-SAMCAM:Stats5:SigmaX_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - scam - readOnly: true - softwareTrigger: false -samcam_y: - description: sample cam Y - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-SAMCAM:Stats5:CentroidY_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - scam - readOnly: true - softwareTrigger: false -samcam_ysig: - description: sample cam Y sigma - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-SAMCAM:Stats5:SigmaY_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - scam - readOnly: true - softwareTrigger: false -samcam_max: - description: sample cam max value - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-SAMCAM:Stats5:MaxValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - scam - readOnly: true - softwareTrigger: false -samcam_exp: - description: sample cam exp time - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-SAMCAM:cam1:AcquireTime - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - scam - readOnly: false - softwareTrigger: false -samcam_gain: - description: sample cam gain - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-SAMCAM:cam1:Gain - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - scam - readOnly: false - softwareTrigger: false -bsccam_x: - description: BSC cam X - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-SSCAM:Stats5:CentroidX_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - bsc - readOnly: true - softwareTrigger: false -bsccam_y: - description: BSC cam Y - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-SSCAM:Stats5:CentroidY_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - bsc - readOnly: true - softwareTrigger: false -bsccam_max: - description: BSC cam max value - deviceClass: ophyd.EpicsSignalRO - deviceConfig: - read_pv: X10SA-ES-SSCAM:Stats5:MaxValue_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: monitored - deviceTags: - - bsc - readOnly: true - softwareTrigger: false -bsccam_exp: - description: BSC camera exposure - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-ES-SSCAM:cam1:AcquireTime - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - bsc - readOnly: false - softwareTrigger: false -bsccam_gain: - description: BSC camera gain - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-ES-SSCAM:cam1:Gain - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - bsc - readOnly: false - softwareTrigger: false -bsccam_xsig: - description: BSC cam x sigma - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-ES-SSCAM:Stats5:SigmaX_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - bsc - readOnly: true - softwareTrigger: false -bsccam_ysig: - description: BSC can y sigma - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-ES-SSCAM:Stats5:SigmaY_RBV - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - bsc - readOnly: true - softwareTrigger: false -cryo_pos: - description: Cryojet in/out - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-ES-CJ:POS-SET - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - se - readOnly: false - softwareTrigger: false -xrf_pos: - description: XRF det in/out - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-ES-KETEK:POS-SET - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - se - readOnly: false - softwareTrigger: false -bs_pos: - description: Beamstop positioner - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-ES-BS:POS-SET - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - se - readOnly: false - softwareTrigger: false - userParameter: - in: 1 - out: 0 -blight_pos: - description: Backlight positioner - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-ES-BL:POS-SET - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - se - readOnly: false - softwareTrigger: false - userParameter: - in: 1 - out: 0 -blight: - description: Backlight brightness - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-ES-BL:SET - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - se - readOnly: false - softwareTrigger: false -flight: - description: Frontlight brightness - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-ES-FL:SET - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - se - readOnly: false - softwareTrigger: false -det_cov: - description: Detector cover - deviceClass: ophyd.EpicsSignal - deviceConfig: - read_pv: X10SA-ES-DETCOV:SET - auto_monitor: true - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - det - readOnly: false + - bpm + readOnly: True softwareTrigger: false + fe_bpm_x: description: FE BPM X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-FE-XBPM1:TRX + deviceConfig: {prefix: 'X10SA-FE-XBPM1:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - fe - readOnly: false + - fe + readOnly: False softwareTrigger: false + fe_bpm_y: description: FE BPM Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-FE-XBPM1:TRY + deviceConfig: {prefix: 'X10SA-FE-XBPM1:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - fe - readOnly: false + - fe + readOnly: False softwareTrigger: false -fe_sxr: + +fe_sl_xr: description: FE Slit X Ring deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-FE-SL1:TRXR + deviceConfig: {prefix: 'X10SA-FE-SL1:TRXR'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - fe - readOnly: false + - fe + readOnly: False softwareTrigger: false -fe_syt: + +fe_sl_yt: description: FE Slit Y top deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-FE-SL1:TRYT + deviceConfig: {prefix: 'X10SA-FE-SL1:TRYT'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - fe - readOnly: false + - fe + readOnly: False softwareTrigger: false -fe_sxw: + +fe_sl_xw: description: FE Slit X Wall deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-FE-SL1:TRXW + deviceConfig: {prefix: 'X10SA-FE-SL1:TRXW'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - fe - readOnly: false + - fe + readOnly: False softwareTrigger: false -fe_syb: + +fe_sl_yb: description: FE SlitY Bottom deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-FE-SL1:TRYB + deviceConfig: {prefix: 'X10SA-FE-SL1:TRYB'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - fe - readOnly: false + - fe + readOnly: False softwareTrigger: false -fe_sxcen: + +fe_sl_xcen: description: FE Slit X Centre deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-FE-SL1:CENTERX + deviceConfig: {prefix: 'X10SA-FE-SL1:CENTERX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - fe - readOnly: false + - fe + readOnly: False softwareTrigger: false -fe_sxsize: + +fe_sl_xsize: description: FE Slit X Size deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-FE-SL1:SIZEX + deviceConfig: {prefix: 'X10SA-FE-SL1:SIZEX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - fe - readOnly: false + - fe + readOnly: False softwareTrigger: false -fe_sycen: + +fe_sl_ycen: description: FE Slit Y Centre deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-FE-SL1:CENTERY + deviceConfig: {prefix: 'X10SA-FE-SL1:CENTERY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - fe - readOnly: false + - fe + readOnly: False softwareTrigger: false -fe_sysize: + +fe_sl_ysize: description: FE Slit Y Size deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-FE-SL1:SIZEY + deviceConfig: {prefix: 'X10SA-FE-SL1:SIZEY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - fe - readOnly: false + - fe + readOnly: False softwareTrigger: false -s1_xw: + +bsf_sl_xw: description: BSF slit outboard deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-SLH:TRXW + deviceConfig: {prefix: 'X10SA-OP-BSFSLH:TRXW'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsf - readOnly: false + - bsf + readOnly: False softwareTrigger: false -s1_xr: + +bsf_sl_xr: description: BSF slit inboard deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-SLH:TRXR + deviceConfig: {prefix: 'X10SA-OP-BSFSLH:TRXR'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsf - readOnly: false + - bsf + readOnly: False softwareTrigger: false -s1_yt: + +bsf_sl_yt: description: BSF slit top deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-SLV:TRYT + deviceConfig: {prefix: 'X10SA-OP-BSFSLV:TRYT'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsf - readOnly: false + - bsf + readOnly: False softwareTrigger: false -s1_yb: + +bsf_sl_yb: description: BSF slit bottom deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-SLV:TRYB + deviceConfig: {prefix: 'X10SA-OP-BSFSLV:TRYB'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsf - readOnly: false + - bsf + readOnly: False softwareTrigger: false -s1_xcen: + +bsf_sl_xcen: description: BSF X centre deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-SLH:CENTER + deviceConfig: {prefix: 'X10SA-OP-BSFSLH:CENTER'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsf - readOnly: false + - bsf + readOnly: False softwareTrigger: false -s1_xsize: + +bsf_sl_xsize: description: BSF X size deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-SLH:SIZE + deviceConfig: {prefix: 'X10SA-OP-BSFSLH:SIZE'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsf - readOnly: false + - bsf + readOnly: False softwareTrigger: false -s1_ycen: + +bsf_sl_ycen: description: BSF Y centre deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-SLV:CENTER + deviceConfig: {prefix: 'X10SA-OP-BSFSLV:CENTER'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsf - readOnly: false + - bsf + readOnly: False softwareTrigger: false -s1_ysize: + +bsf_sl_ysize: description: BSF Y size deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-SLV:SIZE + deviceConfig: {prefix: 'X10SA-OP-BSFSLV:SIZE'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsf - readOnly: false + - bsf + readOnly: False softwareTrigger: false + bsf_f1_y: description: BSF Filter 1 Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-FI1:TRY + deviceConfig: {prefix: 'X10SA-OP-BSFFI1:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsf - readOnly: false + - bsf + readOnly: False softwareTrigger: false + bsf_f2_y: description: BSF Filter 2 Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-FI2:TRY + deviceConfig: {prefix: 'X10SA-OP-BSFFI2:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsf - readOnly: false + - bsf + readOnly: False softwareTrigger: false + dcm_bragg: description: DCM Bragg angle deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-DCM:ROTY + deviceConfig: {prefix: 'X10SA-OP-DCM:ROTY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - dcm - readOnly: false + - dcm + readOnly: False softwareTrigger: false + dcm_x: description: DCM lateral deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-DCM:TRX + deviceConfig: {prefix: 'X10SA-OP-DCM:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - dcm - readOnly: false + - dcm + readOnly: False softwareTrigger: false + dcm_perp: description: DCM Perp deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-DCM:TRX-C2 + deviceConfig: {prefix: 'X10SA-OP-DCM:TRX-CR2'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - dcm - readOnly: false + - dcm + readOnly: False softwareTrigger: false + dcm_pitch: description: DCM 2nd crystal pitch deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-DCM:ROTY-C2 + deviceConfig: {prefix: 'X10SA-OP-DCM:ROTY-CR2-PITCH'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - dcm - readOnly: false + - dcm + readOnly: False softwareTrigger: false + dcm_fpitch: description: DCM 2nd crystal fine pitch deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-DCM:PITCH-C2 + deviceConfig: {prefix: 'X10SA-OP-DCM:ROTY-CR2-FINEPITCH'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - dcm - readOnly: false + - dcm + readOnly: False softwareTrigger: false + dcm_froll: description: DCM 2nd crystal fine roll deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-DCM:ROLL-C2 + deviceConfig: {prefix: 'X10SA-OP-DCM:ROTZ-CR2-FINEROLL'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - dcm - readOnly: false + - dcm + readOnly: False softwareTrigger: false + +lu_bpm1: + description: LU BPM Signal 1 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-OP-LUBPM:Current1:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +lu_bpm2: + description: LU BPM Signal 2 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-OP-LUBPM:Current2:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +lu_bpm3: + description: LU BPM Signal 3 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-OP-LUBPM:Current3:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +lu_bpm4: + description: LU BPM Signal 4 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-OP-LUBPM:Current4:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +lu_bpmsum: + description: LU BPM Summed + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-OP-LUBPM:SumAll:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + lu_bpm_x: description: BPM2 X translation deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUBPM:TRX + deviceConfig: {prefix: 'X10SA-OP-LUBPM:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false + lu_bpm_y: description: BPM2 Y translation deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUBPM:TRY + deviceConfig: {prefix: 'X10SA-OP-LUBPM:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -lens_zu: - description: Up lens Z + +lu_z1: + description: Lens Z1 Motion deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUMCS1:TRZ + deviceConfig: {prefix: 'X10SA-OP-LUTRZ1:TRZ'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -lens_zd: - description: Down lens Z + +lu_z2: + description: Lens Z2 Motion deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUMCS2:TRZ + deviceConfig: {prefix: 'X10SA-OP-LUTRZ2:TRZ'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -hex_xu: - description: Up Hexapod X + +lu_pod1_y: + description: SmarPod1 Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUPOD1:TRX + deviceConfig: {prefix: 'X10SA-OP-LUPOD1:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -hex_yu: - description: Up Hexapod Y + +lu_pod1_z: + description: SmarPod1 Z deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUPOD1:TRY + deviceConfig: {prefix: 'X10SA-OP-LUPOD1:TRZ'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -hex_zu: - description: Up Hexapod Z + +lu_pod1_rotx: + description: SmarPod1 RX deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUPOD1:TRZ + deviceConfig: {prefix: 'X10SA-OP-LUPOD1:ROTX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -hex_rotxu: - description: Up Hexapod RotX + +lu_pod1_roty: + description: SmarPod1 RY deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUPOD1:ROTX + deviceConfig: {prefix: 'X10SA-OP-LUPOD1:ROTY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -hex_rotyu: - description: Up Hexapod RotY + +lu_pod1_rotz: + description: SmarPod1 RZ deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUPOD1:ROTY + deviceConfig: {prefix: 'X10SA-OP-LUPOD1:ROTZ'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -hex_rotzu: - description: Up Hexapod RotZ + +lu_pod2_y: + description: SmarPod2 Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUPOD1:ROTZ + deviceConfig: {prefix: 'X10SA-OP-LUPOD2:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -hex_xd: - description: Down Hexapod X + +lu_pod2_z: + description: SmarPod2 Z deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUPOD2:TRX + deviceConfig: {prefix: 'X10SA-OP-LUPOD2:TRZ'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -hex_yd: - description: Down Hexapod Y + +lu_pod2_rotx: + description: SmarPod2 RX deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUPOD2:TRY + deviceConfig: {prefix: 'X10SA-OP-LUPOD2:ROTX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -hex_zd: - description: Down Hexapod Z + +lu_pod2_roty: + description: SmarPod2 RY deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUPOD2:TRZ + deviceConfig: {prefix: 'X10SA-OP-LUPOD2:ROTY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -hex_rotxd: - description: Down Hexapod RotX + +lu_pod2_rotz: + description: SmarPod2 RZ deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUPOD2:ROTX + deviceConfig: {prefix: 'X10SA-OP-LUPOD2:ROTZ'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - lu + readOnly: False softwareTrigger: false -hex_rotyd: - description: Down Hexapod RotY + +ss_bpm1: + description: SS BPM Signal 1 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-SSBPM:Current1:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +ss_bpm2: + description: SS BPM Signal 2 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-SSBPM:Current2:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +ss_bpm3: + description: SS BPM Signal 3 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-SSBPM:Current3:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +ss_bpm4: + description: SS BPM Signal 4 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-SSBPM:Current4:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +ss_bpmsum: + description: SS BPM Summed + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-SSBPM:SumAll:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +ss_bpm_x: + description: SS BPM X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUPOD2:ROTY + deviceConfig: {prefix: 'X10SA-ES-SSBPM:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - ss + readOnly: False softwareTrigger: false -hex_rotzd: - description: Down Hexapod RotZ + +ss_bpm_y: + description: SS BPM Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-OP-LUPOD2:ROTZ + deviceConfig: {prefix: 'X10SA-ES-SSBPM:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - lu - readOnly: false + - ss + readOnly: False softwareTrigger: false -bsc_bpm_x: - description: BSC BPM X + +ss_f1_x: + description: SS Filter 1 X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSBPM1:TRX1 + deviceConfig: {prefix: 'X10SA-ES-SSFI1:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -bsc_bpm_y: - description: BSC BPM Y + +ss_f2_x: + description: SS Filter 2 X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSBPM1:TRY1 + deviceConfig: {prefix: 'X10SA-ES-SSFI2:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -bsc_f1_x: - description: BSC Filter 1 X + +ss_f3_x: + description: SS Filter 2 X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSFI1:TRX1 + deviceConfig: {prefix: 'X10SA-ES-SSFI3:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -bsc_f2_x: - description: BSC Filter 2 X + +ss_f4_x: + description: SS Filter 4 X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSFI2:TRX1 + deviceConfig: {prefix: 'X10SA-ES-SSFI4:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -bsc_f3_x: - description: BSC Filter 2 X + +ss_sl_xw: + description: SS slit wall deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSFI3:TRX1 + deviceConfig: {prefix: 'X10SA-ES-SSSLH:TRXW'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -bsc_f4_x: - description: BSC Filter 4 X + +ss_sl_xr: + description: SS slit ring deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSFI4:TRX1 + deviceConfig: {prefix: 'X10SA-ES-SSSLH:TRXR'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -s2_xw: - description: BSC slit wall + +ss_sl_xcen: + description: SS slit X centre deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSSH1:TRXW + deviceConfig: {prefix: 'X10SA-ES-SSSLH:CENTER'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -s2_xr: - description: BSC slit ring + +ss_sl_xsize: + description: SS slit X size deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSSH1:TRXR + deviceConfig: {prefix: 'X10SA-ES-SSSLH:SIZE'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -s2_xcen: - description: BSC slit X centre + +ss_sl_yt: + description: SS slit top deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSSH1:CENTER + deviceConfig: {prefix: 'X10SA-ES-SSSLV:TRYT'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -s2_xsize: - description: BSC slit X size + +ss_sl_yb: + description: SS slit bottom deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSSH1:SIZE + deviceConfig: {prefix: 'X10SA-ES-SSSLV:TRYB'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -s2_yt: - description: BSC slit top + +ss_sl_ycen: + description: SS slit Y centre deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSSV1:TRYT + deviceConfig: {prefix: 'X10SA-ES-SSSLV:CENTER'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -s2_yb: - description: BSC slit bottom + +ss_sl_ysize: + description: SS slit Y size deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSSV1:TRYB + deviceConfig: {prefix: 'X10SA-ES-SSSLV:SIZE'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -s2_ycen: - description: BSC slit Y centre + +ss_xi_x: + description: SS X-ray eye X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSSV1:CENTER + deviceConfig: {prefix: 'X10SA-ES-SSXI:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -s2_ysize: - description: BSC slit Y size + userParameter: {"type": multi-position,"in": 7.5, "out": -2.1} + +ss_xi_y: + description: SS X-ray eye Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSSV1:SIZE + deviceConfig: {prefix: 'X10SA-ES-SSXI:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: False softwareTrigger: false -xeye_x: - description: BSC X-ray eye X - deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSXI1:TRX1 + +ss_xicam_x: + description: ss cam X + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-SSCAM:Stats5:CentroidX_RBV', auto_monitor: true} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: True softwareTrigger: false - userParameter: - in: 7.5 - out: -2.1 - tol: 1.0 -xeye_y: - description: BSC X-ray eye Y - deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SSXI1:TRY1 + +ss_xicam_y: + description: ss cam Y + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-SSCAM:Stats5:CentroidY_RBV', auto_monitor: true} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bsc - readOnly: false + - ss + readOnly: True softwareTrigger: false + +ss_xicam_max: + description: ss cam max value + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-SSCAM:Stats5:MaxValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - ss + readOnly: True + softwareTrigger: false + +ss_xicam_exp: + description: ss camera exposure + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-SSCAM:cam1:AcquireTime', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - ss + readOnly: False + softwareTrigger: false + +ss_xicam_gain: + description: ss camera gain + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-SSCAM:cam1:Gain', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - ss + readOnly: False + softwareTrigger: false + +ss_xicam_xsig: + description: ss camera x sigma + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-SSCAM:Stats5:SigmaX_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - ss + readOnly: True + softwareTrigger: false + +ss_xicam_ysig: + description: ss camera y sigma + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-SSCAM:Stats5:SigmaY_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - ss + readOnly: True + softwareTrigger: false + vfm_xu: description: VFM Upstream X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-VFM:TRXU + deviceConfig: {prefix: 'X10SA-ES-VFM:TRXU'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - vfm - readOnly: false + - vfm + readOnly: False softwareTrigger: false + vfm_xd: description: VFM Downstream X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-VFM:TRXD + deviceConfig: {prefix: 'X10SA-ES-VFM:TRXD'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - vfm - readOnly: false + - vfm + readOnly: False softwareTrigger: false + vfm_yur: description: VFM Upstream Ring Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-VFM:TRYUR + deviceConfig: {prefix: 'X10SA-ES-VFM:TRYUR'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - vfm - readOnly: false + - vfm + readOnly: False softwareTrigger: false + vfm_yw: description: VFM Wall Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-VFM:TRYW + deviceConfig: {prefix: 'X10SA-ES-VFM:TRYW'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - vfm - readOnly: false + - vfm + readOnly: False softwareTrigger: false + vfm_ydr: description: VFM Downstream Ring Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-VFM:TRYDR + deviceConfig: {prefix: 'X10SA-ES-VFM:TRYDR'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - vfm - readOnly: false + - vfm + readOnly: False softwareTrigger: false + vfm_bu: description: VFM Upstream Bender deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-VFM:BNDU + deviceConfig: {prefix: 'X10SA-ES-VFM:BNDU'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - vfm - readOnly: false + - vfm + readOnly: False softwareTrigger: false + vfm_bd: description: VFM Downstream Bender deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-VFM:BNDD + deviceConfig: {prefix: 'X10SA-ES-VFM:BNDD'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - vfm - readOnly: false + - vfm + readOnly: False softwareTrigger: false + vfm_yaw: description: VFM Virtual Yaw deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-VFM:YAW + deviceConfig: {prefix: 'X10SA-ES-VFM:YAW'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - vfm - readOnly: false + - vfm + readOnly: False softwareTrigger: false + vfm_roll: description: VFM Virtual Roll deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-VFM:ROLL + deviceConfig: {prefix: 'X10SA-ES-VFM:ROLL'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - vfm - readOnly: false + - vfm + readOnly: False softwareTrigger: false + vfm_pitch: description: VFM Virtual Pitch deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-VFM:PITCH + deviceConfig: {prefix: 'X10SA-ES-VFM:PITCH'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - vfm - readOnly: false + - vfm + readOnly: False softwareTrigger: false -vfm_lat: + +vfm_x: description: VFM Virtual X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-VFM:TRX + deviceConfig: {prefix: 'X10SA-ES-VFM:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - vfm - readOnly: false + - vfm + readOnly: False softwareTrigger: false -vfm_vert: - description: VFM Virtual Y + +vfm_y: + description: VFM Virtual Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-VFM:TRY + deviceConfig: {prefix: 'X10SA-ES-VFM:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - vfm - readOnly: false + - vfm + readOnly: False softwareTrigger: false + hfm_xu: description: HFM Upstream X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-HFM:TRXU + deviceConfig: {prefix: 'X10SA-ES-HFM:TRXU'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - hfm - readOnly: false + - hfm + readOnly: False softwareTrigger: false + hfm_xd: description: HFM Downstream X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-HFM:TRXD + deviceConfig: {prefix: 'X10SA-ES-HFM:TRXD'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - hfm - readOnly: false + - hfm + readOnly: False softwareTrigger: false + hfm_yuw: description: HFM Upstream Wall Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-HFM:TRYUW + deviceConfig: {prefix: 'X10SA-ES-HFM:TRYUW'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - hfm - readOnly: false + - hfm + readOnly: False softwareTrigger: false + hfm_yr: description: HFM Ring Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-HFM:TRYR + deviceConfig: {prefix: 'X10SA-ES-HFM:TRYR'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - hfm - readOnly: false + - hfm + readOnly: False softwareTrigger: false + hfm_ydw: description: HFM Downstream Wall Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-HFM:TRYDW + deviceConfig: {prefix: 'X10SA-ES-HFM:TRYDW'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - hfm - readOnly: false + - hfm + readOnly: False softwareTrigger: false + hfm_bu: description: HFM Upstream Bender deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-HFM:BNDU + deviceConfig: {prefix: 'X10SA-ES-HFM:BNDU'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - hfm - readOnly: false + - hfm + readOnly: False softwareTrigger: false + hfm_bd: description: HFM Downstream Bender deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-HFM:BNDD + deviceConfig: {prefix: 'X10SA-ES-HFM:BNDD'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - hfm - readOnly: false + - hfm + readOnly: False softwareTrigger: false + hfm_yaw: description: HFM Virtual Yaw deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-HFM:YAW + deviceConfig: {prefix: 'X10SA-ES-HFM:YAW'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - hfm - readOnly: false + - hfm + readOnly: False softwareTrigger: false + hfm_roll: description: HFM Virtual Roll deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-HFM:ROLL + deviceConfig: {prefix: 'X10SA-ES-HFM:ROLL'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - hfm - readOnly: false + - hfm + readOnly: False softwareTrigger: false + hfm_pitch: description: HFM Virtual Pitch deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-HFM:PITCH + deviceConfig: {prefix: 'X10SA-ES-HFM:PITCH'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - hfm - readOnly: false + - hfm + readOnly: False softwareTrigger: false -hfm_lat: + +hfm_x: description: HFM Virtual X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-HFM:TRX + deviceConfig: {prefix: 'X10SA-ES-HFM:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - hfm - readOnly: false + - hfm + readOnly: False softwareTrigger: false -hfm_vert: - description: HFM Virtual Y + +hfm_y: + description: HFM Virtual Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-HFM:TRY + deviceConfig: {prefix: 'X10SA-ES-HFM:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - hfm - readOnly: false + - hfm + readOnly: False softwareTrigger: false + +bcu_bpm1: + description: BCU BPM Signal 1 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-BCBPM:Current1:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +bcu_bpm2: + description: BCU BPM Signal 2 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-BCBPM:Current2:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +bcu_bpm3: + description: BCU BPM Signal 3 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-BCBPM:Current3:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +bcu_bpm4: + description: BCU BPM Signal 4 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-BCBPM:Current4:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +bcu_bpmsum: + description: BCU BPM Summed + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-BCBPM:SumAll:MeanValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + bcu_bpm_x: description: BCU BPM X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-BPM:TRX + deviceConfig: {prefix: 'X10SA-ES-BCBPM:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bcu - readOnly: false + - bcu + readOnly: False softwareTrigger: false + bcu_bpm_y: - description: BCU BPM Y + description: BCU BPM Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-BPM:TRY + deviceConfig: {prefix: 'X10SA-ES-BCBPM:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bcu - readOnly: false + - bcu + readOnly: False softwareTrigger: false -s3_xw: + +bcu_sl_xw: description: BCU slit wall deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SLH:TRXW + deviceConfig: {prefix: 'X10SA-ES-BCSLH:TRXW'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bcu - readOnly: false + - bcu + readOnly: False softwareTrigger: false -s3_xr: + +bcu_sl_xr: description: BCU slit ring deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SLH:TRXR + deviceConfig: {prefix: 'X10SA-ES-BCSLH:TRXR'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bcu - readOnly: false + - bcu + readOnly: False softwareTrigger: false -s3_xcen: + +bcu_sl_xcen: description: BCU slit X centre deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SLH:CENTER + deviceConfig: {prefix: 'X10SA-ES-BCSLH:CENTER'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bcu - readOnly: false + - bcu + readOnly: False softwareTrigger: false -s3_xsize: + +bcu_sl_xsize: description: BCU slit X size deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SLH:SIZE + deviceConfig: {prefix: 'X10SA-ES-BCSLH:SIZE'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bcu - readOnly: false + - bcu + readOnly: False softwareTrigger: false -s3_yt: + +bcu_sl_yt: description: BCU slit top deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SLV:TRYT + deviceConfig: {prefix: 'X10SA-ES-BCSLV:TRYT'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bcu - readOnly: false + - bcu + readOnly: False softwareTrigger: false -s3_yb: + +bcu_sl_yb: description: BCU slit bottom deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SLV:TRYB + deviceConfig: {prefix: 'X10SA-ES-BCSLV:TRYB'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bcu - readOnly: false + - bcu + readOnly: False softwareTrigger: false -s3_ycen: + +bcu_sl_ycen: description: BCU slit Y centre deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SLV:CENTER + deviceConfig: {prefix: 'X10SA-ES-BCSLV:CENTER'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bcu - readOnly: false + - bcu + readOnly: False softwareTrigger: false -s3_ysize: + +bcu_sl_ysize: description: BCU slit Y size deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SLV:SIZE + deviceConfig: {prefix: 'X10SA-ES-BCSLV:SIZE'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - bcu - readOnly: false + - bcu + readOnly: False softwareTrigger: false + +xrf_pos: + description: XRF det in/out + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-XRF:POS-SET', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - se + readOnly: False + softwareTrigger: false + userParameter: {"type":positioner} + +samcam_x: + description: sample cam X + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-MS:Stats5:CentroidX_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - scam + readOnly: True + softwareTrigger: false + +samcam_xsig: + description: sample cam X sigma + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-MS:Stats5:SigmaX_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - scam + readOnly: True + softwareTrigger: false + +samcam_y: + description: sample cam Y + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-MS:Stats5:CentroidY_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - scam + readOnly: True + softwareTrigger: false + +samcam_ysig: + description: sample cam Y sigma + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-MS:Stats5:SigmaY_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - scam + readOnly: True + softwareTrigger: false + +samcam_max: + description: sample cam max value + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-MS:Stats5:MaxValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - scam + readOnly: True + softwareTrigger: false + +samcam_exp: + description: sample cam exp time + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-MS:cam1:AcquireTime', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - scam + readOnly: False + softwareTrigger: false + +samcam_gain: + description: sample cam gain + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-MS:cam1:Gain', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - scam + readOnly: False + softwareTrigger: false + scam_zoom: description: Sample cam zoom deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SAMCAM:ZOOM + deviceConfig: {prefix: 'X10SA-ES-MS:ZOOM'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - scam - readOnly: false + - scam + readOnly: False softwareTrigger: false + +fl_bright: + description: Frontlight brightness + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-FL:SET', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - se + readOnly: False + softwareTrigger: false + coll_x: description: Collimator X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-COL:TRX + deviceConfig: {prefix: 'X10SA-ES-COL:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - se - readOnly: false + - se + readOnly: False softwareTrigger: false + coll_y: description: Collimator Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-COL:TRY + deviceConfig: {prefix: 'X10SA-ES-COL:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - se - readOnly: false + - se + readOnly: False softwareTrigger: false - userParameter: - in: 41.5 - out: 20.0 - tol: 0.01 -scin_y: - description: Scintillator Y + userParameter: {"type": multi-position, "in": 41.5, "out": 20.0, "park": 0,"tol":0.05} + +diag_y: + description: Scintillator/diode Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SCL:TRY + deviceConfig: {prefix: 'X10SA-ES-SCL:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - se - readOnly: false + - se + readOnly: False softwareTrigger: false - userParameter: - in: 38.62 - out: 20.0 - tol: 0.2 -i1_y: - description: I1 Y - deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SCL:TRY - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - se - readOnly: false - softwareTrigger: false - userParameter: - in: 44.0 - out: 20.0 - tol: 0.1 -scin_z: + userParameter: {"type": multi-position, "scint": 38.62, "i1": 44.0, "out": 20.0,"park": 0,"tol":0.3} + +diag_z: description: Scintillator/diode Z deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-SCL:TRZ + deviceConfig: {prefix: 'X10SA-ES-SCL:TRZ'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - se - readOnly: false + - se + readOnly: False softwareTrigger: false -cryo_x: - description: Cryojet X - deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-CJ:TRX + +i1: + description: i1 diode reading + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-SCLDI:READOUT', auto_monitor: true} onFailure: buffer - enabled: true + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +bl_pos: + description: Backlight positioner + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-BL:POS-SET', auto_monitor: true} + onFailure: buffer + enabled: True readoutPriority: baseline deviceTags: - - se - readOnly: false + - se + readOnly: False softwareTrigger: false + userParameter: {"type":positioner} + +bl_bright: + description: Backlight brightness + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-BL:SET', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - se + readOnly: False + softwareTrigger: false + bs_x: description: Beamstop X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-BS:TRX + deviceConfig: {prefix: 'X10SA-ES-BS:TRX'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - se - readOnly: false + - se + readOnly: False softwareTrigger: false - userParameter: - in: 2.45 - out: 2.45 - tol: 0.01 + bs_y: description: Beamstop Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-BS:TRY + deviceConfig: {prefix: 'X10SA-ES-BS:TRY'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - se - readOnly: false + - se + readOnly: False softwareTrigger: false - userParameter: - in: 0.1 - out: -0.9 - tol: 0.01 + bs_z: description: Beamstop Z deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-BS:TRZ + deviceConfig: {prefix: 'X10SA-ES-BS:TRZ'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - se - readOnly: false + - se + readOnly: False softwareTrigger: false -xeye2_focus: - description: X-ray eye 2 Focus - deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-XEYE:FOCUS + userParameter: {"type": guarded, "min": 13, "samp": 15, "work_min": 20, "safe": 41, "max_blin": 42, "max_blout": 70} + +bs_pos: + description: Beamstop positioner + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-BS:POS-SET', auto_monitor: true} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - det - readOnly: false - softwareTrigger: false -xeye2_zoom: - description: X-ray eye 2 Zoom - deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-XEYE:ZOOM - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - det - readOnly: false - softwareTrigger: false -xeye2_x: - description: X-ray eye 2 X - deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-XEYE:TRX - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - det - readOnly: false - softwareTrigger: false -det_y: - description: Detector Y - deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-DET:TRY - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - det - readOnly: false - softwareTrigger: false -det_z: - description: Detector Z - deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-DET:TRZ - onFailure: buffer - enabled: true - readoutPriority: baseline - deviceTags: - - det - readOnly: false + - se + readOnly: False softwareTrigger: false + userParameter: {"type":positioner} + gon_x: description: Goniometer X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-DF1:TRX1 + deviceConfig: {prefix: 'X10SA-ES-DF1:TRX1'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - det - readOnly: false + - det + readOnly: False softwareTrigger: false + userParameter: {"type": guarded, "in": 18.0, "out": -10.0, "safe": -100,"tol":0.5} + gon_y: description: Goniometer Y deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-DF1:TRY1 + deviceConfig: {prefix: 'X10SA-ES-DF1:TRY1'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - det - readOnly: false + - det + readOnly: False softwareTrigger: false + gon_z: description: Goniometer X deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-DF1:TRZ1 + deviceConfig: {prefix: 'X10SA-ES-DF1:TRZ1'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - det - readOnly: false + - det + readOnly: False softwareTrigger: false + omega: description: Omega deviceClass: ophyd.EpicsMotor - deviceConfig: - prefix: X10SA-ES-DF1:ROTU + deviceConfig: {prefix: 'X10SA-ES-DF1:ROTU'} onFailure: buffer - enabled: true + enabled: True readoutPriority: baseline deviceTags: - - det - readOnly: false + - det + readOnly: False softwareTrigger: false + +cryo_pos: + description: Cryo positioner + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-CS:POS-SET', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - se + readOnly: False + softwareTrigger: false + userParameter: {"type":positioner} + +cryo_x: + description: Cryojet X + deviceClass: ophyd.EpicsMotor + deviceConfig: {prefix: 'X10SA-ES-CS:TRX'} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - se + readOnly: False + softwareTrigger: false + +det_xi_focus: + description: X-ray eye 2 Focus + deviceClass: ophyd.EpicsMotor + deviceConfig: {prefix: 'X10SA-ES-XEYE:FOCUS'} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - detxi + readOnly: False + softwareTrigger: false + +det_xi_zoom: + description: X-ray eye 2 Zoom + deviceClass: ophyd.EpicsMotor + deviceConfig: {prefix: 'X10SA-ES-XEYE:ZOOM'} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - detxi + readOnly: False + softwareTrigger: false + +det_xi_x: + description: X-ray eye X + deviceClass: ophyd.EpicsMotor + deviceConfig: {prefix: 'X10SA-ES-XEYE:TRX'} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - detxi + readOnly: False + softwareTrigger: false + +i2: + description: i2 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-XEYEDI:READOUT', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - bpm + readOnly: True + softwareTrigger: false + +det_xicam_x: + description: sample cam X + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-XEYE:Stats5:CentroidX_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - detxi + readOnly: True + softwareTrigger: false + +det_xicam_xsig: + description: sample cam X sigma + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-XEYE:Stats5:SigmaX_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - detxi + readOnly: True + softwareTrigger: false + +det_xicam_y: + description: sample cam Y + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-XEYE:Stats5:CentroidY_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - detxi + readOnly: True + softwareTrigger: false + +det_xicam_ysig: + description: sample cam Y sigma + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-XEYE:Stats5:SigmaY_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - detxi + readOnly: True + softwareTrigger: false + +det_xicam_max: + description: sample cam max value + deviceClass: ophyd.EpicsSignalRO + deviceConfig: {read_pv: 'X10SA-ES-XEYE:Stats5:MaxValue_RBV', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: monitored + deviceTags: + - detxi + readOnly: True + softwareTrigger: false + +det_xicam_exp: + description: sample cam exp time + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-XEYE:cam1:AcquireTime', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - detxi + readOnly: False + softwareTrigger: false + +det_xicam_gain: + description: sample cam gain + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-XEYE:cam1:Gain', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - detxi + readOnly: False + softwareTrigger: false + +det_cov: + description: Detector cover + deviceClass: ophyd.EpicsSignal + deviceConfig: {read_pv: 'X10SA-ES-DETCOV:SET', auto_monitor: true} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - det + readOnly: False + softwareTrigger: false + userParameter: {"type":positioner} + +det_y: + description: Detector Y + deviceClass: ophyd.EpicsMotor + deviceConfig: {prefix: 'X10SA-ES-DET:TRY'} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - det + readOnly: False + softwareTrigger: false + +det_z: + description: Detector Z + deviceClass: ophyd.EpicsMotor + deviceConfig: {prefix: 'X10SA-ES-DET:TRZ'} + onFailure: buffer + enabled: True + readoutPriority: baseline + deviceTags: + - det + readOnly: False + softwareTrigger: false + diff --git a/pxii_bec/macros/pxii_energy.py b/pxii_bec/macros/pxii_energy.py index 37913aa..f72d25c 100755 --- a/pxii_bec/macros/pxii_energy.py +++ b/pxii_bec/macros/pxii_energy.py @@ -81,6 +81,7 @@ def set_mirror_stripe(energy_ev): def mono_pitch_scan(plot=True): """Scan the monochromator pitch and move to the peak.""" # Move to the calculated pitch value for the current energy + print("Starting Mono Pitch Scan.") energy = get_current_energy() pos = get_dcm_motors_positions(energy) print(f"Setting DCM Pitch to default value of {pos['dcm_pitch']}") diff --git a/pxii_bec/macros/pxii_guards.py b/pxii_bec/macros/pxii_guards.py new file mode 100644 index 0000000..8d514c1 --- /dev/null +++ b/pxii_bec/macros/pxii_guards.py @@ -0,0 +1,280 @@ +"""Guards for preventing clashing devices in +the sample environment""" + +# PD_guards2.py +from dataclasses import dataclass, field +from typing import Callable, List, Dict + + +# ---------------------------- +# Exceptions +# ---------------------------- + + +class GuardViolation(RuntimeError): + """Raised when a guarded move is not allowed.""" + + +# ---------------------------- +# Guarded axis +# ---------------------------- + + +class GuardedAxis: + """ Motor axis protected by guard policy """ + def __init__( + self, + bec_name: str, + policy: Callable[[float], None], + config: Dict[str, float] = None + ): + self.bec_name = bec_name + self.policy = policy + self.config = config or {} + self.mot = getattr(dev, self.bec_name) + + @property + def actual(self) -> float: + """Returns the current motor position""" + return self.mot.read()[self.bec_name]["value"] + + def move(self, target: float): + """Used to move a guarded axis to a target value""" + self.policy(target) # must raise if disallowed + scans.umv(self.mot, target, relative=False) + + +# ---------------------------- +# Positioned device (IN / OUT) +# ---------------------------- + + +@dataclass +class PositionedDevice: + """Applies to devices that only have IN and OUT positions + Guards are defined by guard rules to ensure their safe operation""" + + bec_name: str + inpos: float + outpos: float + tol: float = 0.01 + guards: List[Callable[[], None]] = field(default_factory=list) + + def __post_init__(self): + self.mot = getattr(dev, self.bec_name) + + def _check_guards(self): + for g in self.guards: + g() + + def mvin(self): + """Move a positioned device to IN position""" + self._check_guards() + scans.umv(self.mot, self.inpos, relative=False) + + def mvout(self): + """Move a positioned device to OUT position""" + self._check_guards() + scans.umv(self.mot, self.outpos, relative=False) + + def is_in(self): + """Returns true if the device is IN""" + return abs(self.mot.read()[self.bec_name]["value"] - self.inpos) <= self.tol + + def is_out(self): + """Returns true if the device is OUT""" + return abs(self.mot.read()[self.bec_name]["value"] - self.outpos) <= self.tol + + +@dataclass +class MultiPositionDevice: + """ Devices that have multiple defined positions. Guards rules are defined to + ensure their safe operation""" + bec_name: str + positions: Dict[str, float] # {"out": 0.0, "scint": 10.0, "i1": 20.0} + tol: float = 0.01 + guards: List[Callable[[], None]] = field(default_factory=list) + + def __post_init__(self): + self.mot = getattr(dev, self.bec_name) + + def _check_guards(self): + """Check guard conditions""" + for g in self.guards: + g() + + def move_to(self, state: str): + """Move to one of the states defined in self.positions""" + if state not in self.positions: + raise ValueError(f"Unknown state '{state}'") + + self._check_guards() + scans.umv(self.mot, self.positions[state], relative=False) + + def is_at(self, state: str) -> bool: + """Check if device is at a given state""" + if state not in self.positions: + raise ValueError(f"Unknown state '{state}'") + + return abs(self.mot.read()[self.bec_name]["value"] - self.positions[state]) <= self.tol + + @property + def actual(self) -> float: + """Returns current motor position""" + return self.mot.read()[self.bec_name]["value"] + + @property + def state(self) -> str: + """Returns current state""" + for name, pos in self.positions.items(): + if abs(self.mot.read()[self.bec_name]["value"] - pos) <= self.tol: + return name + return "unknown" + + def is_clear(self): + """Returns true if device is at OUT or below e.g. PARK""" + if "out" not in self.positions: + raise ValueError("MultiPosition device requires 'out' state") + return self.actual < (self.positions["out"] + self.tol) + + +# ---------------------------- +# PD namespace (filled at runtime) +# ---------------------------- + + +class PD: + """Populated when the PD devices are initialised""" + pass + + +# ---------------------------- +# Guard rules for BS_Z +# ---------------------------- +# BS positioner must be in for BS_Z to move +def bs_z_requires_bs_pos_in(): + """Cannot move bs_z unless the BS positioner is in""" + if not PD.bs_pos.is_in(): + raise GuardViolation("BS_Z cannot move unless beamstop positioner is IN") + +def bs_z_range_check(target): + """Checks that the target position is within limits""" + cfg = PD.bs_z.config + + # Lower bound + if target < cfg["work_min"] and not is_sample_area_clear(beamstop=True): + raise GuardViolation( + f"Requested beamstop Z {target} is below working range minimum {cfg['work_min']}" + ) + if target < cfg["min"]: + raise GuardViolation( + f"Requested beamstop Z {target} is below absolute minimum {cfg['min']}" + ) + + # Maximum position depend on backlight position + if PD.bl_pos.is_in(): + if target > cfg["max_blin"]: + raise GuardViolation( + f"Requested beamstop Z value of {target} mm exceeds maximum allowed" + f"value of {cfg['max_blin']} while backlight is IN" + ) + else: + if target > cfg["max_blout"]: + raise GuardViolation( + f"Requested beamstop Z value of {target} mm exceeds maximum allowed " + f"value of {cfg['max_blout']} mm" + ) + + +def is_sample_area_clear(beamstop=True): + """Check if the sample area is clear, raising GuardViolation if constraints are not met.""" + if beamstop: + # Check collimator, and diagnostic device positions + if not PD.coll_y.is_clear(): + raise GuardViolation("Sample area is not clear: Collimator is IN") + if not PD.diag_y.is_clear(): + raise GuardViolation("Sample area is not clear: Diagnostic device is IN") + + # Validate goniometer position + if not abs(PD.gon_x.actual - PD.gon_x.config["out"]) < PD.gon_x.config["tol"]: + raise GuardViolation("Sample area is not clear: Goniometer is IN") + else: + # Check that diagnostic (scintillator/i1) device is out + if not PD.diag_y.is_clear(): + raise GuardViolation("Sample are is not clear: Diagnostic device is IN") + + return True + + +def bs_z_policy(target): + """Defines the policy for bs_z operation""" + # Beamstop z can only move when the positioner is in + bs_z_requires_bs_pos_in() + + # Check the allowed range for bs_z + bs_z_range_check(target) + + return True + + +def gon_x_policy(target): + """Defines the policy for gon_x operation""" + is_sample_area_clear(beamstop=False) + bs_z_above_work_min() + return True + + +def bs_pos_requires_bs_z_safe(): + """bs_pos can only move when bs_z is at the safe position""" + safe = PD.bs_z.config["safe"] + actual = PD.bs_z.actual + tol = 0.1 + + if abs(actual - safe) > tol: + raise GuardViolation(f"Beamstop positioner can only move when BS_Z is at {safe} mm") + + +def bs_z_above_work_min(): + """work_min specifies the minimum bs_z value that is + outside of the sample area i.e. no clashes with diagnostic + device or collimator""" + work_min = PD.bs_z.config["work_min"] + if PD.bs_z.actual < work_min: + raise GuardViolation(f"BS_Z must be greater than {work_min} mm") + + +def bs_z_below_max_blin(): + """Maximum bs_z vale when the backlight is in""" + max_blin = PD.bs_z.config["max_blin"] + if PD.bs_z.actual > max_blin: + raise GuardViolation(f"BS_Z must be less than {max_blin} mm") + + +def gonio_is_out(): + """Maximum bs_z value when the backlight is out""" + if not abs(PD.gon_x.actual - PD.gon_x.config["out"]) < PD.gon_x.config["tol"]: + raise GuardViolation(f"Goniometer must be OUT ({PD.gon_x.config['out']} mm)") + + +def get_policy_for_axis(bec_name): + """Specify the policy for guarded axis""" + policy_registry = {"bs_z": bs_z_policy, "gon_x": gon_x_policy} + return policy_registry.get(bec_name, lambda target: True) + + +def init_collision_guards(): + """Add the guard rules for positioned devices""" + PD.bs_pos.guards.append(bs_pos_requires_bs_z_safe) + PD.bl_pos.guards.append(bs_z_below_max_blin) + PD.coll_y.guards.append(bs_z_above_work_min) + PD.diag_y.guards.append(bs_z_above_work_min) + PD.diag_y.guards.append(gonio_is_out) + PD.diag_y.guards.append(bs_z_requires_bs_pos_in) + + +def init_positioned_devices(): + """Initialises the positioned devices""" + file = "/sls/x10sa/config/bec/production/pxii_bec/pxii_bec/device_configs/pxii-autogenerated.yaml" + build_pd(file) + init_collision_guards() + print("Defined positions for devices have been updated from pxii-autogenerated.yaml") diff --git a/pxii_bec/macros/pxii_parameters.py b/pxii_bec/macros/pxii_parameters.py index 7f3f761..e5f651d 100755 --- a/pxii_bec/macros/pxii_parameters.py +++ b/pxii_bec/macros/pxii_parameters.py @@ -1,10 +1,7 @@ """File to store beamline parameters and defaults""" from dataclasses import dataclass -from typing import Callable import numpy as np -import yaml - @@ -16,7 +13,7 @@ class EnergyDefaults: min_energy_ev = 4800 max_energy_ev = 30002 beam_offset = 6 - signals = {"sig1": dev.lu_bpmsum, "sig2": dev.bsc_bpmsum, "sig3": dev.bcu_bpmsum} + signals = {"sig1": dev.lu_bpmsum, "sig2": dev.ss_bpmsum, "sig3": dev.bcu_bpmsum} energy = dev.dcm_bragg mono_pitch = dev.dcm_pitch mono_perp = dev.dcm_perp @@ -148,15 +145,15 @@ class BPMScans: "y_device": dev.lu_bpm_y, } bsc = { - "x_name": dev.bsc_bpm_x.name, - "y_name": dev.bsc_bpm_y.name, - "z1_name": dev.bsc_bpm1.name, - "z2_name": dev.bsc_bpm2.name, - "z3_name": dev.bsc_bpm3.name, - "z4_name": dev.bsc_bpm4.name, - "z5_name": dev.bsc_bpmsum.name, - "x_device": dev.bsc_bpm_x, - "y_device": dev.bsc_bpm_y, + "x_name": dev.ss_bpm_x.name, + "y_name": dev.ss_bpm_y.name, + "z1_name": dev.ss_bpm1.name, + "z2_name": dev.ss_bpm2.name, + "z3_name": dev.ss_bpm3.name, + "z4_name": dev.ss_bpm4.name, + "z5_name": dev.ss_bpmsum.name, + "x_device": dev.ss_bpm_x, + "y_device": dev.ss_bpm_y, } bcu = { "x_name": dev.bcu_bpm_x.name, @@ -191,148 +188,3 @@ class MirrorConfig: } -@dataclass -class PositionedDevice: - """Class for devices with defined in and out positions""" - - device_name: str - type: str - name: str - inpos: float - outpos: float - tol: float - mot: str - reader: Callable[[], float] - - @property - def actual(self): - """Returns current motor position""" - return self.reader() - - def checkin(self): - """Returns True if motor in in the 'in' position""" - return abs(self.actual - self.inpos) <= self.tol - - def mvin(self): - """Moves motor to the 'in' position""" - scans.umv(self.mot, self.inpos, relative=False) - - def mvout(self): - """Moves motor to the 'out' position""" - scans.umv(self.mot, self.outpos, relative=False) - - def status(self): - """ Check if device is in or out or moving""" - positions = ("in", "out", "moving", "undefined") - target_in = self.inpos - target_out = self.outpos - actual = self.actual - delta_in = actual - target_in - delta_out = actual - target_out - # Check if motor is moving - if "Signal" in self.type: - moving = 0 - elif "Motor" in self.type: - d = getattr(dev, self.device_name) - moving = d.motor_is_moving.get() - if moving: - pos = positions[2] - return {"position": pos.upper(), - "name": self.name, - "moving": moving} - - if abs(delta_in) > self.tol and abs(delta_out) > self.tol: - pos = positions[3] - return {"position": pos.upper(), - "name": self.name, - "actual": actual, - "moving": moving} - - elif abs(delta_in) <= self.tol: - target = self.inpos - pos = positions[0] - delta = delta_in - elif abs(delta_out) <= self.tol: - target = self.outpos - pos = positions[1] - delta = delta_out - - return { - "name": self.name, - "position": pos.upper(), - "target": target, - "actual": actual, - "delta": delta, - "tol": self.tol, - "moving": moving, - } - - def report(self): - """ Print status of motor """ - s = self.status() - - if s['position'] == "UNDEFINED": - return (f"{s['name']:15s}: " - f"{s['position']} " - f"position {s['actual']:.3f}") - elif s['position'] == "MOVING": - return (f"{s['name']:15s}: " - f"{s['position']} ") - else: - return ( - f"{s['name']:15s}: " - f"[{s['position']}] " - f"actual = {s['actual']:.3f} " - f"target = {s['target']:.3f} " - f"delta = {s['delta']:.3f}" - ) - - - -@dataclass(frozen=True) -class PD: - """Class for positioned device positions""" - - -def build_pd(yaml_file): - """Takes the in and out values from the yaml file - and adds them to the PD class - """ - with open(yaml_file, encoding="utf-8") as f: - data = yaml.safe_load(f) - for device_name, cfg in data.items(): - # Skip devices without userParameter - user = cfg.get("userParameter") - if not user: - continue - # Set tolerance - if "tol" not in user: - user["tol"] = 0.01 - - try: - dev_obj = getattr(dev, device_name) - except: - raise KeyError(f"Device {device_name} not found in device list") - desc = cfg.get("description") - type = cfg.get("deviceClass") - target = PositionedDevice( - device_name=device_name, - type = type, - name=desc, - inpos=user["in"], - outpos=user["out"], - tol=user["tol"], - mot=dev_obj, - reader=lambda d=dev_obj, n=device_name: d.read()[n]["value"], - ) - - setattr(PD, device_name, target) - - -def init_positioned_devices(): - """Initialises the positioned devices""" - file = ( - "/sls/x10sa/config/bec/production/pxii_bec/pxii_bec/device_configs/pxii-autogenerated.yaml" - ) - build_pd(file) - print("Defined positions for devices have been updated from pxii-autogenerated.yaml") diff --git a/pxii_bec/macros/update_PD_from_yaml.py b/pxii_bec/macros/update_PD_from_yaml.py new file mode 100644 index 0000000..c4837dc --- /dev/null +++ b/pxii_bec/macros/update_PD_from_yaml.py @@ -0,0 +1,59 @@ +""" +update_PD_from_yaml.py + +Creates PositionedDevice, MultiPositionDevice and GuardedAxis +instances from YAML configuration. +""" + +import yaml + + +def build_pd(yaml_file): + """Takes the defined positions from the device yaml file + and adds them to the PD class + """ + pos_devs = [] + mp_devs = [] + ga_devs = [] + + + with open(yaml_file, encoding="utf-8") as f: + data = yaml.safe_load(f) + + for bec_name, cfg in data.items(): + # Skip devices without userParameter + user = cfg.get("userParameter") + + if not user: + continue + # ------------------------------------------------------------------ + # Positioned device + # ------------------------------------------------------------------ + if user["type"] == "positioner": + pos_devs.append(bec_name) + posdev = PositionedDevice(bec_name=bec_name, inpos=1.0, outpos=0.0) + setattr(PD, bec_name, posdev) + + # ------------------------------------------------------------------ + # Multi-position device + # ------------------------------------------------------------------ + elif user["type"] == "multi-position": + mp_devs.append(bec_name) + positions = {k: v for k, v in user.items() if k != "type"} + mpdev = MultiPositionDevice(bec_name=bec_name, positions=positions) + setattr(PD, bec_name, mpdev) + + # ------------------------------------------------------------------ + # Guarded device + # ------------------------------------------------------------------ + elif user["type"] == "guarded": + ga_devs.append(bec_name) + config = {k: v for k, v in user.items() if k != "type"} + gadev = GuardedAxis( + bec_name=bec_name, policy=get_policy_for_axis(bec_name), config=config + ) + setattr(PD, bec_name, gadev) + + print(f"Positioned devices: {pos_devs}") + print(f"Guarded axes: {ga_devs}") + print(f"Multi position devices: {mp_devs}")