Skip to content
Snippets Groups Projects
Commit 8f83578f authored by Daniel Brown's avatar Daniel Brown
Browse files

adding parsing of attr commands

parent e634953f
Branches
No related tags found
No related merge requests found
...@@ -20,6 +20,8 @@ yaxis abs:deg ...@@ -20,6 +20,8 @@ yaxis abs:deg
pd pd_cav n3 pd pd_cav n3
cav c1 m1 n3 m2 n4 cav c1 m1 n3 m2 n4
attr m1 Rc 1
""" """
kat = finesse.kat() kat = finesse.kat()
......
...@@ -243,6 +243,30 @@ class AbstractMirrorComponent(Component): ...@@ -243,6 +243,30 @@ class AbstractMirrorComponent(Component):
self.Rcx.value = SIfloat(value) self.Rcx.value = SIfloat(value)
self.Rcy.value = SIfloat(value) self.Rcy.value = SIfloat(value)
def parseAttribute(self, key, value):
if key in ["Rcx", "Rx", "ROCx", "rx", "rcx", "rocx"]:
self.Rcx = value
elif key in ["Rcy", "Ry", "ROCy", "ry", "rcy", "rocy"]:
self.Rcy = value
elif key in ["Rc", "ROC", "r", "rc", "roc"]:
self.Rc = value
elif key in ["M, m, Mass, mass"]:
self.mass = value
elif key in ["xbeta, xBeta"]:
self.xbeta = value
elif key in ["ybeta, yBeta"]:
self.ybeta = value
elif key in ["x_off"]:
self.x_offset = value
elif key in ["y_off"]:
self.y_offset = value
elif key in ["r_ap"]:
self.r_ap = value
else:
return False
return True
class mirror(AbstractMirrorComponent): class mirror(AbstractMirrorComponent):
def __init__(self,name,node1,node2,R=None,T=None,L=None,phi=0,Rcx=None,Rcy=None,xbeta=None,ybeta=None,mass=None, r_ap=None): def __init__(self,name,node1,node2,R=None,T=None,L=None,phi=0,Rcx=None,Rcy=None,xbeta=None,ybeta=None,mass=None, r_ap=None):
super(mirror, self).__init__(name, R, T, L, phi, Rcx, Rcy, xbeta, ybeta, mass, r_ap) super(mirror, self).__init__(name, R, T, L, phi, Rcx, Rcy, xbeta, ybeta, mass, r_ap)
...@@ -250,6 +274,12 @@ class mirror(AbstractMirrorComponent): ...@@ -250,6 +274,12 @@ class mirror(AbstractMirrorComponent):
self._requested_node_names.append(node1) self._requested_node_names.append(node1)
self._requested_node_names.append(node2) self._requested_node_names.append(node2)
def parseAttributes(self, values):
for key in values.keys():
if not self.parseAttribute(key, values[key]):
raise pkex.BasePyKatException("No attribute {0} for mirrors".format(key))
@staticmethod @staticmethod
def parseFinesseText(text): def parseFinesseText(text):
values = text.split() values = text.split()
...@@ -301,13 +331,22 @@ class beamSplitter(AbstractMirrorComponent): ...@@ -301,13 +331,22 @@ class beamSplitter(AbstractMirrorComponent):
self._requested_node_names.append(node3) self._requested_node_names.append(node3)
self._requested_node_names.append(node4) self._requested_node_names.append(node4)
self.__alpha = Param("alpha", self, SIfloat(alpha)) self.__alpha = AttrParam("alpha", self, SIfloat(alpha))
@property @property
def alpha(self): return self.__alpha def alpha(self): return self.__alpha
@alpha.setter @alpha.setter
def alpha(self,value): self.__alpha.value = SIfloat(value) def alpha(self,value): self.__alpha.value = SIfloat(value)
def parseAttributes(self, values):
for key in values.keys():
if not self.parseAttribute(key, values[key]):
if key == "alpha":
self.alpha = values[key]
else:
raise pkex.BasePyKatException("No attribute {0} for mirrors".format(key))
@staticmethod @staticmethod
def parseFinesseText(text): def parseFinesseText(text):
values = text.split() values = text.split()
...@@ -365,7 +404,6 @@ class space(Component): ...@@ -365,7 +404,6 @@ class space(Component):
self.__L = Param("L", self, SIfloat(L)) self.__L = Param("L", self, SIfloat(L))
self.__n = Param("n", self, SIfloat(n)) self.__n = Param("n", self, SIfloat(n))
self.__g = AttrParam("g", self, g)
self.__gx = AttrParam("gx", self, gx) self.__gx = AttrParam("gx", self, gx)
self.__gy = AttrParam("gy", self, gy) self.__gy = AttrParam("gy", self, gy)
...@@ -379,9 +417,16 @@ class space(Component): ...@@ -379,9 +417,16 @@ class space(Component):
def n(self,value): self.__n.value = SIfloat(value) def n(self,value): self.__n.value = SIfloat(value)
@property @property
def g(self): return self.__g def g(self):
if self.__gx.value == self.__gy.value:
return self.__g
else:
raise pkex.BasePyKatException("Gouy phase in x and y directions are different, use gx and gy properties instead")
@g.setter @g.setter
def g(self,value): self.__g.value = SIfloat(value) def g(self,value):
self.__gx.value = SIfloat(value)
self.__gy.value = SIfloat(value)
@property @property
def gx(self): return self.__gx def gx(self): return self.__gx
...@@ -393,6 +438,19 @@ class space(Component): ...@@ -393,6 +438,19 @@ class space(Component):
@gy.setter @gy.setter
def gy(self,value): self.__gy.value = SIfloat(value) def gy(self,value): self.__gy.value = SIfloat(value)
def parseAttributes(self, values):
for key in values.keys():
if key in ["gx","gouyx"]:
self.__gx.value = values[key]
elif key in ["gy", "gouyy"]:
self.__gy.value = values[key]
elif key in ["g, gouy"]:
self.__gx.value = values[key]
self.__gy.value = values[key]
else:
raise pkex.BasePyKatException("No attribute {0} for spaces".format(key))
@staticmethod @staticmethod
def parseFinesseText(text): def parseFinesseText(text):
values = text.split() values = text.split()
...@@ -747,6 +805,14 @@ class laser(Component): ...@@ -747,6 +805,14 @@ class laser(Component):
@phase.setter @phase.setter
def phase(self,value): self.__phase.value = float(value) def phase(self,value): self.__phase.value = float(value)
def parseAttributes(self, values):
for key in values.keys():
if key == "noise":
self.__noise.value = values[key]
else:
raise pkex.BasePyKatException("No attribute {0} at laser".format(key))
@staticmethod @staticmethod
def parseFinesseText(text): def parseFinesseText(text):
values = text.split() values = text.split()
......
...@@ -34,6 +34,9 @@ import pykat ...@@ -34,6 +34,9 @@ import pykat
import warnings import warnings
import re import re
import itertools
import collections
from collections import namedtuple, OrderedDict from collections import namedtuple, OrderedDict
from pykat.node_network import NodeNetwork from pykat.node_network import NodeNetwork
...@@ -452,6 +455,8 @@ class kat(object): ...@@ -452,6 +455,8 @@ class kat(object):
after_process.append(line) after_process.append(line)
elif(first == "pdtype"): elif(first == "pdtype"):
after_process.append(line) after_process.append(line)
elif(first == "attr"):
after_process.append(line)
elif(first == "noxaxis"): elif(first == "noxaxis"):
self.noxaxis = True self.noxaxis = True
elif(first == "phase"): elif(first == "phase"):
...@@ -522,6 +527,27 @@ class kat(object): ...@@ -522,6 +527,27 @@ class kat(object):
raise pkex.BasePyKatException("pdtype command `{0}` refers to non-existing detector".format(component_name)) raise pkex.BasePyKatException("pdtype command `{0}` refers to non-existing detector".format(component_name))
else: else:
raise pkex.BasePyKatException("pdtype command `{0}` is incorrect.".format(line)) raise pkex.BasePyKatException("pdtype command `{0}` is incorrect.".format(line))
elif(first == "attr"):
v = line.split()
if len(v) < 4:
raise pkex.BasePyKatException("attr command `{0}` is incorrect.".format(line))
else:
# get the component/detector in question
if v[1] in self.__components:
comp = self.__components[v[1]]
elif v[1] in self.__detectors:
comp = self.__detectors[v[1]]
else:
raise pkex.BasePyKatException("Could not find the component '{0}' for attr command in line '{1}'".format(v[1], line))
if len(v[2:]) % 2 == 1:
raise pkex.BasePyKatException("Attr command '{0}' must specify both parameter and value pairs".format(line))
# convert split list to key value pairs
kv = dict(itertools.izip_longest(*[iter(v[2:])] * 2, fillvalue=None))
comp.parseAttributes(kv)
self.__currentTag = NO_BLOCK self.__currentTag = NO_BLOCK
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment