pub fn cross_sections_at_energy(
data: &ResonanceData,
energy_ev: f64,
) -> CrossSectionsExpand description
Compute cross-sections at a single energy.
Dispatches each resonance range to the appropriate formalism-specific
calculator (SLBW, MLBW, Reich-Moore) based on the formalism stored in
that range; non-evaluable ranges (LRF=7, LRU=2) resolve to Skip and
contribute zero. See the module-level table for the full dispatch map.
Adjacent ranges that share a boundary energy use half-open intervals
[e_low, e_high) so the boundary point is counted exactly once
(ENDF-6 §2 convention).
Shares the same precompute+evaluate pipeline as
cross_sections_on_grid — both entry points call the same
(private) precompute_range_data and evaluate_precomputed_range
helpers, so there is exactly one dispatch table per formalism in
the codebase. The difference is that this entry point does not
store precomputed plans in an outer Vec (unnecessary when only
one energy is evaluated), and it skips the precompute entirely
for ranges whose energy interval excludes energy_ev. Per-call
overhead is therefore close to — though not exactly — the
pre-consolidation per-point path; a small residual cost remains
because each matching range is wrapped in a PrecomputedRangeData
before evaluation. Measured A.1 LM+grouped walltime on real
VENUS Hf 120 min data: 1.37 s (pre-consolidation) → 1.42 s (this
path), ≈ 3.6 % overhead.
§Arguments
data— Parsed resonance parameters from ENDF.energy_ev— Neutron energy in eV (lab frame).
§Returns
Cross-sections in barns.
§Panics
Panics if energy_ev is non-finite or non-positive. The SLBW leaf
routine already enforces this precondition in release builds; hoisting
the same assert to the top-level pub fn keeps the public contract
symmetric so direct Rust callers cannot bypass validation by hitting a
range that gates entry on a finite-only check (e.g. a pure-RM range with
no SLBW leaf would otherwise silently return zeros when handed NaN).