diff --git a/bin/test_plot.py b/bin/test_plot.py index 2b418264c130d6f7ed54568f4708f22e11131f52..ad27fbf98a069b7c5758fa6050e5f9d21924ba00 100644 --- a/bin/test_plot.py +++ b/bin/test_plot.py @@ -12,17 +12,20 @@ import numpy as np code = """ l l1 1 0 0 n1 s s1 10 1 n1 n2 -m m1 0.5 0.5 0 n2 n3 +m m1 0.9 0.1 0 n2 n3 s s2 10 1 n3 n4 m m2 0.5 0.5 0 n4 n5 s s3 10 1 n5 n6 -yaxis re:im +yaxis abs:deg +ad refl 0 0 0 n2 ad circ 0 0 0 n4 +ad tran 0 0 0 n5 pd pd_cav n3 + cav c1 m1 n3 m2 n4 attr m1 Rc 1 diff --git a/pykat/finesse.py b/pykat/finesse.py index 36744be0ea15cd4ac614812848e1ecf15f2d61e4..bf34d4b61adade1514ac529a8aa74aa5ccdbd9f3 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -262,23 +262,43 @@ class katRun(object): plot_cmd = pyplot.plot dual_plot = False + _func1 = np.abs + _func2 = None - if ":" in kat.yaxis: - fig = plt.figure(width="full", height=1) + if "re:im" in kat.yaxis: + _func1 = np.real + _func2 = np.imag + dual_plot = True + elif "abs:deg" in kat.yaxis: + _func1 = np.abs + _func2 = lambda x: np.rad2deg(np.angle(x)) + dual_plot = True + elif "db:deg" in kat.yaxis: + _func1 = lambda x: 10*np.log10(x) + _func2 = lambda x: np.rad2deg(np.angle(x)) dual_plot = True + elif "abs" in kat.yaxis: + _func1 = np.abs + elif "db" in kat.yaxis: + _func1 = lambda x: 10*np.log10(x) + elif "deg" in kat.yaxis: + _func1 = lambda x: np.rad2deg(np.angle(x)) + + if dual_plot: + fig = plt.figure(width="full", height=1) else: - fig = plt.figure(width="full") + fig = plt.figure(width="full") for lbl in self.ylabels: lbl = lbl.split()[0] if not dual_plot: - plot_cmd(self.x, np.abs(self[lbl])) + plot_cmd(self.x, _func1(self[lbl])) else: pyplot.subplot(2,1,1) - plot_cmd(self.x, np.abs(self[lbl])) + l, = plot_cmd(self.x, _func1(self[lbl])) pyplot.subplot(2,1,2) - plot_cmd(self.x, np.angle(self[lbl])) + pyplot.plot(self.x, _func2(self[lbl]), color=l.get_color(), ls=l.get_linestyle()) if dual_plot: pyplot.subplot(2,1,1) @@ -328,14 +348,14 @@ class katRun(object): #out = self.y[:, idx] if len(idx) == 1: - if self.yaxis == "abs:deg": + if "abs:deg" in self.yaxis: out = self.y[:, idx[0]] - elif self.yaxis == "re:im": + elif "re:im" in self.yaxis: out = self.y[:, idx[0]] else: - if self.yaxis == "abs:deg": + if "abs:deg" in self.yaxis: out = self.y[:, idx[0]] * np.exp(1j*math.pi*self.y[:, idx[1]]/180.0) - elif self.yaxis == "re:im": + elif "re:im" in self.yaxis : out = self.y[:, idx[0]] + 1j*self.y[:, idx[1]] if out is None: @@ -643,15 +663,27 @@ class kat(object): def signals(self): return self.__signals yaxis_options = ["abs:deg","db:deg","re:im","abs","db","deg"] + @property def yaxis(self): return self.__yaxis @yaxis.setter def yaxis(self, value): + values = value.split() + + if len(values) == 2: + scale = values[0] + mode = values[1] + else: + scale = "lin" + mode = value - if not str(value) in self.yaxis_options: - raise pkex.BasePyKatException("yaxis value '{0}' is not a value option. Valid options are: {1}".format(str(value), ",".join(self.yaxis_options) )) + if not str(scale) in ["lin", "log"]: + raise pkex.BasePyKatException("yaxis value '{0}' is not a valid option. Valid options are: lin or log".format(str(mode))) + + if not str(mode) in self.yaxis_options: + raise pkex.BasePyKatException("yaxis value '{0}' is not a valid option. Valid options are: {1}".format(str(mode), ",".join(self.yaxis_options) )) - self.__yaxis = str(value) + self.__yaxis = str(scale + " " + mode).strip() @property def trace(self): return self.__trace @@ -935,8 +967,7 @@ class kat(object): v = line.split() self.lambda0 = SIfloat(v[-1]) elif(first == "yaxis"): - v = line.split() - + v = line.split(" ", 1) self.yaxis = v[-1] elif(first == "phase"): v = line.split()