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