#Parameters if (get_exec_pars().source == CommandSource.ui) and (get_exec_pars().script == "EnergyScan_img") : E1 = 800 E2 = 820 TIME = 1 #min DELAY = 0.1 #s FOLDER = Setup.expandPath("{year}_{month}/{date}") FILE = 'ImageOTF' ROI = {"Region1": [286, 86, 79, 70], "Region2": [153, 279, 95, 82]} SAVE_IMAGES=True EXPOSURE = 0.2 SAVE_DIAGS = True print "\nStart image energy scan..." print E1,"eV ->",E2,"eV,",TIME,"min duration,",DELAY,"sec delay" print "ROIs: ", ROI #set_exec_pars(format="h5", layout="default") folder = os.path.expanduser("~/Data1/") + FOLDER + "/"; set_exec_pars(name=FILE) rois = create_roi_devices(ROI) class NormROI(Readable): def __init__(self, roi): self.roi = roi def read(self): return float(self.roi.take())/float(CADC1.take()) def getName(self): return self.roi.name + " norm" #sensors = [Ecrbk, eiger.getDataMatrix().getCache(), CADC1] sensors = [Ecrbk, eiger.getImageCounter().getCache(), CADC1] for roi in rois: sensors.append(roi) sensors.append(NormROI(roi)) #Pre-actions #if NO_BEAM_CHECK == False: # print "Wait beam" # wait_beam() """ if MODE is not None: pol_mode.write(MODE) if MODE == 'LINEAR': if ALPHA is not None: pol_angle.write(ALPHA) time.sleep(0.5) if OFFSET is not None: pol_offset.write(OFFSET) wait_device(pol_done, "DONE") """ energy.write(float(E1)) time.sleep(0.5) wait_channel(ALL_DONE, 1, type = 'i') caput('E1', E1) caput('E2', E2) caput('TIME', TIME) caput('FOLDER', FOLDER) caput('FILE', FILE) time.sleep(DELAY) caput('START', '1') #Pseudo-devices class Time(Readable): def __init__(self): self.start = time.time() def read(self): return time.time()-self.start scan_completed = False if not get_dry_run() and str(get_setting("AUTO_SWITCH_VALVE")).lower() == "true": open_vg10() if not get_dry_run() and str(get_setting("AUTO_SWITCH_SHUTTER")).lower() == "true": caput(FAST_SHTR, 'Open') try: if EXPOSURE != eiger.getExposure(): restore_eiger(exposure_time = EXPOSURE) caput('START', '1') #av = create_averager(CADC1, -1, -1) def monitoring_task(): global scan_completed time.sleep(1.0) wait_channel('START', 'STOP', type = 's') scan_completed = True get_exec_pars().currentScan.abort() ret = fork(monitoring_task) def before_read(): pass def after_read(): if SAVE_DIAGS: index = eiger.getImageCounter().take() filename = get_exec_pars().path + "/" + str(index) + ".tif" save_as_tiff(image.data, filename, check=False, parallel=True, metadata=(get_diags() if SAVE_DIAGS else {})) print "Scanning...", try: CADC1.alias = "I0" mscan(image.trigger, sensors, -1, None, async = False, range="auto", domain_axis="Ecrbk", before_read=before_read, after_read=after_read) finally: CADC1.alias = None ret[0].cancel(True) print "Finished Energy scan." except: if not scan_completed: print sys.exc_info() print("Aborting...") while caget('START') == 'START': caput('START', '0') time.sleep(0.1) raise finally: if not get_dry_run() and str(get_setting("AUTO_SWITCH_VALVE")).lower() == "true": close_vg10() if not get_dry_run() and str(get_setting("AUTO_SWITCH_SHUTTER")).lower() == "true": caput(FAST_SHTR, 'Close') restore_eiger() after_sample() #To call check_id_error()