Files
x06da/script/fbm.py
2015-12-18 10:44:44 +01:00

79 lines
2.6 KiB
Python

###################################################################################################
#
###################################################################################################
tc1 = caget('X06DA-OP-MO:TC1') # theta1 thermo couple 1
energy = get_energy() # Mono energy
dtz = caget('X06DA-ES-DET:TRZ1') # detector Z- position
if current.read() < 200:
raise Exception ('Ring current too low')
if caget('X06DA-FE-AB1:OPEN_EPS','i') == 0:
raise Exception ('FrontEndAbsorber closed') # FrontEnd absorber shutter state
if caget('X06DA-FE-PH1:OPEN_EPS','i') == 0: # FrontEnd shutter state
raise Exception ('FrontEndShutter closed')
if caget('X06DA-OP-ST1:OPEN_EPS','i') == 0: # ExpHutch shutter state
raise Exception ('ExpHutchShutter closed ')
if caget(('X06DA-OP-MO:E-GET'),'d') > 17.5: #Mono energy
raise Exception ('Sorry, no feedback above 17.5 keV for now')
tc = 40 # 2015.09.20 quick fix by MT JW
cur = caget('X06DA-ES-BPM1:SUM','d')
op1 = caget('X06DA-OP-XPM1:CHAN1', 'd')
if op1 < 1.0:
sete_failed = 1
raise Exception ('X06DA-OP-XPM1:CHAN1 < 10 - please check monochromator, frontend, primary slits, ring current and undulator - program exits')
# define max deviations
dmx = 14.0 # 2 x distance mirror HR-XBPM
ymax = 2e-3 # endwhile criterion for vertical correction
if cur < tc: #check if beam is on CVD-XBPM
sete_failed = 1
raise Exception ('evere problem - NO BEAM ON HR-DIFFRACTOMETER XBPM')
# initial mirror TRY3 position
y3i = try3.read()
print "initial y3i: " + str(y3i)
# how much beam is off?
by = bpm1.read()
print "EBOX-POSV before rock: " + str(by)
# if beam is not off, do nothing
if abs(by) > ymax:
rock(th1)
# result of ROCK
time.sleep(2.0)
by = bpm1.read()
print "EBOX-POSV after rock: " + str(by)
# feedback
while abs(by) >= ymax :
by = bpm1.read()
print "current EBOX-POSV: " + str(by)
cur = caget('X06DA-ES-BPM1:SUM','d')
if cur > tc:
ehs = caget('X06DA-OP-ST1:OPEN_EPS','i') # make sure that shutter is open
if (ehs > 0) and (abs(by) > ymax):
if abs(by) > (50*ymax):
raise Exception ('TODO')
#limit mirror TRY3 movement
y3 = try3.read()
if abs(y3i - y3 - 1e-4 * round(by/1e-3)) > 0.008:
raise Exception ('Feedback trying to move mirror Y3 beyond safe limit')
try3.moveRel(-1e-4 * round(by/1e-3))
print "current X06DA-OP-MI1:TRY3: ", y3
time.sleep(0.25)
print "TRY3 net movement: " + str(y3i-try3.read()) #print how much TRY3 moved