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