use crate::coordinates::centers::Geodetic;
use crate::coordinates::frames::ECEF;
use crate::qtty::{Degrees, Hectopascals, Kelvins, Meters};
pub struct Observatory {
pub name: &'static str,
pub geodetic: Geodetic<ECEF>,
pub reference_pressure: Hectopascals,
pub reference_temperature: Option<Kelvins>,
pub reference_relative_humidity: Option<f64>,
}
impl Observatory {
#[inline]
pub const fn geodetic(&self) -> Geodetic<ECEF> {
self.geodetic
}
}
pub const ROQUE_DE_LOS_MUCHACHOS: Observatory = Observatory {
name: "Roque de los Muchachos Observatory",
geodetic: Geodetic::new_raw(
Degrees::new(-17.8925),
Degrees::new(28.7543),
Meters::new(2396.0),
),
reference_pressure: Hectopascals::new(744.0),
reference_temperature: None,
reference_relative_humidity: None,
};
pub const EL_PARANAL: Observatory = Observatory {
name: "El Paranal Observatory",
geodetic: Geodetic::new_raw(
Degrees::new(-70.4043),
Degrees::new(-24.6272),
Meters::new(2635.0),
),
reference_pressure: Hectopascals::new(744.0),
reference_temperature: None,
reference_relative_humidity: None,
};
pub const MAUNA_KEA: Observatory = Observatory {
name: "Mauna Kea Observatory",
geodetic: Geodetic::new_raw(
Degrees::new(-155.4681),
Degrees::new(19.8207),
Meters::new(4207.0),
),
reference_pressure: Hectopascals::new(614.0),
reference_temperature: None,
reference_relative_humidity: None,
};
pub const LA_SILLA_OBSERVATORY: Observatory = Observatory {
name: "La Silla Observatory",
geodetic: Geodetic::new_raw(
Degrees::new(-70.7346),
Degrees::new(-29.2584),
Meters::new(2400.0),
),
reference_pressure: Hectopascals::new(744.0),
reference_temperature: None,
reference_relative_humidity: None,
};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn el_paranal_reference_pressure() {
assert_eq!(
EL_PARANAL.reference_pressure.value(),
744.0,
"El Paranal reference pressure should be 744 hPa (NSB_Utils.py:59)"
);
}
#[test]
fn roque_de_los_muchachos_reference_pressure() {
assert_eq!(
ROQUE_DE_LOS_MUCHACHOS.reference_pressure.value(),
744.0,
"Roque de los Muchachos reference pressure should be 744 hPa (NSB_Utils.py:59)"
);
}
#[test]
fn mauna_kea_reference_pressure() {
assert_eq!(
MAUNA_KEA.reference_pressure.value(),
614.0,
"Mauna Kea reference pressure should be ~614 hPa at 4207 m altitude"
);
}
#[test]
fn la_silla_reference_pressure() {
assert_eq!(
LA_SILLA_OBSERVATORY.reference_pressure.value(),
744.0,
"La Silla reference pressure should be 744 hPa"
);
}
#[test]
fn el_paranal_optional_atmosphere_unset() {
assert!(
EL_PARANAL.reference_temperature.is_none(),
"El Paranal reference temperature must stay None until a cited value is wired in"
);
assert!(
EL_PARANAL.reference_relative_humidity.is_none(),
"El Paranal reference relative humidity must stay None until a cited value is wired in"
);
}
#[test]
fn roque_de_los_muchachos_optional_atmosphere_unset() {
assert!(
ROQUE_DE_LOS_MUCHACHOS.reference_temperature.is_none(),
"ORM reference temperature must stay None until a cited value is wired in"
);
assert!(
ROQUE_DE_LOS_MUCHACHOS.reference_relative_humidity.is_none(),
"ORM reference relative humidity must stay None until a cited value is wired in"
);
}
#[test]
fn mauna_kea_optional_atmosphere_unset() {
assert!(MAUNA_KEA.reference_temperature.is_none());
assert!(MAUNA_KEA.reference_relative_humidity.is_none());
}
#[test]
fn la_silla_optional_atmosphere_unset() {
assert!(LA_SILLA_OBSERVATORY.reference_temperature.is_none());
assert!(LA_SILLA_OBSERVATORY.reference_relative_humidity.is_none());
}
}