diff --git a/pykat/commands.py b/pykat/commands.py index f146667019f1d6142fa7cf597341c5708c0d61ca..b144773f54223c4fcf64280b0e9f7e3dc4a2130b 100644 --- a/pykat/commands.py +++ b/pykat/commands.py @@ -466,12 +466,8 @@ class xaxis(Command): Command.__init__(self, axis_type, True) self._axis_type = axis_type - - self.x = putter("x1", self) - self.mx = putter("mx1", self) - - self._putters.append(self.x) - self._putters.append(self.mx) + + self._set_variables() if scale == "lin": scale = Scale.linear @@ -508,6 +504,13 @@ class xaxis(Command): self.__param = param self.__comp = param._owner() + def _set_variables(self): + self.x = putter("x1", self) + self.mx = putter("mx1", self) + + self._putters.append(self.x) + self._putters.append(self.mx) + @property def param(self): return self.__param @param.setter @@ -549,12 +552,14 @@ class xaxis(Command): class x2axis(xaxis): def __init__(self, scale, limits, param, steps, comp=None, axis_type="x2axis"): xaxis.__init__(self, scale, limits, param, steps, comp=comp, axis_type=axis_type) + + def _set_variables(self): self.x = putter("x2", self) self.mx = putter("mx2", self) self._putters.append(self.x) self._putters.append(self.mx) - + @staticmethod def parseFinesseText(text): values = text.split() diff --git a/pykat/components.py b/pykat/components.py index d61b8df346516b37db92f0b84f850ec303f1ce73..3606f6781a75964307a504b2731c68021d679161 100644 --- a/pykat/components.py +++ b/pykat/components.py @@ -1022,6 +1022,49 @@ class isolator(Component): self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/isolator.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1]), (14,24,self.nodes[2])]) return self._svgItem + + + +class isolator1(Component): + def __init__(self, name, node1, node2, node3, node4): + """ + Creates a 4-port isolator component. + """ + + Component.__init__(self, name) + + self._requested_node_names.append(node1) + self._requested_node_names.append(node2) + self._requested_node_names.append(node3) + self._requested_node_names.append(node4) + self._svgItem = None + + @staticmethod + def parseFinesseText(text): + values = text.split() + + if values[0] != "isol1": + raise pkex.BasePyKatException("'{0}' not a valid Finesse isolator command".format(text)) + + values.pop(0) # remove initial value + + if len(values) == 5: + return isolator1(values[0], values[1], values[2], values[3], values[4]) + else: + raise pkex.BasePyKatException("Isolator1 Finesse code format incorrect '{0}'".format(text)) + + def getFinesseText(self): + rtn = ['isol1 {0} {1} {2} {3} {4}'.format(self.name, self.nodes[0].name, + self.nodes[1].name, self.nodes[2].name, + self.nodes[3].name)] + + for p in self._params: + rtn.extend(p.getFinesseText()) + + return rtn + + + class lens(Component): def __init__(self, name, node1, node2, f=1, p=None): diff --git a/pykat/finesse.py b/pykat/finesse.py index 45ccb84f8ef77b2b594f8c7e12c489054b818e6a..c26e02947f2d792a8ec29497b2feca8a72e691ab 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -471,6 +471,7 @@ class katRun(object): if ylim is not None: pyplot.ylim(ylim[0],ylim[1]) + pyplot.margins(0, 0.05) pyplot.tight_layout() if legend: @@ -1112,6 +1113,8 @@ class kat(object): obj = pykat.components.beamSplitter.parseFinesseText(line) elif(first[0:2] == "gr"): obj = pykat.components.grating.parseFinesseText(line) + elif(first[0:5] == "isol1"): + obj = pykat.components.isolator1.parseFinesseText(line) elif(first[0:4] == "isol"): obj = pykat.components.isolator.parseFinesseText(line) elif(first[0:4] == "lens"):