fpm_rs/tabular/tables/
evaluation.rs1use polars::prelude::*;
2
3use crate::{Result, evaluation::FrameIntensityEvaluation};
4
5pub fn frame_evaluation_dataframe(
7 run_id: &str,
8 evaluation: &FrameIntensityEvaluation,
9) -> Result<DataFrame> {
10 let length = evaluation.per_frame.len();
11 let mut run_ids = Vec::with_capacity(length);
12 let mut frame_indices = Vec::with_capacity(length);
13 let mut reference_sums = Vec::with_capacity(length);
14 let mut estimate_sums = Vec::with_capacity(length);
15 let mut residual_l1 = Vec::with_capacity(length);
16 let mut residual_l2 = Vec::with_capacity(length);
17 let mut residual_mean = Vec::with_capacity(length);
18 let mut residual_std = Vec::with_capacity(length);
19 let mut residual_max_abs = Vec::with_capacity(length);
20 let mut normalized_l2 = Vec::with_capacity(length);
21 let mut saturated_pixels = Vec::with_capacity(length);
22 for (frame, metrics) in evaluation.per_frame.iter().enumerate() {
23 run_ids.push(run_id);
24 frame_indices.push(frame as u64);
25 reference_sums.push(metrics.reference_sum);
26 estimate_sums.push(metrics.estimate_sum);
27 residual_l1.push(metrics.residual_l1);
28 residual_l2.push(metrics.residual_l2);
29 residual_mean.push(metrics.residual_mean);
30 residual_std.push(metrics.residual_std);
31 residual_max_abs.push(metrics.residual_max_abs);
32 normalized_l2.push(metrics.normalized_l2);
33 saturated_pixels.push(metrics.saturated_pixels.map(|value| value as u64));
34 }
35 Ok(df!(
36 "run_id" => run_ids,
37 "frame_index" => frame_indices,
38 "reference_sum" => reference_sums,
39 "estimate_sum" => estimate_sums,
40 "residual_l1" => residual_l1,
41 "residual_l2" => residual_l2,
42 "residual_mean" => residual_mean,
43 "residual_std" => residual_std,
44 "residual_max_abs" => residual_max_abs,
45 "normalized_l2" => normalized_l2,
46 "saturated_pixels" => saturated_pixels,
47 )?)
48}