pub struct MergeReport {
pub quarantined: Vec<MergeFlag>,
pub single_source: Vec<MergeFlag>,
pub position_outliers: Vec<MergeFlag>,
pub agreement: Vec<AgreementMetric>,
}Expand description
Audit trail for a merge.
Fields§
§quarantined: Vec<MergeFlag>Cells where two or more sources disagreed beyond tolerance with no
agreeing subset of min_agree - omitted from the merged product.
single_source: Vec<MergeFlag>Cells carried from a single source (no cross-check was possible).
position_outliers: Vec<MergeFlag>Cells accepted by consensus where one or more sources were rejected as position outliers.
agreement: Vec<AgreementMetric>Per-(epoch, satellite) agreement statistics for every accepted cell, in output (epoch, then satellite) order - one entry per cell written to the merged product. Quantifies how tightly the consensus sources clustered about the combined value (Gap: per-epoch quality metrics).
Implementations§
Source§impl MergeReport
impl MergeReport
Sourcepub fn single_source_fraction(&self) -> Option<f64>
pub fn single_source_fraction(&self) -> Option<f64>
Fraction of accepted cells that were carried from a single source, in
0.0..=1.0; None when no cells were accepted.
This is the blind-spot companion to the agreement-RMS accessors, which
quantify dispersion only over multi-source cells. A product can show a
tight (or None) agreement RMS yet be largely un-cross-checked: those
gap-fill cells (also enumerated in MergeReport::single_source) had no
second source to compare against. Read this alongside the RMS so a clean
dispersion is not mistaken for a fully corroborated product.
Sourcepub fn position_agreement_rms_m(&self) -> Option<f64>
pub fn position_agreement_rms_m(&self) -> Option<f64>
Member-count-weighted pooled RMS of the per-cell position dispersion over
every accepted cell with a multi-source consensus, meters. None when no
cell had two or more position-consensus members.
The pool is exact: each cell contributes its summed squared member-to-
combined distances (position_rms_m^2 * position_members), normalised by
the total member count, so the result is the RMS of all member-to-combined
distances across the whole product.
This covers only multi-source cells; single-source gap-fill cells are
excluded (they have no dispersion). A small or None result therefore does
not by itself mean the whole product was corroborated - check
MergeReport::single_source_fraction for the un-cross-checked share.
Sourcepub fn position_agreement_max_m(&self) -> Option<f64>
pub fn position_agreement_max_m(&self) -> Option<f64>
Largest single-cell position dispersion over all accepted cells, meters.
None when there are no accepted cells.
Sourcepub fn clock_agreement_rms_s(&self) -> Option<f64>
pub fn clock_agreement_rms_s(&self) -> Option<f64>
As Self::position_agreement_rms_m for the clock channel, seconds.
Sourcepub fn clock_agreement_max_s(&self) -> Option<f64>
pub fn clock_agreement_max_s(&self) -> Option<f64>
Largest single-cell clock dispersion over all accepted cells, seconds.
Sourcepub fn per_epoch_agreement(&self) -> Vec<EpochAgreement>
pub fn per_epoch_agreement(&self) -> Vec<EpochAgreement>
Per-epoch aggregate agreement, in output-epoch order. Each entry pools the
multi-source cells at that epoch (see EpochAgreement); epochs whose
cells were all single-source are still listed with satellites == 0 and a
zero position spread so the caller sees every output epoch.
Trait Implementations§
Source§impl Clone for MergeReport
impl Clone for MergeReport
Source§fn clone(&self) -> MergeReport
fn clone(&self) -> MergeReport
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MergeReport
impl Debug for MergeReport
Source§impl Default for MergeReport
impl Default for MergeReport
Source§fn default() -> MergeReport
fn default() -> MergeReport
Source§impl PartialEq for MergeReport
impl PartialEq for MergeReport
Source§fn eq(&self, other: &MergeReport) -> bool
fn eq(&self, other: &MergeReport) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for MergeReport
Auto Trait Implementations§
impl Freeze for MergeReport
impl RefUnwindSafe for MergeReport
impl Send for MergeReport
impl Sync for MergeReport
impl Unpin for MergeReport
impl UnsafeUnpin for MergeReport
impl UnwindSafe for MergeReport
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Scalar for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.