def error(msg): caput(beam_err, (msg[:40]) if len(msg) > 40 else msg) raise Exception (msg) #def sete(e, all=True, wavelengt=False): beam_err = BEAMLINE_XNAME + '-ES-DAQ:BEAM-ERROR' beam_set = BEAMLINE_XNAME + '-ES-DAQ:BEAM-SET' ring_current_cutoff = 300.0 if wavelength: e = 12.39842/e if e < 4.7 or e > 17.5: error('ERROR:Energy out of range: 4.7 to 17.5 keV') print time.strftime('%X %x') print '... Setting energy to '+ str(e) +' keV.' msg = 'Working... (aiming @ '+ str(e) +' keV)' caput(beam_err, (msg[:40]) if len(msg) > 40 else msg) if caget('ALIRF-GUN:CUR-LOWLIM', 'd') < ring_current_cutoff: error('ERROR:Current is too low: < ' + str(ring_current_cutoff) + 'mA') if fe_absorber.read()!= 'OPEN': raise Exception ('FrontEndAbsorber closed') # FrontEnd absorber shutter state if fe_shutter.read() != "OPEN": raise Exception ('FrontendShutter closed') e0 = get_energy(False); dE = abs(e-e0) print '... started to move monochromator motors' print '... alignment will take some minutes ' act = 0 # do a setenergy to move theta 1 and 2 to calculated position in case they are not synchronized. theta1 = th1.read() #TODO: setpoint? etheta1 = a2e(abs(theta1),1,1,1,deg=True,ln=True) theta2 = th2.read() etheta2 = a2e(abs(theta2),1,1,1,deg=True,ln=False) if abs (etheta1-etheta2) > 0.01: set_energy(e) while abs(e-e0) > 3e-5/math.tan(angle(e, deg=False)): #TODO: deg==false? WHILE ABS(e-e0) GT 3e-5/TAN(ANGLE(e)) DO BEGIN set_energy(e) e0 = get_energy(False) #----- correcting theta2 if intensity is low or if the encoder ----- #----- differs by more than rocking curve width from theory -------- # -------- for sete, /all, remove all filters if all: filter1.write("None") filter2.write("None") filter3.write("None") filter4.write("None") time.sleep(0.5) #-------- rock FIRST crystal until its peak is reached ------------- while rock(th1)==False: #TODO: #ROCK,1,dt = (dE>1.)*4e-2/e,ffail=ff pass # finer final rock time.sleep(1.0) print 'FINER FINAL ROCK' rock() e0 = get_energy() print e0 mono_energy.write(e0) print mono_energy.read() caput(beam_err, 'Finito') caput(beam_set, 'DONE') print 'sete_done'