#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 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)