nyx_space/od/position/
mod.rs1pub 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#[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}