Skip to main content

nyx_space/od/position/
mod.rs

1pub mod sensitivity;
2pub mod trk_device;
3
4use crate::io::ConfigRepr;
5use crate::od::msr::MeasurementType;
6use crate::od::noise::StochasticNoise;
7use indexmap::IndexMap;
8use indexmap::IndexSet;
9use serde::{Deserialize, Serialize};
10use std::fmt::Display;
11
12/// Position device can be used to post-filter position measurements from GNSS/GPS devices.
13#[derive(Clone, Debug, Serialize, Deserialize)]
14pub struct PositionDevice {
15    pub name: String,
16    pub stochastic_noises: Option<IndexMap<MeasurementType, StochasticNoise>>,
17    pub measurement_types: IndexSet<MeasurementType>,
18}
19
20impl PositionDevice {
21    pub fn new(name: String) -> Self {
22        Self {
23            name,
24            stochastic_noises: None,
25            measurement_types: IndexSet::new(),
26        }
27    }
28
29    pub fn with_noise(mut self, msr_type: MeasurementType, noise: StochasticNoise) -> Self {
30        if self.stochastic_noises.is_none() {
31            self.stochastic_noises = Some(IndexMap::new());
32        }
33        self.stochastic_noises
34            .as_mut()
35            .unwrap()
36            .insert(msr_type, noise);
37        self.measurement_types.insert(msr_type);
38        self
39    }
40}
41
42impl ConfigRepr for PositionDevice {}
43
44impl Display for PositionDevice {
45    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
46        write!(f, "PositionDevice({})", self.name)
47    }
48}