use super::*;
use alpha_g_detector::padwing::{
map::{TpcPadColumn, TpcPadRow, TPC_PAD_COLUMNS, TPC_PAD_ROWS},
PWB_MAX, PWB_MIN,
};
fn all_within_limits(run_number: u32) -> bool {
for row in 0..TPC_PAD_ROWS {
let row = TpcPadRow::try_from(row).unwrap();
for column in 0..TPC_PAD_COLUMNS {
let column = TpcPadColumn::try_from(column).unwrap();
let pad_position = TpcPadPosition { row, column };
let baseline = try_pad_baseline(run_number, pad_position);
if let Ok(baseline) = baseline {
if !(PWB_MIN..=PWB_MAX).contains(&baseline) {
return false;
}
}
}
}
true
}
#[test]
fn all_within_limits_in_baseline_map() {
assert!(all_within_limits(9277));
assert!(all_within_limits(11084));
assert!(all_within_limits(u32::MAX));
}
#[test]
fn try_pad_baseline_map_error() {
for run_number in [0, 9276] {
for row in 0..TPC_PAD_ROWS {
let row = TpcPadRow::try_from(row).unwrap();
for column in 0..TPC_PAD_COLUMNS {
let column = TpcPadColumn::try_from(column).unwrap();
let pad_position = TpcPadPosition { row, column };
assert!(try_pad_baseline(run_number, pad_position).is_err());
}
}
}
}
#[test]
fn try_pad_baseline_correctness_9277() {
let mut missing = 0;
for row in 0..TPC_PAD_ROWS {
let row = TpcPadRow::try_from(row).unwrap();
for column in 0..TPC_PAD_COLUMNS {
let column = TpcPadColumn::try_from(column).unwrap();
let pad_position = TpcPadPosition { row, column };
let baseline = try_pad_baseline(9277, pad_position);
if baseline.is_err() {
missing += 1;
}
}
}
assert_eq!(missing, 721);
assert_eq!(
try_pad_baseline(
9277,
TpcPadPosition {
row: TpcPadRow::try_from(0).unwrap(),
column: TpcPadColumn::try_from(0).unwrap(),
}
)
.unwrap(),
1665
);
assert_eq!(
try_pad_baseline(
9277,
TpcPadPosition {
row: TpcPadRow::try_from(429).unwrap(),
column: TpcPadColumn::try_from(14).unwrap(),
}
)
.unwrap(),
1729
);
assert_eq!(
try_pad_baseline(
9277,
TpcPadPosition {
row: TpcPadRow::try_from(200).unwrap(),
column: TpcPadColumn::try_from(5).unwrap(),
}
)
.unwrap(),
1714
);
}
#[test]
fn try_pad_baseline_correctness_11084() {
assert_eq!(
try_pad_baseline(
11084,
TpcPadPosition {
row: TpcPadRow::try_from(0).unwrap(),
column: TpcPadColumn::try_from(0).unwrap(),
}
)
.unwrap(),
1679
);
}
#[test]
fn try_pad_baseline_correctness_sim() {
for column in 0..TPC_PAD_COLUMNS {
let column = TpcPadColumn::try_from(column).unwrap();
for row in 0..TPC_PAD_ROWS {
let row = TpcPadRow::try_from(row).unwrap();
let pad_position = TpcPadPosition { row, column };
let baseline = try_pad_baseline(u32::MAX, pad_position).unwrap();
assert_eq!(baseline, 1725);
}
}
}