diff --git a/pykat/components.py b/pykat/components.py
index f6b5e83d6e80325fb8a6b7dbe2073fce55df90d0..fa2e91503c8a55ace8be17ce009c270095c15354 100644
--- a/pykat/components.py
+++ b/pykat/components.py
@@ -15,7 +15,7 @@ from pykat.SIfloat import *
from pykat.param import Param, AttrParam
import weakref
import pykat.exceptions as pkex
-
+from copy import deepcopy
next_component_id = 1
from pykat import USE_GUI, NoGUIException
@@ -198,7 +198,7 @@ class Component(object):
del self._params[:]
self.__removed = True
-
+
class AbstractMirrorComponent(Component):
__metaclass__ = abc.ABCMeta
diff --git a/pykat/finesse.py b/pykat/finesse.py
index 50337072a5afbab1cf73334a355f44c7708fcf6a..573fcccac792797e1c5f997fe247ccc84fdd69a3 100644
--- a/pykat/finesse.py
+++ b/pykat/finesse.py
@@ -424,6 +424,20 @@ class kat(object):
if kat_file != None:
self.loadKatFile(kat_file)
+ def __deepcopy__(self, memo):
+ cls = self.__class__
+ result = cls.__new__(cls)
+ memo[id(self)] = result
+
+ for k, v in self.__dict__.items():
+ setattr(result, k, copy.deepcopy(v, memo))
+
+ # Update any weakrefs
+ for c in result.components:
+ result.components[c]._Component__update_node_setters()
+
+ return result
+
@property
def signals(self): return self.__signals
@@ -919,8 +933,9 @@ class kat(object):
r = katRun()
r.yaxis = self.yaxis
- r.katScript = "".join(self.generateKatScript())
-
+
+ r.katScript = "".join(self.generateKatScript())
+
if (plot==None):
# ensure we don't do any plotting. That should be handled
# by user themselves
diff --git a/pykat/node_network.py b/pykat/node_network.py
index 1a565b8354cf5cdf27209e81a5c4f0aa83459605..d35f45f7723130e0cc8502145049304833ca86f7 100644
--- a/pykat/node_network.py
+++ b/pykat/node_network.py
@@ -498,7 +498,7 @@ class Node(object):
def setGauss(self, component, *args):
self.__q_comp = component
- if len(args) == 1:
+ if len(args) == 1:
self.__q_x = beam_param(self._network.kat.lambda0, q=args[0])
self.__q_y = beam_param(self._network.kat.lambda0, q=args[0])
elif len(args) == 2:
@@ -506,7 +506,7 @@ class Node(object):
self.__q_y = beam_param(self._network.kat.lambda0, q=args[1])
else:
raise pkex.BasePyKatException("Must specify either 1 Gaussian beam parameter or 2 for astigmatic beams")
-
+
def getFinesseText(self):
if self.__q_x is None or self.__q_y is None or self.__q_comp is None:
return []