From c9ccaa484a098bf9b820a4fb59e33fc7cf26dcdd Mon Sep 17 00:00:00 2001 From: Oksana Shliakhtun Date: Mon, 16 Oct 2023 13:42:49 +0200 Subject: [PATCH] SR830: moved dicts out of class Change-Id: If056b1bf4e81c3b609ded087dff2b40c7119903f --- frappy_psi/SR830.py | 58 +++++++++++++++++++++------------------------ frappy_psi/qnw.py | 1 - 2 files changed, 27 insertions(+), 32 deletions(-) diff --git a/frappy_psi/SR830.py b/frappy_psi/SR830.py index 08e004f..4933382 100644 --- a/frappy_psi/SR830.py +++ b/frappy_psi/SR830.py @@ -22,6 +22,15 @@ import re from frappy.core import StringIO, HasIO, Parameter, EnumType, FloatRange, TupleOf, ERROR, IDLE, WARN +def string_to_value(value): + value_with_unit = re.compile(r'(\d+)([pnumkMG]?)') + value, pfx = value_with_unit.match(value).groups() + pfx_dict = {'p': 1e-12, 'n': 1e-9, 'u': 1e-6, 'm': 1e-3, 'k': 1e3, 'M': 1e6, 'G': 1e9} + if pfx in pfx_dict: + value = round(float(value) * pfx_dict[pfx], 12) + return float(value) + + class SR830_IO(StringIO): end_of_line = b'\r' # should be or identification = [('*IDN?', r'Stanford_Research_Systems,.*')] @@ -33,22 +42,25 @@ class XY(HasIO): freq = Parameter('oscill. frequen. control', FloatRange(1e-3, 102000), unit='Hz', readonly=False) phase = Parameter('reference phase control', FloatRange(-360, 729), unit='deg', readonly=False) - sen_range = ['2nV', '5nV', '10nV', '20nV', '50nV', '100nV', '200nV', '500nV', + SEN_RANGE = ['2nV', '5nV', '10nV', '20nV', '50nV', '100nV', '200nV', '500nV', '1uV', '2uV', '5uV', '10uV', '20uV', '50uV', '100uV', '200uV', '500uV', '1mV', '2mV', '5mV', '10mV', '20mV', '50mV', '100mV', '200mV', '500mV', '1V'] irange = Parameter('sensitivity index', EnumType('sensitivity index range', - {name: idx for idx, name in enumerate(sen_range)}), readonly=False) + {name: idx for idx, name in enumerate(SEN_RANGE)}), readonly=False) range = Parameter('sensitivity value', FloatRange(2e-9, 1), unit='V', default=1, readonly=False) - time_const = ['10us', '30us', '100us', '300us', '1ms', '3ms', '10ms', '30ms', '100ms', '300ms', + TIME_CONST = ['10us', '30us', '100us', '300us', '1ms', '3ms', '10ms', '30ms', '100ms', '300ms', '1s', '3s', '10s', '30s', '100s', '300s', '1ks', '3ks', '10ks', '30ks'] tc = Parameter('time const. value', FloatRange(1e-6, 3e4), unit='s', readonly=False) itc = Parameter('time const. index', EnumType( - 'time const. index range', {name: value for value, name in enumerate(time_const)}), readonly=False) + 'time const. index range', {name: value for value, name in enumerate(TIME_CONST)}), readonly=False) + + SEN_RANGE_values = [string_to_value(value) for value in SEN_RANGE] + TIME_CONST_values = [string_to_value(value) for value in TIME_CONST] ioClass = SR830_IO @@ -89,18 +101,6 @@ class XY(HasIO): # conv_status = HasConvergence.read_status(self) return status_type, status_msg - def string_to_value(self, value): - value_with_unit = re.compile(r'(\d+)([pnumkMG]?)') - value, pfx = value_with_unit.match(value).groups() - pfx_dict = {'p': 1e-12, 'n': 1e-9, 'u': 1e-6, 'm': 1e-3, 'k': 1e3, 'M': 1e6, 'G': 1e9} - if pfx in pfx_dict: - value = round(float(value) * pfx_dict[pfx], 12) - return float(value) - - def init_values(self): - self.sen_range_values = [self.string_to_value(value) for value in self.sen_range] - self.time_const_values = [self.string_to_value(value) for value in self.time_const] - def read_xy(self): reply = self.communicate('SNAP? 1, 2') xy = tuple(float(x) for x in reply.split(',')) @@ -111,8 +111,8 @@ class XY(HasIO): def read_range(self): idx = self.read_irange() - name = self.sen_range[idx] - value = self.string_to_value(name) + name = self.SEN_RANGE[idx] + value = string_to_value(name) return value def write_irange(self, irange): @@ -125,11 +125,9 @@ class XY(HasIO): cl_idx = None cl_value = float('-inf') - for idx, sen_value in enumerate(self.sen_range_values): - value = self.string_to_value(sen_value) - - if target >= value > cl_value: - cl_value = value + for idx, sen_value in enumerate(self.SEN_RANGE_values): + if target >= sen_value > cl_value: + cl_value = sen_value cl_idx = idx self.communicate(f'SENS {cl_idx}') @@ -145,8 +143,8 @@ class XY(HasIO): def read_tc(self): idx = self.read_itc() - name = self.time_const[idx] - value = self.string_to_value(name) + name = self.TIME_CONST[idx] + value = string_to_value(name) return value def write_tc(self, target): @@ -154,14 +152,12 @@ class XY(HasIO): cl_idx = None cl_value = float('inf') - for idx, time_value in enumerate(self.time_const_values): - value = self.string_to_value(time_value) - - if value >= target: - diff = value - target + for idx, time_value in enumerate(self.TIME_CONST_values): + if time_value >= target: + diff = time_value - target if diff < cl_value: - cl_value = value + cl_value = time_value cl_idx = idx self.communicate(f'OFLT {cl_idx}') diff --git a/frappy_psi/qnw.py b/frappy_psi/qnw.py index 96f2a1e..d7c2d81 100644 --- a/frappy_psi/qnw.py +++ b/frappy_psi/qnw.py @@ -121,7 +121,6 @@ class TemperatureLoopTC1(SensorTC1, Drivable): return True self.set_param('TC', '-') return False -########### def read_ramp(self): return float(self.get_param('RR'))