diff --git a/bin/test_aperture.py b/bin/test_aperture.py index 7f42b1eee64ab7c77cea95026484d822d48ec269..b092c9a2c77169c4a844aefb78c6d4960d7d702c 100644 --- a/bin/test_aperture.py +++ b/bin/test_aperture.py @@ -11,16 +11,16 @@ s s1 10 1 n1 n2 m m1 1 0 0 n2 n3 pd refl n2 - +gauss g1 m1 n2 1e-3 0 xaxis m1 r_ap lin 0.1e-3 2e-3 10 """ kat = finesse.kat() kat.parseCommands(code) -maxtem = np.arange(0, 2, 2) +maxtem = np.linspace(0, 1, 2) -kat.m1.n2.q = gauss_param(w0=1e-3, z=0) +#kat.m1.n2.q = gauss_param(w0=1e-3, z=0) for tem in maxtem: print "Calculating maxtem ", tem, "..." diff --git a/pykat/commands.py b/pykat/commands.py index 91901b93a1f147d3cc82c4ddf77fafeb00d6480b..e3095d931da96460a0d118357c56e5c06eee9809 100644 --- a/pykat/commands.py +++ b/pykat/commands.py @@ -12,6 +12,7 @@ from structs import * from pykat.param import Param, putter import pykat.exceptions as pkex from collections import namedtuple +from pykat.utilities.optics.gaussian_beams import gauss_param class Command(object): def __init__(self): @@ -54,23 +55,29 @@ class gauss(object): component = values[2] node = values[3] - - - if values[0].endswith("**"): + if values[0]: if len(values) == 6: - print "" + gp = gauss_param(w0=values[-2], z=values[-1]) elif len(values) == 8: - print "" + gpx = gauss_param(w0=values[-4], z=values[-3]) + gpy = gauss_param(w0=values[-2], z=values[-1]) elif values[0].endswith("*"): if len(values) == 6: - print "" + gp = gauss_param(z=values[-2], zr=values[-1]) elif len(values) == 8: - print "" + gpx = gauss_param(z=values[-4], zr=values[-3]) + gpy = gauss_param(z=values[-2], zr=values[-1]) else: if len(values) == 6: - print "" + gp = gauss_param(w=values[-2], rc=values[-1]) elif len(values) == 8: - print "" + gpx = gauss_param(w=values[-4], rc=values[-3]) + gpy = gauss_param(w=values[-2], rc=values[-1]) + + if len(values) == 6: + kat.nodes[node].setGauss(kat.components[component], gp) + else: + kat.nodes[node].setGauss(kat.components[component], gpx, gpy) class tf(Command): fQ = namedtuple('fQ', ['f', 'Q']) diff --git a/pykat/finesse.py b/pykat/finesse.py index b8124ea10314ed5e7748a378b57a697df435e291..f19c003d0e71f6d9403a14afd1f73a32790c58c1 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -310,6 +310,14 @@ class kat(object): @getPerformanceData.setter def getPerformanceData(self,value): self.__time_code = bool(value) + @property + def components(self): + return self.__components.copy() + + @property + def detectors(self): + return self.__detectors.copy() + @property def noxaxis(self): return self.__noxaxis @noxaxis.setter diff --git a/pykat/utilities/optics/gaussian_beams.py b/pykat/utilities/optics/gaussian_beams.py index ea2fa94ade9c8815f36be9b41a8c03d8b375b153..82cfda3e06fc421959ef4bec04102cbcf72d5bd7 100644 --- a/pykat/utilities/optics/gaussian_beams.py +++ b/pykat/utilities/optics/gaussian_beams.py @@ -24,11 +24,11 @@ class gauss_param(object): def __init__(self, wavelength=1064e-9, nr=1, *args, **kwargs): self.__q = None - self.__lambda = wavelength - self.__nr = nr + self.__lambda = float(wavelength) + self.__nr = float(nr) if len(args) == 1: - self.__q = args[0] + self.__q = complex(args[0]) elif len(kwargs) == 1: if "q" in kwargs: @@ -39,11 +39,11 @@ class gauss_param(object): elif len(kwargs) == 2: if "w0" in kwargs and "z" in kwargs: - q = float(kwargs["z"]) + 1j *float(math.pi*kwargs["w0"]**2/(self.__lambda/self.__nr) ) + q = float(kwargs["z"]) + 1j *float(math.pi*float(kwargs["w0"])**2/(self.__lambda/self.__nr) ) elif "z" in kwargs and "zr" in kwargs: q = float(kwargs["z"]) + 1j *float(kwargs["zr"]) elif "rc" in kwargs and "w" in kwargs: - one_q = 1 / kwargs["rc"] - 1j * self.__lamda / (math.pi * self.__nr * kwargs["w"]**2) + one_q = 1 / float(kwargs["rc"]) - 1j * self.__lamda / (math.pi * self.__nr * float(kwargs["w"])**2) q = 1/one_q else: raise pkex.BasePyKatException("Must specify: z and w0 or z and zr or rc and w or q, to define the beam parameter")