diff --git a/bin/test_aperture.py b/bin/test_aperture.py index 19f738d58f4e3676c956fdf63643df38793bb0c5..fee0995387dc26c004b7bb5c2053bb87296fac52 100644 --- a/bin/test_aperture.py +++ b/bin/test_aperture.py @@ -8,7 +8,7 @@ l l1 1 0 0 n1 s s1 10 1 n1 n2 m m1 1 0 0 n2 n3 -gauss g1 m1 n2 1e-3 0 +#gauss g1 m1 n2 1e-3 0 pd refl n2 @@ -18,7 +18,9 @@ xaxis m1 r_ap lin 0.1e-3 2e-3 10 kat = finesse.kat() kat.parseCommands(code) -maxtem = np.arange(0, 5, 2) +maxtem = np.arange(0, 2, 2) + +kat.nodes.n2.gauss_w0_z(1e-3, 0) for tem in maxtem: print "Calculating maxtem ", tem, "..." diff --git a/bin/test_rad_pressure.py b/bin/test_rad_pressure.py index e2e9e5c059ef328cb0f30c64fdc37bb114ed795d..ed5a75fc71c0a72b7c98365180e40cb37e575510 100644 --- a/bin/test_rad_pressure.py +++ b/bin/test_rad_pressure.py @@ -8,13 +8,13 @@ import numpy as np import pylab as pl code = """ -l l1 1 0 n1 +l l1 2 0 n1 m m1 0.99 0.01 0 n1 n2 s cav1 1200 n2 n3 -m m2 0.99 0.01 -1 n3 n4 +m m2 0.99 0.01 -0.1 n3 n4 -#attr m1 m 1# mech sus1 -attr m2 m 1# mech sus1 +#attr m1 m 1 # mech sus1 +attr m2 m 1 # mech sus1 fsig sig l1 amp 1 0 4 diff --git a/pykat/finesse.py b/pykat/finesse.py index ac9928145f924ca6b6d40fa40a696b14d7869493..5522cfd478d88af068557d1f331eb01681913bb0 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -373,6 +373,16 @@ class kat(object): else: out.append(txt + "\n") + # now loop through all the nodes and get any gauss commands + for key in self.nodes.getNodes(): + txt = self.nodes.getNodes()[key].getFinesseText() + + if txt != None: + if isinstance(txt,list): + for t in txt: out.append(t+ "\n") + else: + out.append(txt + "\n") + if self.phase != None: out.append("phase {0}\n".format(self.phase)) if self.maxtem != None: out.append("maxtem {0}\n".format(self.maxtem)) diff --git a/pykat/node_network.py b/pykat/node_network.py index b872b459edf4dbaea271617ac396cfa577b08b5f..715bc654570da1f5a96bff6d52ad4d68dd9024b3 100644 --- a/pykat/node_network.py +++ b/pykat/node_network.py @@ -6,6 +6,7 @@ Created on Sun Jan 27 10:02:41 2013 """ import exceptions import pykat.gui.graphics +import pykat.exceptions as pkex from pykat.components import Component from pykat.detectors import Detector @@ -23,6 +24,7 @@ class NodeNetwork(object): return self._nodes[node_name] else: n = Node(node_name, self) + self.__add_node(n) # add node as a member of this object, e.g. kat.nodes.n self._nodes[node_name] = n return n @@ -41,6 +43,7 @@ class NodeNetwork(object): if len(C[1]) > 0: raise exceptions.RuntimeError("Cannot remove a node which is attached to detectors still") + self.__remove_node(node) del self._nodes[node.name] def hasNode(self, name): @@ -78,9 +81,34 @@ class NodeNetwork(object): print "node: {0} connected:{1} {2}->{3} {4}".format( n.name,n.isConnected(),comp1, comp2, detectors) + + def __add_node(self, node): + + if not isinstance(node, Node): + raise exceptions.ValueError("Argument is not of type Node") -class Node(object): + name = node.name + fget = lambda self: self.__get_node(name) + + setattr(self.__class__, name, property(fget)) + setattr(self, '__node_' + name, node) + def __remove_node(self, node): + if not isinstance(node, Node): + raise exceptions.ValueError("Argument is not of type Node") + + name = node.name + setattr(self, '__node_' + name) + delattr(self.__class__, name) + + def __get_node(self, name): + return getattr(self, '__node_' + name) + +class Node(object): + class gauss_version: + w0_z = 1 + z_zR = 2 + def __init__(self, name, network): self._comp1 = None self._comp2 = None @@ -88,10 +116,58 @@ class Node(object): self.__name = name self._item = None self._network = network + self.__gauss = None + self.__gauss_version = None @property def network(self): return self._network + @property + def gauss(self): return self.__gauss + + def removeGauss(): + self.__gauss_version = None + self.__gauss = None + + def gauss_w0_z(self, w0, z, w0y=None, zy=None): + self.__gauss = [] + self.__gauss.append(w0) + self.__gauss.append(z) + + if w0y != None and zy != None: + self.__gauss.append(w0y) + self.__gauss.append(zy) + + self.__gauss_version = Node.gauss_version.w0_z + + def getFinesseText(self): + + if not self.isConnected() or self.__gauss == None or self.__gauss_version == None: + return None + + + comp = "" + + if self._comp2 == None: + comp = self._comp1.name + else: + comp = self._comp2.name + + rtn = [] + + if self.__gauss_version == Node.gauss_version.w0_z: + + if len(self.__gauss) == 2: + rtn.append("gauss gauss_{node} {comp} {node} {w0} {z}".format(node=self.name, comp=comp, w0=self.__gauss[0], z=self.__gauss[1])) + elif len(self.__gauss) == 4: + rtn.append("gauss gauss_{node} {comp} {node} {w0x} {zx} {w0y} {zy}".format(node=self.name, comp=comp, w0x=self.__gauss[0], zx=self.__gauss[1], w0y=self.__gauss[2], zy=self.__gauss[3])) + else: + raise pkex.BasePyKatException("Unexpected number of gaussian parameters") + else: + raise pkex.BasePyKatException("Unexpected gauss version") + + return rtn + def isConnected(self): if (self._comp1 is not None) and (self._comp2 is not None): return True