From ad7ef75a0848d0f6e05e761755a3d02dc85d860e Mon Sep 17 00:00:00 2001
From: Daniel Brown <ddb@star.sr.bham.ac.uk>
Date: Wed, 12 Feb 2014 18:49:33 +0100
Subject: [PATCH] fixing loss parsing/inputs and fixing rsub on Param and
 gaussbeam

---
 pykat/components.py                      | 25 +++++++++++-------------
 pykat/finesse.py                         |  8 ++++----
 pykat/param.py                           |  3 ++-
 pykat/utilities/optics/gaussian_beams.py |  3 ++-
 4 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/pykat/components.py b/pykat/components.py
index 5ae2630..d6a62ff 100644
--- a/pykat/components.py
+++ b/pykat/components.py
@@ -159,7 +159,7 @@ class AbstractMirrorComponent(Component):
         super(AbstractMirrorComponent, self).__init__(name)
  
         if (L != None and R != None and T != None) and SIfloat(R)+SIfloat(T)+SIfloat(L) != 1: 
-            raise pkex.BasePyKatException('L+R+T must equal 1 if all are specified')
+            raise pkex.BasePyKatException('L+R+T must equal 1 if all are specified at {0}'.format(self.name))
         elif (R != None and L is None and T != None):
             L = 1- (SIfloat(R)+SIfloat(T))
         elif (R is None and L != None and T != None):
@@ -320,20 +320,17 @@ class beamSplitter(AbstractMirrorComponent):
 
         if len(values[0])==2:
             values.pop(0) # remove initial value
-            return beamSplitter(values[0], values[5], values[6], values[7], values[8], values[1], values[2], values[3], values[4])
+            return beamSplitter(values[0], values[5], values[6], values[7], values[8], values[1], values[2], None, values[3], values[4])
+        elif values[0][2]=="1":
+            values.pop(0) # remove initial value
+            return beamSplitter(values[0], values[5], values[6],
+            values[7], values[8], None, values[1], values[2], values[3], values[4])
         else:
-            if values[0][2]=="1":
-                values.pop(0) # remove initial value
-                return beamSplitter(values[0], values[5], values[6],
-                values[7], values[8], 1.0 - SIfloat(values[1]) -
-                SIfloat(values[2]), values[1], values[3], values[4])
-            else:
-                values.pop(0) # remove initial value
-                return beamSplitter(values[0], values[5], values[6],
-                values[7], values[8], values[1], 1.0 -
-                SIfloat(values[1]) - SIfloat(values[2]), values[3],
-                values[4])
-            
+            values.pop(0) # remove initial value
+            return beamSplitter(values[0], values[5], values[6],
+            values[7], values[8], values[1], None, values[3],
+            values[4])
+        
     def getFinesseText(self):
         if self.R+self.T+self.L > 1:
             raise pkex.BasePyKatException("Beamsplitter {0} has R+T+L > 1".format(self.name))
diff --git a/pykat/finesse.py b/pykat/finesse.py
index f196cf7..f920cda 100644
--- a/pykat/finesse.py
+++ b/pykat/finesse.py
@@ -507,11 +507,11 @@ class kat(object):
                     if component_name in self.__detectors :
                         self.__detectors[component_name].scale = SIfloat(v[1])
                     else:
-                        raise pkex.BasePyKatException("scale command `{0}` refers to non-existing output".format(text))
+                        raise pkex.BasePyKatException("scale command `{0}` refers to non-existing output".format(component_name))
                 elif len(values) == 2:
                     self.scale = SIfloat(v[1])
                 else:
-                    raise pkex.BasePyKatException("scale command `{0}` is incorrect.".format(text))
+                    raise pkex.BasePyKatException("scale command `{0}` is incorrect.".format(line))
             elif (first == "pdtype"):
                 v = line.split()
                 if len(v) == 3:
@@ -519,9 +519,9 @@ class kat(object):
                     if component_name in self.__detectors :
                         self.__detectors[component_name].pdtype = v[2]
                     else:
-                        raise pkex.BasePyKatException("pdtype command `{0}` refers to non-existing detector".format(text))
+                        raise pkex.BasePyKatException("pdtype command `{0}` refers to non-existing detector".format(component_name))
                 else:
-                    raise pkex.BasePyKatException("pdtype command `{0}` is incorrect.".format(text))
+                    raise pkex.BasePyKatException("pdtype command `{0}` is incorrect.".format(line))
                     
         self.__currentTag = NO_BLOCK 
 
diff --git a/pykat/param.py b/pykat/param.py
index 798535a..c6e0ba0 100644
--- a/pykat/param.py
+++ b/pykat/param.py
@@ -138,7 +138,8 @@ class Param(putable, putter):
     def __isub__(self, a):
         return self.value - (a)
         
-    __rsub__ = __sub__
+    def __rsub__(self, a):
+        return (a) - self.value
     
     def __div__(self, a):
         return self.value / (a)
diff --git a/pykat/utilities/optics/gaussian_beams.py b/pykat/utilities/optics/gaussian_beams.py
index 8179373..ea2fa94 100644
--- a/pykat/utilities/optics/gaussian_beams.py
+++ b/pykat/utilities/optics/gaussian_beams.py
@@ -117,7 +117,8 @@ class gauss_param(object):
         self.__q -= complex(a)
         return self
         
-    __rsub__ = __sub__
+    def __rsub__(self, a):
+        return gauss_param(self.__lambda, self.__nr, complex(a) - self.__q)
     
     def __div__(self, a):
         return gauss_param(self.__lambda, self.__nr, self.__q / complex(a))
-- 
GitLab