From fb4755502b8b78282f9ee07f3bdb5123a63aa5fc Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Thu, 24 Apr 2025 10:48:35 +0200 Subject: [PATCH] frappy_psi.parmod: extract a tuple element as own moudle Change-Id: I8d904ed21f8a5c16ae71daf30c9a1ea42876b451 --- frappy_psi/parmod.py | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/frappy_psi/parmod.py b/frappy_psi/parmod.py index 8299817..8116950 100644 --- a/frappy_psi/parmod.py +++ b/frappy_psi/parmod.py @@ -21,12 +21,12 @@ """modules to access parameters""" +import re from frappy.core import Drivable, EnumType, IDLE, Attached, StringType, Property, \ Parameter, BoolType, FloatRange, Readable, ERROR, nopoll from frappy.errors import ConfigError from frappy_psi.convergence import HasConvergence from frappy_psi.mixins import HasRamp -from frappy.lib import merge_status class Par(Readable): @@ -255,3 +255,41 @@ class SwitchDriv(HasConvergence, Drivable): self.log.info('target=%g (%s)', target, this.name) this.write_target(target1) return target + + +INDEX = re.compile(r'(.*)\[(.*)\]') + + +class Comp(Readable): + value = Parameter(datatype=FloatRange(unit='$')) + read = Attached(description='. for read') + unit = Property('main unit', StringType()) + + _parname = None + _index = None + + def setProperty(self, key, value): + if key == 'read': + value, param = value.split('.') + match = INDEX.match(param) + if match: + self._param, i = match.groups() + self._index = int(i) + else: + self._param = param + super().setProperty(key, value) + + def checkProperties(self): + self.applyMainUnit(self.unit) + if self._param == self.name: + raise ConfigError('illegal recursive read module') + super().checkProperties() + + def read_value(self): + par = getattr(self.read, self._param) + if self._index is None: + return par + return par[self._index] + + def read_status(self): + return IDLE, ''