Really hideous merge of Rolf Schmidt's code.
[hooke.git] / hooke / ui / gui / results.py
1 import prettyformat\r
2 \r
3 DEFAULT_COLOR = 'orange'\r
4 DEFAULT_DECIMAL = 2\r
5 DEFAULT_STYLE = 'plot'\r
6 \r
7 class Result:\r
8     def __init__(self):\r
9         self.color = DEFAULT_COLOR\r
10         self.result = {}\r
11         self.style = DEFAULT_STYLE\r
12         self.visible = True\r
13         self.x = []\r
14         self.y = []\r
15 \r
16 class Results:\r
17     def __init__(self):\r
18         self.columns = []\r
19         self.decimals = {}\r
20         self.has_multipliers = False\r
21         self.multipliers = {}\r
22         self.results = []\r
23         self.separator='\t'\r
24         self.units = {}\r
25 \r
26     def get_pretty_value(self, column, value):\r
27         if self.has_multipliers and self.has_results():\r
28             multiplier = self.multipliers[column]\r
29             decimals = self.decimals[column]\r
30             return prettyformat.pretty_format(value, '', decimals, multiplier, True)\r
31         return str(value)\r
32 \r
33     #def get_fit_result(self):\r
34         #if not(self.has_multipliers):\r
35             #self.set_multipliers()\r
36 \r
37         #sResult = 'Contour length ['+prettyformat.get_prefix(self.multiplierContourLength) + 'm]' + self.separator\r
38         #sResult += prettyformat.pretty_format(self.contourLength[0], '', self.decimals, self.multiplierContourLength, True) + '\n'\r
39         #sResult += 'Persistence length ['+prettyformat.get_prefix(self.multiplierPersistenceLength) + 'm]' + self.separator\r
40         #sResult += prettyformat.pretty_format(self.persistenceLength[0], '', self.decimals, self.multiplierPersistenceLength, True) + '\n'\r
41         #sResult += 'Rupture force ['+prettyformat.get_prefix(self.multiplierRuptureForce) + 'N]' + self.separator\r
42         #sResult += prettyformat.pretty_format(self.ruptureForces[0], '', self.decimals, self.multiplierRuptureForce, True) + '\n'\r
43         #sResult += 'Loading rate ['+prettyformat.get_prefix(self.multiplierSlope) + 'N/m]' + self.separator\r
44         #sResult += prettyformat.pretty_format(self.slopes[0], '', self.decimals, self.multiplierSlope, True)+'\n'\r
45         #sResult += 'Sigma contour ['+prettyformat.get_prefix(self.multiplierContourLength) + 'm]' + self.separator\r
46         #sResult += prettyformat.pretty_format(self.contourLengthSigma[0], '', self.decimals, self.multiplierContourLength, True) + '\n'\r
47         #sResult += 'Sigma persistence ['+prettyformat.get_prefix(self.multiplierPersistenceLength) + 'm]' + self.separator\r
48         #sResult += prettyformat.pretty_format(self.persistenceLengthSigma[0], '', self.decimals, self.multiplierPersistenceLength, True)\r
49 \r
50         #return sResult\r
51 \r
52     #def get_fit_results(self, index):\r
53         #if index >= 0 and index < len(self.contourLength):\r
54             #if not(self.has_multipliers):\r
55                 #self.set_multipliers()\r
56             #sLine = prettyformat.pretty_format(self.contourLength[index], '', self.decimals, self.multiplierContourLength, True) + self.separator\r
57             #sLine += prettyformat.pretty_format(self.persistenceLength[index], '', self.decimals, self.multiplierPersistenceLength, True) + self.separator\r
58             #sLine += prettyformat.pretty_format(self.ruptureForces[index], '', self.decimals, self.multiplierRuptureForce, True) + self.separator\r
59             #sLine += prettyformat.pretty_format(self.slopes[index], '', self.decimals, self.multiplierSlope, True) + self.separator\r
60             #sLine += prettyformat.pretty_format(self.contourLengthSigma[index], '', self.decimals, self.multiplierContourLength, True) + self.separator\r
61             #sLine += prettyformat.pretty_format(self.persistenceLengthSigma[index], '', self.decimals, self.multiplierPersistenceLength, True)\r
62 \r
63             #return sLine\r
64         #else:\r
65             #return ''\r
66 \r
67     def has_results(self):\r
68         return self.results\r
69 \r
70     def header_as_list(self):\r
71         header = []\r
72         if self.has_results():\r
73             if not self.has_multipliers:\r
74                 self.set_multipliers()\r
75             for column in self.columns:\r
76                 #result will contain the results dictionary for 'column'\r
77                 #result = self.results[0][0][column]\r
78                 #result[1] contains the unit\r
79                 unit_str = ''.join([prettyformat.get_prefix(self.multipliers[column]), self.units[column]])\r
80                 header_str = ''.join([column, ' [', unit_str, ']'])\r
81                 header.append(header_str)\r
82         return header\r
83 \r
84     #def header_as_str(self):\r
85         #if self.has_results():\r
86             #if not self.has_multipliers:\r
87                 #self.set_multipliers()\r
88             #header_str = ''\r
89             #for column in self.columns:\r
90                 ##result will contain the results dictionary for 'column'\r
91                 #result = self.results[0][0][column]\r
92                 ##result[1] contains the unit\r
93                 #unit_str = ''.join([prettyformat.get_prefix(self.multipliers[column]), result[1]])\r
94                 #header_str = ''.join([header_str, result_str, ' [', unit_str, ']', self.separator])\r
95             #return header_str\r
96         #else:\r
97             #return None\r
98 \r
99     def set_decimal(self, column, decimal=DEFAULT_DECIMAL):\r
100         if self.decimals.has_key(name):\r
101             self.decimals[name] = decimal\r
102 \r
103     def set_decimals(self, decimals=DEFAULT_DECIMAL):\r
104         if decimals < 0:\r
105             #set default value if necessary\r
106             decimals = DEFAULT_DECIMAL\r
107         for column in self.columns:\r
108             self.decimals[column] = decimals\r
109 \r
110     def set_multipliers(self, index=0):\r
111         if self.has_results():\r
112             if index >= 0 and index < len(self.results):\r
113                 for column in self.columns:\r
114                     #result will contain the results dictionary at 'index'\r
115                     result = self.results[index][0]\r
116                     #in position 0 of the result we find the value\r
117                     self.multipliers[column] = prettyformat.get_multiplier(result[column][0])\r
118                 self.has_multipliers = True\r
119         else:\r
120             self.has_multipliers = False\r
121 \r
122 \r
123 class ResultsWLC(Results):\r
124     def __init__(self):\r
125         Results.__init__(self)\r
126         self.columns = ['Contour length', 'sigma contour length', 'Persistence length', 'sigma persistence length', 'Rupture force', 'Loading rate']\r
127         self.units['Contour length'] = 'm'\r
128         self.units['sigma contour length'] = 'm'\r
129         self.units['Persistence length'] = 'm'\r
130         self.units['sigma persistence length'] = 'm'\r
131         self.units['Rupture force'] = 'N'\r
132         self.units['Loading rate'] = 'N/m'\r
133         self.set_decimals(2)\r
134 \r
135     def set_multipliers(self, index=0):\r
136         if self.has_results():\r
137             if index >= 0 and index < len(self.results):\r
138                 for column in self.columns:\r
139                     #result will contain the results dictionary at 'index'\r
140                     result = self.results[index].result\r
141                     #in position 0 of the result we find the value\r
142                     if column == 'sigma contour length':\r
143                         self.multipliers[column] = self.multipliers['Contour length']\r
144                     elif column == 'sigma persistence length':\r
145                         self.multipliers[column] = self.multipliers['Persistence length']\r
146                     else:\r
147                         self.multipliers[column] = prettyformat.get_multiplier(result[column])\r
148                 self.has_multipliers = True\r
149         else:\r
150             self.has_multipliers = False\r