diff --git a/bin/test_pass_though.py b/bin/test_pass_though.py index 3a8c020228b49bd1cccb137632c57d6a19eacb6b..6f595e1da688889d6ae11b4dbf84dbdf41bef10b 100644 --- a/bin/test_pass_though.py +++ b/bin/test_pass_though.py @@ -16,6 +16,7 @@ l l1 1 0 0 n1 s s1 10 1 n1 n2 m m1 1 0 0 n2 n3 gr4 grating 1500 n4 n5 n6 n7 +isol isolator 60 n8 n9 pd refl n2 diff --git a/pykat/components.py b/pykat/components.py index d914b06dcb81b633e4eaebde115c89de63dfaf89..172a85a4b20f1ee2947d08d39401ff907b38732f 100644 --- a/pykat/components.py +++ b/pykat/components.py @@ -368,9 +368,9 @@ class space(Component): values.pop(0) # remove initial value if len(values) == 5: - return space(values[0],values[3],values[4],L=values[1],n=values[2]) + return space(values[0], values[3], values[4], values[1], values[2]) elif len(values) == 4: - return space(values[0],values[2],values[3],L=values[1]) + return space(values[0], values[2], values[3], values[1]) else: raise exceptions.RuntimeError("Space Finesse code format incorrect '{0}'".format(text)) @@ -519,6 +519,43 @@ class grating(Component): self._QItem = pykat.gui.graphics.SpaceQGraphicsItem(self) # TODO: make SVG graphic for grating return self._QItem + +class isolator(Component): + def __init__(self, name, node1, node2, S = 0): + Component.__init__(self, name) + + self._requested_node_names.append(node1) + self._requested_node_names.append(node2) + + self.__S = SIfloat(S) + + @property + def S(self): return Param('S', self.__S) + @S.setter + def S(self, value): self.__S = SIfloat(value) + + @staticmethod + def parseFinesseText(text): + values = text.split(" ") + + if values[0] != "isol": + raise exceptions.RuntimeError("'{0}' not a valid Finesse isolator command".format(text)) + + values.pop(0) # remove initial value + + if len(values) == 4: + return isolator(values[0], values[2], values[3], values[1]) + else: + raise exceptions.RuntimeError("Isolator Finesse code format incorrect '{0}'".format(text)) + + def getFinesseText(self): + return 'isol {0} {1} {2} {3}'.format(self.name, self.S, self.nodes[0].name, self.nodes[1].name) + + def getQGraphicsItem(self): + if self._QItem == None: + self._QItem = pykat.gui.graphics.SpaceQGraphicsItem(self) # TODO: make isolator graphic + + return self._QItem class laser(Component): def __init__(self,name,node,P=1,f_offset=0,phase=0): diff --git a/pykat/finesse.py b/pykat/finesse.py index 36415248855bce3cfbd6b738f6405e4eab28ef5b..cc31f32504d416a5ce9dc33e307aa66d134e8f09 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -207,6 +207,8 @@ class kat(object): obj = pykat.components.beamSplitter.parseFinesseText(line) elif(first[0:2] == "gr"): obj = pykat.components.grating.parseFinesseText(line) + elif(first[0:4] == "isol"): + obj = pykat.components.isolator.parseFinesseText(line) elif(first[0:2] == "pd"): obj = pykat.detectors.photodiode.parseFinesseText(line) elif(first == "xaxis" or first == "x2axis" or first == "xaxis*" or first == "x2axis*"):