parse_monitors/pressure/
mod.rs

1/*!
2# Pressure on the telescope mount and mirror segments
3
4## Examples
5Loading telescope mount pressure
6```no_run
7let telescope =
8    Telescope::from_path("data/Telescope_p_telescope_7.000000e+02.csv.z").unwrap();
9println!("{telescope}");
10```
11Converting telescope pressure data into a R-Tree
12```no_run
13let telescope =
14    Telescope::from_path("data/Telescope_p_telescope_7.000000e+02.csv.z").unwrap();
15println!("{telescope}");
16let rtree = telescope.to_rtree();
17let node = rtree.locate_at_point(&[-6.71743755562523, 1.18707466192993, -4.88465284781676]);
18assert_eq!(
19    node.unwrap().clone(),
20    Node {
21        pressure: -7.29796930557952,
22        area_ijk: [
23            1.81847333261638e-06,
24            1.84800982152254e-06,
25            0.0126174546658134,
26            ],
27            xyz: [-6.71743755562523, 1.18707466192993, -4.88465284781676],
28        }
29    );
30```
31*/
32
33mod mirrors;
34pub use mirrors::*;
35mod telescope;
36use serde::Deserialize;
37pub use telescope::*;
38
39#[derive(thiserror::Error, Debug)]
40pub enum PressureError {
41    #[cfg(feature = "bzip2")]
42    #[error("Failed to decompress the file")]
43    Decompress(#[from] bzip2::Error),
44    #[error("Failed to open the pressure file")]
45    Io(#[from] std::io::Error),
46    #[error("Failed to deserialize the CSV file")]
47    Csv(#[from] csv::Error),
48    #[error("Failed to apply geometric transformation")]
49    Geotrans(#[from] geotrans::Error),
50    #[error("Missing decompression protocol")]
51    Decompression,
52}
53type Result<T> = std::result::Result<T, PressureError>;
54
55#[derive(Deserialize, Debug, PartialEq)]
56struct Record {
57    #[serde(rename = "Area in TCS[i] (m^2)")]
58    area_i: f64,
59    #[serde(rename = "Area in TCS[j] (m^2)")]
60    area_j: f64,
61    #[serde(rename = "Area in TCS[k] (m^2)")]
62    area_k: f64,
63    //#[serde(rename = "Area: Magnitude (m^2)")]
64    //area: f64,
65    #[serde(rename = "Pressure (Pa)")]
66    pressure: f64,
67    #[serde(rename = "X (m)")]
68    x: f64,
69    #[serde(rename = "Y (m)")]
70    y: f64,
71    #[serde(rename = "Z (m)")]
72    z: f64,
73}