@@ -49,6 +49,7 @@ def weights(self) -> FArray:
4949
5050
5151class 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
0 commit comments