This commit is contained in:
@@ -0,0 +1,792 @@
|
||||
sls_current:
|
||||
description: SLS current
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'ARS07-DPCT-0100:CURR', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- SLS
|
||||
readOnly: true
|
||||
softwareTrigger: false
|
||||
ps1_press:
|
||||
description: Photon shutter 1 pressure
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'X10SA-FE-PSH1-VMCC-1010:PRESSURE', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- press
|
||||
readOnly: true
|
||||
softwareTrigger: false
|
||||
abs_press:
|
||||
description: Absorber pressure
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'X10SA-FE-VMCC-0000:PRESSURE', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- press
|
||||
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
|
||||
ss_bpmsum:
|
||||
description: SS 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
|
||||
ps3_press:
|
||||
description: Pumpstand 3 pressure
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'X10SA-FE-PUM3-VMCC-2010:PRESSURE', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- press
|
||||
readOnly: true
|
||||
softwareTrigger: false
|
||||
bsf_press:
|
||||
description: BSF pressure
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'X10SA-OP-BSF-VMFR-0010:PRESSURE', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- press
|
||||
readOnly: true
|
||||
softwareTrigger: false
|
||||
bb1_press:
|
||||
description: BB1 pressure
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'X10SA-OP-BBU-VMFR-1010:PRESSURE', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- press
|
||||
readOnly: true
|
||||
softwareTrigger: false
|
||||
dcm_press:
|
||||
description: DCM pressure
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'X10SA-OP-DCM-VMFR-3010:PRESSURE', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- press
|
||||
readOnly: true
|
||||
softwareTrigger: false
|
||||
bb2_press:
|
||||
description: BB2 pressure
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'X10SA-OP-BBD-VMFR-4010:PRESSURE', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- press
|
||||
readOnly: true
|
||||
softwareTrigger: false
|
||||
lu_press:
|
||||
description: LU pressure
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'X10SA-OP-LU-VMFR-5010:PRESSURE', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- press
|
||||
readOnly: true
|
||||
softwareTrigger: false
|
||||
ps2_press:
|
||||
description: Photon shutter 2 pressure
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'X10SA-OP-PSH1-VMFR-7010:PRESSURE', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- press
|
||||
readOnly: true
|
||||
softwareTrigger: false
|
||||
ss_press:
|
||||
description: SS pressure
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'X10SA-ES-SS1-VMFR-0010:PRESSURE', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- press
|
||||
readOnly: true
|
||||
softwareTrigger: false
|
||||
kb_press:
|
||||
description: KBV pressure
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'X10SA-ES-KBV-VMFR-0010:PRESSURE', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- press
|
||||
readOnly: true
|
||||
softwareTrigger: false
|
||||
bcu_press:
|
||||
description: BCU pressure
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig: {read_pv: 'X10SA-ES-BCU-VMFR-0010:PRESSURE', auto_monitor: true}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- press
|
||||
readOnly: true
|
||||
softwareTrigger: false
|
||||
fe_sxr:
|
||||
description: 'FE Slit X Ring'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-FE-SLDI:TRXR'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- fe
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
fe_syt:
|
||||
description: 'FE Slit Y top'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-FE-SLDI:TRYT'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- fe
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
fe_sxw:
|
||||
description: 'FE Slit X Wall'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-FE-SLDI:TRXW'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- fe
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
fe_syb:
|
||||
description: 'FE SlitY Bottom'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-FE-SLDI:TRYB'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- fe
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
fe_sxcen:
|
||||
description: 'FE Slit X Centre'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-FE-SLDI:CENTERX'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- fe
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
fe_sxsize:
|
||||
description: 'FE Slit X Size'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-FE-SLDI:SIZEX'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- fe
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
fe_sycen:
|
||||
description: 'FE Slit Y Centre'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-FE-SLDI:CENTERY'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- fe
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
fe_sysize:
|
||||
description: 'FE Slit Y Size'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-FE-SLDI:SIZEY'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- fe
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s1_xw:
|
||||
description: 'BSF slit outboard'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-SLH:TRXW'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- bsf
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s1_xr:
|
||||
description: 'BSF slit inboard'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-SLH:TRXR'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- bsf
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s1_yt:
|
||||
description: 'BSF slit top'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-SLV:TRYT'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- bsf
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s1_yb:
|
||||
description: 'BSF slit bottom'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-SLV:TRYB'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- bsf
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s1_xcen:
|
||||
description: 'BSF X centre'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-SLH:CENTER'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- bsf
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s1_xsize:
|
||||
description: 'BSF X size'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-SLH:SIZE'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- bsf
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s1_ycen:
|
||||
description: 'BSF Y centre'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-SLV:CENTER'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- bsf
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
opf1_y:
|
||||
description: 'BSF Filter 1 Y'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-FI1:TRY'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- bsf
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
opf2_y:
|
||||
description: 'BSF Filter 2 Y'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-FI2:TRY'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- bsf
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
dcm_bragg:
|
||||
description: 'DCM Bragg angle'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-DCM:ROTY'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- dcm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
dcm_x:
|
||||
description: 'DCM lateral'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-DCM:TRX'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- dcm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
dcm_perp:
|
||||
description: 'DCM Perp'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-DCM:TRX-C2'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- dcm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
dcm_pitch:
|
||||
description: 'DCM 2nd crystal pitch'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-DCM:ROTY-C2'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- dcm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
ssbpm_x:
|
||||
description: 'SS BPM X'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-SSBPM1:TRX1'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- ss
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
ssbpm_y:
|
||||
description: 'SS BPM Y'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-SSBPM1:TRY1'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- ss
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s2_xw:
|
||||
description: 'SS slit wall'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-SSSH1:TRXW'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- ss
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s2_xr:
|
||||
description: 'SS slit ring'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-SSSH1:TRXR'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- ss
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s2_xcen:
|
||||
description: 'SS slit X centre'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-SSSH1:CENTER'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- ss
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s2_xsize:
|
||||
description: 'SS slit X size'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-SSSH1:CENTER'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- ss
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s2_yt:
|
||||
description: 'SS slit top'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-SSSV1:TRYT'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- ss
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s2_yb:
|
||||
description: 'SS slit bottom'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-SSSV1:TRYB'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- ss
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s2_ycen:
|
||||
description: 'SS slit Y centre'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-SSSV1:CENTER'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- ss
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
s2_ysize:
|
||||
description: 'SS slit Y size'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-SSSV1:SIZE'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- ss
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
xeye_x:
|
||||
description: 'SS X-ray eye X'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-SSXI1:TRX1'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- ss
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
xeye_y:
|
||||
description: 'SS X-ray eye Y'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-SSXI1:TRY1'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- ss
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
vfm_xu:
|
||||
description: 'VFM Upstream X'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-VFM:TRXU'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- vfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
vfm_xd:
|
||||
description: 'VFM Downstream X'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-VFM:TRXD'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- vfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
vfm_yur:
|
||||
description: 'VFM Upstream Ring Y'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-VFM:TRYUR'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- vfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
vfm_yw:
|
||||
description: 'VFM Wall Y'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-VFM:TRYW'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- vfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
vfm_ydr:
|
||||
description: 'VFM Downstream Ring Y'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-VFM:TRYDR'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- vfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
vfm_bu:
|
||||
description: 'VFM Upstream Bender'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-VFM:BNDU'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- vfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
vfm_bd:
|
||||
description: 'VFM Downstream Bender'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-VFM:BNDD'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- vfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
vfm_yaw:
|
||||
description: 'VFM Virtual Yaw'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-VFM:YAW'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- vfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
vfm_roll:
|
||||
description: 'VFM Virtual Roll'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-VFM:ROLL'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- vfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
vfm_pitch:
|
||||
description: 'VFM Virtual Pitch'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-VFM:PITCH'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- vfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
vfm_lat:
|
||||
description: 'VFM Virtual X'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-VFM:TRX'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- vfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
vfm_vert:
|
||||
description: 'VFM Virtual Y '
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-VFM:TRY'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- vfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
hfm_xu:
|
||||
description: 'HFM Upstream X'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-HFM:TRXU'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- hfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
hfm_xd:
|
||||
description: 'HFM Downstream X'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-HFM:TRXD'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- hfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
hfm_yuw:
|
||||
description: 'HFM Upstream Wall Y'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-HFM:TRYUW'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- hfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
hfm_yr:
|
||||
description: 'HFM Ring Y'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-HFM:TRYR'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- hfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
hfm_ydw:
|
||||
description: 'HFM Downstream Wall Y'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-HFM:TRYDW'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- hfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
hfm_bu:
|
||||
description: 'HFM Upstream Bender'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-HFM:BNDU'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- hfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
hfm_bd:
|
||||
description: 'HFM Downstream Bender'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-HFM:BNDD'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- hfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
hfm_yaw:
|
||||
description: 'HFM Virtual Yaw'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-HFM:YAW'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- hfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
hfm_roll:
|
||||
description: 'HFM Virtual Roll'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-HFM:ROLL'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- hfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
hfm_pitch:
|
||||
description: 'HFM Virtual Pitch'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-HFM:PITCH'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- hfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
hfm_lat:
|
||||
description: 'HFM Virtual X'
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-HFM:TRX'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- hfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
hfm_vert:
|
||||
description: 'HFM Virtual Y '
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-HFM:TRY'}
|
||||
onFailure: buffer
|
||||
enabled: False
|
||||
readoutPriority: monitored
|
||||
deviceTags:
|
||||
- hfm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
@@ -0,0 +1,150 @@
|
||||
Checking sls_current...
|
||||
OK
|
||||
Checking ps1_press...
|
||||
OK
|
||||
Checking abs_press...
|
||||
OK
|
||||
Checking lu_bpmsum...
|
||||
OK
|
||||
Checking ss_bpmsum...
|
||||
OK
|
||||
Checking ps3_press...
|
||||
OK
|
||||
Checking bsf_press...
|
||||
OK
|
||||
Checking bb1_press...
|
||||
OK
|
||||
Checking dcm_press...
|
||||
OK
|
||||
Checking bb2_press...
|
||||
OK
|
||||
Checking lu_press...
|
||||
OK
|
||||
Checking ps2_press...
|
||||
OK
|
||||
Checking ss_press...
|
||||
OK
|
||||
Checking kb_press...
|
||||
OK
|
||||
Checking bcu_press...
|
||||
OK
|
||||
Checking fe_sxr...
|
||||
OK
|
||||
Checking fe_syt...
|
||||
OK
|
||||
Checking fe_sxw...
|
||||
OK
|
||||
Checking fe_syb...
|
||||
OK
|
||||
Checking fe_sxcen...
|
||||
OK
|
||||
Checking fe_sxsize...
|
||||
OK
|
||||
Checking fe_sycen...
|
||||
OK
|
||||
Checking fe_sysize...
|
||||
OK
|
||||
Checking s1_xw...
|
||||
OK
|
||||
Checking s1_xr...
|
||||
OK
|
||||
Checking s1_yt...
|
||||
OK
|
||||
Checking s1_yb...
|
||||
OK
|
||||
Checking s1_xcen...
|
||||
OK
|
||||
Checking s1_xsize...
|
||||
OK
|
||||
Checking s1_ycen...
|
||||
OK
|
||||
Checking opf1_y...
|
||||
OK
|
||||
Checking opf2_y...
|
||||
OK
|
||||
Checking dcm_bragg...
|
||||
OK
|
||||
Checking dcm_x...
|
||||
OK
|
||||
Checking dcm_perp...
|
||||
OK
|
||||
Checking dcm_pitch...
|
||||
OK
|
||||
Checking ssbpm_x...
|
||||
OK
|
||||
Checking ssbpm_y...
|
||||
OK
|
||||
Checking s2_xw...
|
||||
OK
|
||||
Checking s2_xr...
|
||||
OK
|
||||
Checking s2_xcen...
|
||||
OK
|
||||
Checking s2_xsize...
|
||||
OK
|
||||
Checking s2_yt...
|
||||
OK
|
||||
Checking s2_yb...
|
||||
OK
|
||||
Checking s2_ycen...
|
||||
OK
|
||||
Checking s2_ysize...
|
||||
OK
|
||||
Checking xeye_x...
|
||||
OK
|
||||
Checking xeye_y...
|
||||
OK
|
||||
Checking vfm_xu...
|
||||
OK
|
||||
Checking vfm_xd...
|
||||
OK
|
||||
Checking vfm_yur...
|
||||
OK
|
||||
Checking vfm_yw...
|
||||
OK
|
||||
Checking vfm_ydr...
|
||||
OK
|
||||
Checking vfm_bu...
|
||||
OK
|
||||
Checking vfm_bd...
|
||||
OK
|
||||
Checking vfm_yaw...
|
||||
OK
|
||||
Checking vfm_roll...
|
||||
OK
|
||||
Checking vfm_pitch...
|
||||
OK
|
||||
Checking vfm_lat...
|
||||
OK
|
||||
Checking vfm_vert...
|
||||
OK
|
||||
Checking hfm_xu...
|
||||
OK
|
||||
Checking hfm_xd...
|
||||
OK
|
||||
Checking hfm_yuw...
|
||||
OK
|
||||
Checking hfm_yr...
|
||||
OK
|
||||
Checking hfm_ydw...
|
||||
OK
|
||||
Checking hfm_bu...
|
||||
OK
|
||||
Checking hfm_bd...
|
||||
OK
|
||||
Checking hfm_yaw...
|
||||
OK
|
||||
Checking hfm_roll...
|
||||
OK
|
||||
Checking hfm_pitch...
|
||||
OK
|
||||
Checking hfm_lat...
|
||||
OK
|
||||
Checking hfm_vert...
|
||||
OK
|
||||
|
||||
|
||||
|
||||
========================================
|
||||
Summary:
|
||||
All devices passed the test.
|
||||
@@ -0,0 +1,118 @@
|
||||
Checking sls_current...
|
||||
OK
|
||||
Checking ps1_press...
|
||||
OK
|
||||
Checking fes_press...
|
||||
OK
|
||||
Checking fe_sxr...
|
||||
OK
|
||||
Checking fe_syt...
|
||||
OK
|
||||
Checking fe_sxw...
|
||||
OK
|
||||
Checking fe_syb...
|
||||
OK
|
||||
Checking fe_sxcen...
|
||||
OK
|
||||
Checking fe_sxsize...
|
||||
OK
|
||||
Checking fe_sycen...
|
||||
OK
|
||||
Checking fe_sysize...
|
||||
OK
|
||||
Checking s1_xw...
|
||||
OK
|
||||
Checking s1_xr...
|
||||
OK
|
||||
Checking s1_yt...
|
||||
OK
|
||||
Checking s1_yb...
|
||||
OK
|
||||
Checking s1_xcen...
|
||||
OK
|
||||
Checking s1_xsize...
|
||||
OK
|
||||
Checking s1_ycen...
|
||||
OK
|
||||
Checking opf1_y...
|
||||
OK
|
||||
Checking opf2_y...
|
||||
OK
|
||||
Checking ssbpm_x...
|
||||
OK
|
||||
Checking ssbpm_y...
|
||||
OK
|
||||
Checking s2_xw...
|
||||
OK
|
||||
Checking s2_xr...
|
||||
OK
|
||||
Checking s2_xcen...
|
||||
OK
|
||||
Checking s2_xsize...
|
||||
OK
|
||||
Checking s2_yt...
|
||||
OK
|
||||
Checking s2_yb...
|
||||
OK
|
||||
Checking s2_ycen...
|
||||
OK
|
||||
Checking s2_ysize...
|
||||
OK
|
||||
Checking xeye_x...
|
||||
OK
|
||||
Checking xeye_y...
|
||||
OK
|
||||
Checking vfm_xu...
|
||||
OK
|
||||
Checking vfm_xd...
|
||||
OK
|
||||
Checking vfm_yur...
|
||||
OK
|
||||
Checking vfm_yw...
|
||||
OK
|
||||
Checking vfm_ydr...
|
||||
OK
|
||||
Checking vfm_bu...
|
||||
OK
|
||||
Checking vfm_bd...
|
||||
OK
|
||||
Checking vfm_yaw...
|
||||
OK
|
||||
Checking vfm_roll...
|
||||
OK
|
||||
Checking vfm_pitch...
|
||||
OK
|
||||
Checking vfm_lat...
|
||||
OK
|
||||
Checking vfm_vert...
|
||||
OK
|
||||
Checking hfm_xu...
|
||||
OK
|
||||
Checking hfm_xd...
|
||||
OK
|
||||
Checking hfm_yuw...
|
||||
OK
|
||||
Checking hfm_yr...
|
||||
OK
|
||||
Checking hfm_ydw...
|
||||
OK
|
||||
Checking hfm_bu...
|
||||
OK
|
||||
Checking hfm_bd...
|
||||
OK
|
||||
Checking hfm_yaw...
|
||||
OK
|
||||
Checking hfm_roll...
|
||||
OK
|
||||
Checking hfm_pitch...
|
||||
OK
|
||||
Checking hfm_lat...
|
||||
OK
|
||||
Checking hfm_vert...
|
||||
OK
|
||||
|
||||
|
||||
|
||||
========================================
|
||||
Summary:
|
||||
All devices passed the test.
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,58 @@
|
||||
base_config:
|
||||
- !include ./pxii-autogenerated.yaml
|
||||
id_gap:
|
||||
readoutPriority: baseline
|
||||
description: undulator gap
|
||||
deviceClass: pxii_bec.devices.undulator.UndulatorGap
|
||||
deviceConfig:
|
||||
prefix: 'X10SA-UIND:'
|
||||
onFailure: buffer
|
||||
enabled: true
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
coll_x:
|
||||
description: Collimator X
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-COL:TRX'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: baseline
|
||||
deviceTags:
|
||||
- se
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
dcm_fpitch:
|
||||
description: DCM 2nd crystal fine pitch
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-DCM:PITCH-C2'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: baseline
|
||||
deviceTags:
|
||||
- dcm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
dcm_froll:
|
||||
description: DCM 2nd crystal fine roll
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-DCM:ROLL-C2'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: baseline
|
||||
deviceTags:
|
||||
- dcm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
|
||||
smargon:
|
||||
description: REST-based device which connects to Smargopolo
|
||||
deviceClass: pxii_bec.devices.smargopolo_smargon.Smargon
|
||||
deviceConfig: {prefix: 'http://x10sa-smargopolo.psi.ch:3000'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: baseline
|
||||
deviceTags:
|
||||
- smargon
|
||||
- motors
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
@@ -0,0 +1,99 @@
|
||||
base_config:
|
||||
- !include ./pxii-autogenerated.yaml
|
||||
id_gap:
|
||||
readoutPriority: baseline
|
||||
description: undulator gap
|
||||
deviceClass: pxii_bec.devices.undulator.UndulatorGap
|
||||
deviceConfig:
|
||||
prefix: 'X10SA-UIND:'
|
||||
onFailure: buffer
|
||||
enabled: true
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
coll_x:
|
||||
description: Collimator X
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-COL:TRX'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: baseline
|
||||
deviceTags:
|
||||
- se
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
dcm_fpitch:
|
||||
description: DCM 2nd crystal fine pitch
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-DCM:PITCH-C2'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: baseline
|
||||
deviceTags:
|
||||
- dcm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
dcm_froll:
|
||||
description: DCM 2nd crystal fine roll
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-DCM:ROLL-C2'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: baseline
|
||||
deviceTags:
|
||||
- dcm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
|
||||
bcu_xasym:
|
||||
description: horizontal asymmetry
|
||||
deviceClass: ophyd_devices.ComputedSignal
|
||||
deviceConfig:
|
||||
compute_method: "def compute_xasym(signal1, signal2, signal3, signal4):\n return (signal3.get()+signal4.get() - signal1.get()- signal2.get())/(sum((signal1.get(), signal2.get(), signal3.get(), signal4.get())))"
|
||||
input_signals:
|
||||
- "bcu_bpm1"
|
||||
- "bcu_bpm2"
|
||||
- "bcu_bpm3"
|
||||
- "bcu_bpm4"
|
||||
enabled: true
|
||||
readOnly: false
|
||||
readoutPriority: baseline
|
||||
|
||||
bcu_yasym:
|
||||
description: vertical asymmetry
|
||||
deviceClass: ophyd_devices.ComputedSignal
|
||||
deviceConfig:
|
||||
compute_method: "def compute_xasym(signal1, signal2, signal3, signal4):\n return (signal1.get()+signal2.get() - signal3.get()- signal4.get())/(sum((signal1.get(), signal2.get(), signal3.get(), signal4.get())))"
|
||||
input_signals:
|
||||
- "bcu_bpm1"
|
||||
- "bcu_bpm2"
|
||||
- "bcu_bpm3"
|
||||
- "bcu_bpm4"
|
||||
enabled: true
|
||||
readOnly: false
|
||||
readoutPriority: baseline
|
||||
|
||||
bcu_xpos:
|
||||
description: horizontal position
|
||||
deviceClass: ophyd_devices.ComputedSignal
|
||||
deviceConfig:
|
||||
compute_method: "def compute_xpos(signal1):\n import numpy as np\n return 0.131786+ np.arctanh((signal1.get()-0.007105) /0.99342) / 9.5597 "
|
||||
input_signals:
|
||||
- "bcu_xasym"
|
||||
enabled: true
|
||||
readOnly: false
|
||||
readoutPriority: baseline
|
||||
|
||||
bcu_ypos:
|
||||
description: vertical position
|
||||
deviceClass: ophyd_devices.ComputedSignal
|
||||
deviceConfig:
|
||||
compute_method: "def compute_ypos(signal1):\n import numpy as np\n return -0.20283 + np.arctanh((signal1.get()- (-0.19936)) /0.80653) / (-13.18539)"
|
||||
input_signals:
|
||||
- "bcu_yasym"
|
||||
enabled: true
|
||||
readOnly: false
|
||||
readoutPriority: baseline
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,169 @@
|
||||
name,description,deviceClass,PV,readoutPriority,tag,readOnly,include,userParameter,
|
||||
sls_current,SLS current,SignalRO,ARS07-DPCT-0100:CURR,monitored,SLS,yes,yes,,
|
||||
fe_bpm1,FE XBPM Signal 1,SignalRO,X10SA-FE-XBPM1:Current1:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
fe_bpm2,FE XBPM Signal 2,SignalRO,X10SA-FE-XBPM1:Current2:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
fe_bpm3,FE XBPM Signal 3,SignalRO,X10SA-FE-XBPM1:Current3:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
fe_bpm4,FE XBPM Signal 4,SignalRO,X10SA-FE-XBPM1:Current4:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
fe_bpmsum,FE XBPM Summed,SignalRO,X10SA-FE-XBPM1:SumAll:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
fe_bpm_x,FE BPM X,Motor,X10SA-FE-XBPM1:TRX,baseline,fe,no,yes,,
|
||||
fe_bpm_y,FE BPM Y,Motor,X10SA-FE-XBPM1:TRY,baseline,fe,no,yes,,
|
||||
fe_sl_xr,FE Slit X Ring,Motor,X10SA-FE-SL1:TRXR,baseline,fe,no,yes,,
|
||||
fe_sl_yt,FE Slit Y top,Motor,X10SA-FE-SL1:TRYT,baseline,fe,no,yes,,
|
||||
fe_sl_xw,FE Slit X Wall,Motor,X10SA-FE-SL1:TRXW,baseline,fe,no,yes,,
|
||||
fe_sl_yb,FE SlitY Bottom,Motor,X10SA-FE-SL1:TRYB,baseline,fe,no,yes,,
|
||||
fe_sl_xcen,FE Slit X Centre,Motor,X10SA-FE-SL1:CENTERX,baseline,fe,no,yes,,
|
||||
fe_sl_xsize,FE Slit X Size,Motor,X10SA-FE-SL1:SIZEX,baseline,fe,no,yes,,
|
||||
fe_sl_ycen,FE Slit Y Centre,Motor,X10SA-FE-SL1:CENTERY,baseline,fe,no,yes,,
|
||||
fe_sl_ysize,FE Slit Y Size,Motor,X10SA-FE-SL1:SIZEY,baseline,fe,no,yes,,
|
||||
bsf_bpm1,BSF BPM Signal 1,SignalRO,X10SA-OP-BSFBPM:SIGNAL1,monitored,bpm,yes,no,,
|
||||
bsf_bpm2,BSF BPM Signal 2,SignalRO,X10SA-OP-BSFBPM:SIGNAL2,monitored,bpm,yes,no,,
|
||||
bsf_bpm3,BSF BPM Signal 3,SignalRO,X10SA-OP-BSFBPM:SIGNAL3,monitored,bpm,yes,no,,
|
||||
bsf_bpm4,BSF BPM Signal 4,SignalRO,X10SA-OP-BSFBPM:SIGNAL4,monitored,bpm,yes,no,,
|
||||
bsf_bpmsum,BSF BPM Summed,SignalRO,X10SA-OP-BSFBPM:SUM,monitored,bpm,yes,no,,
|
||||
bsf_sl_xw,BSF slit outboard,Motor,X10SA-OP-BSFSLH:TRXW,baseline,bsf,no,yes,,
|
||||
bsf_sl_xr,BSF slit inboard,Motor,X10SA-OP-BSFSLH:TRXR,baseline,bsf,no,yes,,
|
||||
bsf_sl_yt,BSF slit top,Motor,X10SA-OP-BSFSLV:TRYT,baseline,bsf,no,yes,,
|
||||
bsf_sl_yb,BSF slit bottom,Motor,X10SA-OP-BSFSLV:TRYB,baseline,bsf,no,yes,,
|
||||
bsf_sl_xcen,BSF X centre,Motor,X10SA-OP-BSFSLH:CENTER,baseline,bsf,no,yes,,
|
||||
bsf_sl_xsize,BSF X size,Motor,X10SA-OP-BSFSLH:SIZE,baseline,bsf,no,yes,,
|
||||
bsf_sl_ycen,BSF Y centre,Motor,X10SA-OP-BSFSLV:CENTER,baseline,bsf,no,yes,,
|
||||
bsf_sl_ysize,BSF Y size,Motor,X10SA-OP-BSFSLV:SIZE,baseline,bsf,no,yes,,
|
||||
bsf_f1_y,BSF Filter 1 Y,Motor,X10SA-OP-BSFFI1:TRY,baseline,bsf,no,yes,,
|
||||
bsf_f2_y,BSF Filter 2 Y,Motor,X10SA-OP-BSFFI2:TRY,baseline,bsf,no,yes,,
|
||||
dcm_bragg,DCM Bragg angle,Motor,X10SA-OP-DCM:ROTY,baseline,dcm,no,yes,,
|
||||
dcm_x,DCM lateral,Motor,X10SA-OP-DCM:TRX,baseline,dcm,no,yes,,
|
||||
dcm_perp,DCM Perp,Motor,X10SA-OP-DCM:TRX-CR2,baseline,dcm,no,yes,,
|
||||
dcm_pitch,DCM 2nd crystal pitch,Motor,X10SA-OP-DCM:ROTY-CR2-PITCH,baseline,dcm,no,yes,,
|
||||
dcm_fpitch,DCM 2nd crystal fine pitch,Motor,X10SA-OP-DCM:ROTY-CR2-FINEPITCH,baseline,dcm,no,yes,,
|
||||
dcm_froll,DCM 2nd crystal fine roll,Motor,X10SA-OP-DCM:ROTZ-CR2-FINEROLL,baseline,dcm,no,yes,,
|
||||
lu_bpm1,LU BPM Signal 1,SignalRO,X10SA-OP-LUBPM:Current1:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
lu_bpm2,LU BPM Signal 2,SignalRO,X10SA-OP-LUBPM:Current2:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
lu_bpm3,LU BPM Signal 3,SignalRO,X10SA-OP-LUBPM:Current3:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
lu_bpm4,LU BPM Signal 4,SignalRO,X10SA-OP-LUBPM:Current4:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
lu_bpmsum,LU BPM Summed,SignalRO,X10SA-OP-LUBPM:SumAll:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
lu_bpm_x,BPM2 X translation,Motor,X10SA-OP-LUBPM:TRX,baseline,lu,no,yes,,
|
||||
lu_bpm_y,BPM2 Y translation,Motor,X10SA-OP-LUBPM:TRY,baseline,lu,no,yes,,
|
||||
lu_z1,Lens Z1 Motion,Motor,X10SA-OP-LUTRZ1:TRZ,baseline,lu,no,yes,,
|
||||
lu_z2,Lens Z2 Motion,Motor,X10SA-OP-LUTRZ2:TRZ,baseline,lu,no,yes,,
|
||||
lu_pod1_x,SmarPod1 X,Motor,X10SA-OP-LUPOD1:TRX1,baseline,lu,no,no,,
|
||||
lu_lens1_x2,Lenses1 X,Motor,X10SA-OP-LUPOD1:TRX2,baseline,lu,no,no,,
|
||||
lu_pod1_y,SmarPod1 Y,Motor,X10SA-OP-LUPOD1:TRY,baseline,lu,no,yes,,
|
||||
lu_pod1_z,SmarPod1 Z,Motor,X10SA-OP-LUPOD1:TRZ,baseline,lu,no,yes,,
|
||||
lu_pod1_rotx,SmarPod1 RX,Motor,X10SA-OP-LUPOD1:ROTX,baseline,lu,no,yes,,
|
||||
lu_pod1_roty,SmarPod1 RY,Motor,X10SA-OP-LUPOD1:ROTY,baseline,lu,no,yes,,
|
||||
lu_pod1_rotz,SmarPod1 RZ,Motor,X10SA-OP-LUPOD1:ROTZ,baseline,lu,no,yes,,
|
||||
lu_pod2_x,SmarPod2 X,Motor,X10SA-OP-LUPOD2:TRX1,baseline,lu,no,no,,
|
||||
lu_lens2_x2,Lenses2 X,Motor,X10SA-OP-LUPOD2:TRX2,baseline,lu,no,no,,
|
||||
lu_pod2_y,SmarPod2 Y,Motor,X10SA-OP-LUPOD2:TRY,baseline,lu,no,yes,,
|
||||
lu_pod2_z,SmarPod2 Z,Motor,X10SA-OP-LUPOD2:TRZ,baseline,lu,no,yes,,
|
||||
lu_pod2_rotx,SmarPod2 RX,Motor,X10SA-OP-LUPOD2:ROTX,baseline,lu,no,yes,,
|
||||
lu_pod2_roty,SmarPod2 RY,Motor,X10SA-OP-LUPOD2:ROTY,baseline,lu,no,yes,,
|
||||
lu_pod2_rotz,SmarPod2 RZ,Motor,X10SA-OP-LUPOD2:ROTZ,baseline,lu,no,yes,,
|
||||
ss_bpm1,SS BPM Signal 1,SignalRO,X10SA-ES-SSBPM:Current1:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
ss_bpm2,SS BPM Signal 2,SignalRO,X10SA-ES-SSBPM:Current2:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
ss_bpm3,SS BPM Signal 3,SignalRO,X10SA-ES-SSBPM:Current3:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
ss_bpm4,SS BPM Signal 4,SignalRO,X10SA-ES-SSBPM:Current4:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
ss_bpmsum,SS BPM Summed,SignalRO,X10SA-ES-SSBPM:SumAll:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
ss_bpm_x,SS BPM X,Motor,X10SA-ES-SSBPM:TRX,baseline,ss,no,yes,,
|
||||
ss_bpm_y,SS BPM Y,Motor,X10SA-ES-SSBPM:TRY,baseline,ss,no,yes,,
|
||||
ss_f1_x,SS Filter 1 X,Motor,X10SA-ES-SSFI1:TRX,baseline,ss,no,yes,,
|
||||
ss_f2_x,SS Filter 2 X,Motor,X10SA-ES-SSFI2:TRX,baseline,ss,no,yes,,
|
||||
ss_f3_x,SS Filter 2 X,Motor,X10SA-ES-SSFI3:TRX,baseline,ss,no,yes,,
|
||||
ss_f4_x,SS Filter 4 X,Motor,X10SA-ES-SSFI4:TRX,baseline,ss,no,yes,,
|
||||
ss_sl_xw,SS slit wall,Motor,X10SA-ES-SSSLH:TRXW,baseline,ss,no,yes,,
|
||||
ss_sl_xr,SS slit ring,Motor,X10SA-ES-SSSLH:TRXR,baseline,ss,no,yes,,
|
||||
ss_sl_xcen,SS slit X centre,Motor,X10SA-ES-SSSLH:CENTER,baseline,ss,no,yes,,
|
||||
ss_sl_xsize,SS slit X size,Motor,X10SA-ES-SSSLH:SIZE,baseline,ss,no,yes,,
|
||||
ss_sl_yt,SS slit top,Motor,X10SA-ES-SSSLV:TRYT,baseline,ss,no,yes,,
|
||||
ss_sl_yb,SS slit bottom,Motor,X10SA-ES-SSSLV:TRYB,baseline,ss,no,yes,,
|
||||
ss_sl_ycen,SS slit Y centre,Motor,X10SA-ES-SSSLV:CENTER,baseline,ss,no,yes,,
|
||||
ss_sl_ysize,SS slit Y size,Motor,X10SA-ES-SSSLV:SIZE,baseline,ss,no,yes,,
|
||||
ss_xi_x,SS X-ray eye X,Motor,X10SA-ES-SSXI:TRX,baseline,ss,no,yes,"{""type"": multi-position,""in"": 7.5, ""out"": -2.1}",
|
||||
ss_xi_y,SS X-ray eye Y,Motor,X10SA-ES-SSXI:TRY,baseline,ss,no,yes,,
|
||||
ss_xicam_x,ss cam X,SignalRO,X10SA-ES-SSXI:cam1:Stats5:CentroidX_RBV,baseline,ss,yes,yes,,
|
||||
ss_xicam_y,ss cam Y,SignalRO,X10SA-ES-SSXI:cam1:Stats5:CentroidY_RBV,baseline,ss,yes,yes,,
|
||||
ss_xicam_max,ss cam max value,SignalRO,X10SA-ES-SSXI:cam1:Stats5:MaxValue_RBV,monitored,ss,yes,yes,,
|
||||
ss_xicam_exp,ss camera exposure,Signal,X10SA-ES-SSXI:cam1:AcquireTime,baseline,ss,no,yes,,
|
||||
ss_xicam_gain,ss camera gain,Signal,X10SA-ES-SSXI:cam1:cam1:Gain,baseline,ss,no,yes,,
|
||||
ss_xicam_xsig,ss camera x sigma,Signal,X10SA-ES-SSXI:cam1:Stats5:SigmaX_RBV,baseline,ss,yes,yes,,
|
||||
ss_xicam_ysig,ss camera y sigma,Signal,X10SA-ES-SSXI:cam1:Stats5:SigmaY_RBV,baseline,ss,yes,yes,,
|
||||
vfm_xu,VFM Upstream X,Motor,X10SA-ES-KBV:TRXU,baseline,vfm,no,no,,
|
||||
vfm_xd,VFM Downstream X,Motor,X10SA-ES-KBV:TRXD,baseline,vfm,no,no,,
|
||||
vfm_yur,VFM Upstream Ring Y,Motor,X10SA-ES-KBV:TRYUR,baseline,vfm,no,no,,
|
||||
vfm_yw,VFM Wall Y,Motor,X10SA-ES-KBV:TRYW,baseline,vfm,no,no,,
|
||||
vfm_ydr,VFM Downstream Ring Y,Motor,X10SA-ES-KBV:TRYDR,baseline,vfm,no,no,,
|
||||
vfm_bu,VFM Upstream Bender,Motor,X10SA-ES-KBV:BNDU,baseline,vfm,no,no,,
|
||||
vfm_bd,VFM Downstream Bender,Motor,X10SA-ES-KBV:BNDD,baseline,vfm,no,no,,
|
||||
vfm_yaw,VFM Virtual Yaw,Motor,X10SA-ES-KBV:YAW,baseline,vfm,no,no,,
|
||||
vfm_roll,VFM Virtual Roll,Motor,X10SA-ES-KBV:ROLL,baseline,vfm,no,no,,
|
||||
vfm_pitch,VFM Virtual Pitch,Motor,X10SA-ES-KBV:PITCH,baseline,vfm,no,no,,
|
||||
vfm_x,VFM Virtual X,Motor,X10SA-ES-KBV:TRX,baseline,vfm,no,no,,
|
||||
vfm_y,VFM Virtual Y ,Motor,X10SA-ES-KBV:TRY,baseline,vfm,no,no,,
|
||||
hfm_xu,HFM Upstream X,Motor,X10SA-ES-KBH:TRXU,baseline,hfm,no,no,,
|
||||
hfm_xd,HFM Downstream X,Motor,X10SA-ES-KBH:TRXD,baseline,hfm,no,no,,
|
||||
hfm_yuw,HFM Upstream Wall Y,Motor,X10SA-ES-KBH:TRYUW,baseline,hfm,no,no,,
|
||||
hfm_yr,HFM Ring Y,Motor,X10SA-ES-KBH:TRYR,baseline,hfm,no,no,,
|
||||
hfm_ydw,HFM Downstream Wall Y,Motor,X10SA-ES-KBH:TRYDW,baseline,hfm,no,no,,
|
||||
hfm_bu,HFM Upstream Bender,Motor,X10SA-ES-KBH:BNDU,baseline,hfm,no,no,,
|
||||
hfm_bd,HFM Downstream Bender,Motor,X10SA-ES-KBH:BNDD,baseline,hfm,no,no,,
|
||||
hfm_yaw,HFM Virtual Yaw,Motor,X10SA-ES-KBH:YAW,baseline,hfm,no,no,,
|
||||
hfm_roll,HFM Virtual Roll,Motor,X10SA-ES-KBH:ROLL,baseline,hfm,no,no,,
|
||||
hfm_pitch,HFM Virtual Pitch,Motor,X10SA-ES-KBH:PITCH,baseline,hfm,no,no,,
|
||||
hfm_x,HFM Virtual X,Motor,X10SA-ES-KBH:TRX,baseline,hfm,no,no,,
|
||||
hfm_y,HFM Virtual Y ,Motor,X10SA-ES-KBH:TRY,baseline,hfm,no,no,,
|
||||
bcu_bpm1,BCU BPM Signal 1 ,SignalRO,X10SA-ES-BCBPM:Current1:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
bcu_bpm2,BCU BPM Signal 2,SignalRO,X10SA-ES-BCBPM:Current2:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
bcu_bpm3,BCU BPM Signal 3,SignalRO,X10SA-ES-BCBPM:Current3:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
bcu_bpm4,BCU BPM Signal 4,SignalRO,X10SA-ES-BCBPM:Current4:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
bcu_bpmsum,BCU BPM Summed,SignalRO,X10SA-ES-BCBPM:SumAll:MeanValue_RBV,monitored,bpm,yes,yes,,
|
||||
bcu_bpm_x,BCU BPM X,Motor,X10SA-ES-BCBPM:TRX,baseline,bcu,no,yes,,
|
||||
bcu_bpm_y,BCU BPM Y ,Motor,X10SA-ES-BCBPM:TRY,baseline,bcu,no,yes,,
|
||||
bcu_sl_xw,BCU slit wall,Motor,X10SA-ES-BCSLH:TRXW,baseline,bcu,no,no,,
|
||||
bcu_sl_xr,BCU slit ring,Motor,X10SA-ES-BCSLH:TRXR,baseline,bcu,no,no,,
|
||||
bcu_sl_xcen,BCU slit X centre,Motor,X10SA-ES-BCSLH:CENTER,baseline,bcu,no,no,,
|
||||
bcu_sl_xsize,BCU slit X size,Motor,X10SA-ES-BCSLH:SIZEX,baseline,bcu,no,no,,
|
||||
bcu_sl_yt,BCU slit top,Motor,X10SA-ES-BCSLV:TRYT,baseline,bcu,no,no,,
|
||||
bcu_sl_yb,BCU slit bottom,Motor,X10SA-ES-BCSLV:TRYB,baseline,bcu,no,no,,
|
||||
bcu_sl_ycen,BCU slit Y centre,Motor,X10SA-ES-BCSLV:CENTER,baseline,bcu,no,no,,
|
||||
bcu_sl_ysize,BCU slit Y size,Motor,X10SA-ES-BCSLV:SIZE,baseline,bcu,no,no,,
|
||||
xrf_pos,XRF det in/out,Signal,X10SA-ES-XRF:POS-SET,baseline,se,no,yes,"{""type"":positioner}",
|
||||
samcam_x,sample cam X ,SignalRO,X10SA-ES-MS:Stats5:CentroidX_RBV,baseline,scam,yes,yes,,
|
||||
samcam_xsig,sample cam X sigma,SignalRO,X10SA-ES-MS:Stats5:SigmaX_RBV,monitored,scam,yes,yes,,
|
||||
samcam_y,sample cam Y ,SignalRO,X10SA-ES-MS:Stats5:CentroidY_RBV,baseline,scam,yes,yes,,
|
||||
samcam_ysig,sample cam Y sigma,SignalRO,X10SA-ES-MS:Stats5:SigmaY_RBV,monitored,scam,yes,yes,,
|
||||
samcam_max,sample cam max value,SignalRO,X10SA-ES-MS:Stats5:MaxValue_RBV,monitored,scam,yes,yes,,
|
||||
samcam_exp,sample cam exp time,Signal,X10SA-ES-MS:cam1:AcquireTime,baseline,scam,no,yes,,
|
||||
samcam_gain,sample cam gain,Signal,X10SA-ES-MS:cam1:Gain,baseline,scam,no,yes,,
|
||||
scam_zoom,Sample cam zoom,Motor,X10SA-ES-MS:ZOOM,baseline,scam,no,yes,,
|
||||
fl_bright,Frontlight brightness,Signal,X10SA-ES-FL:SET,baseline,se,no,yes,,
|
||||
coll_x,Collimator X,Motor,X10SA-ES-COL:TRX,baseline,se,no,yes,,
|
||||
coll_y,Collimator Y,Motor,X10SA-ES-COL:TRY,baseline,se,no,yes,"{""type"": multi-position, ""in"": 41.5, ""out"": 20.0, ""park"": 0,""tol"":0.05}",
|
||||
diag_y,Scintillator/diode Y,Motor,X10SA-ES-SCL:TRY,baseline,se,no,yes,"{""type"": multi-position, ""scint"": 38.62, ""i1"": 44.0, ""out"": 20.0,""park"": 0,""tol"":0.3}",
|
||||
diag_z,Scintillator/diode Z,Motor,X10SA-ES-SCL:TRZ,baseline,se,no,yes,,
|
||||
i1,i1 diode reading,SignalRO,X10SA-ES-SCLDI:READOUT,monitored,bpm,yes,yes,,
|
||||
bl_pos,Backlight positioner,Signal,X10SA-ES-BL:POS-SET,baseline,se,no,yes,"{""type"":positioner}",
|
||||
bl_bright,Backlight brightness,Signal,X10SA-ES-BL:SET,baseline,se,no,yes,,
|
||||
bs_x,Beamstop X,Motor,X10SA-ES-BS:TRX,baseline,se,no,yes,,
|
||||
bs_y,Beamstop Y,Motor,X10SA-ES-BS:TRY,baseline,se,no,yes,,
|
||||
bs_z,Beamstop Z,Motor,X10SA-ES-BS:TRZ,baseline,se,no,yes,"{""type"": guarded, ""min"": 13, ""samp"": 15, ""work_min"": 20, ""safe"": 41, ""max_blin"": 42, ""max_blout"": 70}",
|
||||
bs_pos,Beamstop positioner,Signal,X10SA-ES-BS:POS-SET,baseline,se,no,yes,"{""type"":positioner}",
|
||||
gon_x,Goniometer X,Motor,X10SA-ES-DF1:TRX1,baseline,det,no,yes,"{""type"": guarded, ""in"": 18.0, ""out"": -10.0, ""safe"": -100,""tol"":0.5}",
|
||||
gon_y,Goniometer Y,Motor,X10SA-ES-DF1:TRY1,baseline,det,no,yes,,
|
||||
gon_z,Goniometer X,Motor,X10SA-ES-DF1:TRZ1,baseline,det,no,yes,,
|
||||
omega,Omega,Motor,X10SA-ES-DF1:ROTU,baseline,det,no,yes,,
|
||||
cryo_pos,Cryo positioner,Signal,X10SA-ES-CS:POS-SET,baseline,se,no,yes,"{""type"":positioner}",
|
||||
cryo_x,Cryojet X ,Motor,X10SA-ES-CS:TRX,baseline,se,no,yes,,
|
||||
det_xi_focus,X-ray eye 2 Focus,Motor,X10SA-ES-XEYE:FOCUS,baseline,det,no,yes,,
|
||||
det_xi_zoom,X-ray eye 2 Zoom,Motor,X10SA-ES-XEYE:ZOOM,baseline,det,no,yes,,
|
||||
det_xi_x,X-ray eye X,Motor,X10SA-ES-XEYE:TRX,baseline,det,no,yes,,
|
||||
i2,i2,SignalRO,X10SA-ES-XEYEDI:READOUT,monitored,bpm,yes,yes,,
|
||||
det_xicam_x,sample cam X ,SignalRO,X10SA-ES-XEYE:cam1:Stats5:CentroidX_RBV,baseline,scam,yes,no,,
|
||||
det_xicam_xsig,sample cam X sigma,SignalRO,X10SA-ES-XEYE:cam1:Stats5:SigmaX_RBV,monitored,scam,yes,no,,
|
||||
det_xicam_y,sample cam Y ,SignalRO,X10SA-ES-XEYE:cam1:Stats5:CentroidY_RBV,baseline,scam,yes,no,,
|
||||
det_xicam_ysig,sample cam Y sigma,SignalRO,X10SA-ES-XEYE:cam1:Stats5:SigmaY_RBV,monitored,scam,yes,no,,
|
||||
det_xicam_max,sample cam max value,SignalRO,X10SA-ES-XEYE:cam1:Stats5:MaxValue_RBV,monitored,scam,yes,no,,
|
||||
det_xicam_exp,sample cam exp time,Signal,X10SA-ES-XEYE:cam1:cam1:AcquireTime,baseline,scam,no,no,,
|
||||
det_xicam_gain,sample cam gain,Signal,X10SA-ES-XEYE:cam1:cam1:Gain,baseline,scam,no,no,,
|
||||
det_cov,Detector cover,Signal,X10SA-ES-DETCOV:SET,baseline,det,no,yes,"{""type"":positioner}",
|
||||
det_y,Detector Y,Motor,X10SA-ES-DET:TRY,baseline,det,no,yes,,
|
||||
det_z,Detector Z,Motor,X10SA-ES-DET:TRZ,baseline,det,no,yes,,
|
||||
|
@@ -10,39 +10,6 @@ id_gap:
|
||||
enabled: true
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
coll_x:
|
||||
description: Collimator X
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-ES-COL:TRX'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: baseline
|
||||
deviceTags:
|
||||
- se
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
dcm_fpitch:
|
||||
description: DCM 2nd crystal fine pitch
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-DCM:PITCH-C2'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: baseline
|
||||
deviceTags:
|
||||
- dcm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
dcm_froll:
|
||||
description: DCM 2nd crystal fine roll
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig: {prefix: 'X10SA-OP-DCM:ROLL-C2'}
|
||||
onFailure: buffer
|
||||
enabled: True
|
||||
readoutPriority: baseline
|
||||
deviceTags:
|
||||
- dcm
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
|
||||
smargon:
|
||||
description: REST-based device which connects to Smargopolo
|
||||
@@ -55,4 +22,4 @@ smargon:
|
||||
- smargon
|
||||
- motors
|
||||
readOnly: false
|
||||
softwareTrigger: false
|
||||
softwareTrigger: false
|
||||
|
||||
+120
-139
@@ -45,12 +45,7 @@ def a2e(a, *hkl):
|
||||
if "deg" in hkl:
|
||||
ideg = 1
|
||||
|
||||
d0 = (
|
||||
2
|
||||
* 5.43102
|
||||
* (1 - 2.4e-4 * iln)
|
||||
/ np.sqrt(h[0] ** 2.0 + h[1] ** 2.0 + h[2] ** 2.0)
|
||||
)
|
||||
d0 = 2 * 5.43102 * (1 - 2.4e-4 * iln) / np.sqrt(h[0] ** 2.0 + h[1] ** 2.0 + h[2] ** 2.0)
|
||||
|
||||
if ideg or (a > 1):
|
||||
a = math.radians(a) # *math.pi/180.
|
||||
@@ -91,12 +86,7 @@ def angle(e, *hkl):
|
||||
if "deg" in hkl:
|
||||
ideg = 1
|
||||
|
||||
d0 = (
|
||||
2
|
||||
* 5.43102
|
||||
* (1 - 2.4e-4 * iln)
|
||||
/ np.sqrt(h[0] ** 2.0 + h[1] ** 2.0 + h[2] ** 2.0)
|
||||
)
|
||||
d0 = 2 * 5.43102 * (1 - 2.4e-4 * iln) / np.sqrt(h[0] ** 2.0 + h[1] ** 2.0 + h[2] ** 2.0)
|
||||
a = math.asin(12.39842 / d0 / e)
|
||||
|
||||
if ideg:
|
||||
@@ -149,7 +139,7 @@ def rock(**kwargs):
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
dock_area = bec.gui.new()
|
||||
wr = dock_area.new(bec.gui.available_widgets.Waveform)
|
||||
wr = dock_area.new().new(bec.gui.available_widgets.Waveform)
|
||||
|
||||
# width of rocking curve of perfect xtal: at 20 keV: 14 urad == 0.0008 deg
|
||||
|
||||
@@ -206,7 +196,7 @@ def rock(**kwargs):
|
||||
s = scans.line_scan(mot, -dx, dx, steps=50, exp_time=time, relative=True)
|
||||
# md = scan.metadata["bec"]
|
||||
wr.title = f"RockingScan at Energy of {e}"
|
||||
wr.plot(device_x=mot.name, device_y=det.name) ##set names/axes first !
|
||||
wr.plot(x_name=mot.name, y_name=det.name) ##set names/axes first !
|
||||
wr.x_label = mot.name
|
||||
wr.y_label = det.name
|
||||
if ax == 0:
|
||||
@@ -263,13 +253,7 @@ def justfit(data_x, data_y, model="gauss", ibg=0):
|
||||
gfit, xmax = justfit(data_x, data_y, model = "lorentz", ibg =0) : Lorentzian, no BG
|
||||
"""
|
||||
|
||||
from lmfit.models import (
|
||||
LinearModel,
|
||||
GaussianModel,
|
||||
VoigtModel,
|
||||
QuadraticModel,
|
||||
LorentzianModel,
|
||||
)
|
||||
from lmfit.models import LinearModel, GaussianModel, VoigtModel, QuadraticModel, LorentzianModel
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
peak = GaussianModel()
|
||||
@@ -338,20 +322,12 @@ def fit_plothist(hindex: int, signal_name: str, model="gauss", ibg=0):
|
||||
|
||||
"""
|
||||
|
||||
from lmfit.models import (
|
||||
LinearModel,
|
||||
GaussianModel,
|
||||
VoigtModel,
|
||||
QuadraticModel,
|
||||
LorentzianModel,
|
||||
)
|
||||
from lmfit.models import LinearModel, GaussianModel, VoigtModel, QuadraticModel, LorentzianModel
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
h = bec.history[hindex]
|
||||
md = h.metadata["bec"]
|
||||
scanvar = list(md["args"].keys())[
|
||||
0
|
||||
] # string, returns the variable of the last performed scan
|
||||
scanvar = list(md["args"].keys())[0] # string, returns the variable of the last performed scan
|
||||
# data = h.devices[device_name][signal].read()["value"]
|
||||
# data_x = h.devices.dcm_pitch.dcm_pitch.read()["value"]
|
||||
# data_y = h.devices.lu_bpmsum.lu_bpmsum.read()["value"]
|
||||
@@ -442,9 +418,9 @@ def fit_plot(data_x, data_y, model="gauss", ibg=1, fitrange=0, fitclick=0):
|
||||
sigma = 1.0
|
||||
gamma = 0.2 # blurring/widening of the sigma ; the larger, the more of a Lorentzian profile
|
||||
print("maxy, indmax, xm = ", maxy, indmax, xm)
|
||||
#p = model.make_params(
|
||||
# p = model.make_params(
|
||||
# amplitude=max(data_y), center=xm, slope=0, intercept=min(data_y)
|
||||
#)
|
||||
# )
|
||||
p = model.make_params(amplitude=maxy, center=xm)
|
||||
p["center"].set(min=min(data_x), max=max(data_x))
|
||||
p["sigma"].set(min=0, max=(max(data_x) - min(data_x)) / 2.0)
|
||||
@@ -541,7 +517,7 @@ def save_data(hindex: int, device_name: str, signal_name: str):
|
||||
ans = "n"
|
||||
ans = input("Store data in csv file? y/n ")
|
||||
if ans == "y":
|
||||
dirname = "/home/gac-x10sa/Data/"
|
||||
dirname = "/sls/x10sa/config/commissioning/Data/"
|
||||
# writing output to simple data file for later analysis:
|
||||
combined = np.column_stack((data_x, data_y))
|
||||
filename = dirname + "Scan" + str(hindex) + device_name + ".txt"
|
||||
@@ -645,7 +621,7 @@ def save_plot_gaps(hindex: int, device_name: str, signal_name: str):
|
||||
|
||||
plt.show()
|
||||
|
||||
dirname = "/home/gac-x10sa/Data/"
|
||||
dirname = "/sls/x10sa/config/commissioning/Data/"
|
||||
# writing output to simple data file for later analysis:
|
||||
combined = np.column_stack((en_vec, data_y))
|
||||
filename = dirname + "EnScan" + str(hindex) + ".txt"
|
||||
@@ -668,7 +644,8 @@ def getdiodepos(diode="i1"):
|
||||
"""
|
||||
|
||||
diode_in = 1
|
||||
dpos = 44 # mm
|
||||
dpos = dev.diag_y.user_parameter["i1"] # 44 # mm
|
||||
|
||||
measdev = dev.scin_y
|
||||
diodepos_rb = measdev.user_readback.get()
|
||||
if abs(dpos - diodepos_rb) > 0.1:
|
||||
@@ -692,7 +669,7 @@ def read_mon():
|
||||
e = getenergy()
|
||||
fesum = dev.fe_bpmsum.read()["fe_bpmsum"]["value"]
|
||||
lusum = dev.lu_bpmsum.read()["lu_bpmsum"]["value"]
|
||||
bscsum = dev.bsc_bpmsum.read()["bsc_bpmsum"]["value"]
|
||||
sssum = dev.ss_bpmsum.read()["ss_bpmsum"]["value"]
|
||||
|
||||
# Mono
|
||||
bragg = dev.dcm_bragg.read()["dcm_bragg"]["value"]
|
||||
@@ -727,24 +704,24 @@ def read_mon():
|
||||
fe_sy_size = dev.fe_sysize.read()["fe_sysize"]["value"]
|
||||
|
||||
## BSF slits centre and size
|
||||
s1_xcen = dev.s1_xcen.read()["s1_xcen"]["value"]
|
||||
s1_xsize = dev.s1_xsize.read()["s1_xsize"]["value"]
|
||||
s1_ycen = dev.s1_ycen.read()["s1_ycen"]["value"]
|
||||
s1_ysize = dev.s1_ysize.read()["s1_ysize"]["value"]
|
||||
bsf_xcen = dev.bsf_sl_xcen.read()["bsf_sl_xcen"]["value"]
|
||||
bsf_xsize = dev.bsf_sl_xsize.read()["bsf_sl_xsize"]["value"]
|
||||
bsf_ycen = dev.bsf_sl_ycen.read()["bsf_sl_ycen"]["value"]
|
||||
bsf_ysize = dev.bsf_sl_ysize.read()["bsf_sl_ysize"]["value"]
|
||||
|
||||
## BSC slits centre and size
|
||||
s2_xcen = dev.s2_xcen.read()["s2_xcen"]["value"]
|
||||
s2_xsize = dev.s2_xsize.read()["s2_xsize"]["value"]
|
||||
s2_ycen = dev.s2_ycen.read()["s2_ycen"]["value"]
|
||||
s2_ysize = dev.s2_ysize.read()["s2_ysize"]["value"]
|
||||
## SS slits centre and size
|
||||
ss_sl_xcen = dev.ss_sl_xcen.read()["ss_sl_xcen"]["value"]
|
||||
ss_sl_xsize = dev.ss_sl_xsize.read()["ss_sl_xsize"]["value"]
|
||||
ss_sl_ycen = dev.ss_sl_ycen.read()["ss_sl_ycen"]["value"]
|
||||
ss_sl_ysize = dev.ss_sl_ysize.read()["ss_sl_ysize"]["value"]
|
||||
|
||||
## BCU slits centre and size
|
||||
s3_xcen = dev.s3_xcen.read()["s3_xcen"]["value"]
|
||||
s3_xsize = dev.s3_xsize.read()["s3_xsize"]["value"]
|
||||
s3_ycen = dev.s3_ycen.read()["s3_ycen"]["value"]
|
||||
s3_ysize = dev.s3_ysize.read()["s3_ysize"]["value"]
|
||||
bcu_sl_xcen = dev.bcu_sl_xcen.read()["bcu_sl_xcen"]["value"]
|
||||
bcu_sl_xsize = dev.bcu_sl_xsize.read()["bcu_sl_xsize"]["value"]
|
||||
bcu_sl_ycen = dev.bcu_sl_ycen.read()["bcu_sl_ycen"]["value"]
|
||||
bcu_sl_ysize = dev.bcu_sl_ysize.read()["bcu_sl_ysize"]["value"]
|
||||
|
||||
## move in screen in BSC chamber and get size and position
|
||||
## move in screen in SS chamber and get size and position
|
||||
## move out again
|
||||
|
||||
# umv(dev.samcam_xmot, 1)
|
||||
@@ -767,12 +744,10 @@ def read_mon():
|
||||
bcusum = dev.bcu_bpmsum.read()["bcu_bpmsum"]["value"]
|
||||
i1signal = dev.i1.read()["i1"]["value"]
|
||||
print("Energy = ", e, " keV")
|
||||
print(f"fesum,lusum,bscsum,bcusum,i1signal = {fesum,lusum,bscsum,bcusum,i1signal}")
|
||||
print(f"fesum,lusum,sssum,bcusum,i1signal = {fesum,lusum,sssum,bcusum,i1signal}")
|
||||
|
||||
print(
|
||||
f"bragg, pitch, perp, fpitch, froll, gap = {bragg, pitch,perp, fpitch, froll, gap}"
|
||||
)
|
||||
# return e, fesum,lusum,bscsum,bcusum,i1signal
|
||||
print(f"bragg, pitch, perp, fpitch, froll, gap = {bragg, pitch,perp, fpitch, froll, gap}")
|
||||
# return e, fesum,lusum,sssum,bcusum,i1signal
|
||||
print("KB VERT")
|
||||
print(
|
||||
f"vbu, vbd, vbpitch,vbyaw,vbroll,vblat,vbvert = {vbu, vbd, vbpitch,vbyaw,vbroll,vblat,vbvert}"
|
||||
@@ -786,7 +761,7 @@ def read_mon():
|
||||
## dump status in CSV
|
||||
|
||||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||||
dirname = "/home/gac-x10sa/Data/"
|
||||
dirname = "/sls/x10sa/config/commissioning/Data/"
|
||||
filename = dirname + f"BLstatus_{timestamp}.txt"
|
||||
with open(filename, "w") as f:
|
||||
combined = np.column_stack((e, gap))
|
||||
@@ -810,19 +785,19 @@ def read_mon():
|
||||
np.savetxt(f, combined, delimiter=",", fmt="%5f")
|
||||
|
||||
f.write("BSF slits\n")
|
||||
combined = np.column_stack((s1_xcen, s1_xsize, s1_ycen, s1_ysize))
|
||||
combined = np.column_stack((bsf_sl_xcen, bsf_sl_xsize, bsf_sl_ycen, bsf_sl_ysize))
|
||||
np.savetxt(f, combined, delimiter=",", fmt="%5f")
|
||||
|
||||
f.write("BSC slits\n")
|
||||
combined = np.column_stack((s2_xcen, s2_xsize, s2_ycen, s2_ysize))
|
||||
f.write("SS slits\n")
|
||||
combined = np.column_stack((ss_sl_xcen, ss_sl_xsize, ss_sl_ycen, ss_sl_ysize))
|
||||
np.savetxt(f, combined, delimiter=",", fmt="%5f")
|
||||
|
||||
f.write("BCU slits\n")
|
||||
combined = np.column_stack((s3_xcen, s3_xsize, s3_ycen, s3_ysize))
|
||||
combined = np.column_stack((bcu_sl_xcen, bcu_sl_xsize, bcu_sl_ycen, bcu_sl_ysize))
|
||||
np.savetxt(f, combined, delimiter=",", fmt="%5f")
|
||||
|
||||
f.write("fesum,lusum,bscsum,bcusum,i1signal\n")
|
||||
combined = np.column_stack((fesum, lusum, bscsum, bcusum, i1signal))
|
||||
f.write("fesum,lusum,sssum,bcusum,i1signal\n")
|
||||
combined = np.column_stack((fesum, lusum, sssum, bcusum, i1signal))
|
||||
np.savetxt(f, combined, delimiter=",", fmt="%5f")
|
||||
|
||||
return
|
||||
@@ -840,33 +815,23 @@ def longscan():
|
||||
|
||||
umv(dev.id_gap, 4.5)
|
||||
time.sleep(0.2)
|
||||
s = scans.line_scan(
|
||||
dev.dcm_bragg, 406.5, 65.9, steps=1500, exp_time=0.05, relative=False
|
||||
)
|
||||
s = scans.line_scan(dev.dcm_bragg, 406.5, 65.9, steps=1500, exp_time=0.05, relative=False)
|
||||
time.sleep(2)
|
||||
umv(dev.id_gap, 5.0)
|
||||
time.sleep(0.2)
|
||||
s = scans.line_scan(
|
||||
dev.dcm_bragg, 65.9, 406.5, steps=1500, exp_time=0.05, relative=False
|
||||
)
|
||||
s = scans.line_scan(dev.dcm_bragg, 65.9, 406.5, steps=1500, exp_time=0.05, relative=False)
|
||||
time.sleep(2)
|
||||
umv(dev.id_gap, 5.5)
|
||||
time.sleep(0.2)
|
||||
s = scans.line_scan(
|
||||
dev.dcm_bragg, 406.5, 65.9, steps=1500, exp_time=0.05, relative=False
|
||||
)
|
||||
s = scans.line_scan(dev.dcm_bragg, 406.5, 65.9, steps=1500, exp_time=0.05, relative=False)
|
||||
time.sleep(2)
|
||||
umv(dev.id_gap, 6.0)
|
||||
time.sleep(0.2)
|
||||
s = scans.line_scan(
|
||||
dev.dcm_bragg, 65.9, 406.5, steps=1500, exp_time=0.05, relative=False
|
||||
)
|
||||
s = scans.line_scan(dev.dcm_bragg, 65.9, 406.5, steps=1500, exp_time=0.05, relative=False)
|
||||
time.sleep(2)
|
||||
umv(dev.id_gap, 6.5)
|
||||
time.sleep(0.2)
|
||||
s = scans.line_scan(
|
||||
dev.dcm_bragg, 406.5, 65.9, steps=1500, exp_time=0.05, relative=False
|
||||
)
|
||||
s = scans.line_scan(dev.dcm_bragg, 406.5, 65.9, steps=1500, exp_time=0.05, relative=False)
|
||||
|
||||
|
||||
#####################
|
||||
@@ -890,15 +855,15 @@ def colliscan(direction: str, range=0.3, nsteps=30, stime=0.5, centre=1):
|
||||
import sys
|
||||
|
||||
dock_area = bec.gui.new()
|
||||
wr = dock_area.new(bec.gui.available_widgets.Waveform)
|
||||
wr = dock_area.new().new(bec.gui.available_widgets.Waveform)
|
||||
|
||||
# check if i1 DIODE is IN
|
||||
# if not, aks to be moved
|
||||
|
||||
diodeinpos = 44 # mm
|
||||
colli_up = 41 # mm
|
||||
diodeinpos = dev.diag_y.user_parameter["i1"] # 44 # mm
|
||||
colli_up = dev.coll_y.user_parameter["in"] # 41.5 # mm
|
||||
|
||||
measdev = dev.scin_y
|
||||
measdev = dev.diag_y
|
||||
diodepos_rb = measdev.user_readback.get()
|
||||
if abs(diodeinpos - diodepos_rb) > 0.1:
|
||||
print("Diode not in, please move")
|
||||
@@ -999,32 +964,32 @@ def slitscan(device_location: str, direction: str, range: 1, nsteps=50, centre=0
|
||||
default_h = 3.0 # 8125
|
||||
default_v = 3.0 # ??? close more ???? # 8149.8
|
||||
det = dev.lu_bpmsum
|
||||
# det = dev.bsc_bpmsum or #det = dev.bcu_bpmsum would also work
|
||||
# det = dev.ss_bpmsum or #det = dev.bcu_bpmsum would also work
|
||||
if direction == "h":
|
||||
mot = dev.s1_xcen
|
||||
size = dev.s1_xsize
|
||||
mot = dev.bsf_sl_xcen
|
||||
size = dev.bsf_sl_xsize
|
||||
s_closed = 0.1
|
||||
s_open = default_h
|
||||
else:
|
||||
mot = dev.s1_ycen
|
||||
size = dev.s1_ysize
|
||||
mot = dev.bsf_sl_ycen
|
||||
size = dev.bsf_sl_ysize
|
||||
s_closed = 0.1
|
||||
s_open = default_v
|
||||
|
||||
# BSC slits ================================
|
||||
# SS slits ================================
|
||||
|
||||
if device_location in ["bsc", "s2", "ss"]:
|
||||
if device_location in ["ss", "ss_sl", "ss"]:
|
||||
default_h = 6.0 # ???
|
||||
default_v = 5.0 # ??? close more ???? # 8149.8
|
||||
det = dev.bcu_bpmsum
|
||||
if direction == "h":
|
||||
mot = dev.s2_xcen
|
||||
size = dev.s2_xsize
|
||||
mot = dev.ss_sl_xcen
|
||||
size = dev.ss_sl_xsize
|
||||
s_closed = 0.1
|
||||
s_open = default_h
|
||||
else:
|
||||
mot = dev.s2_ycen
|
||||
size = dev.s2_ysize
|
||||
mot = dev.ss_sl_ycen
|
||||
size = dev.ss_sl_ysize
|
||||
s_closed = 0.1
|
||||
s_open = default_v
|
||||
|
||||
@@ -1035,20 +1000,20 @@ def slitscan(device_location: str, direction: str, range: 1, nsteps=50, centre=0
|
||||
default_v = 2.0 # ??? close more ???? # 8149.8
|
||||
# change to i0 later ??
|
||||
det = dev.i1
|
||||
dposm = 43.8
|
||||
dposm = dev.diag_y.user_parameter["i1"]
|
||||
# dpos0 = dev.scin_y.user_readback.get()
|
||||
# if abs(dposm - dpos0) > 1:
|
||||
# print("moving diode i1 in")
|
||||
# umv(dev.scin_y, dposm)
|
||||
|
||||
if direction == "h":
|
||||
mot = dev.s3_xcen
|
||||
size = dev.s3_xsize
|
||||
mot = dev.bcu_sl_xcen
|
||||
size = dev.bcu_sl_xsize
|
||||
s_closed = 3.0 ## very large, else does not work !
|
||||
s_open = default_h
|
||||
else:
|
||||
mot = dev.s3_ycen
|
||||
size = dev.s3_ysize
|
||||
mot = dev.bcu_sl_ycen
|
||||
size = dev.bcu_sl_ysize
|
||||
s_closed = 3.0 ## very large !
|
||||
s_open = default_v
|
||||
|
||||
@@ -1064,14 +1029,14 @@ def slitscan(device_location: str, direction: str, range: 1, nsteps=50, centre=0
|
||||
return
|
||||
|
||||
dock_area = bec.gui.new()
|
||||
wr = dock_area.new(bec.gui.available_widgets.Waveform)
|
||||
wr = dock_area.new().new(bec.gui.available_widgets.Waveform)
|
||||
|
||||
pos0 = mot.user_readback.get()
|
||||
siz0 = size.user_readback.get()
|
||||
umv(size, s_closed)
|
||||
|
||||
s = scans.line_scan(mot, -dx, dx, steps=nsteps, exp_time=time, relative=True)
|
||||
wr.plot(device_x=mot.name, device_y=det.name)
|
||||
wr.plot(x_name=mot.name, y_name=det.name)
|
||||
wr.x_label = mot.name
|
||||
wr.y_label = det.name
|
||||
|
||||
@@ -1088,25 +1053,25 @@ def slitscan(device_location: str, direction: str, range: 1, nsteps=50, centre=0
|
||||
if mot.name == "fe_sycen":
|
||||
data_x = s.scan.live_data.fe_sycen.fe_sycen.val
|
||||
# BSF slits ================================
|
||||
if mot.name == "s1_xcen":
|
||||
data_x = s.scan.live_data.s1_xcen.s1_xcen.val
|
||||
if mot.name == "s1_ycen":
|
||||
data_x = s.scan.live_data.s1_ycen.s1_ycen.val
|
||||
if mot.name == "bsf_sl_xcen":
|
||||
data_x = s.scan.live_data.bsf_sl_xcen.bsf_sl_xcen.val
|
||||
if mot.name == "bsf_ycen":
|
||||
data_x = s.scan.live_data.bsf_sl_ycen.bsf_sl_ycen.val
|
||||
|
||||
# BSC slits ================================
|
||||
if mot.name == "s2_xcen":
|
||||
data_x = s.scan.live_data.s2_xcen.s2_xcen.val
|
||||
# SS slits ================================
|
||||
if mot.name == "ss_sl_xcen":
|
||||
data_x = s.scan.live_data.ss_sl_xcen.ss_sl_xcen.val
|
||||
data_y = s.scan.live_data.bcu_bpmsum.bcu_bpmsum.val
|
||||
if mot.name == "s2_ycen":
|
||||
data_x = s.scan.live_data.s2_ycen.s2_ycen.val
|
||||
if mot.name == "ss_sl_ycen":
|
||||
data_x = s.scan.live_data.ss_sl_ycen.ss_sl_ycen.val
|
||||
data_y = s.scan.live_data.bcu_bpmsum.bcu_bpmsum.val
|
||||
|
||||
# BCU slits ================================
|
||||
if mot.name == "s3_xcen":
|
||||
data_x = s.scan.live_data.s3_xcen.s3_xcen.val
|
||||
if mot.name == "bcu_sl_xcen":
|
||||
data_x = s.scan.live_data.bcu_sl_xcen.bcu_sl_xcen.val
|
||||
data_y = s.scan.live_data.i1.i1.val
|
||||
if mot.name == "s3_ycen":
|
||||
data_x = s.scan.live_data.s3_ycen.s3_ycen.val
|
||||
if mot.name == "bcu_sl_ycen":
|
||||
data_x = s.scan.live_data.bcu_sl_ycen.bcu_sl_ycen.val
|
||||
data_y = s.scan.live_data.i1.i1.val
|
||||
|
||||
# change to i0 later ??
|
||||
@@ -1161,9 +1126,7 @@ def kbfocus(sizex, sizey):
|
||||
|
||||
en = getenergy()
|
||||
print(f"Energy is {en} keV")
|
||||
print(
|
||||
"Currently only 2 sizes supported, small approx.(2 x 2.7) and medium approx.(40 x 40)"
|
||||
)
|
||||
print("Currently only 2 sizes supported, small approx.(2 x 2.7) and medium approx.(40 x 40)")
|
||||
|
||||
## is the pitch ok ?
|
||||
vpitch = 2.695
|
||||
@@ -1261,11 +1224,9 @@ def bstatus():
|
||||
#
|
||||
dock_area = bec.gui.new()
|
||||
|
||||
dbrowser = dock_area.new(
|
||||
bec.gui.available_widgets.DeviceBrowser, object_name="device_browser"
|
||||
)
|
||||
dbrowser = dock_area.new("device_browser").new(bec.gui.available_widgets.DeviceBrowser)
|
||||
|
||||
dock_area.new(bec.gui.available_widgets.BECQueue, object_name="queue")
|
||||
dock_area.new("queue").new(bec.gui.available_widgets.BECQueue)
|
||||
# queue = dock_area.queue.BECQueue # give it a name
|
||||
# text_box = dock_area.new().new(widget=bec.gui.available_widgets.TextBox)
|
||||
# text_box.set_plain_text("Hello, World!")
|
||||
@@ -1307,15 +1268,15 @@ def detxeye_in():
|
||||
|
||||
print("moving X-ray eye below Eiger in")
|
||||
|
||||
xrpos = dev.xeye2_x.user_readback.get()
|
||||
xrpos = dev.det_xi_x.user_readback.get()
|
||||
if abs(setxrpos - xrpos) > 1:
|
||||
umv(dev.xeye2_x, setxrpos)
|
||||
zoompos = dev.xeye2_zoom.user_readback.get()
|
||||
umv(dev.det_xi_x, setxrpos)
|
||||
zoompos = dev.det_xi_zoom.user_readback.get()
|
||||
if abs(setzoom - zoompos) > 1:
|
||||
umv(dev.xeye2_zoom, setzoom)
|
||||
focpos = dev.xeye2_focus.user_readback.get()
|
||||
umv(dev.det_xi_zoom, setzoom)
|
||||
focpos = dev.det_xi_focus.user_readback.get()
|
||||
if abs(setfoc - focpos) > 1:
|
||||
umv(dev.xeye2_focus, setfoc)
|
||||
umv(dev.det_xi_focus, setfoc)
|
||||
|
||||
|
||||
def detxeye_out():
|
||||
@@ -1352,20 +1313,20 @@ def measure_samcam(zoom=1000):
|
||||
return sx, sy
|
||||
|
||||
|
||||
def measure_bsccam():
|
||||
x_inpos = 7 # mm
|
||||
def measure_sscam():
|
||||
x_inpos = dev.ss_xi_x.user_parameter["in"] # 7 # mm
|
||||
px2mum = 20
|
||||
scpos_rb = dev.xeye_x.user_readback.get()
|
||||
scpos_rb = dev.ss_xi_x.user_readback.get()
|
||||
if abs(x_inpos - scpos_rb) > 0.3:
|
||||
print("Scinti not in, please move")
|
||||
sys.exit(0)
|
||||
|
||||
auto_exposure(cam="bsccam", target=200)
|
||||
a = dev.bsccam_xsig.read()["bsccam_xsig"]["value"]
|
||||
b = dev.bsccam_ysig.read()["bsccam_ysig"]["value"]
|
||||
auto_exposure(cam="sscam", target=200)
|
||||
a = dev.ss_xicam_xsig.read()["ss_xicam_xsig"]["value"]
|
||||
b = dev.ss_xicam_ysig.read()["ss_xicam_ysig"]["value"]
|
||||
sx = a * px2mum * 2.35
|
||||
sy = b * px2mum * 2.35
|
||||
print(f"FWHM at BSC cam in um : {sx, sy}")
|
||||
print(f"FWHM at SS cam in um : {sx, sy}")
|
||||
|
||||
return sx, sy
|
||||
|
||||
@@ -1381,9 +1342,7 @@ def knife_edge(dir="hor", range=0.05, steps=100):
|
||||
if dir == "vert":
|
||||
mot = dev.gon_y
|
||||
|
||||
s = scans.line_scan(
|
||||
dev.gon_x, -range, range, steps=steps, exp_time=1, relative=True
|
||||
)
|
||||
s = scans.line_scan(dev.gon_x, -range, range, steps=steps, exp_time=1, relative=True)
|
||||
return
|
||||
|
||||
|
||||
@@ -1472,9 +1431,7 @@ def scan_eg(erange, nsteps=50, fit=True):
|
||||
|
||||
print(f"Scanning Bragg from {a_start} to {a_end} mrad")
|
||||
|
||||
s = scans.line_scan(
|
||||
mot_scan, a_start, a_end, steps=nsteps, exp_time=exptime, relative=False
|
||||
)
|
||||
s = scans.line_scan(mot_scan, a_start, a_end, steps=nsteps, exp_time=exptime, relative=False)
|
||||
|
||||
## plot and fit the scan
|
||||
bragg_data = (
|
||||
@@ -1520,3 +1477,27 @@ def scan_eg(erange, nsteps=50, fit=True):
|
||||
### compute a signal
|
||||
###########################
|
||||
# see in config file
|
||||
|
||||
|
||||
################################################
|
||||
### open window/doch for long gap scan
|
||||
################################################
|
||||
#
|
||||
|
||||
def scan_window(wname="Scan", fit=True):
|
||||
dock_area = bec.gui.new()
|
||||
# Add a new dock with a Waveform to the BECDockArea
|
||||
nam = "waveform_dock_"+wname
|
||||
dock_area.new(name=nam, widget="Waveform")
|
||||
# dock_area.panels
|
||||
# dock_area.panel_list
|
||||
plt1 = dock_area.panels[nam]
|
||||
# Add signals to the WaveformWidget
|
||||
plt1.plot(device_x='id_gap', device_y='bpm')
|
||||
|
||||
dock2 = dock_area.new(name="motor_dock", widget="MotorMap",relative_to=nam, position="right")
|
||||
###do stuff
|
||||
|
||||
|
||||
### if done, remove
|
||||
dock2.remove()
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
#### find out about a certain class --
|
||||
#### retrieve the struct of dictionaries
|
||||
|
||||
# if you know the attribute you are searching for:
|
||||
|
||||
def check_attr(obj, attr):
|
||||
# att as string
|
||||
|
||||
attr = getattr(obj, attr)
|
||||
|
||||
if isinstance(attr, dict):
|
||||
print("keys:", attr.keys())
|
||||
print("values:", attr.values())
|
||||
print("items:", attr.items())
|
||||
|
||||
# Automatically Detect All Dictionary Attributes:
|
||||
|
||||
def list_dict_attr_single(obj):
|
||||
for attr_name, value in vars(obj).items():
|
||||
if isinstance(value, dict):
|
||||
print(f"\nDictionary attribute: {attr_name}")
|
||||
print(" Keys:", list(value.keys()))
|
||||
print(" Items:")
|
||||
for key, val in value.items():
|
||||
print(f" {key} -> {val}")
|
||||
|
||||
# Also Handle Nested Dictionaries:
|
||||
|
||||
|
||||
def list_dict_attr(obj):
|
||||
|
||||
def print_dict(d, indent=0): # start with zero indentation
|
||||
for key, value in d.items():
|
||||
print(" " * indent + str(key) + ":", end=" ")
|
||||
if isinstance(value, dict):
|
||||
print()
|
||||
print_dict(value, indent+1)
|
||||
else:
|
||||
print(value)
|
||||
|
||||
for attr_name, value in vars(obj).items():
|
||||
if isinstance(value, dict):
|
||||
print(f"\nDictionary attribute: {attr_name}")
|
||||
print_dict(value)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,14 +1,23 @@
|
||||
"""Get data from an h5 file or BEC history and perform fitting."""
|
||||
|
||||
import numpy as np
|
||||
from lmfit.models import GaussianModel, LorentzianModel, VoigtModel, ConstantModel, LinearModel
|
||||
from lmfit.models import (
|
||||
GaussianModel,
|
||||
LorentzianModel,
|
||||
VoigtModel,
|
||||
ConstantModel,
|
||||
LinearModel,
|
||||
)
|
||||
from scipy.ndimage import gaussian_filter1d
|
||||
import h5py
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
def create_fit_parameters(
|
||||
deriv: bool = False, model: str = "Voigt", baseline: str = "Linear", smoothing: None = None
|
||||
deriv: bool = False,
|
||||
model: str = "Voigt",
|
||||
baseline: str = "Linear",
|
||||
smoothing: None = None,
|
||||
):
|
||||
"""Store the fit parameters in a dictionary."""
|
||||
# map input model to lmfit model name
|
||||
@@ -45,7 +54,10 @@ def get_data_from_h5(signal_name: str = "lu_bpmsum"):
|
||||
}
|
||||
|
||||
|
||||
def get_data_from_history(history_index: int, signal_name: str = "lu_bpmsum"):
|
||||
def get_data_from_history(
|
||||
history_index: int,
|
||||
signal_name: str = "lu_bpmsum",
|
||||
):
|
||||
"""Read data from the BEC history and return the X and Y data as arrays."""
|
||||
scan = bec.history[history_index]
|
||||
md = scan.metadata["bec"]
|
||||
@@ -84,7 +96,10 @@ def process_data(data, fit_params):
|
||||
else:
|
||||
fitting_data = y_data
|
||||
|
||||
updated_data = {"y_to_fit": fitting_data, "signal_name": signal_name}
|
||||
updated_data = {
|
||||
"y_to_fit": fitting_data,
|
||||
"signal_name": signal_name,
|
||||
}
|
||||
data.update(updated_data)
|
||||
return data
|
||||
|
||||
@@ -109,15 +124,23 @@ def fit(data, fit_params):
|
||||
params["base_slope"].set(value=0)
|
||||
|
||||
# Add peak-specific parameters
|
||||
params.update(peak_model.guess(processed_data["y_to_fit"], x=processed_data["x_data"]))
|
||||
params.update(
|
||||
peak_model.guess(processed_data["y_to_fit"], x=processed_data["x_data"])
|
||||
)
|
||||
|
||||
# Perform the fitting
|
||||
lmfit_result = full_model.fit(processed_data["y_to_fit"], params, x=processed_data["x_data"])
|
||||
lmfit_result = full_model.fit(
|
||||
processed_data["y_to_fit"], params, x=processed_data["x_data"]
|
||||
)
|
||||
|
||||
# Find the X that gives the max Y
|
||||
max_index = np.argmax(processed_data["y_to_fit"])
|
||||
x_max = processed_data["x_data"][max_index]
|
||||
|
||||
# Generate data for a smoothed fit curve
|
||||
fit_xdata = np.linspace(np.min(data["x_data"]), np.max(data["x_data"]), 500)
|
||||
fit_ydata = lmfit_result.eval(x=fit_xdata, params=lmfit_result.params)
|
||||
|
||||
# Collect results
|
||||
return {
|
||||
"model": fit_params["model"].__name__,
|
||||
@@ -127,20 +150,15 @@ def fit(data, fit_params):
|
||||
"chi_sq": lmfit_result.chisqr,
|
||||
"lmfit_result": lmfit_result,
|
||||
"x_max": x_max,
|
||||
"fit_xdata": fit_xdata,
|
||||
"fit_ydata": fit_ydata,
|
||||
}
|
||||
|
||||
|
||||
def plot_fitted_data(data, fit_result):
|
||||
"""Plot the original data and the fitted model."""
|
||||
plt.plot(data["x_data"], data["y_to_fit"], label="Data")
|
||||
plt.plot(
|
||||
data["x_data"],
|
||||
fit_result["lmfit_result"].best_fit,
|
||||
"-",
|
||||
label=f"FWHM = {fit_result['fwhm']:.3f},"
|
||||
f"Centre = {fit_result['centre']:.3f}, "
|
||||
f"Height = {fit_result['height']:.3f}",
|
||||
)
|
||||
plt.plot(fit_result['fit_xdata'], fit_result['fit_ydata'], label="Fit")
|
||||
plt.xlabel(data["motor_name"])
|
||||
plt.ylabel(data["signal_name"])
|
||||
plt.title(f"Scan {data['scan_number']}, fitted with {fit_result['model']}")
|
||||
@@ -154,9 +172,9 @@ def select_bec_window(dock_area_name="Fitting"):
|
||||
open_docks = bec.gui.windows
|
||||
if open_docks.get(dock_area_name) is None:
|
||||
dock_area = bec.gui.new(dock_area_name)
|
||||
wf = dock_area.new(bec.gui.available_widgets.Waveform, object_name="Plot")
|
||||
text_box = dock_area.new(
|
||||
bec.gui.available_widgets.TextBox, object_name="Results", where="bottom"
|
||||
wf = dock_area.new("Plot").new(bec.gui.available_widgets.Waveform)
|
||||
text_box = dock_area.new("Results", position="bottom").new(
|
||||
widget=bec.gui.available_widgets.TextBox
|
||||
)
|
||||
else:
|
||||
wf = bec.gui.Fitting.Plot.Waveform
|
||||
@@ -164,7 +182,11 @@ def select_bec_window(dock_area_name="Fitting"):
|
||||
return wf, text_box
|
||||
|
||||
|
||||
def plot_live_data_bec(motor_name, signal_name, window_name="Fitting"):
|
||||
def plot_live_data_bec(
|
||||
motor_name,
|
||||
signal_name,
|
||||
window_name="Fitting"
|
||||
):
|
||||
"""
|
||||
Plotting live data for motor and signal using BEC.
|
||||
|
||||
@@ -186,10 +208,13 @@ def plot_live_data_bec(motor_name, signal_name, window_name="Fitting"):
|
||||
wf.title = "Scan: Live scan"
|
||||
wf.x_label = motor_name
|
||||
wf.y_label = signal_name
|
||||
wf.plot(device_x=motor_name, device_y=signal_name)
|
||||
wf.plot(x_name=motor_name, y_name=signal_name)
|
||||
|
||||
|
||||
def plot_fitted_data_bec(data, fit_result):
|
||||
def plot_fitted_data_bec(
|
||||
data,
|
||||
fit_result,
|
||||
):
|
||||
"""
|
||||
Plot fitted data and display fitting parameters in the specified window.
|
||||
|
||||
@@ -221,5 +246,8 @@ def plot_fitted_data_bec(data, fit_result):
|
||||
wf.title = f"Scan: {data['scan_number']}"
|
||||
wf.x_label = data["motor_name"]
|
||||
wf.y_label = data["signal_name"]
|
||||
wf.plot(x=data["x_data"], y=data["y_to_fit"], label="data")
|
||||
wf.plot(x=data["x_data"], y=fit_result["lmfit_result"].best_fit, label="Fit to data")
|
||||
wf.plot(x=data["x_data"], y=data["y_to_fit"], label="Data")
|
||||
wf.plot(x=fit_result["fit_xdata"], y=fit_result["fit_ydata"], label="Fit")
|
||||
wf.Fit.set(symbol_size = 0)
|
||||
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ def move_to_position(motor_device, motor_name: str, position: float, data: dict)
|
||||
scans.umv(motor_device, motor_centre, relative=False)
|
||||
msg = (
|
||||
f"Position {position: .2f} is outside the scan range of "
|
||||
f"{motor_min: .2f}to {motor_max: .2f}. "
|
||||
f"{motor_min: .2f} to {motor_max: .2f}. "
|
||||
f"Returning to centre of scan range {motor_centre: .3f}."
|
||||
)
|
||||
raise ValueError(msg)
|
||||
@@ -249,79 +249,42 @@ def scan_bpm(bpmname):
|
||||
|
||||
# Open a dock area and set up the heatmaps
|
||||
dock_area = bec.gui.new("XBPM_Scan")
|
||||
wf5 = dock_area.new(bec.gui.available_widgets.Heatmap, object_name="Sum")
|
||||
wf1 = dock_area.new(
|
||||
bec.gui.available_widgets.Heatmap,
|
||||
object_name="Ch1",
|
||||
relative_to="Sum",
|
||||
where="bottom",
|
||||
wf5 = dock_area.new("Sum").new(bec.gui.available_widgets.Heatmap)
|
||||
wf1 = dock_area.new("Ch1", relative_to="Sum", position="bottom").new(
|
||||
bec.gui.available_widgets.Heatmap
|
||||
)
|
||||
wf3 = dock_area.new(
|
||||
bec.gui.available_widgets.Heatmap,
|
||||
object_name="Ch3",
|
||||
relative_to="Ch1",
|
||||
where="right",
|
||||
wf3 = dock_area.new("Ch3", relative_to="Ch1", position="right").new(
|
||||
bec.gui.available_widgets.Heatmap
|
||||
)
|
||||
wf4 = dock_area.new(
|
||||
bec.gui.available_widgets.Heatmap,
|
||||
object_name="Ch4",
|
||||
relative_to="Ch3",
|
||||
where="bottom",
|
||||
wf4 = dock_area.new("Ch4", relative_to="Ch3", position="bottom").new(
|
||||
bec.gui.available_widgets.Heatmap
|
||||
)
|
||||
wf2 = dock_area.new(
|
||||
bec.gui.available_widgets.Heatmap,
|
||||
object_name="Ch2",
|
||||
relative_to="Ch1",
|
||||
where="bottom",
|
||||
wf2 = dock_area.new("Ch2", relative_to="Ch1", position="bottom").new(
|
||||
bec.gui.available_widgets.Heatmap
|
||||
)
|
||||
wfscan = dock_area.new(bec.gui.available_widgets.ScanControl, object_name="ScanControl")
|
||||
wfscan = dock_area.new("ScanControl").new(bec.gui.available_widgets.ScanControl)
|
||||
|
||||
cfg = getattr(BPMScans, bpmname)
|
||||
|
||||
wf1.x_label = cfg["x_name"]
|
||||
wf1.y_label = cfg["y_name"]
|
||||
wf1.plot(
|
||||
device_x=cfg["x_name"],
|
||||
device_y=cfg["y_name"],
|
||||
device_z=cfg["z1_name"],
|
||||
color_map="plasma",
|
||||
)
|
||||
wf1.plot(x_name=cfg["x_name"], y_name=cfg["y_name"], z_name=cfg["z1_name"], color_map="plasma")
|
||||
|
||||
wf2.x_label = cfg["x_name"]
|
||||
wf2.y_label = cfg["y_name"]
|
||||
wf2.plot(
|
||||
device_x=cfg["x_name"],
|
||||
device_y=cfg["y_name"],
|
||||
device_z=cfg["z2_name"],
|
||||
color_map="plasma",
|
||||
)
|
||||
wf2.plot(x_name=cfg["x_name"], y_name=cfg["y_name"], z_name=cfg["z2_name"], color_map="plasma")
|
||||
|
||||
wf3.x_label = cfg["x_name"]
|
||||
wf3.y_label = cfg["y_name"]
|
||||
wf3.plot(
|
||||
device_x=cfg["x_name"],
|
||||
device_y=cfg["y_name"],
|
||||
device_z=cfg["z3_name"],
|
||||
color_map="plasma",
|
||||
)
|
||||
wf3.plot(x_name=cfg["x_name"], y_name=cfg["y_name"], z_name=cfg["z3_name"], color_map="plasma")
|
||||
|
||||
wf4.x_label = cfg["x_name"]
|
||||
wf4.y_label = cfg["y_name"]
|
||||
wf4.plot(
|
||||
device_x=cfg["x_name"],
|
||||
device_y=cfg["y_name"],
|
||||
device_z=cfg["z4_name"],
|
||||
color_map="plasma",
|
||||
)
|
||||
wf4.plot(x_name=cfg["x_name"], y_name=cfg["y_name"], z_name=cfg["z4_name"], color_map="plasma")
|
||||
|
||||
wf5.x_label = cfg["x_name"]
|
||||
wf5.y_label = cfg["y_name"]
|
||||
wf5.plot(
|
||||
device_x=cfg["x_name"],
|
||||
device_y=cfg["y_name"],
|
||||
device_z=cfg["z5_name"],
|
||||
color_map="plasma",
|
||||
)
|
||||
wf5.plot(x_name=cfg["x_name"], y_name=cfg["y_name"], z_name=cfg["z5_name"], color_map="plasma")
|
||||
# Run the scan
|
||||
x_mot = cfg["x_device"]
|
||||
y_mot = cfg["y_device"]
|
||||
@@ -341,20 +304,15 @@ def optimise_kb(mirror):
|
||||
|
||||
# Open a dock area and set up the heatmaps
|
||||
dock_area = bec.gui.new(mirror)
|
||||
wf1 = dock_area.new(bec.gui.available_widgets.Heatmap, object_name="Heatmap")
|
||||
wf1 = dock_area.new("Heatmap").new(bec.gui.available_widgets.Heatmap)
|
||||
|
||||
wfscan = dock_area.new(bec.gui.available_widgets.ScanControl, object_name="ScanControl")
|
||||
wfscan = dock_area.new("ScanControl").new(bec.gui.available_widgets.ScanControl)
|
||||
|
||||
cfg = getattr(MirrorConfig, mirror)
|
||||
|
||||
wf1.x_label = cfg["bu_name"]
|
||||
wf1.y_label = cfg["bd_name"]
|
||||
wf1.plot(
|
||||
device_x=cfg["bu_name"],
|
||||
device_y=cfg["bd_name"],
|
||||
device_z=cfg["z_name"],
|
||||
color_map="plasma",
|
||||
)
|
||||
wf1.plot(x_name=cfg["bu_name"], y_name=cfg["bd_name"], z_name=cfg["z_name"], color_map="plasma")
|
||||
|
||||
# Run the scan
|
||||
x_mot = cfg["x_device"]
|
||||
|
||||
@@ -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']}")
|
||||
|
||||
@@ -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(f"Defined positions for devices have been updated from {file}")
|
||||
@@ -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")
|
||||
|
||||
Executable
+75
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Script Name: set_kbox.sh
|
||||
# Description: Sets a value on a given device, such as scinti, diode, colli
|
||||
#
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
#######################################
|
||||
# Usage
|
||||
#######################################
|
||||
usage() {
|
||||
echo "Usage: $(basename "$0") <device_name> <set_value>"
|
||||
echo
|
||||
echo "Example:"
|
||||
echo " $(basename "$0") colli_in 41.5"
|
||||
echo " $(basename "$0") colli_out 20."
|
||||
echo " $(basename "$0") scinti_in 40."
|
||||
echo " $(basename "$0") diode_in 44."
|
||||
echo " $(basename "$0") diode_out 20. or"
|
||||
echo " $(basename "$0") scinti_out 20."
|
||||
|
||||
exit 1
|
||||
}
|
||||
|
||||
#######################################
|
||||
# Validate Arguments
|
||||
#######################################
|
||||
if [[ $# -ne 2 ]]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
DEVICE_NAME="$1"
|
||||
SET_VALUE="$2"
|
||||
|
||||
if ! [[ "$SET_VALUE" =~ ^[0-9]+$ ]]; then
|
||||
echo "Error: set_value must be numeric"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
#######################################
|
||||
# Main
|
||||
#######################################
|
||||
main() {
|
||||
echo "Device: $DEVICE_NAME"
|
||||
echo "Value : $SET_VALUE"
|
||||
|
||||
# --- Your logic here ---
|
||||
# Example placeholder:
|
||||
|
||||
if [[ $DEVICE_NAME == "colli_in" ]]; then
|
||||
echo "caput X10SA-ES-COL:POS-SET-SEQ.DO2 $SET_VALUE"
|
||||
fi
|
||||
if [[ $DEVICE_NAME == "colli_out" ]]; then
|
||||
echo "caput X10SA-ES-COL:POS-SET-SEQ.DO1 $SET_VALUE"
|
||||
fi
|
||||
#
|
||||
if [[ $DEVICE_NAME == "scinti_in" ]]; then
|
||||
echo "caput X10SA-ES-SCL:POS-SET-SEQ.DO2 $SET_VALUE"
|
||||
fi
|
||||
if [[ $DEVICE_NAME == "diode_in" ]]; then
|
||||
echo "caput X10SA-ES-SCL:POS-SET-SEQ.DO3 $SET_VALUE"
|
||||
fi
|
||||
if [[ $DEVICE_NAME == "scinti_out" || $DEVICE_NAME == "diode_out" ]]; then
|
||||
echo "caput X10SA-ES-SCL:POS-SET-SEQ.DO1 $SET_VALUE"
|
||||
fi
|
||||
#
|
||||
echo "Setting device '$DEVICE_NAME' to '$SET_VALUE'..."
|
||||
|
||||
# Simulate success
|
||||
echo "Done."
|
||||
}
|
||||
|
||||
main
|
||||
@@ -0,0 +1,6 @@
|
||||
print("Hello World")
|
||||
try:
|
||||
print(PD.coll_y.state)
|
||||
print("success")
|
||||
except Exception as e:
|
||||
print(f"Error {e}")
|
||||
@@ -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}")
|
||||
Reference in New Issue
Block a user