#If running from editor if (get_exec_pars().source == CommandSource.ui): ROI = {"Region1": [10,5,20, 10], "Region2": [60,60,40, 40]} SAVE_SPECTRUM = True SAVE_IMAGES = True WITH_I0 = False SWITCH_POL = False EXPOSURE = 1.0 AVERAGE = 2 NUMBER_SCANS =1 RANGES = [[500.0, 1000.0, 100.0]] print "Starting AbsSpec: ",SAVE_SPECTRUM, SAVE_IMAGES, WITH_I0, SWITCH_POL, EXPOSURE, AVERAGE, NUMBER_SCANS, RANGES run("eiger") machine_cur=sin Keithley_1_raw = cv def get_dry_run(): return True def set_outliers_threshold(value): set_setting("OUTLIERS_THRESHOLD", int(value)) def get_outliers_threshold(): try: return int(get_setting("OUTLIERS_THRESHOLD")) except: return 0 def get_outliers_mask_file(): return get_setting("OUTLIERS_MASK_FILE") if SWITCH_POL: init_pol_switch("Normal") log("ROIs: " + str(ROI)) if len(RANGES) == 0: raise Exception("No scan range defined") start = time.time() init_eiger(exposure=EXPOSURE) set_exec_pars(name="AbsortionSpectrum", format="csv", layout="table") tag= "AbsortionSpectrum_{seq}%03d_{count}%02d" rois = create_roi_devices(ROI) if AVERAGE>1: for i in range(len(rois)): rois[i].monitored = True rois[i] = create_averager(rois[i], AVERAGE, -1) rois[i].monitored = True frames=[] class SyncEnergy(Writable): def write(self,pos): if not get_dry_run(): put_energy(pos) else: print "Energy=" + str(pos) sync_energy=SyncEnergy() set_device_alias(sync_energy, "Energy") #Set display name sensors = rois + [machine_cur] if WITH_I0: sensors = sensors + [Keithley_1_raw] #### def __save_as_tiff(index, data, filename,metadata={}): if type(data) == Data: ip = load_array(data.matrix) else: ip = data metadata["Timestamp"] = time.strftime("%y/%m/%d %H:%M:%S",time.localtime()) if not os.path.exists(os.path.dirname(filename)): os.makedirs(os.path.dirname(filename)) save_image(ip, filename,"tiff", metadata) d = get_ip_array(ip) import java.util.Arrays as Arrays ip=open_image(filename) read = get_ip_array(ip) if not Arrays.deepEquals(read, d): print "Error reading array" print index, filename index=0 for name,r in ROI.items(): s=0.0 for i in range(r[2]): for j in range(r[3]): #s = s + d[r[0]+i][r[1]+j] el=data.getElement(r[0]+i, r[1]+j, False) s = s + (0 if (math.isnan(el)) else el) roi = data.getRoi(Rectangle(r[0],r[1], r[2], r[3])) print name, s, rois[index].take(), roi.integrate(False) index=index+1 #### av=None def grab_image(position, scan): global av av = average_eiger_frames(AVERAGE, roi=None, wait_next=True) if SAVE_IMAGES: filename = get_exec_pars().path + "/" + str(scan.currentPass) + "/s" + "{seq}%03d" + "_" + ("%03d.tif" % scan.recordIndex) filename = get_context().setup.expandPath(filename) #print filename #save_as_tiff(av, filename, metadata={}) #fork((__save_as_tiff,(scan.recordIndex, av, filename)),) __save_as_tiff(scan.recordIndex, av, filename) class Average(ReadableMatrix): def read(self): return av.matrix def getWidth(self): return image.getData().getWidth() def getHeight(self): return image.getData().getHeight() averager=Average() set_device_alias(averager, "Image") #Set display name sensors.append(averager) #Initialize vartiables if not get_dry_run() and str(get_setting("AUTO_SWITCH_VALVE")).lower() == "true": open_vg10() def after_pass(pass_number, scan): if SWITCH_POL: if pass_number1: for i in range(len(rois)): rois[i].parent.monitored = False # Remove listeners on the image 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)