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:
@ -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:
|
||||
|
Reference in New Issue
Block a user