From 319f3b4649744e6580db5ffa2f92b70c21bbf203 Mon Sep 17 00:00:00 2001 From: Ultrasound PC Date: Mon, 23 May 2022 15:25:41 -0400 Subject: [PATCH] upgrade upltrasound to newer version of frappy --- secop_psi/dg645.py | 24 ++++++++++---------- secop_psi/ultrasound.py | 49 ++++++++++++++++++++++++----------------- 2 files changed, 41 insertions(+), 32 deletions(-) diff --git a/secop_psi/dg645.py b/secop_psi/dg645.py index 90e5e24..3c3b413 100644 --- a/secop_psi/dg645.py +++ b/secop_psi/dg645.py @@ -20,43 +20,43 @@ # ***************************************************************************** """Delay generator stanford 645""" -from secop.core import FloatRange, HasIodev, Module, Parameter, StringIO +from secop.core import FloatRange, HasIO, Module, Parameter, StringIO class DG645(StringIO): end_of_line = '\n' -class Delay(HasIodev, Module): +class Delay(HasIO, Module): on1 = Parameter('on delay 1', FloatRange(unit='sec'), readonly=False, default=0) off1 = Parameter('off delay 1', FloatRange(unit='sec'), readonly=False, default=60e-9) on2 = Parameter('on delay 2', FloatRange(unit='sec'), readonly=False, default=0) off2 = Parameter('off delay 2', FloatRange(unit='sec'), readonly=False, default=150e-9) - iodevClass = DG645 + ioClass = DG645 def read_on1(self): - return self.sendRecv('DLAY?2').split(',')[1] + return float(self.communicate('DLAY?2').split(',')[1]) def read_off1(self): - return self.sendRecv('DLAY?3').split(',')[1] + return float(self.communicate('DLAY?3').split(',')[1]) def read_on2(self): - return self.sendRecv('DLAY?4').split(',')[1] + return float(self.communicate('DLAY?4').split(',')[1]) def read_off2(self): - return self.sendRecv('DLAY?5').split(',')[1] + return float(self.communicate('DLAY?5').split(',')[1]) def write_on1(self, value): - return self.sendRecv('DLAY 2,0,%g;DLAY?2' % value).split(',')[1] + return float(self.communicate('DLAY 2,0,%g;DLAY?2' % value).split(',')[1]) def write_off1(self, value): - result = self.sendRecv('DLAY 3,0,%g;DLAY?3' % value) - return result.split(',')[1] + result = self.communicate('DLAY 3,0,%g;DLAY?3' % value) + return float(result.split(',')[1]) def write_on2(self, value): - return self.sendRecv('DLAY 4,0,%g;DLAY?4' % value).split(',')[1] + return float(self.communicate('DLAY 4,0,%g;DLAY?4' % value).split(',')[1]) def write_off2(self, value): - return self.sendRecv('DLAY 5,0,%g;DLAY?5' % value).split(',')[1] + return float(self.communicate('DLAY 5,0,%g;DLAY?5' % value).split(',')[1]) diff --git a/secop_psi/ultrasound.py b/secop_psi/ultrasound.py index d239c1f..f645f10 100644 --- a/secop_psi/ultrasound.py +++ b/secop_psi/ultrasound.py @@ -27,9 +27,9 @@ import time import numpy as np -import iqplot -from adq_mr import Adq -from secop.core import Attached, BoolType, Done, FloatRange, HasIodev, \ +import secop_psi.iqplot as iqplot +from secop_psi.adq_mr import Adq +from secop.core import Attached, BoolType, Done, FloatRange, HasIO, \ IntRange, Module, Parameter, Readable, StringIO, StringType from secop.properties import Property @@ -60,7 +60,8 @@ class Roi(Readable): interval = (0,0) def initModule(self): - self._main.register_roi(self) + super().initModule() + self.main.register_roi(self) self.calc_interval() def calc_interval(self): @@ -90,7 +91,7 @@ class FreqStringIO(StringIO): end_of_line = '\r' -class Frequency(HasIodev, Readable): +class Frequency(HasIO, Readable): pars = Attached() sr = Property('samples per record', datatype=IntRange(), default=16384) maxy = Property('plot y scale', datatype=FloatRange(), default=0.5) @@ -98,8 +99,9 @@ class Frequency(HasIodev, Readable): value = Parameter('frequency@I,q', datatype=FloatRange(unit='Hz'), default=0) basefreq = Parameter('base frequency', FloatRange(unit='Hz'), readonly=False) nr = Parameter('number of records', datatype=IntRange(1,10000), default=500) - freq = Parameter('target frequency', FloatRange(unit='Hz'), readonly=False, poll=True) - amp = Parameter('amplitude', FloatRange(unit='dBm'), readonly=False, poll=True) + freq = Parameter('target frequency', FloatRange(unit='Hz'), readonly=False) + bw = Parameter('bandwidth lowpassfilter', datatype=FloatRange(unit='Hz'),default=10E6) + amp = Parameter('amplitude', FloatRange(unit='dBm'), readonly=False) control = Parameter('control loop on?', BoolType(), readonly=False, default=True) time = Parameter('pulse start time', FloatRange(unit='nsec'), readonly=False) @@ -116,7 +118,7 @@ class Frequency(HasIodev, Readable): save = Parameter('save data', BoolType(), readonly=False, default=True) pollinterval = Parameter(datatype=FloatRange(0,120)) - iodevClass = FreqStringIO + ioClass = FreqStringIO lastfreq = None old = None @@ -124,9 +126,8 @@ class Frequency(HasIodev, Readable): interval = (0,0) def earlyInit(self): - #assert self.iodev.startswith('serial:') - #self._iodev = serial.Serial(self.iodev[7:]) - self.adq = Adq(self.nr, self.sr) + super().earlyInit() + self.adq = Adq(self.nr, self.sr, self.bw) self.roilist = [] self.write_nr(self.nr) self.skipctrl = 0 @@ -155,24 +156,24 @@ class Frequency(HasIodev, Readable): def set_freq(self): freq = self.freq + self.basefreq - self.sendRecv('FREQ %.15g;FREQ?' % freq) + self.communicate('FREQ %.15g;FREQ?' % freq) #self._iodev.readline().decode('ascii') return freq def write_amp(self, amp): - reply = self.sendRecv('AMPR %g;AMPR?' % amp) + reply = self.communicate('AMPR %g;AMPR?' % amp) return float(reply) def read_amp(self): - reply = self.sendRecv('AMPR?') + reply = self.communicate('AMPR?') return float(reply) def write_freq(self, value): self.skipctrl = 2 # suppress control for the 2 next steps return value - def read_freq(self): - """used as main polling loop body""" + def doPoll(self): + """main poll loop body""" if self.lastfreq is None: self.lastfreq = self.set_freq() self.adq.start() @@ -180,13 +181,19 @@ class Frequency(HasIodev, Readable): self.starttime = time.time() times = [] times.append(('init', time.time())) - seadata = {p: float(getattr(self._pars, p)) for p in self._pars.parameters} + seadata = {p: float(getattr(self.pars, p)) for p in self.pars.parameters} data = self.adq.getdata() # this will wait, if not yet finished + #save sample + #np.save('sample.dat',data) times.append(('wait',time.time())) - freq = self.lastfreq # data was acquired at this freq + if self.control: + freq = self.lastfreq # data was acquired at this freq + else: + freq = self.set_freq() seadata['frequency'] = freq - self.lastfreq = self.set_freq() - times.append(('setf',time.time())) + if self.control: + self.lastfreq = self.set_freq() + times.append(('setf',time.time())) self.adq.start() # start next acq times.append(('start',time.time())) roilist = [r for r in self.roilist if r.enable] @@ -194,6 +201,7 @@ class Frequency(HasIodev, Readable): gates = self.adq.gates_and_curves(data, freq, self.interval, [r.interval for r in roilist]) if self.save: + times.append(('save',time.time())) tdata, idata, qdata, pdata = self.adq.curves seadata['timestep'] = tdata[1] - tdata[0] iqdata = np.array((idata, qdata, pdata), dtype='f4') @@ -249,4 +257,5 @@ class Frequency(HasIodev, Readable): self.skipctrl -= 1 elif self.control: self.freq = sorted((self.freq - self.maxstep, newfreq, self.freq + self.maxstep))[1] + #print(times) return Done