From 1dfa42e9ad14e5e4428b8de097e147ad72f60f9f Mon Sep 17 00:00:00 2001
From: Andreas Freise <adf@star.bham.ac.uk>
Date: Wed, 4 Dec 2013 00:22:46 +0000
Subject: [PATCH] trying to add photodiode code. Still not sure what to do with
 the demodulations.

---
 pykat/detectors.py | 80 ++++++++++++++++++++++++++++++++++++----------
 1 file changed, 64 insertions(+), 16 deletions(-)

diff --git a/pykat/detectors.py b/pykat/detectors.py
index afdc83b..95ce2d9 100644
--- a/pykat/detectors.py
+++ b/pykat/detectors.py
@@ -48,25 +48,73 @@ class Detector(object) :
     name = property(__getname)
 
 class photodiode(Detector):
-    class demodulation:
-        def __init__(self, f, phase):
-            self.frequency = f
-            self.phase = phase
+            
+    def __init__(self, name, node, type, num_demods, demods):
         
-    def __init__(self, name, node, demods):
         Detector.__init__(self, name, node)
-        
-        self._num_demods = len(demods)
-        
-        for d in demods:
-            if not isinstance(d, photodiode.demodulation):
-                raise ValueError("demods array has something other than a demodulation in it")
-                
-            self._demods.append(d)
+        if num_demods>2:
+            raise NotImplementedError("pd with more than two demodulations not implemented yet")   
+        self.num_demods = num_demods
+        self.type = type
+        self
+
+    @property
+    def num_demods(self): return Param('num_demods', self.__num_demods)
+    @num_demods.setter
+    def num_demods(self,value): self.__num_demods = int(value)
+    @property
+    def type(self): return Param('type', self.__type)
+    @type.setter
+    def type(self,value): self.__type = value
+    @property
+    def f1(self): return Param('f1', self.__f1)
+    @f1.setter
+    def f1(self,value): self.__f1 = SIfloat(value)
+    @property
+    def phi1(self): return Param('phi1', self.__phi1)
+    @phi1.setter
+    def phi1(self,value): self.__phi1 = SIfloat(value)    
 
     @staticmethod
-    def parseFinesseText(text):    
-        raise NotImplementedError("This function is not implemented")   
+    def parseFinesseText(text): 
+        values = text.split(" ")
+
+        if values[0][0:2] != "pd":
+            raise exceptions.FinesseParse("'{0}' not a valid photodiode command".format(text))
+        if len(value[0])==2:
+            __num_demods=0
+            __type=""
+        elif len(value[0])==3 or len(value[0])==4:
+            if value[0][3]=="S":
+                __type="S"
+            elif value[0][3]=="N":
+                __type="N"
+            else:
+                try:
+                    __num_demods=int(values[0][3])
+                    __type=""
+                except ValueError:
+                    raise exceptions.FinesseParse("'{0}' not a valid photodiode command".format(text))
+            if len(value[0])==4:
+                try:
+                    __num_demods=int(values[0][4])
+                except ValueError:
+                    raise exceptions.FinesseParse("'{0}' not a valid photodiode command".format(text))                
+        else:
+            raise exceptions.FinesseParse("'{0}' not a valid photodiode command".format(text))
+
+        if __num_demods<0 or __num_demods>5:
+            raise exceptions.FinesseParse("'{0}' number of demodulations must be >0 and <5".format(text))
+
+        values.pop(0) # remove initial value
+        
+        if len(values) == 2 * __num_demods + 1 or len(values) == 2 * __num_demods + 2:
+            return photodiode(value[0], values[-1], __type, __num_demods, values[1:len(values-1)])
+        else:
+            raise exceptions.FinesseParse("Photodiode code format incorrect '{0}'".format(text))
+
+        #return photodiode("name", "node", demods)   
+        #raise NotImplementedError("This function is not implemented")   
         
     def getFinesseText(self) :
         if self.enabled:    
@@ -89,4 +137,4 @@ class photodiode(Detector):
             self._svgItem = ComponentQGraphicsItem(":/resources/photodiode_red.svg",self,[(-5,11,self._node)])
         
         return self._svgItem    
-        
\ No newline at end of file
+        
-- 
GitLab