migrated secop_psi drivers to new syntax

- includes all changes up to 'fix inheritance order' from git_mlz
  6a32ecf342

Change-Id: Ie3ceee3dbd0a9284b47b1d5b5dbe262eebe8f283
This commit is contained in:
2021-02-24 16:15:23 +01:00
parent bc5edec06f
commit 41baf5805f
79 changed files with 2610 additions and 3952 deletions

View File

@ -20,17 +20,19 @@
# *****************************************************************************
"""frappy support for ultrasound"""
import math
#import serial
import os
import math
import time
from secop.core import Readable, Parameter, Override, FloatRange, BoolType, StringIO, \
Done, Attached, TupleOf, StringType, IntRange, EnumType, HasIodev, Module
from secop.properties import Property
from adq_mr import Adq
import iqplot
import numpy as np
import iqplot
from adq_mr import Adq
from secop.core import Attached, BoolType, Done, FloatRange, HasIodev, \
IntRange, Module, Parameter, Readable, StringIO, StringType
from secop.properties import Property
def fname_from_time(t, extension):
tm = time.localtime(t)
@ -43,32 +45,27 @@ def fname_from_time(t, extension):
class Roi(Readable):
properties = {
'main': Attached(),
}
parameters = {
'value': Override('amplitude', FloatRange(), default=0),
'phase': Parameter('phase', FloatRange(unit='deg'), default=0),
'i': Parameter('in phase', FloatRange(), default=0),
'q': Parameter('out of phase', FloatRange(), default=0),
'time': Parameter('start time', FloatRange(unit='nsec'),
readonly=False),
'size': Parameter('interval (symmetric around time)', FloatRange(unit='nsec'),
readonly=False),
'enable': Parameter('calculate this roi', BoolType(), readonly=False, default=True),
#'status': Override(export=False),
'pollinterval': Override(export=False),
}
main = Attached()
value = Parameter('amplitude', FloatRange(), default=0)
phase = Parameter('phase', FloatRange(unit='deg'), default=0)
i = Parameter('in phase', FloatRange(), default=0)
q = Parameter('out of phase', FloatRange(), default=0)
time = Parameter('start time', FloatRange(unit='nsec'), readonly=False)
size = Parameter('interval (symmetric around time)', FloatRange(unit='nsec'), readonly=False)
enable = Parameter('calculate this roi', BoolType(), readonly=False, default=True)
#status = Parameter(export=False)
pollinterval = Parameter(export=False)
interval = (0,0)
def initModule(self):
self._main.register_roi(self)
self.calc_interval()
def calc_interval(self):
self.interval = (self.time - 0.5 * self.size, self.time + 0.5 * self.size)
def write_time(self, value):
self.time = value
self.calc_interval()
@ -83,53 +80,49 @@ class Roi(Readable):
class Pars(Module):
description = 'relevant parameters from SEA'
parameters = {
'timestamp': Parameter('unix timestamp', StringType(), default='0', readonly=False),
'temperature': Parameter('T', FloatRange(unit='K'), default=0, readonly=False),
'mf': Parameter('field', FloatRange(unit='T'), default=0, readonly=False),
'sr': Parameter('rotaion angle', FloatRange(unit='deg'), default=0, readonly=False),
}
timestamp = Parameter('unix timestamp', StringType(), default='0', readonly=False)
temperature = Parameter('T', FloatRange(unit='K'), default=0, readonly=False)
mf = Parameter('field', FloatRange(unit='T'), default=0, readonly=False)
sr = Parameter('rotaion angle', FloatRange(unit='deg'), default=0, readonly=False)
class FreqStringIO(StringIO):
end_of_line = '\r'
class Frequency(HasIodev, Readable):
properties = {
'pars': Attached(),
'sr': Property('samples per record', datatype=IntRange(), default=16384),
'maxy': Property('plot y scale', datatype=FloatRange(), default=0.5),
}
parameters = {
'value': Override('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),
'control': Parameter('control loop on?', BoolType(), readonly=False, default=True),
'time': Parameter('pulse start time', FloatRange(unit='nsec'),
readonly=False),
'size': Parameter('pulse length (starting from time)', FloatRange(unit='nsec'),
readonly=False),
'pulselen': Parameter('adjusted pulse length (integer number of periods)', FloatRange(unit='nsec'), default=1),
'maxstep': Parameter('max frequency step', FloatRange(unit='Hz'), readonly=False,
default=10000),
'minstep': Parameter('min frequency step for slope calculation', FloatRange(unit='Hz'),
readonly=False, default=4000),
'slope': Parameter('inphase/frequency slope', FloatRange(), readonly=False,
default=1e6),
'plot': Parameter('create plot images', BoolType(), readonly=False, default=True),
'save': Parameter('save data', BoolType(), readonly=False, default=True),
'pollinterval': Override(datatype=FloatRange(0,120)),
}
pars = Attached()
sr = Property('samples per record', datatype=IntRange(), default=16384)
maxy = Property('plot y scale', datatype=FloatRange(), default=0.5)
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)
control = Parameter('control loop on?', BoolType(), readonly=False, default=True)
time = Parameter('pulse start time', FloatRange(unit='nsec'),
readonly=False)
size = Parameter('pulse length (starting from time)', FloatRange(unit='nsec'),
readonly=False)
pulselen = Parameter('adjusted pulse length (integer number of periods)', FloatRange(unit='nsec'), default=1)
maxstep = Parameter('max frequency step', FloatRange(unit='Hz'), readonly=False,
default=10000)
minstep = Parameter('min frequency step for slope calculation', FloatRange(unit='Hz'),
readonly=False, default=4000)
slope = Parameter('inphase/frequency slope', FloatRange(), readonly=False,
default=1e6)
plot = Parameter('create plot images', BoolType(), readonly=False, default=True)
save = Parameter('save data', BoolType(), readonly=False, default=True)
pollinterval = Parameter(datatype=FloatRange(0,120))
iodevClass = FreqStringIO
lastfreq = None
old = None
starttime = None
interval = (0,0)
def earlyInit(self):
#assert self.iodev.startswith('serial:')
#self._iodev = serial.Serial(self.iodev[7:])
@ -142,30 +135,30 @@ class Frequency(HasIodev, Readable):
def calc_interval(self):
self.interval = (self.time, self.time + self.size)
def write_time(self, value):
self.time = value
self.calc_interval()
return Done
def write_size(self, value):
self.size = value
self.calc_interval()
return Done
def write_nr(self, value):
# self.pollinterval = value * 0.0001
return value
def register_roi(self, roi):
self.roilist.append(roi)
def set_freq(self):
freq = self.freq + self.basefreq
reply = self.sendRecv('FREQ %.15g;FREQ?' % freq)
self.sendRecv('FREQ %.15g;FREQ?' % freq)
#self._iodev.readline().decode('ascii')
return freq
def write_amp(self, amp):
reply = self.sendRecv('AMPR %g;AMPR?' % amp)
return float(reply)
@ -173,11 +166,11 @@ class Frequency(HasIodev, Readable):
def read_amp(self):
reply = self.sendRecv('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"""
if self.lastfreq is None:
@ -197,7 +190,7 @@ class Frequency(HasIodev, Readable):
self.adq.start() # start next acq
times.append(('start',time.time()))
roilist = [r for r in self.roilist if r.enable]
gates = self.adq.gates_and_curves(data, freq, self.interval,
[r.interval for r in roilist])
if self.save: