use serde::{Deserialize, Serialize};
use crate::{system::OrderedMass, AminoAcid, MassMode, Tolerance};
#[derive(
Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default, Serialize, Deserialize,
)]
pub enum MatchType {
FullIdentity,
IdentityMassMismatch,
#[default]
Mismatch,
Isobaric,
Rotation,
Gap,
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
pub struct AlignScoring<'a> {
pub mismatch: i8,
pub mass_mismatch: i8,
pub mass_base: i8,
pub rotated: i8,
pub isobaric: i8,
pub gap_start: i8,
pub gap_extend: i8,
pub matrix: &'a [[i8; AminoAcid::TOTAL_NUMBER]; AminoAcid::TOTAL_NUMBER],
pub tolerance: Tolerance<OrderedMass>,
pub mass_mode: MassMode,
}
impl Default for AlignScoring<'static> {
fn default() -> Self {
Self {
mismatch: -1,
mass_mismatch: 2,
mass_base: 1,
rotated: 3,
isobaric: 2,
gap_start: -4,
gap_extend: -1,
matrix: matrices::BLOSUM62,
tolerance: crate::Tolerance::new_ppm(10.0),
mass_mode: MassMode::Monoisotopic,
}
}
}
pub mod matrices {
use crate::AminoAcid;
pub const BLOSUM45: &[[i8; AminoAcid::TOTAL_NUMBER]; AminoAcid::TOTAL_NUMBER] =
include!("matrices/blosum45.txt");
pub const BLOSUM50: &[[i8; AminoAcid::TOTAL_NUMBER]; AminoAcid::TOTAL_NUMBER] =
include!("matrices/blosum50.txt");
pub const BLOSUM62: &[[i8; AminoAcid::TOTAL_NUMBER]; AminoAcid::TOTAL_NUMBER] =
include!("matrices/blosum62.txt");
pub const BLOSUM80: &[[i8; AminoAcid::TOTAL_NUMBER]; AminoAcid::TOTAL_NUMBER] =
include!("matrices/blosum80.txt");
pub const BLOSUM90: &[[i8; AminoAcid::TOTAL_NUMBER]; AminoAcid::TOTAL_NUMBER] =
include!("matrices/blosum90.txt");
pub const IDENTITY: &[[i8; AminoAcid::TOTAL_NUMBER]; AminoAcid::TOTAL_NUMBER] =
include!("matrices/identity.txt");
pub const PAM30: &[[i8; AminoAcid::TOTAL_NUMBER]; AminoAcid::TOTAL_NUMBER] =
include!("matrices/pam30.txt");
pub const PAM70: &[[i8; AminoAcid::TOTAL_NUMBER]; AminoAcid::TOTAL_NUMBER] =
include!("matrices/pam70.txt");
pub const PAM250: &[[i8; AminoAcid::TOTAL_NUMBER]; AminoAcid::TOTAL_NUMBER] =
include!("matrices/pam250.txt");
}