diff --git a/bin/test_beam_det.py b/bin/test_beam_det.py new file mode 100644 index 0000000000000000000000000000000000000000..6061af1d42edae7445df88d8bef78a0039d2775b --- /dev/null +++ b/bin/test_beam_det.py @@ -0,0 +1,22 @@ +import pykat + +kat = pykat.finesse.kat() + +kat.parseCommands(""" +l l1 1 0 n0 +s s1 1 n0 n1 +beam b1 0 n1 + +gauss g1 l1 n0 1 0 + +xaxis b1 x lin -3 3 100 +x2axis b1 y lin -3 3 100 +""") + +out = kat.run() + +import pylab +pylab.pcolormesh(out.x, out.y, out["b1"]) + +pylab.show() + diff --git a/pykat/detectors.py b/pykat/detectors.py index 4609caaadb7b27e248b0bd4c11d72ada30630545..6b8ce2f8af669bd6a427ea1bd63f2f5ae4afd090 100644 --- a/pykat/detectors.py +++ b/pykat/detectors.py @@ -220,9 +220,56 @@ class Detector2(BaseDetector): self._set_node(value, 1) - - +class beam(Detector1): + + def __init__(self, name, node_name, frequency=None, alternate_beam=False): + BaseDetector.__init__(self, name, node_name) + + self.alternate_beam = alternate_beam + self.__f = Param("f", self, frequency) + + @property + def f(self): return self.__f + + @f.setter + def f(self, value): + self.__f.value = value + + @staticmethod + def parseFinesseText(text): + + values = text.split() + node=values[-1] + alt_beam = node[-1] == '*' + + if len(values) == 3: + return beam(values[1], node, alternate_beam=alt_beam) + elif len(values) == 4: + return beam(values[1], node, alternate_beam=alt_beam, frequency=pykat.SIfloat.SIfloat(values[2])) + else: + raise pkex.BasePyKatException('Beam detector code "{0}" is not a valid FINESSE command'.format(text)) + + def getFinesseText(self) : + rtn = [] + + if self.alternate_beam: + alt = '*' + else: + alt = '' + + if self.f.value is None: + rtn.append("beam {name} {node}{alt}".format(name=self.name, node=self.node.name, alt=alt)) + else: + rtn.append("beam {name} {f} {node}{alt}".format(name=self.name, f=str(self.f.value), node=self.node.name, alt=alt)) + + for p in self._params: + rtn.extend(p.getFinesseText()) + + return rtn + + + class ad(Detector1): def __init__(self, name, frequency, node_name, mode=None, alternate_beam=False): diff --git a/pykat/finesse.py b/pykat/finesse.py index 1e96ee48b036f17371b13cb0655f33ca39266a9a..ff1eac5a87af656a61647035d673e185cab3ad26 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -835,6 +835,8 @@ class kat(object): obj = pykat.detectors.bp.parseFinesseText(line) elif(first[0:4] == "gouy"): obj = pykat.detectors.gouy.parseFinesseText(line) + elif(first[0:4] == "beam"): + obj = pykat.detectors.beam.parseFinesseText(line) elif(first[0:2] == "pd" and first != "pdtype"): obj = pykat.detectors.pd.parseFinesseText(line) elif(first == "qshot" or first == "qshotS" or first == "qshotN"):