Skip to main content

celestial_time/transforms/precession/
mod.rs

1pub mod constants;
2pub mod iau2000;
3pub mod iau2006;
4
5use crate::{TimeResult, TT};
6use celestial_core::matrix::RotationMatrix3;
7
8#[derive(Debug, Clone, PartialEq)]
9pub struct PrecessionResult {
10    pub bias_matrix: RotationMatrix3,
11    pub precession_matrix: RotationMatrix3,
12    pub bias_precession_matrix: RotationMatrix3,
13    pub model: PrecessionModel,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq)]
17pub enum PrecessionModel {
18    IAU1976,
19    IAU2000,
20    IAU2006,
21}
22
23pub trait PrecessionCalculator {
24    fn precession_iau2000(&self) -> TimeResult<PrecessionResult>;
25
26    fn precession_iau2006(&self) -> TimeResult<PrecessionResult>;
27
28    fn precession(&self) -> TimeResult<PrecessionResult> {
29        self.precession_iau2006()
30    }
31
32    fn bias_precession_matrix(&self) -> TimeResult<RotationMatrix3> {
33        Ok(self.precession_iau2006()?.bias_precession_matrix)
34    }
35}
36
37impl PrecessionCalculator for TT {
38    fn precession_iau2000(&self) -> TimeResult<PrecessionResult> {
39        iau2000::calculate(self)
40    }
41
42    fn precession_iau2006(&self) -> TimeResult<PrecessionResult> {
43        iau2006::calculate(self)
44    }
45}