pub fn forward_model_from_base_xs(
energies: &[f64],
base_xs: &[Vec<f64>],
resonance_data: &[ResonanceData],
thicknesses: &[f64],
temperature_k: f64,
instrument: Option<&InstrumentParams>,
) -> Result<Vec<f64>, TransmissionError>Expand description
Compute a transmission spectrum from precomputed unbroadened cross-sections.
Applies Doppler broadening and Beer-Lambert using cached base XS,
then resolution broadening on the total transmission (issue #442).
This skips the expensive Reich-Moore calculation, making it suitable
for use inside TransmissionFitModel::evaluate() when temperature
is a free parameter.
Pipeline:
- Doppler-broaden base σ (via
broadened_cross_sections_from_base) - Accumulate total attenuation: Σᵢ nᵢ·σ_{D,i}
- Beer-Lambert: T = exp(−attenuation)
- Resolution: T_broad = R ⊗ T (when instrument is present)