""" Arguments: VECTOR (Double[][], Scan vector: Eph,Elow,Ehigh or Eph,Ecenter) SENSORS (list) LATENCY (double) MODE ('fixed' or 'swept') TYPE ('CIS' or 'CFS') STEP (double) """ VECTOR = [ 630.0, 634.0] class SpectrumReader(ReadonlyRegisterBase, ReadonlyRegisterArray): def doRead(self): global VECTOR self.offset = Eph.getSetpoint().take() - VECTOR[0] self.setup() trig_scienta() return Scienta.getSpectrum().read() def getSize(self): return len(Scienta.getSpectrumX()) energy_scale_array = [] class SpectrumReader1(SpectrumReader): def setup(self): global energy_scale_array Scienta.getStepSize().write(0.1) Scienta.getLowEnergy().write(88.0 + self.offset) Scienta.getHighEnergy().write(94.0 + self.offset) global energy_scale_table energy_scale_array = [Scienta.getLowEnergy().take(), Scienta.getHighEnergy().take(), Scienta.getStepSize().take()] class SpectrumReader2(SpectrumReader): def setup(self): Scienta.getStepSize().write(0.05) Scienta.getLowEnergy().write(94.0 + self.offset) Scienta.getHighEnergy().write(98.0 + self.offset) global energy_scale_table energy_scale_array.append([Scienta.getLowEnergy().take(), Scienta.getHighEnergy().take(), Scienta.getStepSize().take()]) class SpectrumReader3(SpectrumReader): def setup(self): Scienta.getStepSize().write(0.5) Scienta.getLowEnergy().write(98.0 + self.offset) Scienta.getHighEnergy().write(108.0 + self.offset) energy_scale_array.append([Scienta.getLowEnergy().take(), Scienta.getHighEnergy().take(), Scienta.getStepSize().take()]) global energy_scale_table append_dataset(energy_scale_table,[]) class ImageReader(ReadonlyRegisterBase, ReadonlyRegisterMatrix): def doRead(self): return Scienta.getDataMatrix().read() def getWidth(self): return Scienta.getDataMatrix().getWidth() def getHeight(self): return Scienta.getDataMatrix().getHeight() reader1 = SpectrumReader1(); reader1.initialize() reader2 = SpectrumReader2(); reader2.initialize() reader3 = SpectrumReader3(); reader3.initialize() image1 = ImageReader(); image1.initialize(); set_device_alias(image1, "Image1") image2 = ImageReader(); image2.initialize(); set_device_alias(image2, "Image2") image3 = ImageReader(); image3.initialize(); set_device_alias(image3, "Image3") Scienta.getDataMatrix() SENSORS = [RefCurrent, reader1, image1, reader2, image2, reader3, image3] Scienta.setAcquisitionMode(ch.psi.pshell.epics.Scienta.AcquisitionMode.Swept) energy_scale_table = get_context().group + "/EnergyScale" create_dataset(energy_scale_table, 'd', dimensions=[0,9]) adjust_sensors() set_adc_averaging() set_preference(Preference.PLOT_TYPES, {'Scienta spectrum':1}) try: vscan(Eph, SENSORS, VECTOR, True, LATENCY,False, before_read=wait_beam, after_read = after_readout) finally: if ENDSCAN: after_scan()