improve softcal
- bugfix: stop searching for file on the first match - allow to ignore the sign on input by abs (bool) parameter Change-Id: I0e5544d7645f124d4c4ac720174b0f5bde7e71a6 Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/24928 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
parent
7895470301
commit
9afcc49430
@ -26,7 +26,7 @@ import math
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
from scipy.interpolate import splrep, splev # pylint: disable=import-error
|
from scipy.interpolate import splrep, splev # pylint: disable=import-error
|
||||||
|
|
||||||
from secop.core import Readable, Parameter, Override, Attached, StringType
|
from secop.core import Readable, Parameter, Override, Attached, StringType, BoolType
|
||||||
|
|
||||||
|
|
||||||
def linear(x):
|
def linear(x):
|
||||||
@ -51,7 +51,7 @@ class StdParser:
|
|||||||
self.xdata, self.ydata = [], []
|
self.xdata, self.ydata = [], []
|
||||||
|
|
||||||
def parse(self, line):
|
def parse(self, line):
|
||||||
"""get numbers from a line and put them to self.output"""
|
"""get numbers from a line and put them to self.xdata / self.ydata"""
|
||||||
row = line.split()
|
row = line.split()
|
||||||
try:
|
try:
|
||||||
self.xdata.append(float(row[self.xcol]))
|
self.xdata.append(float(row[self.xcol]))
|
||||||
@ -109,10 +109,14 @@ class CalCurve:
|
|||||||
kind = ext if dot else None
|
kind = ext if dot else None
|
||||||
break
|
break
|
||||||
# then try adding all kinds as extension
|
# then try adding all kinds as extension
|
||||||
for kind in KINDS:
|
for nam in calibname, calibname.upper(), calibname.lower():
|
||||||
filename = join(path.strip(), '%s.%s' % (calibname, kind))
|
for kind in KINDS:
|
||||||
if exists(filename):
|
filename = join(path.strip(), '%s.%s' % (nam, kind))
|
||||||
break
|
if exists(filename):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
break
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
break
|
break
|
||||||
@ -151,6 +155,7 @@ class Sensor(Readable):
|
|||||||
}
|
}
|
||||||
parameters = {
|
parameters = {
|
||||||
'calib': Parameter('calibration name', datatype=StringType(), readonly=False),
|
'calib': Parameter('calibration name', datatype=StringType(), readonly=False),
|
||||||
|
'abs': Parameter('True: take abs(raw) before calib', datatype=BoolType(), readonly=False, default=True),
|
||||||
'value': Override(unit='K'),
|
'value': Override(unit='K'),
|
||||||
'pollinterval': Override(export=False),
|
'pollinterval': Override(export=False),
|
||||||
'status': Override(default=(Readable.Status.ERROR, 'unintialized'))
|
'status': Override(default=(Readable.Status.ERROR, 'unintialized'))
|
||||||
@ -168,10 +173,15 @@ class Sensor(Readable):
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
def update_value(self, value):
|
def update_value(self, value):
|
||||||
|
if self.abs:
|
||||||
|
value = abs(value)
|
||||||
self.value = self._calib(value)
|
self.value = self._calib(value)
|
||||||
self._value_error = None
|
self._value_error = None
|
||||||
|
|
||||||
def error_update_value(self, err):
|
def error_update_value(self, err):
|
||||||
|
if self.abs and str(err) == 'R_UNDER': # hack: ignore R_UNDER from ls370
|
||||||
|
self._value_error = None
|
||||||
|
return None
|
||||||
self._value_error = repr(err)
|
self._value_error = repr(err)
|
||||||
raise err
|
raise err
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user