Files
x11ma/script/Mehdi/EnergyScan2.py
gac-x11ma d600f2e5b7 Startup
2019-08-05 15:26:17 +02:00

168 lines
3.9 KiB
Python

#Script imported and adopted from: XTREME beamline
import time
#Parameters
"""
E1 = 570
E2 = 600
TIME = 1 #min
DELAY = 5.0 #s
MODE = 'CIRC -'
OFFSET = 0.0
FOLDER = 'SIM_data'
FILE = 'pshell-test'
ALPHA=0
"""
count.initialize()
data.initialize()
fdata.initialize()
idata.initialize()
edata.initialize()
p=None
def start_plot():
global p
p = plot([None, None, None,None, None], ["TEY", "TFY", "TEYraw", "TFYraw", "I0"])
def update_plot():
global p
c = count.take()
if c is None:
for i in range(len(p)):
p[i].getSeries(0).clear()
else:
data.setSize(c)
fdata.setSize(c)
idata.setSize(c)
edata.setSize(c)
teyr= idata.read()
tfyr= fdata.read()
i0 = data.read()
x = edata.read()
#from operator import truediv
l = lambda x,y: (0.0 if (y==0.0) else x/y) #truediv
tey=map(l, teyr, i0)
tfy=map(l, tfyr, i0)
p[0].getSeries(0).setData(x, to_array(tey,'d'))
p[1].getSeries(0).setData(x, to_array(tfy,'d'))
p[2].getSeries(0).setData(x, to_array(teyr,'d'))
p[3].getSeries(0).setData(x, to_array(tfyr,'d'))
p[4].getSeries(0).setData(x, to_array(i0,'d'))
print "\nStart energy scan..."
if MODE == "LINEAR":
print E1,"eV ->",E2,"eV,",TIME,"min duration,",DELAY,"sec delay,",str(MODE),str(ALPHA),"deg"
else:
print E1,"eV ->",E2,"eV,",TIME,"min duration,",DELAY,"sec delay,",str(MODE)
start = time.localtime()
folder = os.path.expanduser("~/Data1/") + FOLDER + "/";
#print "folder = ",folder
def getNewestFile():
global folder
import glob
try:
return max(glob.glob(folder+'/*.txt'), key=os.path.getctime)
except:
return None
newest = getNewestFile()
#Checking the beam
if not has_beam():
print "Maintenence mode: end of scan"
sys.exit()
if MODE is not None:
pol_mode.write(MODE)
if MODE == 'LINEAR':
if ALPHA is not None:
pol_angle.write(ALPHA)
if OFFSET is not None:
pol_offset.write(OFFSET)
wait_device(pol_done, "DONE")
#################
energy.write(float(E1))
wait_channel(ALL_DONE, 1, type = 'i')
caput('E1', E1)
caput('E2', E2)
caput('TIME', TIME)
caput('FOLDER', FOLDER)
caput('FILE', FILE)
time.sleep(0.1)
time.sleep(DELAY)
caput('START', '1')
try:
waiting = True
def plot_task():
global waiting
pos=count.take()
start_plot()
while waiting:
if count.take() != pos:
update_plot()
pos = count.take()
time.sleep(2.0)
ret = fork(plot_task)
try:
print "Scanning...",
#Post-actions
wait_channel('START', 'STOP', type = 's')
after_sample() #To call check_id_error()
time.sleep(2.0)
print "Finished Energy scan."
finally:
waiting = False
join(ret)
#File convertion
#newName = folder + time.strftime("%Y%m%d_%H%M_", start) + FILE + "_0000.txt";
#newName = get_exec_pars().path + "/" + time.strftime("%Y%m%d_%H%M_", start) + FILE + ".txt";
import time
try:
os.makedirs(get_exec_pars().path)
except:
pass
newName = get_exec_pars().path + "/" + time.strftime("%Y%m%d_%H%M_", start) + FILE + ".txt";
name = getNewestFile()
if name == newest:
print "Risk of overwriting. " + name + " same as " + newest
raise Exception("Data file not created.")
if not os.path.isfile(name):
raise Exception("Data file not found: " + name)
convert_file_full(name, newName)
plot_file(newName)
print("Success")
except:
print("Aborting...")
while caget('START') == 'START':
caput('START', '0')
time.sleep(0.1)
raise