diff --git a/bin/test_hom.py b/bin/test_hom.py index 3f2cd8c7731a15cee5019331ac81bfeca53752c3..02b662d189cd3ab454b2b89df4735cff96466f6f 100644 --- a/bin/test_hom.py +++ b/bin/test_hom.py @@ -12,12 +12,16 @@ fsig noise l1 amp 1 0 1 qhd qhd180 180 n2 n3 qhd qhd0 0 n2 n3 +qhd qhd2 0 n2 n3 +scale meter qhd180 +scale meter qhd0 +scale meter qhd2 +scale 2 qhd0 xaxis l1 phase lin 0 360 360 """) out = kat.run() -#out.plot() +out.plot() -print kat.qhd180 diff --git a/pykat/__init__.py b/pykat/__init__.py index 01a75cd6f05d0f3d4b0ce043f68a3a20ec2c698f..3008f8b854cdea48a960f2090521cf3f60f5616e 100644 --- a/pykat/__init__.py +++ b/pykat/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.6.1" +__version__ = "0.6.2" # This flag is used to switch on the gui features in pkat at import time USE_GUI = False diff --git a/pykat/detectors.py b/pykat/detectors.py index 9ceb2e4ab5987b81d5070ab948d68d79512b6ff9..e58e16fa46985ac3d6eccadee4ec8bdf5f08ffbc 100644 --- a/pykat/detectors.py +++ b/pykat/detectors.py @@ -38,7 +38,7 @@ class BaseDetector(object) : self.tag = None self._params = [] self._mask = {} - self.__scale = None + self.__scale = [] self.__removed = False self._alternate_beam = [] @@ -110,7 +110,8 @@ class BaseDetector(object) : def scale(self): return self.__scale @scale.setter def scale(self, value): - self.__scale = value + if value not in self.__scale: + self.__scale = value @property def name(self): return self.__name @@ -142,6 +143,16 @@ class BaseDetector(object) : else: raise pkex.BasePyKatException("There is no node called " + value + " in the kat object this detector is attached to.") + def _getScaleCmds(self, rtn): + if self.scale != None: + if isinstance(self.scale, str): + rtn.append("scale {1} {0}".format(self.name, self.scale)) + elif isinstance(self.scale, (list, tuple)): + for s in self.scale: + rtn.append("scale {1} {0}".format(self.name, s)) + else: + raise pkex.BasePyKatException("Scale command should either be a list of scales or a single string.") + class Detector1(BaseDetector): """ A detector that attaches to one node. @@ -524,9 +535,8 @@ class pd(Detector1): rtn.append("pd{0}{1} {2}{3} {4}{5}".format(senstype, self.num_demods, self.name, fphi_str, self.node.name, alt_str)) - if self.scale != None: - rtn.append("scale {1} {0}".format(self.name, self.scale)) - + self._getScaleCmds(rtn) + if self.pdtype != None: rtn.append("pdtype {0} {1}".format(self.name, self.pdtype)) @@ -631,8 +641,7 @@ class qnoised(pd): rtn.append("qnoised{5} {0} {1} {2} {3}{4}".format(self.name, self.num_demods, fphi_str, self.node.name, alt_str, senstype)) - if self.scale != None: - rtn.append("scale {1} {0}".format(self.name, self.scale)) + self._getScaleCmds(rtn) for p in self._params: rtn.extend(p.getFinesseText()) @@ -724,8 +733,7 @@ class qshot(pd): rtn.append("qshot{5} {0} {1} {2} {3}{4}".format(self.name, self.num_demods, fphi_str, self.node.name, alt_str,senstype)) - if self.scale != None: - rtn.append("scale {1} {0}".format(self.name, self.scale)) + self._getScaleCmds(rtn) for p in self._params: rtn.extend(p.getFinesseText()) @@ -761,8 +769,7 @@ def xd(Detector1): if self.enabled: rtn.append("xd {0} {1} {2}".format(self.name, self.component, self.motion)) - if self.scale != None: - rtn.append("scale {1} {0}".format(self.name, self.scale)) + self._getScaleCmds(rtn) for p in self._params: rtn.extend(p.getFinesseText()) @@ -803,8 +810,7 @@ class hd(Detector2): rtn.append("hd {0} {1} {2} {3}".format(self.name, self.phase, n1, n2)) - if self.scale != None: - rtn.append("scale {1} {0}".format(self.name, self.scale)) + self._getScaleCmds(rtn) for p in self._params: rtn.extend(p.getFinesseText()) @@ -858,8 +864,7 @@ class qhd(Detector2): rtn.append("qhd{4} {0} {1} {2} {3}".format(self.name, self.phase, n1, n2, self.sensitivity)) - if self.scale != None: - rtn.append("scale {1} {0}".format(self.name, self.scale)) + self._getScaleCmds(rtn) for p in self._params: rtn.extend(p.getFinesseText()) diff --git a/pykat/finesse.py b/pykat/finesse.py index b8c1aeef4486b7d80a73fad7c1e6ad3e6c2c3ba5..877eaba83a79fcf820efce2bcf6c43264dce3386 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -729,10 +729,21 @@ class kat(object): pykat.commands.gauss.parseFinesseText(line, self) elif (first == "scale"): v = line.split() + accepted = ["PSD","PSD_HF","ASD","ASD_HF","meter", "ampere", "degs"] + if len(v) == 3: component_name = v[2] + + if v[1] in accepted: + val = v[1] + else: + try: + val = SIfloat(v[1]) + except ex as exception.ValueError: + raise pkex.BasePyKatException("Line `{0}`:\nAccepted scale values are decimal numbers or %s." % (line,str(accepted))) + if component_name in self.__detectors : - self.__detectors[component_name].scale = SIfloat(v[1]) + self.__detectors[component_name].scale.append(val) else: raise pkex.BasePyKatException("scale command `{0}` refers to non-existing output".format(component_name)) elif len(v) == 2: