use std::ops::RangeInclusive;
use mzcore::{
quantities::Tolerance,
system::{MassOverCharge, thomson},
};
use serde::{Deserialize, Serialize};
#[non_exhaustive]
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct MatchingParameters {
pub tolerance: Tolerance<MassOverCharge>,
pub mz_range: RangeInclusive<MassOverCharge>,
}
impl MatchingParameters {
#[must_use]
pub fn tolerance(self, tolerance: impl Into<Tolerance<MassOverCharge>>) -> Self {
Self {
tolerance: tolerance.into(),
..self
}
}
#[must_use]
pub fn mz_range(self, mz_range: RangeInclusive<MassOverCharge>) -> Self {
Self { mz_range, ..self }
}
}
impl Default for MatchingParameters {
fn default() -> Self {
Self {
tolerance: Tolerance::new_ppm(20.0),
mz_range: MassOverCharge::new::<thomson>(0.0)
..=MassOverCharge::new::<thomson>(f64::MAX),
}
}
}