ringgrid 0.5.6

Pure-Rust detector for coded ring calibration targets
Documentation
use super::diagnostics::{count_inconsistent_remaining, estimate_adjacent_spacing_px};
use super::types::Trust;
use super::vote::resolve_id_conflicts;
use super::workspace::IdCorrectionWorkspace;

pub(super) fn cleanup_unverified_markers(ws: &mut IdCorrectionWorkspace<'_>) {
    if ws.config.remove_unverified {
        let mut i = 0usize;
        while i < ws.markers.len() {
            if !ws.trust[i].is_trusted() && ws.markers[i].id.is_some() {
                ws.markers.remove(i);
                ws.trust.remove(i);
                ws.outer_radii_px.remove(i);
                ws.stats.n_markers_removed += 1;
            } else {
                i += 1;
            }
        }
    } else {
        for i in 0..ws.markers.len() {
            if !ws.trust[i].is_trusted() && ws.markers[i].id.is_some() {
                ws.markers[i].id = None;
                ws.stats.n_ids_cleared += 1;
            }
        }
    }
}

pub(super) fn finalize_correction_stats(ws: &mut IdCorrectionWorkspace<'_>) {
    let n_conflicts_cleared = resolve_id_conflicts(ws.markers);
    ws.stats.n_ids_cleared += n_conflicts_cleared;

    for i in 0..ws.markers.len() {
        if ws.markers[i].id.is_none() {
            ws.trust[i] = Trust::Untrusted;
        }
    }

    ws.stats.n_verified = ws
        .markers
        .iter()
        .enumerate()
        .filter(|(i, m)| m.id.is_some() && ws.trust[*i].is_trusted())
        .count();

    ws.stats.n_inconsistent_remaining = count_inconsistent_remaining(ws);
    ws.stats.pitch_px_estimated = estimate_adjacent_spacing_px(ws);
}