diff --git a/pykat/__init__.py b/pykat/__init__.py index 05ad00380b9795184a7caf87b24a89afca1020d1..1474e2085f64e36af0c16e10995e65b851a2fd58 100644 --- a/pykat/__init__.py +++ b/pykat/__init__.py @@ -3,7 +3,7 @@ from __future__ import division from __future__ import print_function from __future__ import unicode_literals -__version__ = "1.0.7" +__version__ = "1.0.8" # This flag is used to switch on the gui features in pkat at import time USE_GUI = False diff --git a/pykat/components.py b/pykat/components.py index b6c1212828195408e8e333bc382bdab3016d6829..f0653a6c71f6c68926cf5f418bb4b9a6ea3ae98f 100644 --- a/pykat/components.py +++ b/pykat/components.py @@ -987,34 +987,30 @@ class isolator(Component): return self._svgItem class lens(Component): - def __init__(self, name, node1, node2, f=1): + def __init__(self, name, node1, node2, f=1, p=None): Component.__init__(self, name) + if not ((f is None) ^ (p is None)): + raise pkex.BasePyKatException("Specify either a focal length or power, not both.") + self._requested_node_names.append(node1) self._requested_node_names.append(node2) self._svgItem = None self.__f = Param("f", self, SIfloat(f)) - self.__p = Param("p", self, None) + self.__p = Param("p", self, SIfloat(p)) @property - def f(self): - if self.__f is not None: - return self.__f - else: - return 1/self.__p + def f(self): return self.__f + @f.setter def f(self, value): self.__f.value = SIfloat(value) self.__p.value = None @property - def p(self): - if self.__p is not None: - return self.__p - else: - return 1/self.__f + def p(self): return self.__p - @f.setter + @p.setter def p(self, value): self.__p.value = SIfloat(value) self.__f.value = None @@ -1023,18 +1019,23 @@ class lens(Component): def parseFinesseText(text): values = text.split() - if values[0] != "lens": + if not values[0].startswith("lens"): raise pkex.BasePyKatException("'{0}' not a valid Finesse lens command".format(text)) + alt = values[0].endswith("*") + values.pop(0) # remove initial value if len(values) == 4: - return lens(values[0], values[2], values[3], values[1]) + if not alt: + return lens(values[0], values[2], values[3], f=values[1], p=None) + else: + return lens(values[0], values[2], values[3], f=None, p=values[1]) else: raise pkex.BasePyKatException("Lens Finesse code format incorrect '{0}'".format(text)) def getFinesseText(self): - if self.__p is None: + if self.__p.value is None: rtn = ['lens {0} {1} {2} {3}'.format(self.name, self.f.value, self.nodes[0].name, self.nodes[1].name)] else: rtn = ['lens* {0} {1} {2} {3}'.format(self.name, self.p.value, self.nodes[0].name, self.nodes[1].name)]