#If running from editor if (get_exec_pars().source == CommandSource.ui) and (get_exec_pars().script == "EigerAbsSpec") : ROI = {"Region1": [10,5,20, 10], "Region2": [20,15,20, 10]} SAVE_SPECTRUM = True SAVE_IMAGES = True WITH_I0 = True SWITCH_POL = False EXPOSURE = 1.0 AVERAGE = 2 NUMBER_SCANS =1 RANGES = [[500.0, 1000.0, 100.0]] DRIFT_CORRECTION = True print "Starting AbsSpec: ",SAVE_SPECTRUM, SAVE_IMAGES, WITH_I0, SWITCH_POL, EXPOSURE, AVERAGE, NUMBER_SCANS, RANGES SAVE_DIAGS = True calculated_shifts={} 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(path="{data}/{year}_{month}/{date}/{seq}%03d_AbsortionSpectrum", format="csv", layout="table") 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] av=None def grab_image(position, scan): global av av = average_eiger_frames(AVERAGE, roi=None, wait_next=True) if SAVE_IMAGES: #Scan_Nr = (scan.recordIndex-1)/NUMBER_SCANS #filename = get_exec_pars().path + "/" + ("%02d" % Scan_Nr) + "/s" + "{seq}%03d" + "_" + ("%03d.tif" % scan.recordIndex) filename = get_exec_pars().path + "/" + str(scan.currentPass) + "/s" + "{seq}%03d" + "_" + ("%03d.tif" % scan.recordIndex) filename = get_context().setup.expandPath(filename) print filename metadata = get_diags() if SAVE_DIAGS else {} save_as_tiff(av, filename, metadata=metadata) if DRIFT_CORRECTION and (calc_roi is not None): global ref_image filename = get_exec_pars().path + "/" + str(scan.currentPass) + "_corr/cs" + "{seq}%03d" + "_" + ("%03d.tif" % scan.recordIndex) filename = get_context().setup.expandPath(filename) if ref_image is None: ref_image = av save_as_tiff(av, filename, metadata=metadata) else: shift_and_save_as_tiff(av, filename, ref_image, calc_roi, metadata=metadata) class Average(ReadableMatrix): def read(self): return av.matrix def getWidth(self): return eiger.dataMatrix.getWidth() def getHeight(self): return eiger.dataMatrix.getHeight() averager=Average() set_device_alias(averager, "Image") #Set display name sensors.append(averager) #sensors.append(eiger.getDataMatrix()) #Initialize vartiables 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') #put_id_offset(1, OFFSET_ID_1) #offset on ID1 #put_id_offset(2, OFFSET_ID_2) #offset on ID2 """ if ID == "ID1": current_pol=POL_IDS[POL_ID_1] #get_id_pol(1) put_id_pol(1,current_pol) caput('X11MA-ID2-GAP:SET',100) #open Gap ID2 elif ID == "ID2": current_pol=POL_IDS[POL_ID_2]#get_id_pol(2) put_id_pol(2,current_pol) caput('X11MA-Ivg10D1-GAP:SET',100) #open Gap ID1 elif ID == "ID1_ID2": polID1=POL_IDS[POL_ID_1] polID2=POL_IDS[POL_ID_2] put_id_pol(1,polID1) put_id_pol(2,polID2) wait_channel("X11PHS:alldone", 1) """ if DRIFT_CORRECTION: roi = IMAGING_ROI if roi is None: roi = DEFAULT_ROI calc_roi = Roi(roi.x,roi.y,roi.width, roi.height) ref_image = None # grab_frame(image, None, True) 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() if not get_dry_run() and str(get_setting("AUTO_SWITCH_SHUTTER")).lower() == "true": caput(FAST_SHTR, 'Close') restore_eiger() print "Running time: " + str(time.time() - start)