Add 'new playlist' command and clean up 'Creating a playlist' in tutorial.txt.
[hooke.git] / hooke / ui / gui / results.py
index ca458bd474c03747df079e11b1ad6791b3286d69..01f859d913b501d69df886c0f1dcce9eb0e71dfb 100644 (file)
-#!/usr/bin/env python\r
-\r
-'''\r
-results.py\r
-\r
-Result and Results classes for Hooke.\r
-\r
-Copyright 2009 by Dr. Rolf Schmidt (Concordia University, Canada)\r
-\r
-This program is released under the GNU General Public License version 2.\r
-'''\r
-\r
-from numpy import nan\r
-\r
-import prettyformat\r
-import lib.curve\r
-\r
-DEFAULT_COLOR = 'green'\r
-DEFAULT_DECIMAL = 2\r
-DEFAULT_STYLE = 'scatter'\r
-\r
-class Result(lib.curve.Curve):\r
-    def __init__(self):\r
-        lib.curve.Curve.__init__(self)\r
-        self.color = DEFAULT_COLOR\r
-        self.result = {}\r
-        self.style = DEFAULT_STYLE\r
-\r
-class Results(object):\r
-    def __init__(self):\r
-        self.columns = []\r
-        self.decimals = {}\r
-        self.has_multipliers = False\r
-        self.multipliers = {}\r
-        self.results = []\r
-        self.separator='\t'\r
-        self.units = {}\r
-\r
-    def get_pretty_value(self, column, value):\r
-        if self.has_multipliers and self.has_results():\r
-            multiplier = self.multipliers[column]\r
-            decimals = self.decimals[column]\r
-            return prettyformat.pretty_format(value, '', decimals, multiplier, True)\r
-        return str(value)\r
-\r
-    def has_results(self):\r
-        return len(self.results) > 0\r
-\r
-    def get_header_as_list(self):\r
-        header_list = []\r
-        if self.has_results():\r
-            if not self.has_multipliers:\r
-                self.set_multipliers()\r
-            for column in self.columns:\r
-                unit_str = ''.join([prettyformat.get_prefix(self.multipliers[column]), self.units[column]])\r
-                header_str = ''.join([column, ' [', unit_str, ']'])\r
-                header_list.append(header_str)\r
-        return header_list\r
-\r
-    def get_header_as_str(self, separator=None):\r
-        if separator is None:\r
-            separator = self.separator\r
-        return separator.join(map(str, self.get_header_as_list()))\r
-\r
-    def get_result_as_list(self, index=0):\r
-        if index >= 0 and index < len(self.results):\r
-            result_list = []\r
-            if self.has_results():\r
-                if not self.has_multipliers:\r
-                    self.set_multipliers()\r
-                for column in self.columns:\r
-                    result_str = prettyformat.pretty_format(self.results[index].result[column], '', self.decimals[column], self.multipliers[column], True)\r
-                    result_list.append(result_str)\r
-            return result_list\r
-        else:\r
-            return None\r
-\r
-    def get_result_as_string(self, index=0):\r
-        results_list = self.get_result_as_list(index)\r
-        if results_list is not None:\r
-            return self.separator.join(map(str, results_list))\r
-        else:\r
-            return ''\r
-\r
-    def set_decimal(self, column, decimal=DEFAULT_DECIMAL):\r
-        if self.decimals.has_key(column):\r
-            self.decimals[column] = decimal\r
-\r
-    def set_decimals(self, decimals=DEFAULT_DECIMAL):\r
-        if decimals < 0:\r
-            #set default value if necessary\r
-            decimals = DEFAULT_DECIMAL\r
-        for column in self.columns:\r
-            self.decimals[column] = decimals\r
-\r
-    def set_multipliers(self, index=0):\r
-        if self.has_results():\r
-            for column in self.columns:\r
-                #result will contain the results dictionary at 'index'\r
-                result = self.results[index].result\r
-                #in position 0 of the result we find the value\r
-                self.multipliers[column] = prettyformat.get_multiplier(result[column])\r
-            self.has_multipliers = True\r
-        else:\r
-            self.has_multipliers = False\r
-\r
-    def update(self):\r
-        pass\r
-\r
-\r
-class ResultsFJC(Results):\r
-    def __init__(self):\r
-        Results.__init__(self)\r
-        self.columns = ['Contour length', 'sigma contour length', 'Kuhn length', 'sigma Kuhn length', 'Rupture force', 'Slope', 'Loading rate']\r
-        self.units['Contour length'] = 'm'\r
-        self.units['sigma contour length'] = 'm'\r
-        self.units['Kuhn length'] = 'm'\r
-        self.units['sigma Kuhn length'] = 'm'\r
-        self.units['Rupture force'] = 'N'\r
-        self.units['Slope'] = 'N/m'\r
-        self.units['Loading rate'] = 'N/s'\r
-        self.set_decimals(2)\r
-\r
-    def set_multipliers(self, index=0):\r
-        if self.has_results():\r
-            for column in self.columns:\r
-                #result will contain the results dictionary at 'index'\r
-                result = self.results[index].result\r
-                #in position 0 of the result we find the value\r
-                if column == 'sigma contour length':\r
-                    self.multipliers[column] = self.multipliers['Contour length']\r
-                elif column == 'sigma Kuhn length':\r
-                    self.multipliers[column] = self.multipliers['Kuhn length']\r
-                else:\r
-                    self.multipliers[column] = prettyformat.get_multiplier(result[column])\r
-            self.has_multipliers = True\r
-        else:\r
-            self.has_multipliers = False\r
-\r
-class ResultsMultiDistance(Results):\r
-    def __init__(self):\r
-        Results.__init__(self)\r
-        self.columns = ['Distance']\r
-        self.units['Distance'] = 'm'\r
-        self.set_decimals(2)\r
-\r
-    def update(self):\r
-        if (self.results) > 0:\r
-            for result in self.results:\r
-                if result.visible:\r
-                    reference_peak = result.x\r
-                    break\r
-\r
-            for result in self.results:\r
-                if result.visible:\r
-                    result.result['Distance'] = reference_peak - result.x\r
-                    reference_peak = result.x\r
-                else:\r
-                    result.result['Distance'] = nan\r
-\r
-\r
-class ResultsWLC(Results):\r
-    def __init__(self):\r
-        Results.__init__(self)\r
-        self.columns = ['Contour length', 'sigma contour length', 'Persistence length', 'sigma persistence length', 'Rupture force', 'Slope', 'Loading rate']\r
-        self.units['Contour length'] = 'm'\r
-        self.units['sigma contour length'] = 'm'\r
-        self.units['Persistence length'] = 'm'\r
-        self.units['sigma persistence length'] = 'm'\r
-        self.units['Rupture force'] = 'N'\r
-        self.units['Slope'] = 'N/m'\r
-        self.units['Loading rate'] = 'N/s'\r
-        self.set_decimals(2)\r
-\r
-    def set_multipliers(self, index=0):\r
-        if self.has_results():\r
-            for column in self.columns:\r
-                #result will contain the results dictionary at 'index'\r
-                result = self.results[index].result\r
-                #in position 0 of the result we find the value\r
-                if column == 'sigma contour length':\r
-                    self.multipliers[column] = self.multipliers['Contour length']\r
-                elif column == 'sigma persistence length':\r
-                    self.multipliers[column] = self.multipliers['Persistence length']\r
-                else:\r
-                    self.multipliers[column] = prettyformat.get_multiplier(result[column])\r
-            self.has_multipliers = True\r
-        else:\r
-            self.has_multipliers = False\r
+#!/usr/bin/env python
+
+'''
+results.py
+
+Result and Results classes for Hooke.
+
+Copyright 2009 by Dr. Rolf Schmidt (Concordia University, Canada)
+
+This program is released under the GNU General Public License version 2.
+'''
+
+from numpy import nan
+
+import prettyformat
+import lib.curve
+
+DEFAULT_COLOR = 'green'
+DEFAULT_DECIMAL = 2
+DEFAULT_STYLE = 'scatter'
+
+class Result(lib.curve.Curve):
+    def __init__(self):
+        lib.curve.Curve.__init__(self)
+        self.color = DEFAULT_COLOR
+        self.result = {}
+        self.style = DEFAULT_STYLE
+
+class Results(object):
+    def __init__(self):
+        self.columns = []
+        self.decimals = {}
+        self.has_multipliers = False
+        self.multipliers = {}
+        self.results = []
+        self.separator='\t'
+        self.units = {}
+
+    def get_pretty_value(self, column, value):
+        if self.has_multipliers and self.has_results():
+            multiplier = self.multipliers[column]
+            decimals = self.decimals[column]
+            return prettyformat.pretty_format(value, '', decimals, multiplier, True)
+        return str(value)
+
+    def has_results(self):
+        return len(self.results) > 0
+
+    def get_header_as_list(self):
+        header_list = []
+        if self.has_results():
+            if not self.has_multipliers:
+                self.set_multipliers()
+            for column in self.columns:
+                unit_str = ''.join([prettyformat.get_prefix(self.multipliers[column]), self.units[column]])
+                header_str = ''.join([column, ' [', unit_str, ']'])
+                header_list.append(header_str)
+        return header_list
+
+    def get_header_as_str(self, separator=None):
+        if separator is None:
+            separator = self.separator
+        return separator.join(map(str, self.get_header_as_list()))
+
+    def get_result_as_list(self, index=0):
+        if index >= 0 and index < len(self.results):
+            result_list = []
+            if self.has_results():
+                if not self.has_multipliers:
+                    self.set_multipliers()
+                for column in self.columns:
+                    result_str = prettyformat.pretty_format(self.results[index].result[column], '', self.decimals[column], self.multipliers[column], True)
+                    result_list.append(result_str)
+            return result_list
+        else:
+            return None
+
+    def get_result_as_string(self, index=0):
+        results_list = self.get_result_as_list(index)
+        if results_list is not None:
+            return self.separator.join(map(str, results_list))
+        else:
+            return ''
+
+    def set_decimal(self, column, decimal=DEFAULT_DECIMAL):
+        if self.decimals.has_key(column):
+            self.decimals[column] = decimal
+
+    def set_decimals(self, decimals=DEFAULT_DECIMAL):
+        if decimals < 0:
+            #set default value if necessary
+            decimals = DEFAULT_DECIMAL
+        for column in self.columns:
+            self.decimals[column] = decimals
+
+    def set_multipliers(self, index=0):
+        if self.has_results():
+            for column in self.columns:
+                #result will contain the results dictionary at 'index'
+                result = self.results[index].result
+                #in position 0 of the result we find the value
+                self.multipliers[column] = prettyformat.get_multiplier(result[column])
+            self.has_multipliers = True
+        else:
+            self.has_multipliers = False
+
+    def update(self):
+        pass
+
+
+class ResultsFJC(Results):
+    def __init__(self):
+        Results.__init__(self)
+        self.columns = ['Contour length', 'sigma contour length', 'Kuhn length', 'sigma Kuhn length', 'Rupture force', 'Slope', 'Loading rate']
+        self.units['Contour length'] = 'm'
+        self.units['sigma contour length'] = 'm'
+        self.units['Kuhn length'] = 'm'
+        self.units['sigma Kuhn length'] = 'm'
+        self.units['Rupture force'] = 'N'
+        self.units['Slope'] = 'N/m'
+        self.units['Loading rate'] = 'N/s'
+        self.set_decimals(2)
+
+    def set_multipliers(self, index=0):
+        if self.has_results():
+            for column in self.columns:
+                #result will contain the results dictionary at 'index'
+                result = self.results[index].result
+                #in position 0 of the result we find the value
+                if column == 'sigma contour length':
+                    self.multipliers[column] = self.multipliers['Contour length']
+                elif column == 'sigma Kuhn length':
+                    self.multipliers[column] = self.multipliers['Kuhn length']
+                else:
+                    self.multipliers[column] = prettyformat.get_multiplier(result[column])
+            self.has_multipliers = True
+        else:
+            self.has_multipliers = False
+
+class ResultsMultiDistance(Results):
+    def __init__(self):
+        Results.__init__(self)
+        self.columns = ['Distance']
+        self.units['Distance'] = 'm'
+        self.set_decimals(2)
+
+    def update(self):
+        if (self.results) > 0:
+            for result in self.results:
+                if result.visible:
+                    reference_peak = result.x
+                    break
+
+            for result in self.results:
+                if result.visible:
+                    result.result['Distance'] = reference_peak - result.x
+                    reference_peak = result.x
+                else:
+                    result.result['Distance'] = nan
+
+
+class ResultsWLC(Results):
+    def __init__(self):
+        Results.__init__(self)
+        self.columns = ['Contour length', 'sigma contour length', 'Persistence length', 'sigma persistence length', 'Rupture force', 'Slope', 'Loading rate']
+        self.units['Contour length'] = 'm'
+        self.units['sigma contour length'] = 'm'
+        self.units['Persistence length'] = 'm'
+        self.units['sigma persistence length'] = 'm'
+        self.units['Rupture force'] = 'N'
+        self.units['Slope'] = 'N/m'
+        self.units['Loading rate'] = 'N/s'
+        self.set_decimals(2)
+
+    def set_multipliers(self, index=0):
+        if self.has_results():
+            for column in self.columns:
+                #result will contain the results dictionary at 'index'
+                result = self.results[index].result
+                #in position 0 of the result we find the value
+                if column == 'sigma contour length':
+                    self.multipliers[column] = self.multipliers['Contour length']
+                elif column == 'sigma persistence length':
+                    self.multipliers[column] = self.multipliers['Persistence length']
+                else:
+                    self.multipliers[column] = prettyformat.get_multiplier(result[column])
+            self.has_multipliers = True
+        else:
+            self.has_multipliers = False