1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// SPDX-License-Identifier: AGPL-3.0-only
// Copyright (C) 2026 Vallés Puig, Ramon
//! Empirical continuum airglow component.
//!
//! Airglow is terrestrial atmospheric emission and a natural part of the night
//! sky background. NSB supports geometry at arbitrary valid Earth locations,
//! but geographic support is not scientific site calibration.
//!
//! # Model selection
//!
//! Configuration distinguishes **automatic** selection
//! ([`AirglowSelection::Automatic`]) from **explicit** caller selection
//! ([`AirglowSelection::Explicit`]). Explicit selection always wins and never
//! silently switches models. Automatic selection is deterministic; until the
//! global climatological model (#157) is admitted it resolves to the temporary
//! Paranal-derived planning fallback with that fallback visible in
//! [`AirglowSelectionMetadata`] via [`AirglowFallbackReason`].
//!
//! The bundled PALACE v1.0 Paranal unresolved-continuum product remains a
//! supported explicit legacy/reference model and the temporary automatic
//! fallback. It is not intrinsically the generic global scientific contract.
//! Future climatology adds a new [`AirglowModel`] variant when admitted — the
//! enum is `#[non_exhaustive]` so no speculative public placeholder is frozen.
//!
//! # Outcome semantics
//!
//! [`AirglowSelectionMetadata`] is known from configuration (and current
//! construction-time resolution). [`AirglowEvaluationOutcome`] is known only
//! after a time-dependent evaluation. [`crate::NsbEvaluator::describe_components`]
//! must not invent an evaluation outcome.
//!
//! Physical zero (for example outside astronomical night), invalid
//! input/configuration, and deliberate automatic fallback are distinct.
//! Invalid inputs error; they are never converted into a plausible zero
//! radiance — even when the query is outside astronomical night.
//!
//! This module is the deliberately narrow advanced Airglow configuration API.
//! Normal applications select the scientific model and configure geometry through
//! [`crate::NsbModelConfig`], then evaluate with [`crate::NsbEvaluator`]; they do
//! not construct component evaluators or continuum calibrations directly.
//!
//! Van Rhijn is the unchanged default thin-shell approximation. A validated
//! [`VerticalEmissionProfile`] can instead be selected through
//! [`AirglowGeometryModel::VerticalProfile`]. Emitting-volume geometry is
//! independent of the Noll Rayleigh/Mie atmospheric attenuation stage and does
//! not change calibration maturity.
pub
pub
pub
pub use AirglowContinuum;
pub use AirglowNightPhase;
pub use NOLL_AIRGLOW_SCATTERING_FIT_MAX_ZENITH_DEG;
pub use ;
pub use Airglow;
pub use AirglowModel;
pub use AirglowOutputs;
pub use ;
pub use ;