use super::extinction::{ExtinctionIngredients, MolecularAbsorption};
use super::model::AirmassModel;
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub struct TransportModelMetadata {
pub model_id: &'static str,
pub rayleigh: bool,
pub mie: bool,
pub absorption: MolecularAbsorption,
pub airmass_model_id: &'static str,
pub approximation: &'static str,
pub validated_domain: &'static str,
pub provenance: &'static str,
pub uncertainty: &'static str,
}
impl TransportModelMetadata {
pub(crate) fn identity() -> Self {
Self {
model_id: "identity",
rayleigh: false,
mie: false,
absorption: MolecularAbsorption::None,
airmass_model_id: "none",
approximation: "exact-within-representation",
validated_domain: "any finite typed spectral radiance; atmosphere ignored",
provenance: concat!(
"NSB identity atmospheric transport; no extinction or scattering; ",
"output equals input within the quantity representation"
),
uncertainty: "absent",
}
}
pub(crate) fn direct(ingredients: ExtinctionIngredients, airmass: AirmassModel) -> Self {
Self {
model_id: "direct-transmission",
rayleigh: ingredients.rayleigh,
mie: ingredients.mie,
absorption: ingredients.absorption,
airmass_model_id: airmass.as_str(),
approximation: "clear-sky-single-column",
validated_domain: concat!(
"clear-sky celestial direct path; zenith in [0, 90] degrees; ",
"individual airmass formulas may be weakly validated near the horizon; ",
"not a site-calibrated extinction law"
),
provenance: concat!(
"NSB direct atmospheric transport composing Siderust Bodhaine Rayleigh, ",
"Patat Mie, optional Siderust ozone transmittance table, and Siderust ",
"Beer–Lambert transmission; NSB local-pressure Rayleigh helper avoids ",
"double-counting site-profile surface pressure with altitude"
),
uncertainty: "absent",
}
}
}