Summary
Add aggregated statistics across all accepted fits to the Fitted Parameters table. Today the table shows Value (= median of accepted fits) and ± Uncertainty (optimiser) (which is actually the MAD, median absolute deviation). Display two clearly-labelled stat pairs per parameter — Median ± MAD (robust) and Mean ± STDEV (classical) — computed from the already-stored accepted-fit pool (FitResult.parameter_samples, no re-fit). Add an info-box note explaining that MAD ≠ STDEV (for a clean Gaussian pool STDEV ≈ 1.48×MAD; they diverge with outliers/skew), and an interpretation aid for the user.
Source
Reported via the fitting-app feedback channel.
Acceptance criteria
Scope & file boundaries
Package A (independent). Touch only:
gui/plotting/fit_summary_widget.py
- (optional) pure helpers
compute_mean_params / compute_std_params in core/optimizer/filters.py
Must NOT modify plot_widget.py, distribution_widget.py, fit_pipeline.py, or fitting_session.py (owned by other packages).
Parallelization
Independent — runs in parallel with packages B, C, D.
Summary
Add aggregated statistics across all accepted fits to the Fitted Parameters table. Today the table shows Value (= median of accepted fits) and ± Uncertainty (optimiser) (which is actually the MAD, median absolute deviation). Display two clearly-labelled stat pairs per parameter — Median ± MAD (robust) and Mean ± STDEV (classical) — computed from the already-stored accepted-fit pool (
FitResult.parameter_samples, no re-fit). Add an info-box note explaining that MAD ≠ STDEV (for a clean Gaussian pool STDEV ≈ 1.48×MAD; they diverge with outliers/skew), and an interpretation aid for the user.Source
Reported via the fitting-app feedback channel.
Acceptance criteria
FitResult.parameter_samples(no re-fitting).uv run ruff check/formatclean.Scope & file boundaries
Package A (independent). Touch only:
gui/plotting/fit_summary_widget.pycompute_mean_params/compute_std_paramsincore/optimizer/filters.pyMust NOT modify
plot_widget.py,distribution_widget.py,fit_pipeline.py, orfitting_session.py(owned by other packages).Parallelization
Independent — runs in parallel with packages B, C, D.