This commit is contained in:
gac-x11ma
2025-11-19 10:59:01 +01:00
parent 103abb1277
commit 8ecd1f36c6
46 changed files with 1493 additions and 142 deletions

View File

@@ -1,4 +1,4 @@
#Thu Oct 30 14:02:21 CET 2025
#Wed Nov 19 10:56:25 CET 2025
commandQueueSize=-1
commandStatistics=false
commandTimeToLive=600000
@@ -40,6 +40,7 @@ scanStreamerPort=-1
serverCommandsHidden=false
serverEnabled=false
serverHostName=null
serverHttps=false
serverPort=8080
sessionHandling=On
terminalEnabled=false

View File

@@ -116,5 +116,5 @@ temp_readout=ch.psi.pshell.epics.ReadonlyProcessVariable|X11MA-PC-SW:Pt100-K|||t
raw=ch.psi.pshell.imaging.CameraSource|eiger|||true
image2=ch.psi.pshell.imaging.CameraSource|cam2|||true
img_peemcam=ch.psi.pshell.imaging.CameraSource|peemcam|||true
axis=ch.psi.pshell.imaging.MjpegSource|http://axis-x11ma.psi.ch/axis-cgi/mjpg/video.cgi?id=176 true||-200|false
axis2=ch.psi.pshell.imaging.MjpegSource|http://129.129.121.54/axis-cgi/mjpg/video.cgi?id=0 true||-200|
#axis=ch.psi.pshell.camserver.CameraStream|http://axis-x11ma.psi.ch/axis-cgi/mjpg/video.cgi?id=176 true||-200|false
#axis2=ch.psi.pshell.imaging.MjpegSource|http://129.129.121.54/axis-cgi/mjpg/video.cgi?id=0 true||-200|

View File

@@ -1,4 +1,4 @@
#Wed Nov 05 15:20:32 CET 2025
#Wed Nov 19 10:59:00 CET 2025
ALPHA_ID_2=0.0
AUTO_SWITCH_BEAMLINE=false
AUTO_SWITCH_SHUTTER=true

View File

@@ -8,4 +8,4 @@ precision=-1
sign_bit=0
scale=1.0
description=null
resolution=NaN
deadband=NaN

View File

@@ -8,4 +8,4 @@ precision=-1
sign_bit=0
scale=1.0
description=null
resolution=NaN
deadband=NaN

View File

@@ -8,4 +8,4 @@ precision=-1
sign_bit=0
scale=1.0
description=null
resolution=NaN
deadband=NaN

View File

@@ -1,10 +1,10 @@
#Mon Oct 20 23:45:55 CEST 2025
deadband=NaN
description=slit X center
maxValue=NaN
minValue=NaN
offset=0.0
precision=4
resolution=NaN
rotation=false
scale=1.0
sign_bit=0

View File

@@ -1,10 +1,10 @@
#Mon Oct 20 23:45:56 CEST 2025
deadband=NaN
description=slit Y center
maxValue=NaN
minValue=NaN
offset=0.0
precision=4
resolution=NaN
rotation=false
scale=1.0
sign_bit=0

View File

@@ -7,4 +7,4 @@ rotation=false
precision=-1
sign_bit=0
scale=1.0
resolution=NaN
deadband=NaN

View File

@@ -7,4 +7,4 @@ rotation=false
precision=-1
sign_bit=0
scale=1.0
resolution=NaN
deadband=NaN

View File

@@ -1,10 +1,10 @@
#Fri Sep 22 16:15:50 CEST 2023
offset=0.0
#Wed Nov 19 10:53:06 CET 2025
deadband=0.01
description=Voltage
maxValue=10.0
minValue=-10.0
offset=0.0
precision=3
scale=2.44140625E-4
description=Voltage
resolution=0.01
minValue=-10.0
unit=V
sign_bit=0
unit=V

View File

@@ -1,10 +1,10 @@
#Sun Sep 24 22:18:39 CEST 2023
offset=0.0
#Wed Nov 19 10:53:06 CET 2025
deadband=1.0E-4
description=Voltage
maxValue=10.0
minValue=-10.0
offset=0.0
precision=4
scale=3.05175E-4
description=Voltage
resolution=1.0E-4
minValue=-10.0
unit=V
sign_bit=0
unit=V

View File

@@ -8,4 +8,4 @@ precision=-1
sign_bit=0
scale=1.0
description=null
resolution=NaN
deadband=NaN

View File

@@ -8,4 +8,4 @@ precision=-1
sign_bit=0
scale=1.0
description=null
resolution=NaN
deadband=NaN

View File

@@ -7,4 +7,4 @@ rotation=false
precision=-1
sign_bit=0
scale=1.0
resolution=NaN
deadband=NaN

View File

@@ -1,19 +1,19 @@
#Mon Aug 08 11:48:07 CEST 2022
offset=0.0
#Wed Nov 19 10:53:06 CET 2025
deadband=1.0
defaultSpeed=200.0
description=null
estbilizationDelay=0
hasEnable=false
homingType=None
maxSpeed=200.0
maxValue=3000.0
minSpeed=10.0
minValue=-3000.0
monitorByPosition=false
offset=0.0
precision=5
rotation=false
scale=1.0
description=null
estbilizationDelay=0
maxSpeed=200.0
resolution=1.0
homingType=None
startRetries=1
minValue=-3000.0
unit=micron
defaultSpeed=200.0
sign_bit=0
hasEnable=false
monitorByPosition=false
minSpeed=10.0
startRetries=1
unit=micron

View File

@@ -1,4 +1,5 @@
#Mon Jun 07 15:56:05 CEST 2021
deadband=1.0
offset=0.0
maxValue=3000.0
rotation=false
@@ -6,7 +7,6 @@ precision=5
scale=1.0
estbilizationDelay=0
maxSpeed=NaN
resolution=1.0
homingType=None
startRetries=1
minValue=-3000.0

View File

@@ -1,10 +1,10 @@
#Mon Jun 07 09:49:47 CEST 2021
deadband=1.0
offset=0.0
maxValue=NaN
rotation=false
precision=5
scale=1.0
resolution=1.0
minValue=NaN
unit=micron
sign_bit=0

View File

@@ -1,19 +1,19 @@
#Mon Aug 08 11:48:07 CEST 2022
offset=0.0
#Wed Nov 19 10:53:06 CET 2025
deadband=0.1
defaultSpeed=1.0
description=null
estbilizationDelay=0
hasEnable=false
homingType=None
maxSpeed=NaN
maxValue=100.0
minSpeed=0.1
minValue=-100.0
monitorByPosition=false
offset=0.0
precision=5
rotation=false
scale=1.0
description=null
estbilizationDelay=0
maxSpeed=NaN
resolution=0.1
homingType=None
startRetries=1
minValue=-100.0
unit=mm
defaultSpeed=1.0
sign_bit=0
hasEnable=false
monitorByPosition=false
minSpeed=0.1
startRetries=1
unit=mm

View File

@@ -1,19 +1,19 @@
#Mon Aug 08 11:48:07 CEST 2022
offset=0.0
#Wed Nov 19 10:53:06 CET 2025
deadband=0.005
defaultSpeed=1.0
description=null
estbilizationDelay=0
hasEnable=false
homingType=null
maxSpeed=NaN
maxValue=200.0
minSpeed=0.1
minValue=-200.0
monitorByPosition=false
offset=0.0
precision=3
rotation=false
scale=1.0
description=null
estbilizationDelay=0
maxSpeed=NaN
resolution=0.005
homingType=null
startRetries=1
minValue=-200.0
unit=mm
defaultSpeed=1.0
sign_bit=0
hasEnable=false
monitorByPosition=false
minSpeed=0.1
startRetries=1
unit=mm

View File

@@ -1,19 +1,19 @@
#Mon Aug 08 11:48:07 CEST 2022
offset=0.0
#Wed Nov 19 10:53:06 CET 2025
deadband=0.1
defaultSpeed=1.0
description=null
estbilizationDelay=0
hasEnable=false
homingType=None
maxSpeed=NaN
maxValue=100.0
minSpeed=0.1
minValue=-100.0
monitorByPosition=false
offset=0.0
precision=5
rotation=false
scale=1.0
description=null
estbilizationDelay=0
maxSpeed=NaN
resolution=0.1
homingType=None
startRetries=1
minValue=-100.0
unit=mm
defaultSpeed=1.0
sign_bit=0
hasEnable=false
monitorByPosition=false
minSpeed=0.1
startRetries=1
unit=mm

View File

@@ -1,19 +1,19 @@
#Mon Aug 08 11:48:07 CEST 2022
offset=0.0
#Wed Nov 19 10:53:06 CET 2025
deadband=0.005
defaultSpeed=1.0
description=null
estbilizationDelay=0
hasEnable=false
homingType=null
maxSpeed=NaN
maxValue=200.0
minSpeed=0.01
minValue=-200.0
monitorByPosition=false
offset=0.0
precision=3
rotation=false
scale=1.0
description=null
estbilizationDelay=0
maxSpeed=NaN
resolution=0.005
homingType=null
startRetries=1
minValue=-200.0
unit=mm
defaultSpeed=1.0
sign_bit=0
hasEnable=false
monitorByPosition=false
minSpeed=0.01
startRetries=1
unit=mm

View File

@@ -1,11 +1,11 @@
#Fri Oct 07 16:45:18 CEST 2022
offset=0.0
maxValue=4.0
rotation=false
precision=3
scale=1.0
#Wed Nov 19 10:53:07 CET 2025
deadband=0.005
description=x set point
resolution=0.005
maxValue=4.0
minValue=-4.0
unit=mm
offset=0.0
precision=3
rotation=false
scale=1.0
sign_bit=0
unit=mm

View File

@@ -1,11 +1,11 @@
#Fri Oct 07 14:17:02 CEST 2022
minValue=-3.0
unit=mm
offset=0.0
maxValue=3.0
rotation=false
precision=3
sign_bit=0
scale=1.0
#Wed Nov 19 10:53:07 CET 2025
deadband=NaN
description=y set point
resolution=NaN
maxValue=3.0
minValue=-3.0
offset=0.0
precision=3
rotation=false
scale=1.0
sign_bit=0
unit=mm

View File

@@ -2,7 +2,7 @@
precision=2
scale=1.0
estbilizationDelay=0
resolution=NaN
deadband=NaN
minValue=-10.0
defaultSpeed=1.0
sign_bit=0

View File

@@ -7,7 +7,7 @@ scale=1.0
description=null
estbilizationDelay=0
maxSpeed=10.0
resolution=NaN
deadband=NaN
accessType=ReadWrite
startRetries=1
minValue=-10.0

View File

@@ -7,7 +7,7 @@ scale=1.0
description=null
estbilizationDelay=0
maxSpeed=10.0
resolution=NaN
deadband=NaN
accessType=ReadWrite
startRetries=1
minValue=-10.0

View File

@@ -8,4 +8,4 @@ precision=1
sign_bit=0
scale=1.0
description=null
resolution=NaN
deadband=NaN

View File

@@ -8,4 +8,4 @@ precision=1
sign_bit=0
scale=1.0
description=null
resolution=NaN
deadband=NaN

View File

@@ -4,7 +4,7 @@ maxValue=100.0
rotation=false
precision=3
scale=1.0
resolution=0.5
deadband=0.5
minValue=-100.0
unit=mA
sign_bit=0

View File

@@ -4,7 +4,7 @@ maxValue=100.0
rotation=false
precision=3
scale=1.0
resolution=0.5
deadband=0.5
minValue=-100.0
unit=mA
sign_bit=0

View File

@@ -4,7 +4,7 @@ maxValue=1570.0
rotation=false
precision=2
scale=1.0
resolution=0.05
deadband=0.05
minValue=1350.0
unit=mA
sign_bit=0

View File

@@ -8,4 +8,4 @@ rotation=false
sign_bit=0
scale=1.0
description=null
resolution=NaN
deadband=NaN

View File

@@ -1,19 +1,19 @@
#Wed Jun 14 21:28:18 CEST 2023
offset=0.0
maxValue=10.0
rotation=false
precision=3
scale=1.0
#Wed Nov 19 10:53:06 CET 2025
deadband=0.003
defaultSpeed=NaN
description=user input Ry
estbilizationDelay=0
maxSpeed=NaN
resolution=0.003
homingType=None
startRetries=1
minValue=-10.0
unit=
defaultSpeed=NaN
hasEnable=false
sign_bit=0
monitorByPosition=false
homingType=None
maxSpeed=NaN
maxValue=10.0
minSpeed=NaN
minValue=-10.0
monitorByPosition=false
offset=0.0
precision=3
rotation=false
scale=1.0
sign_bit=0
startRetries=1
unit=

View File

@@ -8,4 +8,4 @@ precision=-1
sign_bit=0
scale=1.0
description=null
resolution=NaN
deadband=NaN

View File

@@ -5,7 +5,7 @@ rotation=false
precision=0
scale=1.0
description=null
resolution=5.0
deadband=5.0
minValue=-20000.0
unit=um
sign_bit=0

View File

@@ -0,0 +1,70 @@
{
"CMU": {
"CMU_Ry": {
"value": 0.18337499999999998,
"tolerance": 0.0001
},
"CMU_Rx": {
"value": 11.644256250000002,
"tolerance": 0.0001
},
"CMU_Rz": {
"value": 3.0822062500000005,
"tolerance": 0.0001
},
"CMU_baffle": {
"value": 0.0,
"tolerance": 0.0001
},
"CMU_X": {
"value": -0.90653125,
"tolerance": 0.0001
},
"CMU_Y": {
"value": 1.6755312500000001,
"tolerance": 0.0001
},
"CMU_Z": {
"value": -0.26413437500000003,
"tolerance": 0.0001
}
},
"Diag": {
"select": {
"value": "Photodiode",
"tolerance": 0.0
},
"position": {
"value": 27.999899999999997,
"tolerance": 0.1
}
},
"ESLIT": {
"width": {
"value": 20.0,
"tolerance": 1.0
},
"position": {
"value": 12.4625,
"tolerance": 0.1
}
},
"SR": {
"SR_orbit-X-RMS": {
"value": 0.12711276155333132,
"tolerance": 0.0001
},
"SR_life_time": {
"value": 12.446634499727455,
"tolerance": 0.0001
},
"SR_current": {
"value": 399.8668489456177,
"tolerance": 0.0001
},
"SR_orbit-Y-RMS": {
"value": 0.12815728431397083,
"tolerance": 0.0001
}
}
}

View File

@@ -0,0 +1,219 @@
# VERSION = "1.0"
# AUTHOR = "A. Kleibert"
# LAST_MODIFIED = "2025-11-08"
# Read ring current:
SR_current = caget("AGEBD-PARAMS:CURRENT")
SR_life_time = caget("AGEBD-PARAMS:LIFETIME")
SR_orbit-X-RMS = caget("ARSGE-CECL-FOFB1:B-ERR-X-RMS-UM")
SR_orbit-Y-RMS = caget("ARSGE-CECL-FOFB1:B-ERR-Y-RMS-UM")
# Read bumps:
BML_bump_X = caget("X11MA-ORBITBUMP:OFFSET-X")
BML_bump_XP = caget("X11MA-ORBITBUMP:OFFSET-XP")
BML_bump_Y = caget("X11MA-ORBITBUMP:OFFSET-Y")
BML_bump_YP = caget("X11MA-ORBITBUMP:OFFSET-YP")
MAS_bump_X = caget("AGEBD-ORBITBUMP:X11MA-OFFSET-X")
MAS_bump_XP = caget("AGEBD-ORBITBUMP:X11MA-OFFSET-XP")
MAS_bump_Y = caget("AGEBD-ORBITBUMP:X11MA-OFFSET-Y")
MAS_bump_YP = caget("AGEBD-ORBITBUMP:X11MA-OFFSET-YP")
TOT_bump_X = caget("AGEBD-ORBITBUMP:X11MA-OFFSET-X-TOTAL")
TOT_bump_XP = caget("AGEBD-ORBITBUMP:X11MA-OFFSET-XP-TOTAL")
TOT_bump_Y = caget("AGEBD-ORBITBUMP:X11MA-OFFSET-Y-TOTAL")
TOT_bump_YP = caget("AGEBD-ORBITBUMP:X11MA-OFFSET-YP-TOTAL")
# Read ID gap and mode:
ID2_energy= caget("X11MA-UIND2:ENERGY-RBV")
ID2_mode = caget("X11MA-UIND2:MODE")
ID2_gap = caget("X11MA-UIND2:GAP-RBV")
ID2_offset = caget("X11MA-UIND2:ENERGY-OFFS")
# 0 Off
# 1 Linear H
# 2 Linear V+
# 3 Linear V-
# 4 Circular+
# 5 Circular-
# 6 +45 deg
# 7 -45 deg
# Read XBPM1 parameters:
XBPM1_X_motor = caget("X11MA-FE-XBPM1:TRX.RBV")
XBPM1_Y_motor = caget("X11MA-FE-XBPM1:TRY.RBV")
# Read FE slit size and position:
# Virtual axes:
FE_centerX = caget("X11MA-FE-SL1:CENTERX.RBV")
FE_centerY = caget("X11MA-FE-SL1:CENTERY.RBV")
FE_sizeX = caget("X11MA-FE-SL1:SIZEX.RBV")
FE_sizeY = caget("X11MA-FE-SL1:SIZEY.RBV")
# Physical motors:
FE_TRXR = caget("X11MA-FE-SL1:TRXR.RBV")
FE_TRXW = caget("X11MA-FE-SL1:TRXW.RBV")
FE_TRYB = caget("X11MA-FE-SL1:TRYB.RBV")
FE_TRYT = caget("X11MA-FE-SL1:TRYT.RBV")
# Read CMU parameters:
CMU_X = caget("X11MA-OP-CM:ox")
CMU_Y = caget("X11MA-OP-CM:oy")
CMU_Z = caget("X11MA-OP-CM:oz")
CMU_Rx = caget("X11MA-OP-CM:oRx")
CMU_Ry = caget("X11MA-OP-CM:oRy")
CMU_Rz = caget("X11MA-OP-CM:oRz")
CMU_baffle = caget("X11MA-OP2-CM:TRB.RBV")
# Read XBPM2 parameters:
XBPM2_X_motor = caget("X11MA-OP2-BP1:TRX.RBV")
XBPM2_Y_motor = caget("X11MA-OP2-BP1:TRY.RBV")
# Read AU slit parameters:
# Virtual axes:
AU_centerV = caget("X11MA-OP2-AVcenter")
AU_centerH = caget("X11MA-OP2-AHcenter")
AU_sizeV = caget("X11MA-OP2-AVsize")
AU_sizeH = caget("X11MA-OP2-AHsize")
# Physical motors:
AU_TRZ1 = caget("X11MA-OP2-AU:TRZ1.RBV")
AU_TRZ4 = caget("X11MA-OP2-AU:TRZ4.RBV")
AU_TRY1 = caget("X11MA-OP2-AU:TRY1.RBV")
AU_TRY4 = caget("X11MA-OP2-AU:TRY4.RBV")
# Read mono parameters:
# Grating and diffration order:
Mono_grating_select = caget("X11MA-PGM:grating")
Mono_grating_change = caget("X11MA-PGM-GRCH:GRATING")
# 0 G1 300
# 1 G2 1200
# 2 G3 600
Mono_diff_order = caget("X11MA-PGM:difforder0")
# 0 1
# 1 2
# 2 3
# Energy, cff, phi:
Mono_energy = caget("X11MA-PGM:rbkenergy")
Mono_cff = caget("X11MA-PGM:rbkcff")
Mono_phi = caget("X11MA-PGM:rbkenergy")
# Angles and offsets:
Mono_theta = caget("X11MA-PGM:rbktheta")
Mono_theta_off1A = caget("X11MA-PGM:THETAOFF1.A")
Mono_theta_off1B = caget("X11MA-PGM:THETAOFF1.B")
Mono_theta_off1C = caget("X11MA-PGM:THETAOFF1.C")
Mono_theta_off2A = caget("X11MA-PGM:THETAOFF2.A")
Mono_theta_off2B = caget("X11MA-PGM:THETAOFF2.B")
Mono_theta_off2C = caget("X11MA-PGM:THETAOFF2.C")
Mono_beta = caget("X11MA-PGM:rbkbeta")
Mono_beta_off1A = caget("X11MA-PGM:BETAOFF1.A")
Mono_beta_off1B = caget("X11MA-PGM:BETAOFF1.B")
Mono_beta_off1C = caget("X11MA-PGM:BETAOFF1.C")
Mono_beta_off2A = caget("X11MA-PGM:BETAOFF2.A")
Mono_beta_off2B = caget("X11MA-PGM:BETAOFF2.B")
Mono_beta_off2C = caget("X11MA-PGM:BETAOFF2.C")
# Mirror and grating position:
Mono_mirror_origin = caget("X11MA:m3.RBV")
Mono_grating_origin = caget("X11MA:m4.RBV")
# Read FMU aperture jaw:
FMU_TRYT = caget("X11MA-OP-FM:TRYT.RBV")
FMU_TRYB = caget("X11MA-OP-FM:TRYB.RBV")
# Read FMU position and motors:
# Virtual axes:
FMU_X = caget("X11MA-OP-FM:X.RBV")
FMU_Y = caget("X11MA-OP-FM:Y.RBV")
FMU_PITCH = caget("X11MA-OP-FM:PITCH.RBV")
FMU_ROLL = caget("X11MA-OP-FM:ROLL.RBV")
FMU_YAW = caget("X11MA-OP-FM:YAW.RBV")
# Physical motors:
FMU_TRYD = caget("X11MA-OP-FM:TRYD.RBV")
FMU_TRYUR = caget("X11MA-OP-FM:TRYUR.RBV")
FMU_TRYUW = caget("X11MA-OP-FM:TRYUW.RBV")
FMU_TRX = caget("X11MA-OP-FM:TRX.RBV")
FMU_ROTY = caget("X11MA-OP-FM:ROTY.RBV")
# Fast shutter positions:
#FMU_TRYD = caget("X11MA-OP-FM:TRYD.RBV")
#FMU_TRYUR = caget("X11MA-OP-FM:TRYUR.RBV")
# Exit slit
# Monitor and membrane positions:
#FMU_TRYD = caget("X11MA-OP-FM:TRYD.RBV")
#FMU_TRYUR = caget("X11MA-OP-FM:TRYUR.RBV")
ESLIT_width = caget("X11MA-OP2-SL:TRY.RBV")
ESLIT_position = caget("X11MA-OP2-SL:TRX.RBV")
# Diagnostics unit
DIAG_position = caget("X11MA-OP-DI:HO3.RBV")
DIAG_select = caget("X11MA:DIAG-SET")
# 0 Diag. Out
# 1 YAG
# 2 Photodiode
# Refocussing mirror unit 1
# Virtual axes:
RMU1_X = caget("X11MA-OP-RM1:X.RBV")
RMU1_Y = caget("X11MA-OP-RM1:Y.RBV")
RMU1_PITCH = caget("X11MA-OP-RM1:PITCH.RBV")
RMU1_ROLL = caget("X11MA-OP-RM1:ROLL.RBV")
RMU1_YAW = caget("X11MA-OP-RM1:YAW.RBV")
# Physical motors:
RMU1_TRYD = caget("X11MA-OP-RM1:TRYD.RBV")
RMU1_TRYUR = caget("X11MA-OP-RM1:TRYUR.RBV")
RMU1_TRYUW = caget("X11MA-OP-RM1:TRYUW.RBV")
RMU1_TRX = caget("X11MA-OP-RM1:TRX.RBV")
RMU1_ROTY = caget("X11MA-OP-RM1:ROTY.RBV")
# PEEM Girder
# Virtual axes:
PEEM_girder_X = caget("X11MA-HG:X1")
PEEM_girder_Y = caget("X11MA-HG:Y1")
PEEM_girder_Z = caget("X11MA-HG:Z1")
PEEM_girder_PITCH = caget("X11MA-HG:PITCH1")
PEEM_girder_ROLL = caget("X11MA-HG:YAW1")
PEEM_girder_YAW = caget("X11MA-HG:ROLL1")
# Physical motors:
PEEM_girder_M1 = caget("X11MA-HG:M1.RBV")
PEEM_girder_M2 = caget("X11MA-HG:M2.RBV")
PEEM_girder_M3 = caget("X11MA-HG:M3.RBV")
PEEM_girder_M4 = caget("X11MA-HG:M4.RBV")
PEEM_girder_M5 = caget("X11MA-HG:M5.RBV")
PEEM_girder_M6 = caget("X11MA-HG:M6.RBV")
# Ptycho double slit
# Virtual axes:
PDS_centerX = caget("X11MA-OP-SL:CENTERX.RBV")
PDS_centerY = caget("X11MA-OP-SL:CENTERY.RBV")
PDS_sizeX = caget("X11MA-OP-SL:SIZEX.RBV")
PDS_sizeY = caget("X11MA-OP-SL:SIZEY.RBV")
# Physical motors:
PDS_TRXR = caget("X11MA-OP-SL:TRXR.RBV")
PDS_TRXW = caget("X11MA-OP-SL:TRXW.RBV")
PDS_TRYB = caget("X11MA-OP-SL:TRYB.RBV")
PDS_TRYT = caget("X11MA-OP-SL:TRYT.RBV")
# Refocussing mirror unit 2
RMU2_X = caget("X11MA-OP-RM2:ox")
RMU2_Y = caget("X11MA-OP-RM2:oy")
RMU2_Z = caget("X11MA-OP-RM2:oz")
RMU2_Rx = caget("X11MA-OP-RM2:oRx")
RMU2_Ry = caget("X11MA-OP-RM2:oRy")
RMU2_Rz = caget("X11MA-OP-RM2:oRz")
##get_string
# get_string(msg, default = None, alternatives = None, password = False)
# Reads a string from UI Args: msg(str): display message.
# default(str, optional): value displayed when window is shown.
# alternatives(list of str, optional): if provided presents a combo
# box instead of an editing field.
# password(boolean, optional): if True hides entered characters.
# Returns: String entered of null if canceled
# save_dataset(path, data, type = d, unsigned = False, features = None)
# Save data into a dataset within the current persistence context.
# Args: path(str): Path to dataset relative to the current persistence context root.
# type(str, optional): array type - 'd'=double (default), 'b'=byte, 'h'=short, 'i'=int,
# 'l'=long, 'f'=float, 'c'=char, 's'=String, 'z'=bool, 'o'=Object
# data (array or list): data to be saved
# unsigned(boolean, optional): create a dataset of unsigned type.
# features(dictionary, optional): See create_dataset.
# Returns: Dictionary

View File

@@ -0,0 +1,305 @@
import os
import json
#
#RED = "\033[91m"
#RESET = "\033[0m"
# see also Python Projekte/Strings in Datei speichern
BEAMLINE_PARAMETERS_FILE = "/home/gac-x11ma/pshell/home/script/beamline_alignment/bml_align_params.json"
def save_parameters():
msg = "Save as ..."
# User inputs the file path
path = get_string(msg, default = "/home/gac-x11ma/pshell/home/script/beamline_alignment/0012.json", alternatives = None, password = False)
# 1 Check if the user cancelled
if path is None:
print("Aborted by user.")
return # ✅ exit the function immediately
# 2 Get the parent folder of the file
folder = os.path.dirname(path)
# print(folder)
# 3 ⃣Check if the folder existst
if not os.path.isdir(folder):
print ("Aborted. Folder: " + folder + " does not exist.")
return # ✅ exit the function cleanly
# 4 Mapping from component + parameter to individual read string (Dictionary) Each component contains its parameters, with the corresponding read string and optional tolerance
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f)
parameters = {}
nan_occurred = False
# 5⃣ Read each parameter from the machine
for comp, param_dict in machine_parameters.items():
print("\nComponent: " + comp)
parameters[comp] = {}
for p, info in param_dict.items():
cmd = info["read_cmd"]
#print(cmd)
tol = info["tolerance"]
#print(tol)
try:
value = caget(cmd)
if isinstance(value, str):
display_value = value
else:
#value = string(value) c ensure float
display_value = str(value)
print(comp + "_" + p + " = " + display_value)
# print(value)
except:
# print("Problem")
# value = float('nan')
nan_occurred = True
print(comp + p + " = NaN")
parameters[comp][p] = {"value": value, "tolerance": tol}
# # 6 Save parameters to JSON file
try:
with open(path, "w") as f:
json.dump(parameters, f, indent=4, allow_nan=True)
print("Parameters successfully saved in: " + path)
except:
print("Error while saving file.")
# Warn if NaN occurred
if nan_occurred:
print("There were NaN-Values")
def select_components(selected_components=None):
#Allows the user (or another function) to select one
#or more components either interactively or
#by providing a list. It validates the selection against
#the available components in the JSON file.
msg = "Select components: "
# Load machine parameters
try:
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f)
except:
print("Error loading machine_parameters.json")
return None
# Extract component names
all_components = list(machine_parameters.keys())
# print("Available components:")
# for comp in all_components:
# print("- " + comp)
# --- determine components to display ---
if selected_components is None:
# user didn't specify -> use all from JSON
presented_to_select = all_components[:]
presented_to_select.append("all")
selected = get_string(msg, default = None, alternatives = presented_to_select, password = False)
#print(selected)
if selected is None:
print("Selection aborted by user.")
return None
elif selected == "all":
# Display components
print("Selected components:")
for comp in all_components:
print("- " + comp)
return all_components
else:
selected_components = [selected] if not isinstance(selected, list) else selected
print("Selected components:")
for comp in selected_components:
print("- " + comp)
return selected_components
elif selected_components == "all":
# Display components
print("Selected components:")
for comp in all_components:
print("- " + comp)
return all_components
else:
# ensure it is a list
if not isinstance(selected_components, list):
print("Error: selected_components must be a list of the form \"[\"Diag\", \"CMU\", ...]\" or \"all\".")
return
# validate each component
invalid = [c for c in selected_components if c not in all_components]
if invalid:
print("Error: Invalid component(s):")
for comp in invalid:
print("- " + comp)
print("Valid components are:")
for comp in all_components:
print("- " + comp)
return None
else:
print("Selected components:")
for comp in selected_components:
print("- " + comp)
return selected_components
def display_parameters(selected_components=None):
# Displays parameters for selected components.
# - Uses select_components() to choose components.
# - Prints each parameter with its value.
# - If a parameter value is missing or cannot be read, prints NaN.
# 1⃣ Get the selected components (interactive or via argument)
selection = select_components(selected_components)
if selection is None:
return # user cancelled or invalid input
# 2⃣ Load the machine parameters JSON
try:
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f)
except:
print("Error loading machine_parameters.json")
return
# 3⃣ Loop through components and display their parameters
for comp in selection:
print("\nComponent: " + comp)
params = machine_parameters.get(comp, {})
if not params:
print(" No parameters found.")
continue
for key, param_info in params.items():
# param_info enthält z.B. den read_cmd
read_cmd = param_info.get("read_cmd") # JSON muss für jeden Parameter den entsprechenden Befehl enthalten
try:
display_value = caget(read_cmd)
print(read_cmd + " = " + str(display_value))
except:
display_value = "NaN"
# print(" " + key + ": " + display_value)
def restore_parameters(selected_components=None):
# """
# Restore parameter values from a previously saved JSON file.
# The user selects which components to restore, and only parameters
# marked as "restorable": true in machine_parameters.json will be written back.
# """
msg = "Open *.json configuration file ..."
# User inputs the file path
# --- Step 1: Select file ---
restore_file = get_string(msg, default = "/home/gac-x11ma/pshell/home/script/beamline_alignment/0012.json", alternatives = None, password = False)
if restore_file is None:
print("Restore aborted: no file specified.")
return
try:
with open(restore_file, "r") as f:
saved_data = json.load(f)
except:
print("Error loading restore file:", restore_file)
return
# --- Step 2: Load machine parameters ---
try:
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f)
except:
print("Error loading machine_parameters.json")
return
# --- Step 3: Select components ---
selection = select_components(selected_components)
if selection is None:
return # user cancelled or invalid input
# --- Step 4:️⃣ Load the machine parameters JSON
try:
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f)
except:
print("Error loading machine_parameters.json")
return
# --- Step 5: Restore loop ---
for comp in selection:
print("\nComponent: " + comp)
params = machine_parameters.get(comp, {})
if not params:
print(" No parameters found.")
continue
saved_params = saved_data.get(comp, {})
if not saved_params:
print(" No saved values for this component.")
continue
for key, param_info in params.items():
if not param_info.get("restorable", False):
continue
# --- get saved value ---
saved_entry = saved_params.get(key, None)
if saved_entry is not None and 'value' in saved_entry:
saved_value = saved_entry['value']
else:
saved_value = "NaN"
# param_info enthält z.B. den read_cmd
read_cmd = param_info.get("read_cmd") # JSON muss für jeden Parameter den entsprechenden Befehl enthalten
write_cmd = param_info.get("write_cmd") # JSON muss für jeden Parameter den entsprechenden Befehl enthalten
tolerance = param_info.get("tolerance")
try:
display_value = caget(read_cmd)
# print(read_cmd + " = " + str(display_value) + ", saved value = " + str(saved_value))
# difference = float(display_value) - float(saved_value)
# --- compute difference if possible ---
if saved_value != "NaN" and display_value != "NaN":
try:
difference = abs(float(display_value) - float(saved_value))
except:
difference = "NaN"
else:
difference = "NaN"
print(read_cmd + " = " + str(display_value) + ", diff = " + str(round(difference, 5)) + ", tolerance = " + str(round(tolerance, 5)))
if float(difference) > float(tolerance):
print("Set " + read_cmd + " to " + str(round(saved_value, 5)))
write_cmd_new = "\"" + write_cmd + "\""
#print(write_cmd_new)
caput(write_cmd, float(saved_value))
else:
print("OK.")
except:
display_value = "NaN"
# print(" " + key + ": " + display_value)
# print("Component:", comp)
# run('beamline_init/with_x-rays/functions/SlitCalib.py')

View File

@@ -0,0 +1,30 @@
#import locale
# System-Standardkodierung anzeigen
#print(locale.getpreferredencoding(False))
# Beispiel: Datei in einem bestimmten Ordner speichern
# Pfad zur Datei (z. B. auf Windows)
from pathlib import Path
msg = "Save as ..."
path = get_string(msg, default = "/home/gac-x11ma/pshell/home/script/beamline_alignment/0012.txt", alternatives = None, password = False)
index = 0
status = 0
try:
zeilen = ['Das ist die erste Zeile.', 'Hier kommt die zweite Zeile.', 'Und das ist die dritte Zeile.']
with open(path, "w") as file1:
for zeile in zeilen:
file1.write(zeile + "\n")
print ("Datei wurde erfolgreich in " + path + " geschrieben.")
except:
index = 1
status = "Exception:" #, sys.exc_info()[2]
print ("Aborted by user.")
# return index, status

View File

@@ -0,0 +1,481 @@
from collections import OrderedDict
import os
import json
# This script contains seveal functions:
# 1 bml_save_current_settings()
# 2 (select_components(selected_components=None) - is called by the following functions)
# 3 bml_display_current_settings(selected_components=None)
# 4 bml_restore_saved_settings(selected_components=None)
# 5 bml_display_saved_settings(selected_components=None)
# 6 bml_show_difference_to_saved_settings(selected_components=None)
# see also Python Projekte/Strings in Datei speichern
BEAMLINE_PARAMETERS_FILE = "/sls/X11MA/data/X11MA/pshell/home/script/beamline_alignment/bml_align_params.json"
DATA_FILE = "/sls/X11MA/data/X11MA/pshell/home/data/2025_11/20251113/Monocam_AU_083.json"
#DATA_FILE = "/sls/X11MA/data/X11MA/scans/2511/0081.json"
def bml_save_current_settings():
#Allows the user to save relevant beamline parameters in aJSON file.
msg = "Save as ..."
# User inputs the file path
path = get_string(msg, default = DATA_FILE, alternatives = None, password = False)
# 1 Check if the user cancelled
if path is None:
print("Aborted by user.")
return # ✅ exit the function immediately
# 2 Get the parent folder of the file
folder = os.path.dirname(path)
# print(folder)
# 3 Check if the folder exists
if not os.path.isdir(folder):
print ("Aborted. Folder: " + folder + " does not exist.")
return # ✅ exit the function cleanly
# 4 Mapping from component + parameter to individual read string (Dictionary)
# Each component contains its parameters, with the corresponding read string
# and optional tolerance
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f, object_pairs_hook=OrderedDict)
parameters = {}
nan_occurred = False
# 5 Read each parameter from the machine
for comp, param_dict in machine_parameters.items():
print("\nComponent: " + comp)
parameters[comp] = {}
for p, info in param_dict.items():
cmd = info["read_cmd"]
#print(cmd)
tol = info["tolerance"]
#print(tol)
try:
value = caget(cmd)
if isinstance(value, str):
display_value = value
else:
#value = string(value) c ensure float
display_value = str(value)
print(comp + "_" + p + " = " + display_value)
# print(value)
except:
# print("Problem")
# value = float('nan')
nan_occurred = True
print(comp + p + " = NaN")
parameters[comp][p] = {"value": value, "tolerance": tol}
# 6 Save parameters to JSON file
try:
with open(path, "w") as f:
json.dump(parameters, f, indent=4, allow_nan=True)
print("Parameters successfully saved in: " + path)
except:
print("Error while saving file.")
# Warn if NaN occurred
if nan_occurred:
print("There were NaN-Values")
def select_components(selected_components=None):
# Allows the user (or another function) to select one
# or more components either interactively or
# by providing a list. It validates the selection against
# the available components in the JSON file.
msg = "Select components: "
# 1 Load machine parameters
try:
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f, object_pairs_hook=OrderedDict)
except:
print("Error loading machine_parameters.json")
return None
# 2 Extract component names
all_components = list(machine_parameters.keys())
# print("Available components:")
# for comp in all_components:
# print("- " + comp)
# 3 determine components to display
if selected_components is None:
# user didn't specify -> use all from JSON
presented_to_select = all_components[:]
presented_to_select.append("all")
selected = get_string(msg, default = None, alternatives = presented_to_select, password = False)
#print(selected)
if selected is None:
print("Selection aborted by user.")
return None
elif selected == "all":
# Display components
print("Selected components:")
for comp in all_components:
print("- " + comp)
return all_components
else:
selected_components = [selected] if not isinstance(selected, list) else selected
print("Selected components:")
for comp in selected_components:
print("- " + comp)
return selected_components
elif selected_components == "all":
# Display components
print("Selected components:")
for comp in all_components:
print("- " + comp)
return all_components
else:
# ensure it is a list
if not isinstance(selected_components, list):
print("Error: selected_components must be a list of the form \"[\"Diag\", \"CMU\", ...]\" or \"all\".")
return
# validate each component
invalid = [c for c in selected_components if c not in all_components]
if invalid:
print("Error: Invalid component(s):")
for comp in invalid:
print("- " + comp)
print("Valid components are:")
for comp in all_components:
print("- " + comp)
return None
else:
print("Selected components:")
for comp in selected_components:
print("- " + comp)
return selected_components
def bml_display_current_settings(selected_components=None):
# Displays parameters for selected components.
# - Uses select_components() to choose components.
# - Prints each parameter with its value.
# - If a parameter value is missing or cannot be read, prints NaN.
# 1 Get the selected components (interactive or via argument)
selection = select_components(selected_components)
if selection is None:
return # user cancelled or invalid input
# 2 Load the machine parameters JSON
try:
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f, object_pairs_hook=OrderedDict)
except:
print("Error loading machine_parameters.json")
return
# 3 Loop through components and display their parameters
for comp in selection:
print("\nComponent: " + comp)
params = machine_parameters.get(comp, {})
if not params:
print(" No parameters found.")
continue
for key, param_info in params.items():
# param_info enthält z.B. den read_cmd
read_cmd = param_info.get("read_cmd") # JSON muss für jeden Parameter den entsprechenden Befehl enthalten
try:
display_value = caget(read_cmd)
print(key + " = " + str(display_value))
except:
display_value = "NaN"
# print(" " + key + ": " + display_value)
def bml_restore_saved_settings(selected_components=None):
# Restore parameter values from a previously saved JSON file.
# The user selects which components to restore, and only parameters
# marked as "restorable": true in machine_parameters.json will be written back.
msg = "Open *.json configuration file ..."
# 1 Select file
restore_file = get_string(msg, default = DATA_FILE, alternatives = None, password = False)
if restore_file is None:
print("Restore aborted: no file specified.")
return
try:
with open(restore_file, "r") as f:
saved_data = json.load(f, object_pairs_hook=OrderedDict)
except:
print("Error loading restore file:", restore_file)
return
# 2 Load machine parameters
try:
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f, object_pairs_hook=OrderedDict)
except:
print("Error loading machine_parameters.json")
return
# 3 Select components
selection = select_components(selected_components)
if selection is None:
return # user cancelled or invalid input
# 4 Load the machine parameters JSON
try:
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f, object_pairs_hook=OrderedDict)
except:
print("Error loading machine_parameters.json")
return
# 5 Restore loop
for comp in selection:
# print("\nComponent: " + comp)
params = machine_parameters.get(comp, {})
if not params:
print(" No parameters found.")
continue
saved_params = saved_data.get(comp, {})
if not saved_params:
print(" No saved values for this component.")
continue
for key, param_info in params.items():
if not param_info.get("restorable", False):
continue
# get saved value
saved_entry = saved_params.get(key, None)
if saved_entry is not None and 'value' in saved_entry:
saved_value = saved_entry['value']
else:
saved_value = "NaN"
# param_info enthält z.B. den read_cmd
read_cmd = param_info.get("read_cmd") # JSON muss für jeden Parameter den entsprechenden Befehl enthalten
write_cmd = param_info.get("write_cmd") # JSON muss für jeden Parameter den entsprechenden Befehl enthalten
tolerance = param_info.get("tolerance")
try:
display_value = caget(read_cmd)
# print(read_cmd + " = " + str(display_value) + ", saved value = " + str(saved_value))
# difference = float(display_value) - float(saved_value)
# compute difference if possible
if saved_value != "NaN" and display_value != "NaN":
try:
difference = abs(float(display_value) - float(saved_value))
except:
difference = "NaN"
else:
difference = "NaN"
# print(read_cmd + " = " + str(display_value) + ", diff = " + str(round(difference, 5)) + ", tolerance = " + str(round(tolerance, 5)))
if float(difference) > float(tolerance):
print(key + " - Not OK. Set to " + str(round(saved_value, 5)))
write_cmd_new = "\"" + write_cmd + "\""
#print(write_cmd_new)
caput(write_cmd, float(saved_value))
check_restored_value = caget(read_cmd)
print(key + " - Reads now: " + str(check_restored_value))
else:
print(key + " - OK.")
except:
display_value = "NaN"
# print(" " + key + ": " + display_value)
def bml_display_saved_settings(selected_components=None):
# Diplay parameter values from a previously saved JSON file.
# The user selects which components to restore, and only parameters
# marked as "restorable": true in machine_parameters.json will be written back.
msg = "Open *.json configuration file ..."
# 1 Select file
#restore_file = get_string(msg, default = "/sls/X11MA/data/X11MA/scans/2511/0012.json", alternatives = None, password = False)
restore_file = get_string(msg, default = DATA_FILE, alternatives = None, password = False)
if restore_file is None:
print("Restore aborted: no file specified.")
return
try:
with open(restore_file, "r") as f:
saved_data = json.load(f, object_pairs_hook=OrderedDict)
except:
print("Error loading restore file:", restore_file)
return
# 2 Load machine parameters
try:
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f, object_pairs_hook=OrderedDict)
except:
print("Error loading machine_parameters.json")
return
# 3 Select components
selection = select_components(selected_components)
if selection is None:
return # user cancelled or invalid input
# 4 Load the machine parameters JSON
try:
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f, object_pairs_hook=OrderedDict)
except:
print("Error loading machine_parameters.json")
return
# 5 Display loop
for comp in selection:
print("\nComponent: " + comp)
params = machine_parameters.get(comp, {})
if not params:
print(" No parameters found.")
continue
saved_params = saved_data.get(comp, {})
if not saved_params:
print(" No saved values for this component.")
continue
for key, param_info in params.items():
# if not param_info.get("restorable", False):
# continue
# get saved value
saved_entry = saved_params.get(key, None)
if saved_entry is not None and 'value' in saved_entry:
saved_value = saved_entry['value']
else:
saved_value = "NaN"
print(key + " was: " + str(saved_value))
def bml_show_difference_to_saved_settings(selected_components=None):
# Restore parameter values from a previously saved JSON file.
# The user selects which components to restore, and only parameters
# marked as "restorable": true in machine_parameters.json will be written back.
msg = "Open *.json configuration file ..."
# 1 Select file
restore_file = get_string(msg, default = DATA_FILE, alternatives = None, password = False)
#restore_file = get_string(msg, default = "/sls/X11MA/data/X11MA/scans/2511/0012.json", alternatives = None, password = False)
if restore_file is None:
print("Restore aborted: no file specified.")
return
try:
with open(restore_file, "r") as f:
saved_data = json.load(f, object_pairs_hook=OrderedDict)
except:
print("Error loading restore file:", restore_file)
return
# 2 Load machine parameters
try:
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f, object_pairs_hook=OrderedDict)
except:
print("Error loading machine_parameters.json")
return
# 3 Select components
selection = select_components(selected_components)
if selection is None:
return # user cancelled or invalid input
# 4 Load the machine parameters JSON
try:
with open(BEAMLINE_PARAMETERS_FILE, "r") as f:
machine_parameters = json.load(f, object_pairs_hook=OrderedDict)
except:
print("Error loading machine_parameters.json")
return
# 5 Restore loop
for comp in selection:
print("\nComponent: " + comp)
params = machine_parameters.get(comp, {})
if not params:
print(" No parameters found.")
continue
saved_params = saved_data.get(comp, {})
if not saved_params:
print(" No saved values for this component.")
continue
for key, param_info in params.items():
# if not param_info.get("restorable", False):
# continue
# get saved value
saved_entry = saved_params.get(key, None)
if saved_entry is not None and 'value' in saved_entry:
saved_value = saved_entry['value']
else:
saved_value = "NaN"
# param_info enthält z.B. den read_cmd
read_cmd = param_info.get("read_cmd") # JSON muss für jeden Parameter den entsprechenden Befehl enthalten
# write_cmd = param_info.get("write_cmd") # JSON muss für jeden Parameter den entsprechenden Befehl enthalten
tolerance = param_info.get("tolerance")
try:
display_value = caget(read_cmd)
# print(read_cmd + " = " + str(display_value) + ", saved value = " + str(saved_value))
# difference = float(display_value) - float(saved_value)
# compute difference if possible
if saved_value != "NaN" and display_value != "NaN":
try:
difference = abs(float(display_value) - float(saved_value))
except:
difference = "NaN"
else:
difference = "NaN"
# print(read_cmd + " = " + str(display_value) + ", diff = " + str(round(difference, 5)) + ", tolerance = " + str(round(tolerance, 5)))
if float(difference) > float(tolerance):
print(key + " - Differs from saved value: " + str(round(saved_value, 5)))
# write_cmd_new = "\"" + write_cmd + "\""
#print(write_cmd_new)
# caput(write_cmd, float(saved_value))
# check_restored_value = caget(read_cmd)
# print(key + " - Reads now: " + str(check_restored_value))
else:
print(key + " - OK.")
except:
display_value = "NaN"
# print(" " + key + ": " + display_value)
# print("Component:", comp)
# run('beamline_init/with_x-rays/functions/SlitCalib.py')

View File

@@ -0,0 +1,54 @@
def close_FE_slits():
BML_FE_sizeX.setSpeed(0.4)
BML_FE_sizeY.setSpeed(0.4)
BML_FE_sizeX.moveAsync(-0.5)
BML_FE_sizeY.move(-0.5)
BML_FE_sizeX.setSpeed(0.1)
BML_FE_sizeY.setSpeed(0.1)
def open_AU_slits():
BML_AU_TRYB.moveAsync(-5.0)
BML_AU_TRYT.moveAsync(5.0)
BML_AU_TRXW.moveAsync(-5.0)
BML_AU_TRXR.moveAsync(5.0)
# BML_FE_sizeX.moveAsync(0.5)
# BML_FE_sizeY.moveAsync(0.5)
# retries = 1
# status = 0
#
## for i in range(retries):
## try:
## BML_FE_sizeX.move(-0.5)
# print "Set speed BML_FE_sizeX to 0.0"
# except:
# print "Error: "
# status = sys.exc_info()[2]
# return status
# for i in range(retries):
# try:
# stop_eiger() #Set mode single
# eiger.setNumImages(1)# Is it relevant?]
# caputq("X11MA-ES1-SD1:cam1:NumImages",1);
# set_eiger_number_of_frames(1)
# caget("X11MA-ES1-SD1:cam1:NumFrames_RBV") and compares before writing (therefore does nothing)
# if exposure:
# set_exposure_time(exposure, check)
# apply_averaging_detector(is_averaging_detector())
# caput("X11MA-ES1-SD1:Proc1:EnableFilter", False)
# caput("X11MA-ES1-SD1:Proc1:NumFilter", 1)
# caput("X11MA-ES1-SD1:cam1:NumCycles", 1)
# break
# except:
# if i==(retries-1):
# raise
# else:
# print "Error initializing Eiger, retrying: " + str(sys.exc_info()[1])

View File

@@ -0,0 +1,148 @@
{
"SR": {
"SR_current": {"read_cmd": "AGEBD-PARAMS:CURRENT", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"SR_life_time": {"read_cmd": "AGEBD-PARAMS:LIFETIME", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"SR_orbit-X-RMS": {"read_cmd": "ARSGE-CECL-FOFB1:B-ERR-X-RMS-UM", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"SR_orbit-Y-RMS": {"read_cmd": "ARSGE-CECL-FOFB1:B-ERR-Y-RMS-UM", "write_cmd": "None", "tolerance": 0.0001, "restorable": false}
},
"BMPs": {
"BML_bump_X": {"read_cmd": "X11MA-ORBITBUMP:OFFSET-X", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"BML_bump_XP": {"read_cmd": "X11MA-ORBITBUMP:OFFSET-XP", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"BML_bump_Y": {"read_cmd": "X11MA-ORBITBUMP:OFFSET-Y", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"BML_bump_YP": {"read_cmd": "X11MA-ORBITBUMP:OFFSET-YP", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"MAS_bump_X": {"read_cmd": "AGEBD-ORBITBUMP:X11MA-OFFSET-X", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"MAS_bump_XP": {"read_cmd": "AGEBD-ORBITBUMP:X11MA-OFFSET-XP", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"MAS_bump_Y": {"read_cmd": "AGEBD-ORBITBUMP:X11MA-OFFSET-Y", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"MAS_bump_YP": {"read_cmd": "AGEBD-ORBITBUMP:X11MA-OFFSET-YP", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"TOT_bump_X": {"read_cmd": "AGEBD-ORBITBUMP:X11MA-OFFSET-X-TOTAL", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"TOT_bump_XP": {"read_cmd": "AGEBD-ORBITBUMP:X11MA-OFFSET-XP-TOTAL", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"TOT_bump_Y": {"read_cmd": "AGEBD-ORBITBUMP:X11MA-OFFSET-Y-TOTAL", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"TOT_bump_YP": {"read_cmd": "AGEBD-ORBITBUMP:X11MA-OFFSET-YP-TOTAL", "write_cmd": "None", "tolerance": 0.0001, "restorable": false}
},
"ID2": {
"ID2_energy": {"read_cmd": "X11MA-UIND2:ENERGY-RBV", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"ID2_mode": {"read_cmd": "X11MA-UIND2:MODE", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"ID2_gap": {"read_cmd": "X11MA-UIND2:GAP-RBV", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"ID2_offset": {"read_cmd": "X11MA-UIND2:ENERGY-OFFS", "write_cmd": "None", "tolerance": 0.0001, "restorable": false}
},
"XBPM1": {
"XBPM1_X_motor": {"read_cmd": "X11MA-FE-XBPM1:TRX.RBV", "write_cmd": "None", "tolerance": 0.0001, "restorable": false},
"XBPM1_Y_motor": {"read_cmd": "X11MA-FE-XBPM1:TRY.RBV", "write_cmd": "None", "tolerance": 0.0001, "restorable": false}
},
"FE_slits": {
"FE_centerX": {"read_cmd": "X11MA-FE-SL1:CENTERX.RBV", "write_cmd": "X11MA-FE-SL1:CENTERX", "tolerance": 0.001, "restorable": false},
"FE_centerY": {"read_cmd": "X11MA-FE-SL1:CENTERY.RBV", "write_cmd": "X11MA-FE-SL1:CENTERY", "tolerance": 0.001, "restorable": false},
"FE_sizeX": {"read_cmd": "X11MA-FE-SL1:SIZEX.RBV", "write_cmd": "X11MA-FE-SL1:SIZEX", "tolerance": 0.001, "restorable": false},
"FE_sizeY": {"read_cmd": "X11MA-FE-SL1:SIZEY.RBV", "write_cmd": "X11MA-FE-SL1:SIZEY", "tolerance": 0.001, "restorable": false},
"FE_TRXR": {"read_cmd": "X11MA-FE-SL1:TRXR.RBV", "write_cmd": "X11MA-FE-SL1:TRXR", "tolerance": 0.001, "restorable": true},
"FE_TRXW": {"read_cmd": "X11MA-FE-SL1:TRXW.RBV", "write_cmd": "X11MA-FE-SL1:TRXW", "tolerance": 0.001, "restorable": true},
"FE_TRYB": {"read_cmd": "X11MA-FE-SL1:TRYB.RBV", "write_cmd": "X11MA-FE-SL1:TRYB", "tolerance": 0.001, "restorable": true},
"FE_TRYT": {"read_cmd": "X11MA-FE-SL1:TRYT.RBV", "write_cmd": "X11MA-FE-SL1:TRYT", "tolerance": 0.001, "restorable": true}
},
"CMU": {
"CMU_X": {"read_cmd": "X11MA-OP-CM:ox", "write_cmd": "X11MA-OP-CM:x", "tolerance": 0.0001, "restorable": false},
"CMU_Y": {"read_cmd": "X11MA-OP-CM:oy", "write_cmd": "X11MA-OP-CM:y", "tolerance": 0.0001, "restorable": true},
"CMU_Z": {"read_cmd": "X11MA-OP-CM:oz", "write_cmd": "X11MA-OP-CM:z", "tolerance": 0.0001, "restorable": true},
"CMU_Rx": {"read_cmd": "X11MA-OP-CM:oRx", "write_cmd": "X11MA-OP-CM:Rx", "tolerance": 0.0001, "restorable": true},
"CMU_Ry": {"read_cmd": "X11MA-OP-CM:oRy", "write_cmd": "X11MA-OP-CM:Ry", "tolerance": 0.0001, "restorable": true},
"CMU_Rz": {"read_cmd": "X11MA-OP-CM:oRz", "write_cmd": "X11MA-OP-CM:Rz", "tolerance": 0.0001, "restorable": true},
"CMU_baffle": {"read_cmd": "X11MA-OP2-CM:TRB.RBV", "write_cmd": "None", "tolerance": 0.0001, "restorable": false}
},
"XBPM2": {
"XBPM2_X_motor": {"read_cmd": "X11MA-OP2-BP1:TRX.RBV", "write_cmd": "X11MA-OP2-BP1:TRX", "tolerance": 0.0001, "restorable": false},
"XBPM2_Y_motor": {"read_cmd": "X11MA-OP2-BP1:TRY.RBV", "write_cmd": "X11MA-OP2-BP1:TRY", "tolerance": 0.0001, "restorable": false}
},
"AU_slits": {
"AU_centerV": {"read_cmd": "X11MA-OP2-AVcenter", "write_cmd": "X11MA-OP2-AVcenter", "tolerance": 0.001, "restorable": false},
"AU_centerH": {"read_cmd": "X11MA-OP2-AHcenter", "write_cmd": "X11MA-OP2-AHcenter", "tolerance": 0.001, "restorable": false},
"AU_sizeV": {"read_cmd": "X11MA-OP2-AVsize", "write_cmd": "X11MA-OP2-AVsize", "tolerance": 0.001, "restorable": false},
"AU_sizeH": {"read_cmd": "X11MA-OP2-AHsize", "write_cmd": "X11MA-OP2-AHsize", "tolerance": 0.001, "restorable": false},
"AU_TRXR": {"read_cmd": "X11MA-OP2-AU:TRZ1.RBV", "write_cmd": "X11MA-OP2-AU:TRZ1", "tolerance": 0.001, "restorable": false},
"AU_TRXW": {"read_cmd": "X11MA-OP2-AU:TRZ4.RBV", "write_cmd": "X11MA-OP2-AU:TRZ4", "tolerance": 0.001, "restorable": false},
"AU_TRYB": {"read_cmd": "X11MA-OP2-AU:TRY1.RBV", "write_cmd": "X11MA-OP2-AU:TRY1", "tolerance": 0.001, "restorable": false},
"AU_TRYT": {"read_cmd": "X11MA-OP2-AU:TRY4.RBV", "write_cmd": "X11MA-OP2-AU:TRY4", "tolerance": 0.001, "restorable": false}
},
"Mono": {
"Mono_energy": {"read_cmd": "X11MA-PGM:rbkenergy", "write_cmd": "X11MA-PGM:energy", "tolerance": 0.001, "restorable": false},
"Mono_cff_A": {"read_cmd": "X11MA-PGM:rbkcff", "write_cmd": "X11MA-PGM:cff.A", "tolerance": 0.01, "restorable": false},
"Mono_cff_B": {"read_cmd": "X11MA-PGM:rbkcff", "write_cmd": "X11MA-PGM:cff.B", "tolerance": 0.01, "restorable": false},
"Mono_cff_C": {"read_cmd": "X11MA-PGM:rbkcff", "write_cmd": "X11MA-PGM:cff.C", "tolerance": 0.01, "restorable": false},
"Mono_theta": {"read_cmd": "X11MA-PGM:rbktheta", "write_cmd": "None", "tolerance": 0.001, "restorable": false},
"Mono_theta_off1A": {"read_cmd": "X11MA-PGM:THETAOFF1.A", "write_cmd": "None", "tolerance": 0.001, "restorable": false},
"Mono_theta_off1B": {"read_cmd": "X11MA-PGM:THETAOFF1.B", "write_cmd": "None", "tolerance": 0.001, "restorable": false},
"Mono_theta_off1C": {"read_cmd": "X11MA-PGM:THETAOFF1.C", "write_cmd": "None", "tolerance": 0.001, "restorable": false},
"Mono_theta_off2A": {"read_cmd": "X11MA-PGM:THETAOFF2.A", "write_cmd": "None", "tolerance": 0.001, "restorable": false},
"Mono_theta_off2B": {"read_cmd": "X11MA-PGM:THETAOFF2.B", "write_cmd": "None", "tolerance": 0.001, "restorable": false},
"Mono_theta_off2C": {"read_cmd": "X11MA-PGM:THETAOFF2.C", "write_cmd": "None", "tolerance": 0.001, "restorable": false},
"Mono_mirror_origin": {"read_cmd": "X11MA:m3.RBV", "write_cmd": "None", "tolerance": 0.001, "restorable": false},
"Mono_grating_origin": {"read_cmd": "X11MA:m4.RBV", "write_cmd": "None", "tolerance": 0.001, "restorable": false}
},
"FMU_aperture": {
"top": {"read_cmd": "X11MA-OP-FM:TRYT.RBV", "write_cmd": "None", "tolerance": 1.0, "restorable": false},
"bottom": {"read_cmd": "X11MA-OP-FM:TRYB.RBV", "write_cmd": "None", "tolerance": 1.0, "restorable": false}
},
"FMU": {
"FMU_X": {"read_cmd": "X11MA-OP-FM:X.RBV", "write_cmd": "X11MA-OP-FM:X", "tolerance": 0.001, "restorable": false},
"FMU_Y": {"read_cmd": "X11MA-OP-FM:Y.RBV", "write_cmd": "X11MA-OP-FM:Y", "tolerance": 0.001, "restorable": false},
"FMU_PITCH": {"read_cmd": "X11MA-OP-FM:PITCH.RBV", "write_cmd": "X11MA-OP-FM:PITCH", "tolerance": 0.001, "restorable": false},
"FMU_ROLL": {"read_cmd": "X11MA-OP-FM:ROLL.RBV", "write_cmd": "X11MA-OP-FM:ROLL", "tolerance": 0.001, "restorable": false},
"FMU_YAW": {"read_cmd": "X11MA-OP-FM:YAW.RBV", "write_cmd": "X11MA-OP-FM:YAW", "tolerance": 0.001, "restorable": false},
"FMU_TRYD": {"read_cmd": "X11MA-OP-FM:TRYD.RBV", "write_cmd": "X11MA-OP-FM:TRYD", "tolerance": 0.001, "restorable": true},
"FMU_TRYUR": {"read_cmd": "X11MA-OP-FM:TRYUR.RBV", "write_cmd": "X11MA-OP-FM:TRYUR", "tolerance": 0.001, "restorable": true},
"FMU_TRYUW": {"read_cmd": "X11MA-OP-FM:TRYUW.RBV", "write_cmd": "X11MA-OP-FM:TRYUW", "tolerance": 0.001, "restorable": true},
"FMU_TRX": {"read_cmd": "X11MA-OP-FM:TRX.RBV", "write_cmd": "X11MA-OP-FM:TRX", "tolerance": 0.001, "restorable": true},
"FMU_ROTY": {"read_cmd": "X11MA-OP-FM:ROTY.RBV", "write_cmd": "X11MA-OP-FM:ROTY", "tolerance": 0.001, "restorable": true}
},
"ESLIT": {
"width": {"read_cmd": "X11MA-OP2-SL:TRY.RBV", "write_cmd": "None", "tolerance": 1.0, "restorable": false},
"position": {"read_cmd": "X11MA-OP2-SL:TRX.RBV", "write_cmd": "None", "tolerance": 0.1, "restorable": false}
},
"Diag": {
"position": {"read_cmd": "X11MA-OP-DI:HO3.RBV", "tolerance": 0.1, "restorable": false},
"select": {"read_cmd": "X11MA:DIAG-SET", "tolerance": 0.0, "restorable": false}
},
"RMU1": {
"RMU1_X": {"read_cmd": "X11MA-OP-RM1:X.RBV", "write_cmd": "X11MA-OP-RM1:X", "tolerance": 0.001, "restorable": false},
"RMU1_Y": {"read_cmd": "X11MA-OP-RM1:Y.RBV", "write_cmd": "X11MA-OP-RM1:Y", "tolerance": 0.001, "restorable": false},
"RMU1_PITCH": {"read_cmd": "X11MA-OP-RM1:PITCH.RBV", "write_cmd": "X11MA-OP-RM1:PITCH", "tolerance": 0.001, "restorable": false},
"RMU1_ROLL": {"read_cmd": "X11MA-OP-RM1:ROLL.RBV", "write_cmd": "X11MA-OP-RM1:ROLL", "tolerance": 0.001, "restorable": false},
"RMU1_YAW": {"read_cmd": "X11MA-OP-RM1:YAW.RBV", "write_cmd": "X11MA-OP-RM1:YAW", "tolerance": 0.001, "restorable": false},
"RMU1_TRYD": {"read_cmd": "X11MA-OP-RM1:TRYD.RBV", "write_cmd": "X11MA-OP-RM1:TRYD", "tolerance": 0.001, "restorable": true},
"RMU1_TRYUR": {"read_cmd": "X11MA-OP-RM1:TRYUR.RBV", "write_cmd": "X11MA-OP-RM1:TRYUR", "tolerance": 0.001, "restorable": true},
"RMU1_TRYUW": {"read_cmd": "X11MA-OP-RM1:TRYUW.RBV", "write_cmd": "X11MA-OP-RM1:TRYUW", "tolerance": 0.001, "restorable": true},
"RMU1_TRX": {"read_cmd": "X11MA-OP-RM1:TRX.RBV", "write_cmd": "X11MA-OP-RM1:TRX", "tolerance": 0.001, "restorable": true},
"RMU1_ROTY": {"read_cmd": "X11MA-OP-RM1:ROTY.RBV", "write_cmd": "X11MA-OP-RM1:ROTY", "tolerance": 0.001, "restorable": true}
},
"PEEM_Girder": {
"PEEM_girder_X": {"read_cmd": "X11MA-HG:X1", "write_cmd": "X11MA-HG:X_SET", "tolerance": 0.001, "restorable": false},
"PEEM_girder_Y": {"read_cmd": "X11MA-HG:Y1", "write_cmd": "X11MA-HG:Y_SET", "tolerance": 0.001, "restorable": false},
"PEEM_girder_Z": {"read_cmd": "X11MA-HG:Z1", "write_cmd": "X11MA-HG:Z_SET", "tolerance": 0.001, "restorable": false},
"PEEM_girder_PITCH": {"read_cmd": "X11MA-HG:PITCH1", "write_cmd": "X11MA-HG:PITCH_SET", "tolerance": 0.001, "restorable": false},
"PEEM_girder_ROLL": {"read_cmd": "X11MA-HG:ROLL1", "write_cmd": "X11MA-HG:ROLL_SET", "tolerance": 0.001, "restorable": false},
"PEEM_girder_YAW":{"read_cmd": "X11MA-HG:YAW1", "write_cmd": "X11MA-HG:YAW_SET", "tolerance": 0.001, "restorable": false},
"PEEM_girder_M1": {"read_cmd": "X11MA-HG:M1.RBV", "write_cmd": "X11MA-HG:M1", "tolerance": 0.001, "restorable": true},
"PEEM_girder_M2": {"read_cmd": "X11MA-HG:M2.RBV", "write_cmd": "X11MA-HG:M2", "tolerance": 0.001, "restorable": true},
"PEEM_girder_M3": {"read_cmd": "X11MA-HG:M3.RBV", "write_cmd": "X11MA-HG:M3", "tolerance": 0.001, "restorable": true},
"PEEM_girder_M4": {"read_cmd": "X11MA-HG:M4.RBV", "write_cmd": "X11MA-HG:M4", "tolerance": 0.001, "restorable": true},
"PEEM_girder_M5": {"read_cmd": "X11MA-HG:M5.RBV", "write_cmd": "X11MA-HG:M5", "tolerance": 0.001, "restorable": true},
"PEEM_girder_M6": {"read_cmd": "X11MA-HG:M6.RBV", "write_cmd": "X11MA-HG:M6", "tolerance": 0.001, "restorable": true}
},
"Ptycho_slits": {
"PDS_centerX": {"read_cmd": "X11MA-OP-SL:CENTERX.RBV", "write_cmd": "X11MA-OP-SL:CENTERX", "tolerance": 0.001, "restorable": false},
"PDS_centerY": {"read_cmd": "X11MA-OP-SL:CENTERY.RBV", "write_cmd": "X11MA-OP-SL:CENTERY", "tolerance": 0.001, "restorable": false},
"PDS_sizeX": {"read_cmd": "X11MA-OP-SL:SIZEX.RBV", "write_cmd": "X11MA-OP-SL:SIZEX", "tolerance": 0.001, "restorable": false},
"PDS_sizeY": {"read_cmd": "X11MA-OP-SL:SIZEY.RBV", "write_cmd": "XX11MA-OP-SL:SIZEY", "tolerance": 0.001, "restorable": false},
"PDS_TRXR": {"read_cmd": "X11MA-OP-SL:TRXR.RBV", "write_cmd": "X11MA-OP-SL:TRXR", "tolerance": 0.001, "restorable": true},
"PDS_TRXW": {"read_cmd": "X11MA-OP-SL:TRXW.RBV", "write_cmd": "X11MA-OP-SL:TRXW", "tolerance": 0.001, "restorable": true},
"PDS_TRYB": {"read_cmd": "X11MA-OP-SL:TRYB.RBV", "write_cmd": "X11MA-OP-SLTRYB", "tolerance": 0.001, "restorable": true},
"PDS_TRYT": {"read_cmd": "X11MA-OP-SL:TRYT.RBV", "write_cmd": "X11MA-OP-SL:TRYT", "tolerance": 0.001, "restorable": true}
},
"RMU2": {
"RMU_X": {"read_cmd": "X11MA-OP-RM2:ox", "write_cmd": "X11MA-OP-RM2:x", "tolerance": 0.0001, "restorable": false},
"RMU_Y": {"read_cmd": "X11MA-OP-RM2:oy", "write_cmd": "X11MA-OP-RM2:y", "tolerance": 0.0001, "restorable": true},
"RMU_Z": {"read_cmd": "X11MA-OP-RM2:oz", "write_cmd": "X11MA-OP-RM2:z", "tolerance": 0.0001, "restorable": true},
"RMU_Rx": {"read_cmd": "X11MA-OP-RM2:oRx", "write_cmd": "X11MA-OP-RM2:Rx", "tolerance": 0.0001, "restorable": true},
"RMU_Ry": {"read_cmd": "X11MA-OP-RM2:oRy", "write_cmd": "X11MA-OP-RM2:Ry", "tolerance": 0.0001, "restorable": true},
"RMU_Rz": {"read_cmd": "X11MA-OP-RM2:oRz", "write_cmd": "X11MA-OP-RM2:Rz", "tolerance": 0.0001, "restorable": true}
}
}

View File

@@ -0,0 +1,18 @@
{
"A": {
"1": {
"value": 12.5,
"tolerance": 0.5
},
"2": {
"value": 7.8,
"tolerance": 0.2
}
},
"B": {
"1": {
"value": 3.4,
"tolerance": 0.1
}
}
}

View File

@@ -0,0 +1,25 @@
import json
# Testdaten (so ähnlich wie später deine Parameterstruktur)
daten = {
"A": {
"1": {"value": 12.5, "tolerance": 0.5},
"2": {"value": 7.8, "tolerance": 0.2}
},
"B": {
"1": {"value": 3.4, "tolerance": 0.1}
}
}
# Datei speichern
with open("/home/gac-x11ma/pshell/home/script/beamline_alignment/test_parameters.json", "w") as f:
json.dump(daten, f, indent=4) # indent=4 = schön formatiert
print("Datei erfolgreich geschrieben.")
# Datei wieder laden
with open("/home/gac-x11ma/pshell/home/script/beamline_alignment/test_parameters.json", "r") as f:
geladene_daten = json.load(f)
print("\nGeladene Daten:")
print(geladene_daten)