From 42d18e898a82b15ce438b3fd3dbe85b4f89ce8e6 Mon Sep 17 00:00:00 2001
From: Daniel Brown <ddb@star.sr.bham.ac.uk>
Date: Fri, 24 Jul 2015 17:22:26 +0100
Subject: [PATCH] fixing undump nodes and adding new 3 port isolator option

---
 pykat/components.py | 21 ++++++++++++++++-----
 pykat/finesse.py    |  4 ++--
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/pykat/components.py b/pykat/components.py
index 52f32aa..613bb17 100644
--- a/pykat/components.py
+++ b/pykat/components.py
@@ -901,13 +901,14 @@ class grating(Component):
         return self._svgItem
 
 class isolator(Component):
-    def __init__(self, name, node1, node2, S = 0, node3="dump"):
+    def __init__(self, name, node1, node2, S = 0, node3="dump", option=0):
         Component.__init__(self, name)
         
         self._requested_node_names.append(node1)
         self._requested_node_names.append(node2)
         self._requested_node_names.append(node3)
         self._svgItem = None
+        self._option = option
         
         self.__S = Param("S",self,SIfloat(S))
         
@@ -920,20 +921,30 @@ class isolator(Component):
     def parseFinesseText(text):
         values = text.split()
 
-        if values[0] != "isol":
+        if values[0] != "isol" and values[0] != "isol*":
             raise pkex.BasePyKatException("'{0}' not a valid Finesse isolator command".format(text))
 
+        if values[0].endswith('*'):
+            option = 1
+        else:
+            option = 0
+            
         values.pop(0) # remove initial value
         
         if len(values) == 4:
-            return isolator(values[0], values[2], values[3], values[1])
+            return isolator(values[0], values[2], values[3], values[1], option=option)
         elif len(values) == 5:
-            return isolator(values[0], values[2], values[3], node3=values[4], S=values[1])
+            return isolator(values[0], values[2], values[3], node3=values[4], S=values[1], option=option)
         else:
             raise pkex.BasePyKatException("Isolator Finesse code format incorrect '{0}'".format(text))
         
     def getFinesseText(self):
-        rtn = ['isol {0} {1} {2} {3} {4}'.format(self.name, self.S.value, self.nodes[0].name, self.nodes[1].name, self.nodes[2].name)]
+        if self._option == 0:
+            cmd = "isol"
+        elif self._option == 1:
+            cmd = "isol*"
+            
+        rtn = ['{cmd} {0} {1} {2} {3} {4}'.format(self.name, self.S.value, self.nodes[0].name, self.nodes[1].name, self.nodes[2].name, cmd=cmd)]
         
         for p in self._params:
             rtn.extend(p.getFinesseText())
diff --git a/pykat/finesse.py b/pykat/finesse.py
index 109fd27..e582425 100644
--- a/pykat/finesse.py
+++ b/pykat/finesse.py
@@ -1500,11 +1500,11 @@ class kat(object):
         for c in self.components.values():
             for n in c.nodes:
                 if n.isDump:
-                    while hasattr(kat.nodes, node_name):
+                    while hasattr(self.nodes, node_name):
                         node_name = "%s_%i" % (str(undumped_name_prefix), i)
                         i += 1
                         
-                    self.nodes.replaceNode(c, n, self.nodes.createNode(node_name % i))
+                    self.nodes.replaceNode(c, n, self.nodes.createNode(node_name))
         
   
     def getMatrices(self):
-- 
GitLab