use crate::alignment::smith_waterman::Scorer;
pub struct SimpleScorer {
base_score: f32,
base_gap_penalty: f32,
}
impl SimpleScorer {
pub fn new(base_score: f32, base_gap_penalty: f32) -> SimpleScorer {
SimpleScorer {
base_score: base_score,
base_gap_penalty: base_gap_penalty,
}
}
pub fn default() -> SimpleScorer {
SimpleScorer::new(3.0, 2.0)
}
}
impl Scorer for SimpleScorer {
fn score(&self, a: char, b: char) -> f32 {
if a == b {
self.base_score
} else {
self.base_score * -1.0
}
}
fn gap_penalty(&self, gap: u32) -> f32 {
if gap == 1 {
self.base_gap_penalty
} else {
(gap as f32) * self.gap_penalty(1)
}
}
}