Skip to content

Commit

Permalink
Small api fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
douweschulte committed Sep 20, 2024
1 parent 18f8f35 commit 4eccdc9
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 14 deletions.
5 changes: 1 addition & 4 deletions rustyms-generate-imgt/src/combine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ use rustyms::UnAmbiguous;
use crate::imgt_gene::IMGTGene;
use crate::structs::DataItem;

use crate::shared::{
AnnotatedSequence, Annotation, Gene, Germline, Germlines,
Species,
};
use crate::shared::{AnnotatedSequence, Annotation, Gene, Germline, Germlines, Species};
use crate::structs::SingleSeq;

pub fn combine(
Expand Down
7 changes: 3 additions & 4 deletions rustyms/src/glycan/monosaccharide.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,12 @@ include!("../shared/glycan_lists.rs");
impl MonoSaccharide {
/// Generate the composition used for searching on glycans
pub(crate) fn search_composition(
mut composition: Vec<(Self, isize)>,
composition: &[(Self, isize)],
) -> Vec<(MolecularFormula, isize)> {
// Sort on monosaccharide
composition.retain(|el| el.1 != 0);
let mut composition = composition
.into_iter()
.map(|(m, n)| (m.formula(), n))
.iter()
.filter_map(|(m, n)| (*n != 0).then(|| (m.formula(), *n)))
.collect_vec();
composition.sort_unstable_by(|a, b| a.0.cmp(&b.0));

Expand Down
11 changes: 11 additions & 0 deletions rustyms/src/mass_mode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,14 @@ pub enum MassMode {
/// Only available with crate feature 'isotopes'.
MostAbundant,
}

impl std::fmt::Display for MassMode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Average => write!(f, "average weight"),
Self::Monoisotopic => write!(f, "monoisotopic mass"),
#[cfg(feature = "isotopes")]
Self::MostAbundant => write!(f, "most abundant mass"),
}
}
}
29 changes: 23 additions & 6 deletions rustyms/src/modification.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use crate::{
peptide::Linked,
placement_rule::PlacementRule,
system::{Mass, OrderedMass},
AmbiguousLabel, AminoAcid, Chemical, DiagnosticIon, Fragment, LinearPeptide, Model,
AmbiguousLabel, AminoAcid, Chemical, DiagnosticIon, Fragment, LinearPeptide, MassMode, Model,
MolecularFormula, Multi, NeutralLoss, SequenceElement, SequencePosition, Tolerance,
WithinTolerance,
};
Expand Down Expand Up @@ -586,12 +586,18 @@ impl SimpleModification {
pub fn search(
modification: &Self,
tolerance: Tolerance<Mass>,
mass_mode: MassMode,
custom_database: Option<&CustomDatabase>,
) -> ModificationSearchResult {
match modification {
Self::Mass(mass) => ModificationSearchResult::Mass(
Self::Mass(mass)
| Self::Gno {
composition: GnoComposition::Weight(mass),
..
} => ModificationSearchResult::Mass(
mass.into_inner(),
tolerance,
mass_mode,
[
Ontology::Unimod,
Ontology::Psimod,
Expand All @@ -606,7 +612,7 @@ impl SimpleModification {
.map(|(i, n, m)| (*o, *i, n, m))
})
.filter(|(_, _, _, m)| {
tolerance.within(&mass.into_inner(), &m.formula().monoisotopic_mass())
tolerance.within(&mass.into_inner(), &m.formula().mass(mass_mode))
})
.map(|(o, i, n, m)| (o, i, n.clone(), m.clone()))
.collect(),
Expand All @@ -630,8 +636,12 @@ impl SimpleModification {
.map(|(o, i, n, m)| (o, i, n.clone(), m.clone()))
.collect(),
),
Self::Glycan(glycan) => {
let search = MonoSaccharide::search_composition(glycan.clone());
Self::Glycan(glycan)
| Self::Gno {
composition: GnoComposition::Composition(glycan),
..
} => {
let search = MonoSaccharide::search_composition(glycan);
ModificationSearchResult::Glycan(
glycan.clone(),
Ontology::Gnome
Expand All @@ -643,8 +653,14 @@ impl SimpleModification {
..
} = m
{
MonoSaccharide::search_composition(structure.composition())
MonoSaccharide::search_composition(&structure.composition())
== *search
} else if let Self::Gno {
composition: GnoComposition::Composition(composition),
..
} = m
{
MonoSaccharide::search_composition(composition) == *search
} else {
false
}
Expand Down Expand Up @@ -709,6 +725,7 @@ pub enum ModificationSearchResult {
Mass(
Mass,
Tolerance<Mass>,
MassMode,
Vec<(Ontology, Option<usize>, String, SimpleModification)>,
),
/// All modifications with the same formula
Expand Down
12 changes: 12 additions & 0 deletions rustyms/src/shared/modification.rs
Original file line number Diff line number Diff line change
Expand Up @@ -188,3 +188,15 @@ pub enum GnoSubsumption {
/// Indicates the topology, without reducing end ring and anomeric information
Saccharide,
}

impl std::fmt::Display for GnoSubsumption {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::AverageWeight => write!(f, "Average weight"),
Self::BaseComposition => write!(f, "Base composition (no isomeric information)"),
Self::Composition => write!(f, "Composition"),
Self::Topology => write!(f, "Topology (no linkage)"),
Self::Saccharide => write!(f, "Saccharide"),
}
}
}

0 comments on commit 4eccdc9

Please sign in to comment.