1 #!/usr/bin/env python
\r
6 Result and Results classes for Hooke.
\r
8 Copyright 2009 by Dr. Rolf Schmidt (Concordia University, Canada)
\r
10 This program is released under the GNU General Public License version 2.
\r
13 from numpy import nan
\r
18 DEFAULT_COLOR = 'green'
\r
20 DEFAULT_STYLE = 'scatter'
\r
22 class Result(lib.curve.Curve):
\r
24 lib.curve.Curve.__init__(self)
\r
25 self.color = DEFAULT_COLOR
\r
27 self.style = DEFAULT_STYLE
\r
29 class Results(object):
\r
33 self.has_multipliers = False
\r
34 self.multipliers = {}
\r
39 def get_pretty_value(self, column, value):
\r
40 if self.has_multipliers and self.has_results():
\r
41 multiplier = self.multipliers[column]
\r
42 decimals = self.decimals[column]
\r
43 return prettyformat.pretty_format(value, '', decimals, multiplier, True)
\r
46 #def get_fit_result(self):
\r
47 #if not(self.has_multipliers):
\r
48 #self.set_multipliers()
\r
50 #sResult = 'Contour length ['+prettyformat.get_prefix(self.multiplierContourLength) + 'm]' + self.separator
\r
51 #sResult += prettyformat.pretty_format(self.contourLength[0], '', self.decimals, self.multiplierContourLength, True) + '\n'
\r
52 #sResult += 'Persistence length ['+prettyformat.get_prefix(self.multiplierPersistenceLength) + 'm]' + self.separator
\r
53 #sResult += prettyformat.pretty_format(self.persistenceLength[0], '', self.decimals, self.multiplierPersistenceLength, True) + '\n'
\r
54 #sResult += 'Rupture force ['+prettyformat.get_prefix(self.multiplierRuptureForce) + 'N]' + self.separator
\r
55 #sResult += prettyformat.pretty_format(self.ruptureForces[0], '', self.decimals, self.multiplierRuptureForce, True) + '\n'
\r
56 #sResult += 'Slope ['+prettyformat.get_prefix(self.multiplierSlope) + 'N/m]' + self.separator
\r
57 #sResult += prettyformat.pretty_format(self.slopes[0], '', self.decimals, self.multiplierSlope, True)+'\n'
\r
58 #sResult += 'Sigma contour ['+prettyformat.get_prefix(self.multiplierContourLength) + 'm]' + self.separator
\r
59 #sResult += prettyformat.pretty_format(self.contourLengthSigma[0], '', self.decimals, self.multiplierContourLength, True) + '\n'
\r
60 #sResult += 'Sigma persistence ['+prettyformat.get_prefix(self.multiplierPersistenceLength) + 'm]' + self.separator
\r
61 #sResult += prettyformat.pretty_format(self.persistenceLengthSigma[0], '', self.decimals, self.multiplierPersistenceLength, True)
\r
65 #def get_fit_results(self, index):
\r
66 #if index >= 0 and index < len(self.contourLength):
\r
67 #if not(self.has_multipliers):
\r
68 #self.set_multipliers()
\r
69 #sLine = prettyformat.pretty_format(self.contourLength[index], '', self.decimals, self.multiplierContourLength, True) + self.separator
\r
70 #sLine += prettyformat.pretty_format(self.persistenceLength[index], '', self.decimals, self.multiplierPersistenceLength, True) + self.separator
\r
71 #sLine += prettyformat.pretty_format(self.ruptureForces[index], '', self.decimals, self.multiplierRuptureForce, True) + self.separator
\r
72 #sLine += prettyformat.pretty_format(self.slopes[index], '', self.decimals, self.multiplierSlope, True) + self.separator
\r
73 #sLine += prettyformat.pretty_format(self.contourLengthSigma[index], '', self.decimals, self.multiplierContourLength, True) + self.separator
\r
74 #sLine += prettyformat.pretty_format(self.persistenceLengthSigma[index], '', self.decimals, self.multiplierPersistenceLength, True)
\r
80 def has_results(self):
\r
81 return len(self.results) > 0
\r
83 def get_header_as_list(self):
\r
85 if self.has_results():
\r
86 if not self.has_multipliers:
\r
87 self.set_multipliers()
\r
88 for column in self.columns:
\r
89 unit_str = ''.join([prettyformat.get_prefix(self.multipliers[column]), self.units[column]])
\r
90 header_str = ''.join([column, ' [', unit_str, ']'])
\r
91 header_list.append(header_str)
\r
94 def get_header_as_str(self, separator=None):
\r
95 if separator is None:
\r
96 separator = self.separator
\r
97 return separator.join(map(str, self.get_header_as_list()))
\r
99 def get_result_as_list(self, index=0):
\r
100 if index >= 0 and index < len(self.results):
\r
102 if self.has_results():
\r
103 if not self.has_multipliers:
\r
104 self.set_multipliers()
\r
105 for column in self.columns:
\r
106 result_str = prettyformat.pretty_format(self.results[index].result[column], '', self.decimals[column], self.multipliers[column], True)
\r
107 result_list.append(result_str)
\r
112 def get_result_as_string(self, index=0):
\r
113 results_list = self.get_result_as_list(index)
\r
114 if results_list is not None:
\r
115 return self.separator.join(map(str, results_list))
\r
119 def set_decimal(self, column, decimal=DEFAULT_DECIMAL):
\r
120 if self.decimals.has_key(column):
\r
121 self.decimals[column] = decimal
\r
123 def set_decimals(self, decimals=DEFAULT_DECIMAL):
\r
125 #set default value if necessary
\r
126 decimals = DEFAULT_DECIMAL
\r
127 for column in self.columns:
\r
128 self.decimals[column] = decimals
\r
130 def set_multipliers(self, index=0):
\r
131 if self.has_results():
\r
132 for column in self.columns:
\r
133 #result will contain the results dictionary at 'index'
\r
134 result = self.results[index].result
\r
135 #in position 0 of the result we find the value
\r
136 self.multipliers[column] = prettyformat.get_multiplier(result[column])
\r
137 self.has_multipliers = True
\r
139 self.has_multipliers = False
\r
145 class ResultsFJC(Results):
\r
146 def __init__(self):
\r
147 Results.__init__(self)
\r
148 self.columns = ['Contour length', 'sigma contour length', 'Kuhn length', 'sigma Kuhn length', 'Rupture force', 'Slope', 'Loading rate']
\r
149 self.units['Contour length'] = 'm'
\r
150 self.units['sigma contour length'] = 'm'
\r
151 self.units['Kuhn length'] = 'm'
\r
152 self.units['sigma Kuhn length'] = 'm'
\r
153 self.units['Rupture force'] = 'N'
\r
154 self.units['Slope'] = 'N/m'
\r
155 self.units['Loading rate'] = 'N/s'
\r
156 self.set_decimals(2)
\r
158 def set_multipliers(self, index=0):
\r
159 if self.has_results():
\r
160 for column in self.columns:
\r
161 #result will contain the results dictionary at 'index'
\r
162 result = self.results[index].result
\r
163 #in position 0 of the result we find the value
\r
164 if column == 'sigma contour length':
\r
165 self.multipliers[column] = self.multipliers['Contour length']
\r
166 elif column == 'sigma Kuhn length':
\r
167 self.multipliers[column] = self.multipliers['Kuhn length']
\r
169 self.multipliers[column] = prettyformat.get_multiplier(result[column])
\r
170 self.has_multipliers = True
\r
172 self.has_multipliers = False
\r
174 class ResultsMultiDistance(Results):
\r
175 def __init__(self):
\r
176 Results.__init__(self)
\r
177 self.columns = ['Distance']
\r
178 self.units['Distance'] = 'm'
\r
179 self.set_decimals(2)
\r
182 if (self.results) > 0:
\r
183 for result in self.results:
\r
185 reference_peak = result.x
\r
188 for result in self.results:
\r
190 result.result['Distance'] = reference_peak - result.x
\r
191 reference_peak = result.x
\r
193 result.result['Distance'] = nan
\r
196 class ResultsWLC(Results):
\r
197 def __init__(self):
\r
198 Results.__init__(self)
\r
199 self.columns = ['Contour length', 'sigma contour length', 'Persistence length', 'sigma persistence length', 'Rupture force', 'Slope', 'Loading rate']
\r
200 self.units['Contour length'] = 'm'
\r
201 self.units['sigma contour length'] = 'm'
\r
202 self.units['Persistence length'] = 'm'
\r
203 self.units['sigma persistence length'] = 'm'
\r
204 self.units['Rupture force'] = 'N'
\r
205 self.units['Slope'] = 'N/m'
\r
206 self.units['Loading rate'] = 'N/s'
\r
207 self.set_decimals(2)
\r
209 def set_multipliers(self, index=0):
\r
210 if self.has_results():
\r
211 for column in self.columns:
\r
212 #result will contain the results dictionary at 'index'
\r
213 result = self.results[index].result
\r
214 #in position 0 of the result we find the value
\r
215 if column == 'sigma contour length':
\r
216 self.multipliers[column] = self.multipliers['Contour length']
\r
217 elif column == 'sigma persistence length':
\r
218 self.multipliers[column] = self.multipliers['Persistence length']
\r
220 self.multipliers[column] = prettyformat.get_multiplier(result[column])
\r
221 self.has_multipliers = True
\r
223 self.has_multipliers = False
\r