diff --git a/bin/test_aperture.py b/bin/test_aperture.py index a272bd815dc874fd8f9e5d68ff683a3003aacc1a..2824b4e93ca5e8d8e46e8f4bd0a254263a6dc78c 100644 --- a/bin/test_aperture.py +++ b/bin/test_aperture.py @@ -17,7 +17,7 @@ xaxis m1 r_ap lin 0.1e-3 2e-3 10 kat = finesse.kat(kat_code = code) -maxtem = np.arange(0, 3, 2) +maxtem = np.arange(0, 1, 2) for tem in maxtem: print "Calculating maxtem ",tem,"..." diff --git a/bin/test_parser.py b/bin/test_parser.py index d1485db317b90fee55c6b65c40a4513f0096a113..159e751a8c1690db8c7e46d2fbe1133504a02b04 100644 --- a/bin/test_parser.py +++ b/bin/test_parser.py @@ -14,6 +14,7 @@ ad ad1 0 n2 kat = finesse.kat(kat_code = code) +kat.add(xaxis("lin", [0, 360], kat.m2, kat.m2.phi, 1000)) kat.add(xaxis("lin", [0, 360], kat.m2, kat.m2.phi, 1000)) r = kat.run(printerr=1) diff --git a/bin/test_plot.py b/bin/test_plot.py index efb42c6be9b0b61a9c1534da0f3d4cd41a3111b8..bc6440cdd3a8268b0c24afd3f979b15bf76bd9b7 100644 --- a/bin/test_plot.py +++ b/bin/test_plot.py @@ -24,7 +24,7 @@ kat.add(photodiode('pd_cav','n4')) kat.add(photodiode('pd_ref','n2')) kat.add(photodiode('pd_trs','n5')) -kat.add(xaxis(Scale.linear, [0, 360], kat.m2, kat.m2.phi, 100)) +kat.add(xaxis("lin", [0, 360], kat.m2, kat.m2.phi, 100)) kat.m1.Rcx = -1000.0 kat.m1.Rcy = -1000.0 diff --git a/pykat/commands.py b/pykat/commands.py index bf37eacd1e5dad5a1bbcd192928556916254b078..8737e57933f5a51ad55907507779c7e70b35310b 100644 --- a/pykat/commands.py +++ b/pykat/commands.py @@ -15,6 +15,10 @@ class Command(object): """ Base class for individual finesse optical components """ raise NotImplementedError("This function is not implemented") + @staticmethod + def parseFinesseText(text): + raise NotImplementedError("This function is not implemented") + def _on_kat_add(self, kat): """ Called when this component has been added to a kat object @@ -53,12 +57,12 @@ class xaxis(Command): if numpy.size(limits) != 2 : raise exceptions.ValueError("limits input should be a 2x1 vector of limits for the xaxis") - self.limits = limits + self.limits = numpy.array(limits).astype(float) if steps <= 0 : raise exceptions.ValueError("steps value should be > 0") - self.steps = steps + self.steps = int(steps) # if entered component is a string then just store and use that if isinstance(comp, str): @@ -74,6 +78,20 @@ class xaxis(Command): raise exceptions.ValueError("param argument is not of type Param") else: self.__param = param + + @staticmethod + def parseFinesseText(text): + values = text.split(" ") + + if values[0] != "xaxis" and values[0] != "xaxis*" and values[0] != "x2axis" and values[0] != "x2axis*": + raise exceptions.RuntimeError("'{0}' not a valid Finesse xaxis command".format(text)) + + values.pop(0) # remove initial value + + if len(values) != 6: + raise exceptions.RuntimeError("xaxis Finesse code format incorrect '{0}'".format(text)) + + return xaxis(values[2], [values[3], values[4]], values[0], values[1], values[5]) def getFinesseText(self): # store either the component name of the string provided diff --git a/pykat/components.py b/pykat/components.py index 3f0dd9fe177ba5c717b991b52bb2bb3c9fc140b2..c8c578b49b970cc6bad7e1259678ca905cd93669 100644 --- a/pykat/components.py +++ b/pykat/components.py @@ -20,11 +20,6 @@ class Component(object) : self.__nodes = [] self._requested_node_names = [] self._kat = None - - #if not isinstance(kat,pykat.finesse.kat): - # raise exceptions.ValueError("kat argument is not a pykat.finesse.kat object") - - #kat.add(self) def _on_kat_add(self, kat): """ @@ -87,48 +82,48 @@ class mirror(Component): self._requested_node_names.append(node1) self._requested_node_names.append(node2) - self.__R = R - self.__T = T - self.__phi = phi - self.__Rcx = Rcx - self.__Rcy = Rcy - self.__xbeta = xbeta - self.__ybeta = ybeta + self.__R = float(R) + self.__T = float(T) + self.__phi = float(phi) + self.__Rcx = float(Rcx) + self.__Rcy = float(Rcy) + self.__xbeta = float(xbeta) + self.__ybeta = float(ybeta) @property - def R(self): - return Param('R',self.__R) + def R(self): return Param('R', self.__R) @R.setter - def R(self,value): - self.__R = value + def R(self,value): self.__R = float(value) + @property def T(self): return Param('T', self.__T) @T.setter - def T(self,value): self.__T = value + def T(self,value): self.__T = float(value) @property def phi(self): return Param('phi', self.__phi) @phi.setter - def phi(self,value): self.__phi = value + def phi(self,value): self.__phi = float(value) @property def Rcx(self): return Param('Rcx', self.__Rcx) @Rcx.setter - def Rcx(self,value): self.__Rcx = value + def Rcx(self,value): self.__Rcx = float(value) + @property def Rcy(self): return Param('Rcy', self.__Rcy) @Rcy.setter - def Rcy(self,value): self.__Rcy = value + def Rcy(self,value): self.__Rcy = float(value) @property def xbeta(self): return Param('xbeta', self.__xbeta) @xbeta.setter - def xbeta(self,value): self.__xbeta = value + def xbeta(self,value): self.__xbeta = float(value) @property def ybeta(self): return Param('ybeta', self.__ybeta) @ybeta.setter - def ybeta(self,value): self.__ybeta = value + def ybeta(self,value): self.__ybeta = float(value) @property def Rc(self): @@ -139,8 +134,8 @@ class mirror(Component): @Rc.setter def Rc(self,value): - self.Rcx = value - self.Rcy = value + self.Rcx = float(value) + self.Rcy = float(value) @staticmethod def parseFinesseText(text): @@ -178,7 +173,7 @@ class mirror(Component): if self._svgItem == None: nodes = self.getNodes() self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/mirror_flat.svg",self - ,[(-4,15,self.nodes[0]),(14,15,self.nodes[1])]) + ,[(-4,15,nodes[0]),(14,15,nodes[1])]) return self._svgItem @@ -189,18 +184,18 @@ class space(Component): self._requested_node_names.append(node1) self._requested_node_names.append(node2) - self.__L = L - self.__n = n + self.__L = float(L) + self.__n = float(n) self._QItem = None @property def L(self): return Param('L', self.__L) @L.setter - def L(self,value): self.__L = value + def L(self,value): self.__L = float(value) @property def n(self): return Param('n', self.__n) @n.setter - def n(self,value): self.__n = value + def n(self,value): self.__n = float(value) @staticmethod def parseFinesseText(text): @@ -253,24 +248,24 @@ class laser(Component): self._requested_node_names.append(node) - self.__power = P - self.__f_offset = f_offset - self.__phase = phase + self.__power = float(P) + self.__f_offset = float(f_offset) + self.__phase = float(phase) @property def power(self): return Param('P', self.__power) @power.setter - def power(self,value): self.__power = value + def power(self,value): self.__power = float(value) @property def f_offset(self): return Param('f', self.__f_offset) @f_offset.setter - def f_offset(self,value): self.__f_offset = value + def f_offset(self,value): self.__f_offset = float(value) @property def phase(self): return Param('phase', self.__phase) @phase.setter - def phase(self,value): self.__phase = value + def phase(self,value): self.__phase = float(value) @staticmethod def parseFinesseText(text): @@ -295,6 +290,7 @@ class laser(Component): def getQGraphicsItem(self): if self._svgItem == None: + nodes = self.getNodes() self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/laser.svg", self,[(65,25,nodes[0])]) diff --git a/pykat/detectors.py b/pykat/detectors.py index dadcc9a7226737fafe793d8b4eebb8842a16f690..f28228b600ab93ed5850b3834b0a2f376738df1f 100644 --- a/pykat/detectors.py +++ b/pykat/detectors.py @@ -28,7 +28,6 @@ class Detector(object) : def _on_kat_add(self, kat): self._node = kat.nodes.createNode(self.__requested_node) - #self.__node.connect(self) @staticmethod def parseFinesseText(text): diff --git a/pykat/finesse.py b/pykat/finesse.py index f44d3657b3ae5481259c3e3061d8ff82503b0275..3124134cc49a657aa7715f9585c8a511207d837c 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -144,6 +144,8 @@ class kat(object): self.add(pykat.components.space.parseFinesseText(line)) elif(first == "l"): self.add(pykat.components.laser.parseFinesseText(line)) + elif(first == "xaxis" or first == "x2axis" or first == "xaxis*" or first == "x2axis*"): + self.add(pykat.commands.xaxis.parseFinesseText(line)) else: print "Could not parse `{0}`".format(line) self.__extra_lines.append(line + "\n")