Skip to content

Commit b365c04

Browse files
improved return of stdev values after fitting
1 parent f6bd845 commit b365c04

2 files changed

Lines changed: 29 additions & 9 deletions

File tree

src/libeq/optimizers/potentiometry.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ def weights(self) -> FArray:
4949

5050

5151
class PotentiometryBridge:
52+
bridge.incorporate_stdev(stdev)
5253
def __init__(self, data: SolverData, reporter) -> None:
5354
self._data = data
5455
self._reporter = reporter
@@ -151,13 +152,26 @@ def final_result(self) -> dict:
151152
variables = self._variables.copy()
152153
variables[self._slice_betas] /= LN10
153154

154-
fvals = self.final_values()
155+
istd = next(self.stdev)
156+
157+
err_log_beta = [next(istd)/consts.LN10 if f == Flags.REFINE else None
158+
for f in self._data.potentiometry_opts.beta_flags]
159+
160+
err_titr_parms = [
161+
[
162+
[next(istd) if c0f == Flags.REFINE else None for c0f in t.c0_flags],
163+
[next(istd) if ctf == Flags.REFINE else None for c0f in t.c0_flags]
164+
] for t in self._titrations() ]
165+
166+
# fvals = self.final_values()
155167
eactive = libemf.hselect(self._freeconcentration, self._hindices)
156168

157169
retval = {
158170
'final variables': variables,
159-
'final log beta': next(fvals),
160-
'final titration parameters': list(fvals),
171+
'final log beta': self._beta(),
172+
'error log beta': err_log_beta,
173+
'final titration parameters': list(self._titration_parameters()),
174+
'error titration parameters': err_titr_parms,
161175
'free concentration': self._freeconcentration,
162176
'slices': self._slices,
163177
'total concentration': self._analytical_concentration(),
@@ -169,9 +183,13 @@ def final_result(self) -> dict:
169183
return retval
170184

171185

172-
def final_values(self):
173-
yield self._beta()
174-
yield from self._titration_parameters()
186+
# def final_values(self):
187+
# yield self._beta()
188+
# yield from self._titration_parameters()
189+
190+
def incorporate_stdev(self, stdev):
191+
assert len(stdev) == len(self.variables)
192+
self.stdev = stdev
175193

176194
def matrices(self) -> tuple[FArray, FArray]:
177195
"""
@@ -396,12 +414,14 @@ def PotentiometryOptimizer(data: SolverData, reporter=None) -> dict[str, Any]:
396414
bridge: Bridge = PotentiometryBridge(data, reporter)
397415
fit_status, fit_result = libfit.levenberg_marquardt(bridge, debug=False)
398416

417+
stdev, cor, cov = fit_final_calcs(fit_result['jacobian'], fit_result['residuals'], bridge.weights())
418+
bridge.incorporate_stdev(stdev)
419+
399420
retval = bridge.final_result()
400421
retval.update(fit_result)
401-
stdev, cor, cov = fit_final_calcs(fit_result['jacobian'], fit_result['residuals'], bridge.weights())
402422
retval['covariance'] = cov
403423
retval['correlation'] = cor
404-
retval['error log beta'] = stdev[bridge._slice_betas] if bridge._any_beta_refined else None
424+
405425
return retval
406426

407427

tests/test_legacy.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
from libeq.data_structure import SolverData
44

55
def test_import_superquad():
6-
parsed_data = SolverData.load_from_superquad("data/hedtac.sup")
6+
parsed_data = SolverData.load_from_superquad("tests/data/hedtac.sup")

0 commit comments

Comments
 (0)