From 7eb8c64e9c7eff5f8f3b20538fc6d19d11460548 Mon Sep 17 00:00:00 2001 From: x03daop Date: Sun, 7 Aug 2016 09:41:23 +0200 Subject: [PATCH] Script execution --- script/catch_up.py | 142 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 script/catch_up.py diff --git a/script/catch_up.py b/script/catch_up.py new file mode 100644 index 00000000..f6690c70 --- /dev/null +++ b/script/catch_up.py @@ -0,0 +1,142 @@ +""" +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) +""" + +LATENCY = 0.0 + + +class SpectrumReader(ReadonlyRegisterBase, ReadonlyRegisterArray): + def doRead(self): + global VECTOR + self.offset = Eph.getSetpoint().take() - VECTOR[0] + self.setup() + trig_scienta() + time.sleep(0.5) + return Scienta.getSpectrum().read() + + def getSize(self): + return len(Scienta.getSpectrumX()) + + + +class SpectrumReader1(SpectrumReader): + def setup(self): + global energy_scale_array, initial_energy_range + Scienta.getLowEnergy().write(initial_energy_range[0][0] + self.offset) + Scienta.getHighEnergy().write(initial_energy_range[0][1] + self.offset) + Scienta.getStepSize().write(initial_energy_range[0][2]) + energy_scale_array = [Scienta.getLowEnergy().take(), Scienta.getHighEnergy().take(), Scienta.getStepSize().take()] + +class SpectrumReader2(SpectrumReader): + def setup(self): + global energy_scale_array, initial_energy_range + Scienta.getLowEnergy().write(initial_energy_range[1][0] + self.offset) + Scienta.getHighEnergy().write(initial_energy_range[1][1] + self.offset) + Scienta.getStepSize().write(initial_energy_range[1][2]) + energy_scale_array = energy_scale_array + [Scienta.getLowEnergy().take(), Scienta.getHighEnergy().take(), Scienta.getStepSize().take()] + append_dataset(energy_scale_table,energy_scale_array) + +class SpectrumReader3(SpectrumReader): + def setup(self): + global initial_energy_range,energy_scale_array, energy_scale_table + Scienta.getLowEnergy().write(initial_energy_range[2][0] + self.offset) + Scienta.getHighEnergy().write(initial_energy_range[2][1] + self.offset) + Scienta.getStepSize().write(initial_energy_range[2][2]) + energy_scale_array = energy_scale_array + [Scienta.getLowEnergy().take(), Scienta.getHighEnergy().take(), Scienta.getStepSize().take()] + append_dataset(energy_scale_table,energy_scale_array) + + +class ImageReader(ReadonlyRegisterBase, ReadonlyRegisterMatrix): + def doRead(self): + return Scienta.getDataMatrix().read() + + def getWidth(self): + global initial_energy_range + return int( (initial_energy_range[self.index][1] - initial_energy_range[self.index][0]) / initial_energy_range[self.index][2]) + + def getHeight(self): + return Scienta.getDataMatrix().getHeight() + + +def measure_stuff(): + global energy_scale_array, energy_scale_table, VECTOR,pass_energy_hold,angle_time,angle_range,azi_range,bb + reader1 = SpectrumReader1(); reader1.initialize() + reader2 = SpectrumReader2(); reader2.initialize() + #reader3 = SpectrumReader3(); reader3.initialize() + image1 = ImageReader(); image1.initialize(); image1.index=0; set_device_alias(image1, "Image1") + image2 = ImageReader(); image2.initialize(); image2.index=1; set_device_alias(image2, "Image2") + #image3 = ImageReader(); image3.initialize(); image3.index=2; set_device_alias(image3, "Image3") + + + Scienta.getDataMatrix() + + SENSORS = [RefCurrent, reader1, image1, reader2, image2]#, reader3, image3] + + Scienta.setAcquisitionMode(ch.psi.pshell.epics.Scienta.AcquisitionMode.Swept) + + + adjust_sensors() + set_adc_averaging() + set_preference(Preference.PLOT_TYPES, {'Scienta spectrum':1}) + + for ll in range(len(azi_range)): + ManipulatorPhi.move(azi_range[ll]) + for jj in range(len(angle_range)): + tic = time.time() + ManipulatorTheta.move(angle_range[jj]) + print 'current theta is ', ManipulatorTheta.take(), ' and current azimuth is ' , ManipulatorPhi.take() + Scienta.setPassEnergy(pass_energy_hold) + #print ' Flag 1' + Scienta.getStepTime().write(angle_time[jj]) + #print ' Flag 2' + sleep(1) + bb = bb+1 + energy_scale_table = "scan " + str(bb) + "/EnergyScale" + print energy_scale_table + create_dataset(energy_scale_table, 'd', dimensions=[0,9]) + vscan(Eph, SENSORS, VECTOR, True, LATENCY,False, before_read=wait_beam, after_read = after_readout) + toc = time.time() + tictoc = round((toc-tic)/60*100)/100 + print 'time taken is ', tictoc, ' minutes' + +global initial_energy_range,energy_scale_array, energy_scale_table, VECTOR,pass_energy_hold,angle_time,angle_range,azi_range,SENSORS +bb = 0 +SENSORS = [] +#################### O 1s PhD scan ############################## +print ' ######################################################' +print ' ** Begin O 1s PhD **' +tic_whole = time.time() +VECTOR = [ 790.0] +for nn in range(24): + VECTOR.append(VECTOR[-1]+4) + + +pass_energy_hold = 100 + +initial_energy_range = [[247.5, 257.0, 0.1], + [257.1, 167.0, 0.5]] + +angle_time = [0.6] +energy_scale_array = [] + +azi_range = [-90.0] +angle_range = [-9.2+40.0] +measure_stuff() +toc_whole = time.time() +tictoc = round(toc_whole-tic_whole) +print ' ** End O 1s PhD **' +print ' ** time taken was ', math.floor(tictoc/3600), ' hours and ', round((tictoc-math.floor(tictoc/3600)*3600)/60), ' minutes.' +print ' ######################################################' + + + + +#toc = time.time() +