From a945de4024f6a1347b15bf3b17f4f07486a6de04 Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauld.mccarthy@gmail.com>
Date: Wed, 15 Jul 2015 17:11:21 +0100
Subject: [PATCH] 1. Bugfix to TimeSeriesPanel - TimeSeries instances need to
 implement a __copy__ operator.

2. DisplayContext prints memory log messages.

3. Memory logging honours noisy-module list (it wasn't before).
---
 fsl/__init__.py                              | 5 +++--
 fsl/fslview/displaycontext/displaycontext.py | 8 ++++++++
 fsl/fslview/views/plotpanel.py               | 4 ++++
 fsl/fslview/views/timeseriespanel.py         | 5 +++++
 4 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/fsl/__init__.py b/fsl/__init__.py
index 790be2942..1beef9641 100644
--- a/fsl/__init__.py
+++ b/fsl/__init__.py
@@ -263,8 +263,9 @@ def parseArgs(argv, allTools):
         if namespace.memory:
             class MemFilter(object):
                 def filter(self, record):
-                    if record.levelno == logging.MEMORY: return 1
-                    else:                                return 0
+                    if   record.name in namespace.noisy:   return 1
+                    elif record.levelno == logging.MEMORY: return 1
+                    else:                                  return 0
 
             log.setLevel(logging.MEMORY)
             log.handlers[0].addFilter(MemFilter())
diff --git a/fsl/fslview/displaycontext/displaycontext.py b/fsl/fslview/displaycontext/displaycontext.py
index 0fab40e11..03e6aac7a 100644
--- a/fsl/fslview/displaycontext/displaycontext.py
+++ b/fsl/fslview/displaycontext/displaycontext.py
@@ -87,6 +87,14 @@ class DisplayContext(props.SyncableHasProperties):
                                 self.__name,
                                 self.__overlayListChanged)
 
+
+        log.memory('{}.init ({})'.format(type(self).__name__, id(self)))
+
+        
+    def __del__(self):
+        log.memory('{}.del ({})'.format(type(self).__name__, id(self)))
+        
+
         
     def getDisplay(self, overlay, overlayType=None):
         """Returns the display property object (e.g. a :class:`.Display`
diff --git a/fsl/fslview/views/plotpanel.py b/fsl/fslview/views/plotpanel.py
index be4defaee..3aed21cde 100644
--- a/fsl/fslview/views/plotpanel.py
+++ b/fsl/fslview/views/plotpanel.py
@@ -48,6 +48,10 @@ class DataSeries(props.HasProperties):
         self.overlay = overlay
 
 
+    def __copy__(self):
+        return type(self)(self.overlay)
+
+
     def getData(self):
         raise NotImplementedError('The getData method must be '
                                   'implemented by subclasses')
diff --git a/fsl/fslview/views/timeseriespanel.py b/fsl/fslview/views/timeseriespanel.py
index 26c7d18d7..946b98a5f 100644
--- a/fsl/fslview/views/timeseriespanel.py
+++ b/fsl/fslview/views/timeseriespanel.py
@@ -41,6 +41,11 @@ class TimeSeries(plotpanel.DataSeries):
         self.coords  = map(int, coords)
         self.data    = overlay.data[coords[0], coords[1], coords[2], :]
 
+
+    def __copy__(self):
+
+        return type(self)(self.tsPanel, self.overlay, self.coords)
+
         
     def update(self, coords):
         """This method is only intended for use on the 'current' time series,
-- 
GitLab