Files
x11ma/script/templates/Eiger2Img.py
gac-x11ma 26abb23c10
2021-01-27 16:05:28 +01:00

201 lines
7.2 KiB
Python

#If running from editor
if get_exec_pars().source == CommandSource.ui:
METHOD = "Two_Pol"
SWITCHING = "Tune_Detune"
SEQUENCE = "A"
MEASUREMENTS = 4
AUTO_SAVE = True
EXPOSURE = 1.0
AVERAGE = 2.0
ENERGY_1 = 850.0
ENERGY_2= 900.0
SWITCH_POL=False
#SEQUENCE = "A": C+,C-,C-,C+,C+;C-,C-,C+,
#SEQUENCE = "B": C+,C-,C+,C-,C+,-;C+,C-.
SHOW_IMAGES = True
SAVE_DIAGS = True
ID = get_setting("ID")
ENERGY = [ENERGY_1, ENERGY_2]
#POLARIZATION = [POLARIZATION_1, POLARIZATION_2]
if METHOD == "Two_Energies":
for en in [ENERGY_1, ENERGY_2]:
if en < 89.9 or en > 2000:
raise Exception("Bad energy argument")
start = time.time()
threads = []
#path = "{data}/{year}_{month}/{date}" + "/" + "{seq}%03d_" + METHOD
#set_exec_pars(path= path, format="txt", layout="table", open=True)
#data_path = get_context().setup.expandPath(path)
data_path = "{data}/{year}_{month}/{date}/{date}_{name}"
set_exec_pars(name=METHOD, path = data_path, format="txt", layout="table", open=True)
#data_path = get_exec_pars().path
#get_context().incrementFileSequentialNumber()
run_index = get_context().getDaySequentialNumber()
max_index=0
def get_image_file_name(cycle=-1, frame_index=0, short_name=False):
global max_index
if (METHOD == "Two_Pol") and (SEQUENCE == "A") and (frame_index<2) and ((cycle%2)==0): #Swapped
frame_index = 0 if frame_index else 1
root = "" if short_name else (data_path + "/")
#prefix = get_context().setup.expandPath("i{seq}%03d" + "_" + ("%d" % frame_index))
abs_index=run_index + frame_index
max_index= max(max_index, frame_index)
#prefix = get_context().setup.expandPath("i{date}%02d_{seq}%03d")
prefix = get_context().setup.expandPath("i{date}%02d_" + ("%03d" % (abs_index,)))
if cycle < 0:
ret = root + prefix + ".tif"
else:
ret= root + prefix + "/i{date}%02d"+ ("_%03d#%03d" % (abs_index,cycle)) + ".tif"
return get_context().setup.expandPath(ret)
"""
def getLEEM():
global startvoltage,objective, LEEMtemp
startvoltage=getStartvoltage()
objective=getObjective()
LEEMtemp=getLEEMtemp()
"""
#Initialize vartiables
if not get_dry_run() and str(get_setting("AUTO_SWITCH_VALVE")).lower() == "true":
open_vg10()
#rbkEnergy=energy_rbk.read()
if METHOD == "Two_Pol" or (SWITCH_POL and (METHOD == "Take_Image")):
init_pol_switch(SWITCHING)
def imageinfo(info):
pass
def save_image_file(frame, cycle=-1, frame_index=0):
if SHOW_IMAGES:
plot(frame.matrix if (type(frame) == Data) else get_ip_array(frame), name = get_image_file_name(cycle, frame_index, True))
if AUTO_SAVE and (frame is not None):
filename = get_image_file_name(cycle, frame_index)
threads.append(save_as_tiff(frame, filename, check=False, parallel=True, metadata=(get_diags() if SAVE_DIAGS else {})))
log(filename)
print filename
# log("SV:"+Format(startvoltage,"0.000")+" OB:"+Format(objective,"0.00")+" ST:"+Format(LEEMtemp,"0.0"))
init_eiger(exposure=EXPOSURE)
#print "Startup time: " + str(time.time() - start)
try:
#Do the measurement loop
for cycle in range(1, MEASUREMENTS + 1):
frames = []
if MEASUREMENTS > 1:
log("nround = " + str(cycle) + " / " + str(MEASUREMENTS))
for i in range(2):
if (cycle == 1) or (METHOD != "Take_Image"):
assert_status_ok()
if METHOD == "Two_Energies":
change_energy(ENERGY[i])
print "--- Grabing " + str(AVERAGE)+ " frames - cycle: " + str(cycle) + " step: " + str(i)
#s=time.time()
av = average_eiger_frames(AVERAGE, roi=None, wait_next=True)
#print "--- Time: " + str(time.time() - s)
frames.append(av)
imageinfo("I")
save_image_file(frames[i], cycle, i)
if METHOD == "Take_Image":
break
if METHOD == "Two_Pol":
if (i==0) or (SEQUENCE == "B"):
switch_pol()
#time.sleep(1)
if (METHOD == "Two_Pol") or (METHOD == "Two_Energies"):
if (METHOD == "Two_Energies") or (SEQUENCE == "B") or ((cycle%2)==1):
print "Divide first frame by second"
frames.append(frames[0].copy())
frames[2].div(frames[1])
else:
print "Divide second frame by first"
frames.append(frames[1].copy())
frames[2].div(frames[0])
save_image_file(frames[2],cycle, 2)
# objective = getObjective()
# temp = getLEEMtemp()
# log(0 , "Temp : " + Format(temp,"0.00") + " OB : " + Format(objective,"0.00") + " StigmaA : " + " StigmaB : " )
# Auto average and save
print "Waiting file writing threads to finish..."
for t in threads:
join(t)
if (MEASUREMENTS > 1) and (AUTO_SAVE == 1):
print "--- Averaging..."
for i in range(len(frames)):
"""
measures = []
for cycle in range(1, MEASUREMENTS + 1):
filename = get_image_file_name(cycle, i)
ip = open_image(filename)
#measures.append(Data(get_ip_array(ip)))
measures.append(ip)
#av = average_frames(measures) #Result is transposed???
av=average_ips (measures, roi=None, as_float=True)
"""
integration = None
for cycle in range(1, MEASUREMENTS + 1):
filename = get_image_file_name(cycle, i)
print "Open " , filename
ip = open_image(filename)
if integration is None:
integration = ip
else:
integration =integrate_ips ([integration, ip], as_float=True)
av=op_const(integration, "divide", float(MEASUREMENTS), in_place=True)
save_image_file(av, -1, i)
if SWITCH_POL and (METHOD == "Take_Image"):
switch_pol()
SWITCH_POL = False
set_exec_pars(then_success="run('templates/Eiger2Img')")
"""
get_context().incrementDaySequentialNumber()
set_exec_pars(open=False)
set_exec_pars(open=True)
for cycle in range(1, MEASUREMENTS + 1):
frames = []
if MEASUREMENTS > 1:
log("nround = " + str(cycle) + " / " + str(MEASUREMENTS))
print "--- Grabing " + str(AVERAGE)+ " frames - cycle: " + str(cycle) + " step: " + str(i)
av = average_eiger_frames(AVERAGE, roi=None, wait_next=True)
imageinfo("I")
save_image_file(av, cycle, i)
"""
finally:
for i in range(max_index):
get_context().incrementDaySequentialNumber()
if not get_dry_run() and str(get_setting("AUTO_SWITCH_VALVE")).lower() == "true":
close_vg10()
restore_eiger()
print "Running time: " + str(time.time() - start)