""" Arguments: """ #MOTORS = [Eph] #POSITIONS = [295.0, 296.0] MOTORS = [Eph] POSITIONS = [400.0, 401.0] LATENCY = 0.0 REGION1 = {'elo': 243.0, 'ehi': 245.0, 'estep': 0.1, 'epass': 50, 'tstep': 0.1, 'iter': 1, 'cis': True} REGION2 = {'elo': 214.0, 'ehi': 217.0, 'estep': 0.1, 'epass': 50, 'tstep': 0.1, 'iter': 1, 'cis': False} REGIONS = [REGION1, REGION2] CLOSE_SHUTTER_AT_END = True Scienta.setAcquisitionMode(ch.psi.pshell.epics.Scienta.AcquisitionMode.Swept) class SpectrumReader(ReadonlyRegisterBase, ReadonlyRegisterArray): #def __init__(self): # super(SpectrumReader, self).__init__() # self.ephot_start = Eph.read() def setup(self): ephot = Eph.read() try: if self.region['cis']: edelta = ephot - self.ephot_start else: edelta = 0.0 print "calc edelta:", self.ephot_start, ephot, edelta except AttributeError: self.ephot_start = ephot edelta = 0.0 print "reset edelta:", self.ephot_start, ephot, edelta Scienta.lowEnergy.write(self.region['elo'] + edelta) Scienta.highEnergy.write(self.region['ehi'] + edelta) Scienta.stepSize.write(self.region['estep']) Scienta.setPassEnergy(self.region['epass']) Scienta.stepTime.write(self.region['tstep']) Scienta.setIterations(self.region['iter']) def read(self): print "acquiring spectrum {0}-{1} eV".format(self.region['elo'], self.region['ehi']) self.setup() trig_scienta() time.sleep(0.5) sp = Scienta.getSpectrum().read() return sp def getSize(self): nx = int((self.region['ehi'] - self.region['elo']) / self.region['estep']) + 1 return nx class ImageReader(ReadonlyRegisterBase, ReadonlyRegisterMatrix): def read(self): return Scienta.getDataMatrix().read() def getWidth(self): nx = int((self.region['ehi'] - self.region['elo']) / self.region['estep']) + 1 return nx def getHeight(self): ny = Scienta.slices.read() return ny def do_scan(motors, positions, regions, latency): sensors = [SampleCurrent, RefCurrent] for (index, region) in enumerate(regions): reader = SpectrumReader() reader.initialize() reader.index = index reader.region = region set_device_alias(reader, "ScientaSpectrum{0}".format(index + 1)) sensors.append(reader) image = ImageReader() image.initialize() image.index = index image.region = region set_device_alias(image, "ScientaImage{0}".format(index + 1)) sensors.append(image) adjust_sensors() set_adc_averaging() vscan(motors, sensors, positions, True, latency,False, before_read=wait_beam, after_read = after_readout) try: set_preference(Preference.PLOT_TYPES, {'Scienta spectrum':1}) do_scan(MOTORS, POSITIONS, REGIONS, LATENCY) finally: if CLOSE_SHUTTER_AT_END: after_scan()