pub struct JointPoissonFitConfig {
pub max_iter: usize,
pub lambda_init: f64,
pub lambda_up: f64,
pub lambda_down: f64,
pub armijo_c: f64,
pub backtrack: f64,
pub tol_d: f64,
pub tol_param: f64,
pub fd_step: f64,
pub enable_polish: bool,
pub polish: NelderMeadConfig,
pub compute_covariance: bool,
}Expand description
Configuration for joint_poisson_fit.
Fields§
§max_iter: usizeMaximum number of damped-Fisher iterations in stage 1.
lambda_init: f64Initial damping factor (Marquardt λ) on the Fisher matrix diagonal.
lambda_up: f64Multiplicative factor to increase λ on a rejected step.
lambda_down: f64Multiplicative factor to decrease λ on an accepted step.
armijo_c: f64Armijo sufficient-decrease coefficient.
backtrack: f64Backtracking factor during line search.
tol_d: f64Convergence tolerance on relative deviance change.
tol_param: f64Convergence tolerance on normalized parameter step.
fd_step: f64Finite-difference step for gradient fallback.
enable_polish: boolEnable Nelder-Mead polish after stage 1.
Default false as of #486. The polish tolerances
(xatol = 1e-9, fatol = 1e-10) were originally matched to the
EG5 synthetic benchmark (memo 35 §P2.1) where D stays O(1), so
fatol is physically meaningful. On real-data regimes where
D saturates at 10⁴–10⁵ (un-modelled upstream physics —
memo 35 §P3/§P4), fatol / D drops below f64 ULP and polish
cannot self-terminate — it burns its full max_iter = 5000
every fit at 70–260× wall cost, and the three-scenario
ablation on real VENUS Hf 120-min data (issue #486) showed
the resulting parameter shift is ≤ 0.35 Fisher σ on every
parameter in every scenario — i.e. below the solver’s own
reported uncertainty floor.
The polish mechanism itself is sound (self-terminates cleanly
on synthetic D≈1 data per ablation S3); only the absolute
tolerance defaults are mis-calibrated for real counts data.
A future scale-aware rescale (fatol_rel vs D_stage1) can
re-enable polish as a useful opt-in refinement.
Set this to true (via with_counts_enable_polish(Some(true))
at the pipeline level) when you specifically want the polish
stage on a synthetic / clean-data scenario where the absolute
tolerance defaults are physically meaningful.
polish: NelderMeadConfigPolish (Nelder-Mead) configuration. Used only when
enable_polish == true. Default xatol = 1e-9, fatol = 1e-10
match the EG5 synthetic benchmark tolerances from memo 35 §P2.1
— physically meaningful when D ≈ 1 (clean data) but sub-f64-
ULP on real counts where D ≈ 10⁴–10⁵, which is why
enable_polish defaults to false. See #486.
compute_covariance: boolCompute and return the Fisher covariance and parameter uncertainties.
Trait Implementations§
Source§impl Clone for JointPoissonFitConfig
impl Clone for JointPoissonFitConfig
Source§fn clone(&self) -> JointPoissonFitConfig
fn clone(&self) -> JointPoissonFitConfig
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for JointPoissonFitConfig
impl Debug for JointPoissonFitConfig
Auto Trait Implementations§
impl Freeze for JointPoissonFitConfig
impl RefUnwindSafe for JointPoissonFitConfig
impl Send for JointPoissonFitConfig
impl Sync for JointPoissonFitConfig
impl Unpin for JointPoissonFitConfig
impl UnsafeUnpin for JointPoissonFitConfig
impl UnwindSafe for JointPoissonFitConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more