rxnfit.expdata_fit module
Estimate unknown rate constants from experimental concentration trajectories.
Minimizers in scipy.optimize drive repeated ODE integrations through
rxnfit.solver_backend.solve_ode(); see there for LSODA / numbalsoda
behavior and SciPy fallbacks.
- class rxnfit.expdata_fit.ExpDataFit(builded_rxnode, df_list, t_range, method='RK45', rtol=1e-06, df_names=None)
Bases:
objectHigh-level façade over pooled least-squares fits and post-fit replay.
Internally drives
solve_fit_model_multi()and exposes helpers compatible withRxnODEsolver.- get_fitted_rate_const_dict(result=None)
Map symbolic names to optimized numeric rates.
- Parameters:
result – External
OptimizeResultorNoneto reuse cached output.- Returns:
Plain dict mergeable back into
builded_rxnode.rate_consts_dict.- Raises:
RuntimeError – Missing prior optimization state.
- get_solver_config_args(dataset_index=0)
Build kwargs for
SolverConfigpost-fit.- Parameters:
dataset_index – Which pooled dataset supplies
y0/t0.- Returns:
Mapping with
y0,t_span, integrator knobs, plus optional callable rate hooks for time-dependent kinetics.- Raises:
RuntimeError – If
run_fit()has not finished and stored state, or (when kinetics are time-dependent)_resultis missing before building the evaluator.
- plot_fitted_solution(expdata_df: DataFrame | List[DataFrame] | None = None, plot_datasets: List[str] | None = None, species: List[str] | None = None, subplot_layout: tuple | None = None)
Replay best parameters with overlays mirroring
plot_time_course_solutions.- Parameters:
expdata_df – Optional replacement overlay tables; defaults to inputs.
plot_datasets – Subset selector against
df_names.species – Restrict plotted columns;
Nonekeeps all.subplot_layout – Manual subplot grid sizing.
- Returns:
None- Raises:
RuntimeError – Missing fit artifacts.
ValueError – Unknown dataset labels or dataframe shape mismatches.
- run_fit(p0, opt_method='L-BFGS-B', bounds=None, verbose=True, use_log_fit=False, lower_bound=None)
Optimize rate constants via
scipy.optimize.minimize().- Parameters:
p0 – Sequence aligned with symbolic keys or explicit name→value mapping. Log-space mode rejects non-positive entries.
opt_method – SciPy method string forwarded unchanged.
bounds – Box constraints for linear mode; superseded under log-fit.
verbose – Toggle progress printing.
use_log_fit – Optimize
log(k)internally while exposing lineark.lower_bound – Optional shared positivity floor (mode dependent).
- Returns:
(OptimizeResult-like, param_info, metrics_dict).- Raises:
ValueError – Invalid seeds, bounds, or incompatible log guesses.
- to_dataframe_list(time_column_name='time')
Materialize every replayed trajectory via
_ode_result_to_dataframe().- Parameters:
time_column_name – Leading column label for timestamps.
- Returns:
Parallel list mixing
pandas.DataFrameentries andNoneholes.- Raises:
RuntimeError – Missing optimized state.
- rxnfit.expdata_fit.run_fit_multi(builded_rxnode, df_list, p0, t_range=None, method='RK45', rtol=1e-06, df_names=None, opt_method='L-BFGS-B', bounds=None, verbose=True, use_log_fit=False, lower_bound=None)
Stateful-free shortcut constructing
ExpDataFitthenrun_fit().When
t_rangeis omitted it becomes the min/max of the first dataframe’s time column.- Parameters:
builded_rxnode – Reaction scaffold.
df_list – Experimental bundle.
p0 – Seeds understood by
ExpDataFit.run_fit().t_range – Optional manual span tuple.
method – Forwarded to the constructor.
rtol – Forwarded to the constructor.
df_names – Forwarded to the constructor.
opt_method – Forwarded to
run_fit().bounds – Forwarded to
run_fit().verbose – Forwarded to
run_fit().use_log_fit – Forwarded to
run_fit().lower_bound – Forwarded to
run_fit().
- Returns:
Same triple as
ExpDataFit.run_fit().- Raises:
ValueError – Validation errors bubbled up from pooling or SciPy phases.
- rxnfit.expdata_fit.solve_fit_model(builded_rxnode, fixed_initial_values, t_span, method='RK45', rtol=1e-06)
Build
f(t, *params)that predicts species trajectories during fitting.Bare symbolic rate constants (
Symbol) are optimized viaparams; every otherrate_consts_dictentry (numbers, expressions, etc.) stays in the merged constants dict passed to the RHS.fixed_initial_valuesare fixed ICs.- Parameters:
builded_rxnode – Configured reaction network.
fixed_initial_values – Species IC vector aligned with
function_names.t_span – Global integration window covering every experimental time.
method – Passed through to
solve_ode().rtol – Relative tolerance for integrations.
- Returns:
functools.partial wrapping
_eval_ode_fit()plus aparam_infodict attached as attributeparam_info.- Raises:
ValueError – Wrong IC length versus species count.
- rxnfit.expdata_fit.solve_fit_model_multi(builded_rxnode, df_list, t_span, method='RK45', rtol=1e-06, df_names=None)
Prepare multi-experiment residuals sharing one kinetic parameter vector.
Each DataFrame yields its own
(y0, t0); integrations stop att_span[1].- Parameters:
builded_rxnode – Configured reaction network.
df_list – Homogeneous experimental tables (time + species columns).
t_span – Global window enclosing every observation time.
method – Passed to
solve_ode().rtol – Relative integration tolerance.
df_names – Optional labels; see
_resolve_df_names().
- Returns:
(residual_func, param_info, fit_ctx)whereresidual_func(params)returns the summed squared error andfit_ctxbacks plotting helpers.- Raises:
ValueError – Empty
df_listor invalid column layout.