diff --git a/pykat/commands.py b/pykat/commands.py index b5eed1f6e99b17a9b60755cbba537e40da6bb9e4..241f7b7d971efec41b6e3f0d382845bb70c8613a 100644 --- a/pykat/commands.py +++ b/pykat/commands.py @@ -97,7 +97,14 @@ class func(Command): self.noplot = False def getFinesseText(self): - return "func {name} = {value}".format(name=self.name, value=str(self.value)) + rtn = [] + + if self.noplot: + rtn.append("noplot " + self.name) + + rtn.append("func {name} = {value}".format(name=self.name, value=str(self.value))) + + return rtn @staticmethod def parseFinesseText(line, kat): diff --git a/pykat/detectors.py b/pykat/detectors.py index be9a1bc263117f376c84796eb6fdeec79bbaf170..4b1b7db9da74b87992b12a4593debfd3955ee040 100644 --- a/pykat/detectors.py +++ b/pykat/detectors.py @@ -134,7 +134,12 @@ class BaseDetector(object) : def getFinesseText(self): """ Base class for individual finesse optical components """ - raise NotImplementedError("This function is not implemented") + #raise NotImplementedError("This function is not implemented") + + if self.noplot: + return ["noplot " + self.name] + else: + return [] def getQGraphicsItem(self): if not USE_GUI: @@ -258,7 +263,7 @@ class beam(Detector1): raise pkex.BasePyKatException('Beam detector code "{0}" is not a valid FINESSE command'.format(text)) def getFinesseText(self) : - rtn = [] + rtn = BaseDetector.getFinesseText(self) if self.alternate_beam: alt = '*' @@ -269,7 +274,7 @@ class beam(Detector1): 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()) @@ -321,7 +326,7 @@ class cp(Detector0): raise pkex.BasePyKatException('Cavity parameter detector code "{0}" is not a valid FINESSE command'.format(text)) def getFinesseText(self) : - rtn = [] + rtn = BaseDetector.getFinesseText(self) rtn.append("cp {name} {cavity} {direction} {parameter}".format(name=self.name, cavity=str(self.cavity), @@ -348,7 +353,7 @@ class xd(Detector0): raise pkex.BasePyKatException('Motion detector code "{0}" is not a valid FINESSE command'.format(text)) def getFinesseText(self) : - rtn = [] + rtn = BaseDetector.getFinesseText(self) rtn.append("xd {name} {component} {motion}".format(name=self.name, component=self.component, @@ -394,7 +399,7 @@ class ad(Detector1): raise pkex.BasePyKatException('Amplitude detector code "{0}" is not a valid FINESSE command'.format(text)) def getFinesseText(self) : - rtn = [] + rtn = BaseDetector.getFinesseText(self) if self.alternate_beam: alt = '*' @@ -448,7 +453,7 @@ class gouy(Detector1): raise pkex.BasePyKatException('Gouy detector code "{0}" is not a valid FINESSE command'.format(text)) def getFinesseText(self) : - rtn = [] + rtn = BaseDetector.getFinesseText(self) rtn.append("gouy {name} {dir} {spaces}".format(name=self.name, dir=str(self.direction), spaces=" ".join(self.spaces))) @@ -500,7 +505,7 @@ class bp(Detector1): raise pkex.BasePyKatException('Gouy detector code "{0}" is not a valid FINESSE command'.format(text)) def getFinesseText(self) : - rtn = [] + rtn = BaseDetector.getFinesseText(self) if self.alternate_beam: alt = "*" @@ -721,7 +726,7 @@ class pd(Detector1): def getFinesseText(self) : - rtn = [] + rtn = BaseDetector.getFinesseText(self) if self.enabled: alt_str = "" @@ -833,7 +838,7 @@ class qnoised(pd): return qnoised(values[1], demods, node, senstype=sens, alternate_beam=alt_beam, **dict) def getFinesseText(self) : - rtn = [] + rtn = BaseDetector.getFinesseText(self) if self.enabled: alt_str = "" @@ -931,7 +936,7 @@ class qshot(pd): return qshot(values[1], demods, node, senstype=sens, alternate_beam=alt_beam, **dict) def getFinesseText(self) : - rtn = [] + rtn = BaseDetector.getFinesseText(self) if self.enabled: alt_str = "" @@ -993,7 +998,7 @@ class hd(Detector2): return hd(values[1], float(values[2]), str(values[3]), str(values[4])) def getFinesseText(self): - rtn = [] + rtn = BaseDetector.getFinesseText(self) if self.enabled: n1 = self.node1.name @@ -1052,7 +1057,7 @@ class qhd(Detector2): return qhd(values[1], float(values[2]), str(values[3]), str(values[4]), sensitivity = sens) def getFinesseText(self): - rtn = [] + rtn = BaseDetector.getFinesseText(self) if self.enabled: n1 = self.node1.name diff --git a/pykat/finesse.py b/pykat/finesse.py index 3bd6075f648d8cfba5b35b31f9d43d23a98708e6..83a70fcdf8371a80dd9806fa100e2fde2c318c32 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -375,6 +375,7 @@ class katRun(object): for det in detectors: if not hasattr(kat, det) or (hasattr(kat, det) and not getattr(kat, det).noplot): + if dual_plot: ax = pyplot.subplot(2,1,1) @@ -1146,7 +1147,13 @@ class kat(object): self.add(obj, block=self.__currentTag) - + + # Before processing the rest, all "noplot" commands are moved to the + # end of the list to make sure they are after all "func" commands. + for k in range(len(after_process)-1,-1,-1): + if after_process[k][0].split(" ", 1)[0] == "noplot": + after_process.append(after_process.pop(k)) + # now process all the varous gauss/attr etc. commands which require # components to exist first before they can be processed for item in after_process: @@ -1168,6 +1175,7 @@ class kat(object): elif (first == "variable"): self.add(pykat.commands.variable.parseFinesseText(line, self), block=block) + elif (first == "noplot"): if not hasattr(self, rest): raise pkex.BasePyKatException("noplot command `{0}` refers to non-existing detector".format(line)) @@ -1964,6 +1972,7 @@ class kat(object): writeBlock() out.append("%%% FTend " + key + "\n") + # write the NO_BLOCK blocks for key in self.__blocks: objs = self.__blocks[key].contents @@ -2039,7 +2048,7 @@ class kat(object): if self.lambda0 != 1064e-9: out.append("lambda {0}\n".format(self.lambda0)) - + # ensure we don't do any plotting. That should be handled # by user themselves #out.append("gnuterm no\n")