From 94f5f8981a857b03cb8ec4364fba99d5b7b00c1b Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauld.mccarthy@gmail.com>
Date: Thu, 9 Jul 2015 11:47:42 +0100
Subject: [PATCH] Removed some code duplication in FEATTimeSeries

---
 fsl/fslview/views/timeseriespanel.py | 108 ++++++++++-----------------
 1 file changed, 39 insertions(+), 69 deletions(-)

diff --git a/fsl/fslview/views/timeseriespanel.py b/fsl/fslview/views/timeseriespanel.py
index aad982f89..08cdabfc2 100644
--- a/fsl/fslview/views/timeseriespanel.py
+++ b/fsl/fslview/views/timeseriespanel.py
@@ -204,7 +204,28 @@ class FEATTimeSeries(TimeSeries):
             con[idx] = 1
             return con
         elif fitType == 'cope':
-            return self.overlay.getContrasts()[idx]
+            return self.overlay.contrasts()[idx]
+
+        
+    def __createModelTs(self, tsType, *args, **kwargs):
+
+        ts = tsType(self.tsPanel, self.overlay, self.coords, *args, **kwargs)
+
+        ts.alpha     = self.alpha
+        ts.label     = self.label
+        ts.lineWidth = self.lineWidth
+        ts.lineStyle = self.lineStyle
+
+        if isinstance(ts, FEATReducedTimeSeries):
+            ts.colour = (0, 0.6, 0.6)
+        elif isinstance(ts, FEATResidualTimeSeries):
+            ts.colour = (0.8, 0.4, 0)
+        elif isinstance(ts, FEATModelFitTimeSeries):
+            if   ts.fitType == 'full': ts.colour = (0,   0, 1)
+            elif ts.fitType == 'cope': ts.colour = (0,   1, 0)
+            elif ts.fitType == 'pe':   ts.colour = (0.7, 0, 0)
+
+        return ts
 
 
     def __plotReducedChanged(self, *a):
@@ -221,21 +242,11 @@ class FEATTimeSeries(TimeSeries):
         fitType = reduced[:-1].lower()
         idx     = int(reduced[-1]) - 1
 
-        rts = FEATReducedTimeSeries(
+        self.__reducedTs = self.__createModelTs(
+            FEATReducedTimeSeries,
             self.__getContrast(fitType, idx),
             fitType,
-            idx,
-            self.tsPanel,
-            self.overlay,
-            self.coords)
-
-        rts.colour    = (0, 0.6, 0.6)
-        rts.alpha     = self.alpha
-        rts.label     = self.label
-        rts.lineWidth = self.lineWidth
-        rts.lineStyle = self.lineStyle 
-
-        self.__reducedTs = rts
+            idx) 
 
 
     def __plotResidualsChanged(self, *a):
@@ -244,18 +255,7 @@ class FEATTimeSeries(TimeSeries):
             self.__resTs = None
             return
 
-        rts = FEATResidualTimeSeries(
-            self.tsPanel,
-            self.overlay,
-            self.coords)
-
-        rts.colour    = (0.8, 0.4, 0)
-        rts.alpha     = self.alpha
-        rts.label     = self.label
-        rts.lineWidth = self.lineWidth
-        rts.lineStyle = self.lineStyle
-
-        self.__resTs = rts
+        self.__resTs = self.__createModelTs(FEATResidualTimeSeries)
             
     
     def __plotCOPEFitChanged(self, copenum):
@@ -264,21 +264,11 @@ class FEATTimeSeries(TimeSeries):
             self.__copeTs[copenum] = None
             return
 
-        copets = FEATModelFitTimeSeries(
+        self.__copeTs[copenum] = self.__createModelTs(
+            FEATModelFitTimeSeries,
             self.__getContrast('cope', copenum),
             'cope',
-            copenum,
-            self.tsPanel,
-            self.overlay,
-            self.coords)
-
-        copets.colour    = (0, 1, 0)
-        copets.alpha     = self.alpha
-        copets.label     = self.label
-        copets.lineWidth = self.lineWidth
-        copets.lineStyle = self.lineStyle
-
-        self.__copeTs[copenum] = copets 
+            copenum)
 
 
     def __plotPEFitChanged(self, evnum):
@@ -287,21 +277,11 @@ class FEATTimeSeries(TimeSeries):
             self.__peTs[evnum] = None
             return
 
-        pets = FEATModelFitTimeSeries(
+        self.__peTs[evnum] = self.__createModelTs(
+            FEATModelFitTimeSeries,
             self.__getContrast('pe', evnum),
             'pe',
-            evnum, 
-            self.tsPanel,
-            self.overlay,
-            self.coords)
-
-        pets.colour    = (0.7, 0, 0)
-        pets.alpha     = self.alpha
-        pets.label     = self.label
-        pets.lineWidth = self.lineWidth
-        pets.lineStyle = self.lineStyle
-
-        self.__peTs[evnum] = pets
+            evnum)
 
 
     def __plotFullModelFitChanged(self, *a):
@@ -310,21 +290,11 @@ class FEATTimeSeries(TimeSeries):
             self.__fullModelTs = None
             return
 
-        fts = FEATModelFitTimeSeries(
+        self.__fullModelTs = self.__createModelTs(
+            FEATModelFitTimeSeries,
             self.__getContrast('full', -1),
             'full',
-            -1, 
-            self.tsPanel,
-            self.overlay,
-            self.coords)
-
-        fts.colour    = (0, 0, 1)
-        fts.alpha     = self.alpha
-        fts.label     = self.label
-        fts.lineWidth = self.lineWidth
-        fts.lineStyle = self.lineStyle
-
-        self.__fullModelTs = fts
+            -1)
 
         
     def update(self, coords):
@@ -341,8 +311,8 @@ class FEATTimeSeries(TimeSeries):
 
 
 class FEATReducedTimeSeries(TimeSeries):
-    def __init__(self, contrast, fitType, idx, *args, **kwargs):
-        TimeSeries.__init__(self, *args, **kwargs)
+    def __init__(self, tsPanel, overlay, coords, contrast, fitType, idx):
+        TimeSeries.__init__(self, tsPanel, overlay, coords)
 
         self.contrast = contrast
         self.fitType  = fitType
@@ -364,12 +334,12 @@ class FEATResidualTimeSeries(TimeSeries):
 
 class FEATModelFitTimeSeries(TimeSeries):
 
-    def __init__(self, contrast, fitType, idx, *args, **kwargs):
+    def __init__(self, tsPanel, overlay, coords, contrast, fitType, idx):
         
         if fitType not in ('full', 'cope', 'pe'):
             raise ValueError('Unknown model fit type {}'.format(fitType))
         
-        TimeSeries.__init__(self, *args, **kwargs)
+        TimeSeries.__init__(self, tsPanel, overlay, coords)
         self.fitType  = fitType
         self.idx      = idx
         self.contrast = contrast
-- 
GitLab