Skip to content
Snippets Groups Projects
Commit 0e08d581 authored by Daniel Brown's avatar Daniel Brown
Browse files

fixing lens issues

parent 66c2a0df
No related branches found
No related tags found
No related merge requests found
...@@ -3,7 +3,7 @@ from __future__ import division ...@@ -3,7 +3,7 @@ from __future__ import division
from __future__ import print_function from __future__ import print_function
from __future__ import unicode_literals 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 # This flag is used to switch on the gui features in pkat at import time
USE_GUI = False USE_GUI = False
......
...@@ -987,34 +987,30 @@ class isolator(Component): ...@@ -987,34 +987,30 @@ class isolator(Component):
return self._svgItem return self._svgItem
class lens(Component): 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) 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(node1)
self._requested_node_names.append(node2) self._requested_node_names.append(node2)
self._svgItem = None self._svgItem = None
self.__f = Param("f", self, SIfloat(f)) self.__f = Param("f", self, SIfloat(f))
self.__p = Param("p", self, None) self.__p = Param("p", self, SIfloat(p))
@property @property
def f(self): def f(self): return self.__f
if self.__f is not None:
return self.__f
else:
return 1/self.__p
@f.setter @f.setter
def f(self, value): def f(self, value):
self.__f.value = SIfloat(value) self.__f.value = SIfloat(value)
self.__p.value = None self.__p.value = None
@property @property
def p(self): def p(self): return self.__p
if self.__p is not None:
return self.__p
else:
return 1/self.__f
@f.setter @p.setter
def p(self, value): def p(self, value):
self.__p.value = SIfloat(value) self.__p.value = SIfloat(value)
self.__f.value = None self.__f.value = None
...@@ -1023,18 +1019,23 @@ class lens(Component): ...@@ -1023,18 +1019,23 @@ class lens(Component):
def parseFinesseText(text): def parseFinesseText(text):
values = text.split() 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)) raise pkex.BasePyKatException("'{0}' not a valid Finesse lens command".format(text))
alt = values[0].endswith("*")
values.pop(0) # remove initial value values.pop(0) # remove initial value
if len(values) == 4: 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: else:
raise pkex.BasePyKatException("Lens Finesse code format incorrect '{0}'".format(text)) raise pkex.BasePyKatException("Lens Finesse code format incorrect '{0}'".format(text))
def getFinesseText(self): 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)] rtn = ['lens {0} {1} {2} {3}'.format(self.name, self.f.value, self.nodes[0].name, self.nodes[1].name)]
else: else:
rtn = ['lens* {0} {1} {2} {3}'.format(self.name, self.p.value, self.nodes[0].name, self.nodes[1].name)] rtn = ['lens* {0} {1} {2} {3}'.format(self.name, self.p.value, self.nodes[0].name, self.nodes[1].name)]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment