alpha_g_physics/calibration/pads/
baseline.rs1use alpha_g_detector::padwing::map::TpcPadPosition;
2use lazy_static::lazy_static;
3use std::collections::HashMap;
4use thiserror::Error;
5
6includes! {
7 DATA_PATH = "../../../data/calibration/pads/baseline/";
8 BYTES_SIMULATION = "simulation_complete.ron",
11 BYTES_9277 = "9277_complete_handwritten_cherry_picked_see_commit.ron",
12 BYTES_11192 = "11192_complete.ron",
13}
14
15lazy_static! {
16 static ref MAP_SIMULATION: HashMap<TpcPadPosition, i16> = complete_from_bytes(BYTES_SIMULATION);
24 static ref MAP_9277: HashMap<TpcPadPosition, i16> = complete_from_bytes(BYTES_9277);
25 static ref MAP_11192: HashMap<TpcPadPosition, i16> = complete_from_bytes(BYTES_11192);
26}
27
28pub(crate) fn try_pad_baseline(
32 run_number: u32,
33 pad: TpcPadPosition,
34) -> Result<i16, MapPadBaselineError> {
35 let map = match run_number {
37 u32::MAX => &*MAP_SIMULATION,
39 11084.. => &*MAP_11192,
42 9277.. => &*MAP_9277,
43 _ => return Err(MapPadBaselineError::MissingMap { run_number }),
44 };
45
46 map.get(&pad)
47 .copied()
48 .ok_or(MapPadBaselineError::MissingPad { run_number, pad })
49}
50
51#[derive(Debug, Error)]
55pub enum MapPadBaselineError {
56 #[error("no pad baseline calibration available for run number `{run_number}`")]
57 MissingMap { run_number: u32 },
58 #[error("no baseline available for pad `{pad:?}` in run number `{run_number}`")]
59 MissingPad {
60 run_number: u32,
61 pad: TpcPadPosition,
62 },
63}
64
65fn complete_from_bytes(bytes: &[u8]) -> HashMap<TpcPadPosition, i16> {
66 let map: HashMap<TpcPadPosition, (f64, f64, usize)> = ron::de::from_bytes(bytes).unwrap();
68
69 map.into_iter()
70 .map(|(pad, (baseline, _, _))| (pad, baseline.round() as i16))
71 .collect()
72}
73
74#[cfg(test)]
80mod tests;