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 has_results(self):
\r
47 return len(self.results) > 0
\r
49 def get_header_as_list(self):
\r
51 if self.has_results():
\r
52 if not self.has_multipliers:
\r
53 self.set_multipliers()
\r
54 for column in self.columns:
\r
55 unit_str = ''.join([prettyformat.get_prefix(self.multipliers[column]), self.units[column]])
\r
56 header_str = ''.join([column, ' [', unit_str, ']'])
\r
57 header_list.append(header_str)
\r
60 def get_header_as_str(self, separator=None):
\r
61 if separator is None:
\r
62 separator = self.separator
\r
63 return separator.join(map(str, self.get_header_as_list()))
\r
65 def get_result_as_list(self, index=0):
\r
66 if index >= 0 and index < len(self.results):
\r
68 if self.has_results():
\r
69 if not self.has_multipliers:
\r
70 self.set_multipliers()
\r
71 for column in self.columns:
\r
72 result_str = prettyformat.pretty_format(self.results[index].result[column], '', self.decimals[column], self.multipliers[column], True)
\r
73 result_list.append(result_str)
\r
78 def get_result_as_string(self, index=0):
\r
79 results_list = self.get_result_as_list(index)
\r
80 if results_list is not None:
\r
81 return self.separator.join(map(str, results_list))
\r
85 def set_decimal(self, column, decimal=DEFAULT_DECIMAL):
\r
86 if self.decimals.has_key(column):
\r
87 self.decimals[column] = decimal
\r
89 def set_decimals(self, decimals=DEFAULT_DECIMAL):
\r
91 #set default value if necessary
\r
92 decimals = DEFAULT_DECIMAL
\r
93 for column in self.columns:
\r
94 self.decimals[column] = decimals
\r
96 def set_multipliers(self, index=0):
\r
97 if self.has_results():
\r
98 for column in self.columns:
\r
99 #result will contain the results dictionary at 'index'
\r
100 result = self.results[index].result
\r
101 #in position 0 of the result we find the value
\r
102 self.multipliers[column] = prettyformat.get_multiplier(result[column])
\r
103 self.has_multipliers = True
\r
105 self.has_multipliers = False
\r
111 class ResultsFJC(Results):
\r
112 def __init__(self):
\r
113 Results.__init__(self)
\r
114 self.columns = ['Contour length', 'sigma contour length', 'Kuhn length', 'sigma Kuhn length', 'Rupture force', 'Slope', 'Loading rate']
\r
115 self.units['Contour length'] = 'm'
\r
116 self.units['sigma contour length'] = 'm'
\r
117 self.units['Kuhn length'] = 'm'
\r
118 self.units['sigma Kuhn length'] = 'm'
\r
119 self.units['Rupture force'] = 'N'
\r
120 self.units['Slope'] = 'N/m'
\r
121 self.units['Loading rate'] = 'N/s'
\r
122 self.set_decimals(2)
\r
124 def set_multipliers(self, index=0):
\r
125 if self.has_results():
\r
126 for column in self.columns:
\r
127 #result will contain the results dictionary at 'index'
\r
128 result = self.results[index].result
\r
129 #in position 0 of the result we find the value
\r
130 if column == 'sigma contour length':
\r
131 self.multipliers[column] = self.multipliers['Contour length']
\r
132 elif column == 'sigma Kuhn length':
\r
133 self.multipliers[column] = self.multipliers['Kuhn length']
\r
135 self.multipliers[column] = prettyformat.get_multiplier(result[column])
\r
136 self.has_multipliers = True
\r
138 self.has_multipliers = False
\r
140 class ResultsMultiDistance(Results):
\r
141 def __init__(self):
\r
142 Results.__init__(self)
\r
143 self.columns = ['Distance']
\r
144 self.units['Distance'] = 'm'
\r
145 self.set_decimals(2)
\r
148 if (self.results) > 0:
\r
149 for result in self.results:
\r
151 reference_peak = result.x
\r
154 for result in self.results:
\r
156 result.result['Distance'] = reference_peak - result.x
\r
157 reference_peak = result.x
\r
159 result.result['Distance'] = nan
\r
162 class ResultsWLC(Results):
\r
163 def __init__(self):
\r
164 Results.__init__(self)
\r
165 self.columns = ['Contour length', 'sigma contour length', 'Persistence length', 'sigma persistence length', 'Rupture force', 'Slope', 'Loading rate']
\r
166 self.units['Contour length'] = 'm'
\r
167 self.units['sigma contour length'] = 'm'
\r
168 self.units['Persistence length'] = 'm'
\r
169 self.units['sigma persistence length'] = 'm'
\r
170 self.units['Rupture force'] = 'N'
\r
171 self.units['Slope'] = 'N/m'
\r
172 self.units['Loading rate'] = 'N/s'
\r
173 self.set_decimals(2)
\r
175 def set_multipliers(self, index=0):
\r
176 if self.has_results():
\r
177 for column in self.columns:
\r
178 #result will contain the results dictionary at 'index'
\r
179 result = self.results[index].result
\r
180 #in position 0 of the result we find the value
\r
181 if column == 'sigma contour length':
\r
182 self.multipliers[column] = self.multipliers['Contour length']
\r
183 elif column == 'sigma persistence length':
\r
184 self.multipliers[column] = self.multipliers['Persistence length']
\r
186 self.multipliers[column] = prettyformat.get_multiplier(result[column])
\r
187 self.has_multipliers = True
\r
189 self.has_multipliers = False
\r