use na_seq::AminoAcidProtenationVariant;
const PKA_ASP: f32 = 3.9;
const PKA_GLU: f32 = 4.2;
const PKA_HIS: f32 = 6.0;
const PKA_CYS: f32 = 8.3;
const PKA_LYS: f32 = 10.5;
pub(crate) const PKA_TYR: f32 = 10.5;
pub(crate) fn his_choice(ph: f32) -> Option<AminoAcidProtenationVariant> {
if ph < PKA_HIS {
Some(AminoAcidProtenationVariant::Hip)
} else {
Some(AminoAcidProtenationVariant::Hie)
}
}
pub(crate) fn variant_allowed_at_ph(aa_var: AminoAcidProtenationVariant, ph: f32) -> bool {
match aa_var {
AminoAcidProtenationVariant::Hip => ph < PKA_HIS,
AminoAcidProtenationVariant::Hid | AminoAcidProtenationVariant::Hie => ph >= PKA_HIS,
AminoAcidProtenationVariant::Ash => ph < PKA_ASP,
AminoAcidProtenationVariant::Glh => ph < PKA_GLU,
AminoAcidProtenationVariant::Cym => ph >= PKA_CYS,
AminoAcidProtenationVariant::Cyx => false,
AminoAcidProtenationVariant::Lyn => ph > PKA_LYS,
AminoAcidProtenationVariant::Ace
| AminoAcidProtenationVariant::Nhe
| AminoAcidProtenationVariant::Nme
| AminoAcidProtenationVariant::Hyp => false,
}
}
pub(crate) fn standard_allowed_at_ph(aa: na_seq::AminoAcid, ph: f32) -> bool {
match aa {
na_seq::AminoAcid::Asp => ph >= PKA_ASP,
na_seq::AminoAcid::Glu => ph >= PKA_GLU,
na_seq::AminoAcid::Lys => ph <= PKA_LYS,
na_seq::AminoAcid::Cys => ph < PKA_CYS,
na_seq::AminoAcid::His => false,
_ => true,
}
}