upgrade upltrasound to newer version of frappy

This commit is contained in:
Ultrasound PC 2022-05-23 15:25:41 -04:00
parent 7fc030191d
commit 319f3b4649
2 changed files with 41 additions and 32 deletions

View File

@ -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])

View File

@ -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