""" 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,88.0, 94.0], [634.0,94.0,100.0], ] class SpectrumReader(ReadonlyRegisterBase, ReadonlyRegisterArray): def doRead(self): global VECTOR self.offset = Eph.getSetpoint().take() - VECTOR[0][0] self.setup() trig_scienta() return Scienta.getSpectrum().read() def getSize(self): return len(Scienta.getSpectrumX()) class SpectrumReader1(SpectrumReader): def setup(self): Scienta.getStepSize().write(0.1) Scienta.getLowEnergy().write(88.0 + self.offset) Scienta.getHighEnergy().write(94.0 + self.offset) 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) 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) reader1 = SpectrumReader1(); reader1.initialize() reader2 = SpectrumReader2(); reader2.initialize() reader3 = SpectrumReader3(); reader3.initialize() SENSORS = [RefCurrent, reader1,Scienta.getImage(), reader2, Scienta.getImage(), reader3, Scienta.getImage()] Scienta.setAcquisitionMode(ch.psi.pshell.epics.Scienta.AcquisitionMode.Swept) Scienta.lowEnergy.write(VECTOR[0][1]) Scienta.highEnergy.write(VECTOR[0][2]) writables = (Eph, Scienta.lowEnergy, Scienta.highEnergy) adjust_sensors() set_adc_averaging() set_preference(Preference.PLOT_TYPES, {'Scienta spectrum':1}) try: vscan(writables, SENSORS, VECTOR, True, LATENCY,False, before_read=wait_beam, after_read = after_readout) finally: if ENDSCAN: after_scan()