#Parameters (global variables): # ranges: list of RangeSelection havinf args = (step_size, step_time, iterations) # pass_energy # save_scienta_image # # skip_iteration: if set to 1 then skips after end of current iteration from ch.psi.pshell.data.LayoutDefault import ATTR_WRITABLE_DIMENSION as ATTR_WRITABLE_DIMENSION cur_range = 0 cur_iteration = 0 if Scienta.acquisitionMode != Scienta.AcquisitionMode.Swept: Scienta.acquisitionMode = Scienta.AcquisitionMode.Swept ret=[] set_exec_pars(open = True) #Global arguments Scienta.passEnergy = pass_energy names=[] names.append("Online Spectrum") for i in range(len(ranges)): names.append(str(ranges[i])) plots = plot(None, names) spectrum_series = plots[0].getSeries(0) def plot_cur_spectrum(): global spectrum_series try: while get_context().state.running: y = Scienta.spectrum.take(100) x = Scienta.spectrumX spectrum_series.setData(x, y) time.sleep(1.0) finally: print "Stopping spectrum plotting" task = None try: for cur_range in range(len(ranges)): cur_iteration = 0 skip_iteration = False Scienta.lowEnergy.write(ranges[cur_range].min) Scienta.highEnergy.write(ranges[cur_range].max) Scienta.update() vars = ranges[cur_range].vars Scienta.stepTime.write(vars[0]) Scienta.stepSize.write(vars[1]) Scienta.setIterations(1) set_adc_averaging() #iterations done in script xdata = None ydata = None image_data = None task = fork(plot_cur_spectrum) path="scan" + str(cur_range+1) + "/" for cur_iteration in range(vars[2]): plots[cur_range+1].setTitle(str(ranges[cur_range]) + " - iteration " + str(cur_iteration+1)) while True: wait_beam() trig_scienta() spectrum_array = Scienta.spectrum.read() if beam_ok: break if ydata is None: ydata = spectrum_array else: for k in range (len(spectrum_array)): ydata[k] = ydata[k] + spectrum_array[k] if xdata is None: xdata = Scienta.spectrumX plots[cur_range+1].getSeries(0).setData(xdata, ydata) if save_scienta_image: image_array = Scienta.dataMatrix.read() if image_data is None: image_data = image_array else: for k in range (len(image_data)): for j in range (len(image_data[0])): image_data[k][j] = image_data[k][j] + image_array[k][j] if skip_iteration: break save_dataset(path + "ScientaSpectrum", ydata) set_attribute(path, "Iterations",cur_iteration+1) if save_scienta_image: save_dataset(path + "ScientaImage", image_data) if cur_iteration==0: save_dataset(path + "ScientaChannels", xdata) set_attribute(path + "ScientaChannels", ATTR_WRITABLE_DIMENSION, 1) set_attribute(path, "Range Low", ranges[cur_range].min) set_attribute(path, "Range High", ranges[cur_range].max) set_attribute(path, "Step Time",vars[0]) set_attribute(path, "Step Size",vars[1]) set_attribute(path, "Pass Energy",pass_energy) set_attribute(path, "Readables", ["ScientaSpectrum","ScientaImage"] if save_scienta_image else ["ScientaSpectrum",]) set_attribute(path, "Writables", ["ScientaChannels",]) create_diag_datasets(path) append_diag_datasets(path) plots[cur_range+1].setTitle(str(ranges[cur_range])) ret.append((xdata, ydata)) """ save_dataset(path + "ScientaSpectrum", ydata) save_dataset(path + "ScientaChannels", xdata) if save_scienta_image: save_dataset(path + "ScientaImage", image_data) set_attribute(path + "ScientaChannels", ATTR_WRITABLE_DIMENSION, 1) set_attribute(path, "Range Low", ranges[cur_range].min) set_attribute(path, "Range High", ranges[cur_range].max) set_attribute(path, "Step Time",vars[0]) set_attribute(path, "Step Size",vars[1]) set_attribute(path, "Pass Energy",pass_energy) set_attribute(path, "Iterations",cur_iteration+1) set_attribute(path, "Readables", ["ScientaSpectrum",]) set_attribute(path, "Writables", ["ScientaChannels",]) create_diag_datasets(path) append_diag_datasets(path) """ finally: cur_range = -1 if not Scienta.isReady(): Scienta.stop() Scienta.update() task[0].cancel(True) if ENDSCAN: after_scan() set_return(to_array(ret,'o'))