This commit is contained in:
x07maop
2016-01-21 16:16:24 +01:00
parent 3d862b7e42
commit cb87684437
17 changed files with 982 additions and 57 deletions

View File

@@ -37,13 +37,15 @@ def wait_channel(name, value, type):
#Pre-actions
#wait_channel('ACOAU-ACCU:OP-MODE', 'Light Available', type = 's')
caput('X07MA-ID:MODE', MODE)
time.sleep(1.0)
if MODE == 'LINEAR':
caput('X07MA-ID:ALPHA', ALPHA)
wait_channel('X07MA-ID:DONE', 'DONE', type = 's')
caput('X07MA-ID:ENERGY-OFFS', OFFSET)
wait_channel('X07MA-ID:DONE', 'DONE', type = 's')
if MODE is not None:
pol_mode.write(MODE)
time.sleep(1.0)
if MODE == 'LINEAR':
pol_angle.write(ALPHA)
wait_device(pol_done,"DONE")
if OFFSET is not None:
caput('X07MA-ID:ENERGY-OFFS', OFFSET)
wait_device(pol_done,"DONE")
caput('E1', E1)
caput('E2', E2)
caput('TIME', TIME)
@@ -56,7 +58,8 @@ time.sleep(0.1)
caput('X07MA-OP-VG13:WT_SET', 'Try open')
time.sleep(5.0)
caput('X07MA-OP-VG13:WT_SET', 'Try open')
time.sleep(DELAY)
if DELAY is not None:
time.sleep(DELAY)
caput('START', '1')
#Post-actions

91
script/EnergyScanNew.py Normal file
View File

@@ -0,0 +1,91 @@
#Script imported from: MgE_plus.xml
#Parameters
"""
E1 = 710
E2 = 720
TIME = 1 #min
DELAY = 10.0 #s
MODE = 'CIRC +'
OFFSET = -9.0
FOLDER = '2015_04/20150417'
FILE = 'Fe_plus'
ALPHA=0
"""
print "\nStarting energy scan - Parameters: ",
print E1,E2,TIME,DELAY,MODE ,OFFSET ,FOLDER ,FILE ,ALPHA
start = time.localtime()
folder = os.path.expanduser("~/Data1/") + FOLDER + "/";
def getNewestFile():
global folder
import glob
try:
return max(glob.iglob(folder+'/*.txt'), key=os.path.getctime)
except:
return None
newest = getNewestFile()
#Pre-actions
wait_beam()
pol_mode.write(MODE) #caput('X07MA-ID:MODE', MODE) #TODO: CAPUT
time.sleep(1.0) #TODO: Needed?
if MODE == 'LINEAR':
pol_angle.write(ALPHA) #TODO: CAPUT
pol_done.waitValue("DONE") #TODO: NEEDED?
pol_offset.write(OFFSET) #TODO: CAPUT
pol_done.waitValue("DONE")
caput('E1', E1)
caput('E2', E2)
caput('TIME', TIME)
caput('FOLDER', FOLDER)
set_energy (E1)
#caputq('X07MA-PHS-E:GO.A', E1)
#wait_channel('X07MA-PHS:alldone', '1', type = 's')
#time.sleep(0.5)
caput('FILE', FILE)
time.sleep(0.1)
open_valve()
open_valve(0.0) #TODO: WHY WRITING AGAIN???
#caput('X07MA-OP-VG13:WT_SET', 'Try open')
#time.sleep(5.0)
#caput('X07MA-OP-VG13:WT_SET', 'Try open')
time.sleep(DELAY)
caput('START', '1')
#Post-actions
wait_channel('START', 'STOP', type = 's')
time.sleep(2.0)
print "Finished Energy scan"
#File convertion
newName = folder + time.strftime("%Y%m%d_%H%M_", start) + FILE + "_0000.txt";
#name = caget("MSG").split(' ')[0]
name = getNewestFile()
if name == newest:
raise Exception("Data file not created")
if not os.path.isfile(name):
raise Exception("Data file not found: " + name)
#cmd = "/sls/X07MA/data/x07maop/bin/modify_otf.pl " + name + " " + newName;
#print("Converting data file: " + cmd);
#import os
#os.system(cmd)
convert_file(name, newName)
print("Success")

151
script/HystScanNew.py Normal file
View File

@@ -0,0 +1,151 @@
#Script imported from: Fe_hyst_plus.xml
#Parameters
"""
START_FIELD = -0.1
END_FIELD = 0.1
ENERGIES = (707.90, 703.90)
RAMP_RATE = 0.2
ENERGY_CHANGE_SLEEP = 0.5
MODE = 'CIRC +'
OFFSET = -1.0
"""
FIELD_PRECISION = 0.01
#Pre-actions
#cawait('ACOAU-ACCU:OP-MODE', 'Light Available', type = 's')
wait_beam()
pol_mode.write(MODE)
pol_offset.write(OFFSET) #caput('X07MA-ID:ENERGY-OFFS', OFFSET)
caputq('X07MA-PC:CSCALER.INPB', '1')
ramp_rate.write(RAMP_RATE)
if len(ENERGIES) ==2:
dif_series = plot([],"Dif", context="Dif")[0].getSeries(0)
else:
dif_series = None
set_preference(Preference.ENABLED_PLOTS, ['field', 'tey_norm', 'trans_norm'])
set_preference(Preference.PLOT_TYPES, {'tey_norm':1, 'trans_norm':1})
scan = ManualScan(['field', 'Energy'], ['TEY', 'I0', 'trans', 'polarization', 'polAngle', 'temperature', 'RingCurrent', 'fieldAnalogX', 'tey_norm','trans_norm'], [0.0, ENERGIES[0]], [0.0, ENERGIES[-1]], [0, len(ENERGIES)-1])
scan.start()
#Stop condition
#ramp_done = Channel('X07MA-PC-MAG:X:RAMP:DONE', type = 'i')
#Creating channels: dimension 1
#RegionPositioner field
#field = Channel('X07MA-PC:GO', type = 'd')
#fieldReadback = Channel('X07MA-PC-PS2:STS:PMCURRENT', type = 'd')
#Creating channels: dimension 2
#ArrayPositioner Energy
#Energy = Channel('X07MA-PHS-E:GO.A', type = 'd')
#EnergyReadback = Channel('X07MA-PGM:CERBK', type = 'd')
#ScalarDetector TEY
#TEY = Channel('X07MA-ES1-AI:SIGNAL0', type = 'd')
#ScalarDetector I0
#I0 = Channel('X07MA-ES1-AI:SIGNAL1', type = 'd')
#ScalarDetector trans
#trans = Channel('X07MA-ES1-AI:SIGNAL2', type = 'd')
#ScalarDetector polarization
#polarization = Channel('X07MA-ID:MODE', type = 'd')
#ScalarDetector polAngle
#polAngle = Channel('X07MA-ID:ALPHA', type = 'd')
#ScalarDetector temperature
#temperature = Channel('X07MA-PC-TC:STS:T1', type = 'd')
#ScalarDetector RingCurrent
#RingCurrent = Channel('ARIDI-PCT:CURRENT', type = 'd')
#ScalarDetector fieldAnalogX
#fieldAnalogX = Channel('X07MA-ES1-AI:SIGNAL4', type = 'd')
print "SKIPPED Waiting for start field"
if abs(field_x.readback.read() - START_FIELD) > FIELD_PRECISION:
field_x.write(START_FIELD)
#if abs(fieldReadback.get() - START_FIELD) > FIELD_PRECISION:
# caput('X07MA-PC-PS2:M:GO.A', START_FIELD)
#caput("X07MA-PC-MAG:X:DMD", START_FIELD)
#caput("X07MA-PC-MAG:STARTRAMP.PROC", 1)
field_x_done.waitValue(1) #ramp_done.wait_for_value(1.0)
pol_done.waitValue("DONE")
#caput('X07MA-OP-VG13:WT_SET', 'Try open')
#time.sleep(2.0)
open(2.0)
print "Set end field"
#caput("X07MA-PC-MAG:X:DMD", END_FIELD)
#caputq("X07MA-PC-MAG:STARTRAMP.PROC", 1)
field_x.write(END_FIELD) #caputq('X07MA-PC-PS2:M:GO.A', END_FIELD)
index = 0
while(True):
#Dimension 2START_FIELD = -0.2
#ArrayPositioner Energy
for setpoint2 in ENERGIES:
#Energy.put(setpoint2, timeout=None) # TODO: Set appropriate timeout
energy.write(setpoint2)
sleep( ENERGY_CHANGE_SLEEP ) # Settling time
#TODO: change to Controlled variable?
readback2 = energy_readback.read() #EnergyReadback.get()
if abs(readback2 - setpoint2) > 0.1 : # TODO: Check accuracy
raise Exception('Energy could not be set to the value ' + str(setpoint2))
#Detector field readback
field_readback = field_x.readback.read() #fieldReadback.get()
detector1 = signal_tey.read() #TEY.get()
detector2 = signal_i0.read() #I0.get()
detector3 = signal_trans.read() #trans.get()
detector4 = float(pol_mode.getPositions().index(pol_mode.readback.read())) #polarization.get()
detector5 = pol_angle.read() #polAngle.get()
detector6 = temperature.read() #temperature.get()
detector7 = current.read()
detector8 = signal_field_analog_x.read() # fieldAnalogX.get()
tey_norm = detector1/detector2
trans_norm = detector3/detector2
if dif_series is not None:
if setpoint2 == ENERGIES[0]:
first = tey_norm
else:
dif = tey_norm-first
dif_series.appendData(field_readback,dif)
scan.append ([field_readback, setpoint2], [field_readback, readback2], [detector1, detector2, detector3, detector4, detector5, detector6, detector7, detector8, tey_norm, trans_norm])
if field_x_done.read() == 1: #If not ramping #ramp_done.get() == 1:
print "Not ramping, breaking execution"
break
index = index+1
#Closing channels
#Energy.close()
#EnergyReadback.close()
#TEY.close()
#I0.close()
#trans.close()
#polarization.close()
#polAngle.close()
#temperature.close()
#RingCurrent.close()
#fieldAnalogX.close()
#field.close()
#fieldReadback.close()
#ramp_done.close()
scan.end()

View File

@@ -36,7 +36,9 @@ def getPars(element):
raise Exception ("Invalid element: " + str(element))
#Pseudo-devices
###################################################################################################
# PSeudo-devices
###################################################################################################
energy = None
class SimulatedEnergy(Writable):
def write(self, value):
@@ -64,36 +66,238 @@ class SimulatedEnergyReadback(Readable):
sim_energy = SimulatedEnergy()
sim_energy_readback = SimulatedEnergyReadback()
###################################################################################################
#Definitions for importing text batch felis
# Utilities
###################################################################################################
def get_next_fid(folder, prefix):
try:
import glob
files = glob.glob(folder + prefix + '*_*.txt')
last = max(files)
index = int (last[last.rfind('_')+1 : last.rfind('.')]) + 1
return index
except:
return 0
def wait_channel(name, value, timeout=None, type='s'):
print "Waiting " + str(name) + " = " + str(value)
cawait(name, value, timeout = timeout, type=type)
print "Done waiting"
def wait_device(dev, value, timeout=-1):
if timeout >= 0:
timeout = int( 1000.0 * timeout)
print "Waiting " + dev.getName() + " = " + str(value)
dev.waitValue(value,timeout)
print "Done waiting"
def convert_file(input_file_name, output_file_name):
print "Converting data file: " + input_file_name + " to " + output_file_name
sep = "\t"
line_sep = "\n"
pol= pol_mode.readback.read()
if ret == "LINEAR": pol = str(pol_angle.read())
with open(input_file_name) as inp:
lines = inp.readlines()
with open(output_file_name, "wb") as out:
out.write("Ecrbk" + sep + "CADC1" + sep + "CADC2" + sep + "CADC3" + sep + "CADC4" + sep + "CADC5" + sep + "MCurr" + sep + "Time" + sep + "FieldX" + sep + "FieldZ" + sep + "Pol" + sep + "Temperature" + sep + "NORMtey" + sep + "NORMdiode" + line_sep)
s = sep
for line in lines[1:]:
line = line.strip()
if line=="": break
try:
(Ecrbk, CADC1, CADC2, CADC3, CADC4, CADC5, MCurr, cffrbk, IDErbk, NORM, time, MAGX, MAGZ, EXPT) = line.split(" ")
normtey=repr( float(CADC1)/float(CADC2))
normdiode=repr(float(CADC3)/float(CADC2))
out.write(Ecrbk + s + CADC1 + s + CADC2 + s + CADC3 + s + CADC4 + s + CADC5 + s + MCurr + s + time + s + MAGX + s + MAGZ + s + str(pol) + s + EXPT + s + normtey + s + normdiode + line_sep)
except:
traceback.print_exc()
def plot_file(file, context = None):
"""
"""
table = Table.load(file, "\t", '#')
plots = plot(table, context = context)
###################################################################################################
# Controller state listener
###################################################################################################
class Listener(ControllerListener):
def onControllerStateChanged(self, state, former):
if former == State.Busy:
FILENAME = None
controller.addListener(Listener()) #Old listeners are cleande in startup
###################################################################################################
#Definitions for importing text batch files
###################################################################################################
#TODO: Should set devices? K10, k11, k24 seem not to be defined....
keithleys = {
#name:[Setpoint, range]
"k1": [None , 'X07MA-PC-K428:1:setGain'],
"k2": [None , 'X07MA-PC-K428:2:setGain'],
"k3": [None , 'X07MA-PC-K428:3:setGain'],
"k10":['X07MA-KEI10:SETVOLTAGE' , 'X07MA-KEI10:RANGE'],
"k11":['X07MA-KEI11:SETVOLTAGE' , 'X07MA-KEI11:RANGE'],
"k24":['X07MA-KEI2400:setVoltAO', None]
}
def set_hx(field, timeout = -1):
field_x.write(field)
field_x.write(float(field))
field_x_done.waitValue(1,timeout)
def setHz(field, timeout = -1):
field_z.write(field)
field_z.write(float(field))
field_z_done.waitValue(1,timeout)
def set_pol_cplus(offset = None, timeout = -1):
pol_mode.write("CIRC +")
if off is not None:
pol_offset.write(offset)
pol_done.waitValue("DONE",timeout)
pol_offset.write(float(offset))
pol_done.waitValue("DONE",timeout)
def set_pol_cminus(offset = None, timeout = -1):
pol_mode.write("CIRC -")
if off is not None:
pol_offset.write(offset)
pol_done.waitValue("DONE",timeout)
pol_offset.write(float(offset))
pol_done.waitValue("DONE",timeout)
def set_pol_lin(angle, offset = None, timeout = -1):
pol_mode.write("LINEAR")
pol_angle.write(angle)
pol_angle.write(float(angle))
if off is not None:
pol_offset.write(offset)
pol_offset.write(float(offset))
pol_done.waitValue("DONE",timeout)
def set_temp(value, delay = 30.0):
temperature.write(float(value))
time.sleep(float(delay))
def open_valve(delay = 5.0):
valve_try_open.write(1) #TODO: CAPUT
time.sleep(float(delay))
def close_valve(delay = 0.0): #TODO: Check default delay
valve_try_open.write(0)
time.sleep(float(delay))
def set_energy (value, delay=0.5):
energy.write(float(value))
energy_done.waitValue(1)
time.sleep(float(delay))
def set_cff (value):
cff.write(float(value))
caput("X07MA-PGM:setE.PROC",1)
energy_done.waitValue(1)
def set_slit(value):
exit_slit.write(float(value))
def set_har(value):
harmonic.write(float(value))
def set_volt(keithley, value, dalay=0.1):
#keithley.write(float(value))
if not keithley in keithleys.keys(): raise Exception("Invalid keithley: " + keithley)
caput(keithleys[keithley][0], float(value))
time.sleep(float(delay))
def set_range(keithley, value):
if not keithley in keithleys.keys(): raise Exception("Invalid keithley: " + keithley)
caput(keithleys[keithley][1], int(value))
def set_fe(opening):
opening = float(opening*100)
if opening==0:
aperture.write("closed")
if opening==0.1:
aperture.write("0.1x0.1 mm")
elif opening==0.25:
aperture.write("0.25x0.25 mm")
elif opening==0.5:
aperture.write("0.5x0.5 mm")
elif opening==1.00:
aperture.write("1x1 mm")
elif opening==1.25:
aperture.write("1.25x1.25 mm")
elif opening==2.0:
aperture.write("2x2 mm")
else:
raise Exception("Invalid aperture opening: " + str(opening))
def refill_1k():
run("refill_1kpot")
def wait_temp():
if (temperature.read() < 2.0):
t=ct=temperature_readback.read()
#hl=caget("X07MA-PC-HE:LEVELB", 'd') # TODO: not used
if (t > 3.7):
refill_1k
def rampdown():
field_x.write(0)
field_z.write(0)
def shutdown():
set_fe(0)
rampdown()
def has_beam():
return beam_status.readback.read() !="Machine Down"
def wait_beam():
print "Waiting for beam..."
while !has_beam():
sleep(0.1)
print "Beam OK"
def wait_inj (value, delay=0.5):
wait_channel('X07MA-OP2-EVR:TOPUP-STAT', 'TOPUP-ON')
wait_channel('X07MA-OP2-EVR:TOPUP-STAT', 'TOPUP-OFF')
time.sleep(float(delay))
def set_file(file_name):
FILENAME = file_name
def otf(start, end, time, delay=None):
run("EnergyScan")
def hyst_cont(field, init_field, final_field, ramp_speed, energies):
pass
def hyst_cont_mult(field, ranges, energies):
pass
def hyst_step(forward, field, init_field, final_field, ramp_speed, energies):
pass
def hyst_step_mult(forward, ranges, ramp_speed, energies):
pass
def scan_e(start, end, step):
pass
def scan_e(ranges):
pass
def scan_v(keithley,start, end, step):
pass

60
script/refill_1kpot.py Normal file
View File

@@ -0,0 +1,60 @@
path1=time.strftime("%Y_%m", time.localtime())
path2=time.strftime("%Y%m%d", time.localtime())
path="/sls/X07MA/data/x07maop/Data1/"+path1+"/"+path2 +"/"+"refill.log"
sp = temperature.read
if (sp<2.0):
# open needle valve
print "Open needle valve to 50%"
needle.write(50.0)
print "Wait 1.0 min ..."
time.sleep(60)
print "Wait until T< 4K"
while True:
time.sleep(2)
t=temperature_readback.read()
if t < 4:
break
print "Wait 5 min ..."
time.sleep(300)
print "Set needle valve to 0%"
needle.write(0.0)
print "Wait temperature stabilization"
t_old=0.
while True:
t=temperature_readback.read()
t_diff=abs(t-t_old)
drift_mKelvin_per_min=t_diff*2*1000 # it was t_diff*6*1000, don't know why 6. It takes tooooo long to exit script.CP 23.11.14
print "T drift in mK per minute: ",drift_mKelvin_per_min
t_old=t
if (t>10.0):
break
if ( (drift_mKelvin_per_min<10.0) and (t<2.2) ):
break
time.sleep(30)
file=open(path,'a')
file.write(time.strftime("%d %b %Y %H:%M:%S", time.localtime()))
file.write( '# 1K pot refilled \n' )
file.close()
if ((sp >2.0) and (sp < 15)):
caput ("X07MA-PC-HE:PUMP", "ON")
time.sleep(60)
caput ("X07MA-PC-HE:PUMP", "AUTO")
while True:
time.sleep(20)
hlb=caget("X07MA-PC-HE:LEVELB", 'd')
if (hlb>110.0):
caput ("X07MA-PC-HE:PUMP", "OFF")
time.sleep(300)
break
time.sleep (3)