Summary
Integrate a forward-simulation tool into the app for experiment design, as a DBA-only spike. Add a Simulator dialog launched from a menu/toolbar action, with parameter inputs (Ka, I0, I_dye_free, I_dye_bound, h0, d0) driving a live-updating PyQtGraph titration curve. Reuse the existing, tested forward model in core/models/equilibrium.py (dba_signal). Do not port the standalone applet's Tkinter UI or its duplicate forward_model.py math.
Source
Reported via the fitting-app feedback channel. (Supersedes the standalone Tkinter simulation applet.)
Acceptance criteria
Scope & file boundaries
Package C (bundled with the "Save data template" unit; they share only main_window.py in one session). Touch:
- new
gui/dialogs/simulator_dialog.py
gui/main_window.py (launch action)
- reuse
core/models/equilibrium.py (read-only)
Must NOT modify plotting widgets, fitting_session.py, or the fit pipeline.
Parallelization
Package C — runs in parallel with packages A, B, D.
Summary
Integrate a forward-simulation tool into the app for experiment design, as a DBA-only spike. Add a Simulator dialog launched from a menu/toolbar action, with parameter inputs (Ka, I0, I_dye_free, I_dye_bound, h0, d0) driving a live-updating PyQtGraph titration curve. Reuse the existing, tested forward model in
core/models/equilibrium.py(dba_signal). Do not port the standalone applet's Tkinter UI or its duplicateforward_model.pymath.Source
Reported via the fitting-app feedback channel. (Supersedes the standalone Tkinter simulation applet.)
Acceptance criteria
core/modelsdba_signal.uv run ruff check/formatclean.Scope & file boundaries
Package C (bundled with the "Save data template" unit; they share only
main_window.pyin one session). Touch:gui/dialogs/simulator_dialog.pygui/main_window.py(launch action)core/models/equilibrium.py(read-only)Must NOT modify plotting widgets,
fitting_session.py, or the fit pipeline.Parallelization
Package C — runs in parallel with packages A, B, D.