diff --git a/pykat/__init__.py b/pykat/__init__.py index 53181ac82afc9e6b52974f7dceb446cea1f62fef..c9e969613df36ace84e1595297f4c1b5117d0241 100644 --- a/pykat/__init__.py +++ b/pykat/__init__.py @@ -3,7 +3,7 @@ from __future__ import division from __future__ import print_function from __future__ import unicode_literals -__version__ = "1.0.10" +__version__ = "1.0.11" # This flag is used to switch on the gui features in pkat at import time USE_GUI = False diff --git a/pykat/components.py b/pykat/components.py index 168490e69a7406d1bb342ef1527f15338f419b39..d61b8df346516b37db92f0b84f850ec303f1ce73 100644 --- a/pykat/components.py +++ b/pykat/components.py @@ -1327,7 +1327,7 @@ class laser(Component): return self._svgItem class squeezer(Component): - def __init__(self, name, node, f=0, db=0, angle=0, phase=0): + def __init__(self, name, node, f=0, db=0, angle=0, phase=0, entangled_carrier=False): Component.__init__(self,name) self._requested_node_names.append(node) @@ -1337,6 +1337,7 @@ class squeezer(Component): self.__db = Param("db", self, SIfloat(db), canFsig=False, fsig_name="r") self.__angle = Param("angle", self, SIfloat(angle), canFsig=False, fsig_name="angle") self._svgItem = None + self.entangled_carrier = entangled_carrier @property def db(self): return self.__db @@ -1364,19 +1365,26 @@ class squeezer(Component): @staticmethod def parseFinesseText(text): values = text.split() - - if values[0] != "sq": + + if values[0][:2] != "sq": raise pkex.BasePyKatException("'{0}' not a valid Finesse squeezer command".format(text)) + entangled_carrier = values[0].endswith("*") + values.pop(0) # remove initial value if len(values) == 5: - return squeezer(values[0], values[4], f=values[1], db=values[2], angle=values[3]) + return squeezer(values[0], values[4], f=values[1], + db=values[2], angle=values[3], + entangled_carrier=entangled_carrier) else: raise exceptions.FinesseParse("Squeezer Finesse code format incorrect '{0}'".format(text)) def getFinesseText(self): - rtn = ['sq {0} {1} {2} {3} {4}'.format(self.name, self.f.value, self.db.value, self.angle.value, self.nodes[0].name)] + if self.entangled_carrier: + rtn = ['sq* {0} {1} {2} {3} {4}'.format(self.name, self.f.value, self.db.value, self.angle.value, self.nodes[0].name)] + else: + rtn = ['sq {0} {1} {2} {3} {4}'.format(self.name, self.f.value, self.db.value, self.angle.value, self.nodes[0].name)] for p in self._params: rtn.extend(p.getFinesseText()) diff --git a/pykat/finesse.py b/pykat/finesse.py index ae72dd48427e07fa9c465f000f7cb1b9159132d0..45ccb84f8ef77b2b594f8c7e12c489054b818e6a 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -1106,7 +1106,7 @@ class kat(object): obj = pykat.components.space.parseFinesseText(line) elif(first == "l"): obj = pykat.components.laser.parseFinesseText(line) - elif(first == "sq"): + elif(first[:2] == "sq"): obj = pykat.components.squeezer.parseFinesseText(line) elif(first[0:2] == "bs"): obj = pykat.components.beamSplitter.parseFinesseText(line) @@ -1681,7 +1681,9 @@ class kat(object): qx = spqx[0].split("=")[1].replace('i','j').replace(' ','') qy = spqy[0].split("=")[1].replace('i','j').replace(' ','') - traceData[-1][node_name] = (pykat.beam_param(q=complex(qx)), pykat.beam_param(q=complex(qy)), component_name) + traceData[-1][node_name] = (pykat.beam_param(q=complex(qx), wavelength=self.lambda0), + pykat.beam_param(q=complex(qy), wavelength=self.lambda0), + component_name) finally: ifile.close()