Skip to main content

nyx_space/od/position/
mod.rs

1pub mod sensitivity;
2pub mod trk_device;
3
4#[cfg(feature = "python")]
5pub mod python;
6
7use crate::io::ConfigRepr;
8use crate::od::msr::MeasurementType;
9use crate::od::noise::StochasticNoise;
10use anise::prelude::Frame;
11use indexmap::IndexMap;
12use indexmap::IndexSet;
13use serde::{Deserialize, Serialize};
14use std::fmt::Display;
15
16#[cfg(feature = "python")]
17use pyo3::prelude::*;
18
19/// Position device can be used to post-filter position measurements from GNSS/GPS devices.
20///
21/// For GNSS devices, ensure to set the PositionDevice frame in the ITRF93 frame, the closest realization
22/// to WSG84.
23#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
24#[cfg_attr(feature = "python", pyclass(from_py_object))]
25pub struct PositionDevice {
26    pub name: String,
27    pub frame: Frame,
28    pub stochastic_noises: Option<IndexMap<MeasurementType, StochasticNoise>>,
29    pub measurement_types: IndexSet<MeasurementType>,
30}
31
32impl PositionDevice {
33    pub fn new(name: String, frame: Frame) -> Self {
34        Self {
35            name,
36            frame,
37            stochastic_noises: None,
38            measurement_types: IndexSet::new(),
39        }
40    }
41
42    pub fn with_noise(mut self, msr_type: MeasurementType, noise: StochasticNoise) -> Self {
43        if self.stochastic_noises.is_none() {
44            self.stochastic_noises = Some(IndexMap::new());
45        }
46        self.stochastic_noises
47            .as_mut()
48            .unwrap()
49            .insert(msr_type, noise);
50        self.measurement_types.insert(msr_type);
51        self
52    }
53}
54
55impl ConfigRepr for PositionDevice {}
56
57impl Display for PositionDevice {
58    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
59        write!(
60            f,
61            "PositionDevice({}) in {}",
62            self.name,
63            self.frame.stripped()
64        )
65    }
66}