pub fn broadened_cross_sections_for_transmission(
energies: &[f64],
resonance_data: &[ResonanceData],
temperature_k: f64,
instrument: &InstrumentParams,
thickness_atoms_barn: f64,
cancel: Option<&AtomicBool>,
) -> Result<Vec<Vec<f64>>, TransmissionError>Expand description
Compute Doppler+resolution-broadened cross-sections using SAMMY’s Beer-Lambert-aware pipeline for transmission data.
For transmission data, SAMMY applies resolution broadening to the transmission T = exp(-nd×σ_D) rather than to σ_D directly. Due to Jensen’s inequality (the exponential is convex), direct σ broadening overestimates the effective cross section at resonance peaks. This function implements SAMMY’s correct pipeline:
- Evaluate unbroadened σ on extended grid
- Doppler-broaden σ → σ_D
- Convert to transmission: T = exp(-nd × σ_D)
- Resolution-broaden T → T_broadened
- Convert back: σ_eff = -ln(T_broadened) / nd
SAMMY Ref: DopplerAndResolutionBroadener.cpp — resolution broadening is applied after Beer-Lambert conversion in the SAMMY pipeline.
§Arguments
energies— Energy grid in eV (sorted ascending).resonance_data— Resonance parameters for each isotope.temperature_k— Sample temperature for Doppler broadening.instrument— Instrument resolution parameters.thickness_atoms_barn— Sample thickness n×d (atoms/barn). Must be > 0.cancel— Optional cancellation token.
§Returns
One effective cross-section vector per isotope on success.