diff --git a/pykat/detectors.py b/pykat/detectors.py index 54c1739b1abe4b95872812f340b1804e610b6b06..006f9969e16444cef8bc426b72dbed9fcd2a035a 100644 --- a/pykat/detectors.py +++ b/pykat/detectors.py @@ -24,7 +24,7 @@ class Detector(object) : self.__node = None self._params = [] self._mask = {} - self.__scale = "" + self.__scale = None if node.find('*'): self._alternate_beam = True @@ -81,12 +81,14 @@ class Detector(object) : class pd(Detector): - def __init__(self, name, num_demods, node_name, senstype=None, alternate_beam=False, **kwargs): + def __init__(self, name, num_demods, node_name, senstype=None, alternate_beam=False, pdtype=None, **kwargs): Detector.__init__(self, name, node_name) self.__num_demods = num_demods self.__senstype = senstype self.__alternate_beam = alternate_beam + self.__pdtype = pdtype + # create the parameters for all 5 demodulations regardless # of how many the user specifies. Later we add properties to # those which correspond to the number of demodulations @@ -129,12 +131,17 @@ class pd(Detector): self.__num_demods = value self.__set_demod_attrs() + + @property + def pdtype(self): return self.__pdtype + @pdtype.setter + def pdtype(self, value): self.__pdtype = value def __get_fphi(self, name): return getattr(self, '_'+ self.__class__.__name__ +'__' + name) def __set_f(self, num, value): - setattr(self, '_'+ self.__class__.__name__ +'__f' + name, float(value)) + setattr(self, '_'+ self.__class__.__name__ +'__f' + num, float(value)) def __set_phi(self, num, value): if value == None and num != self.num_demods: @@ -144,7 +151,7 @@ class pd(Detector): elif isinstance(value, str) and not isinstance(value,float) and value.lower() != "max": raise pkex.BasePyKatException("Demodulation phase can only be set to a 'max' or a number (or None if the last demodulation phase)") - setattr(self, '_'+ self.__class__.__name__ +'__phi' + name, value) + setattr(self, '_'+ self.__class__.__name__ +'__phi' + num, value) def __set_demod_attrs(self): """ @@ -183,7 +190,7 @@ class pd(Detector): alt_str = "*" for n in range(1, 1+self.num_demods): - fphi_str += str(self.__getattribute__("f"+str(n))) + fphi_str += " " + str(self.__getattribute__("f"+str(n))) phi_val = self.__getattribute__("phi"+str(n)) if phi_val != None: @@ -194,7 +201,13 @@ class pd(Detector): if senstype == None: senstype = "" - rtn.append("pd{0}{1} {2} {3} {4}{5}".format(senstype, self.num_demods, self.name, fphi_str, self.node.name, alt_str)) + 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)) + + if self.pdtype != None: + rtn.append("pdtype {0} {1}".format(self.name, self.pdtype)) for p in self._params: rtn.extend(p.getFinesseText()) diff --git a/pykat/finesse.py b/pykat/finesse.py index c94ef794149175dcd8c08d3bf5eaf7debc16406e..9cc25781def66d9d525b913e62b3bf133ca9dbc0 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -280,7 +280,11 @@ class kat(object): @property def maxtem(self): return self.__maxtem @maxtem.setter - def maxtem(self,value): self.__maxtem = int(value) + def maxtem(self,value): + if value == "off": + self.__maxtem = -1 + else: + self.__maxtem = int(value) @property def phase(self): return self.__phase @@ -406,7 +410,10 @@ class kat(object): if len(v) != 2: raise pkex.BasePyKatException("maxtem command `{0}` is incorrect.".format(line)) else: - self.maxtem = int(v[1]) + if v[1] == "off": + self.maxtem = -1 + else: + self.maxtem = int(v[1]) elif(first == "retrace"): v = line.split(" ") if len(v) > 2: @@ -797,7 +804,11 @@ class kat(object): if self.scale != None and self.scale !='': out.append("scale {0}\n".format(self.scale)) if self.phase != None: out.append("phase {0}\n".format(self.phase)) - if self.maxtem != None: out.append("maxtem {0}\n".format(self.maxtem)) + if self.maxtem != None: + if self.maxtem == -1: + out.append("maxtem off\n") + else: + out.append("maxtem {0}\n".format(self.maxtem)) if self.noxaxis == True: out.append("noxaxis\n")