diff --git a/src/bin/FragGeneScanRs.rs b/src/bin/FragGeneScanRs.rs index c92bd00..37ae381 100644 --- a/src/bin/FragGeneScanRs.rs +++ b/src/bin/FragGeneScanRs.rs @@ -245,7 +245,7 @@ fn run( .map(u8::to_ascii_uppercase) .map(Nuc::from) .collect(); - let read_prediction = if nseq.is_empty() { + let read_prediction = if nseq.len() < 3 { gene::ReadPrediction::new(head) } else { viterbi(&global, &locals, head, nseq, whole_genome) diff --git a/src/viterbi.rs b/src/viterbi.rs index bccea5e..fb6ea55 100644 --- a/src/viterbi.rs +++ b/src/viterbi.rs @@ -27,15 +27,11 @@ pub fn forward( Vec<[f64; hmm::State::COUNT]>, Vec<[Option; hmm::State::COUNT]>, ) { - let mut alpha: Vec<[f64; hmm::State::COUNT]> = Vec::with_capacity(seq.len()); - let mut path: Vec<[Option; hmm::State::COUNT]> = Vec::with_capacity(seq.len()); + let mut alpha: Vec<[f64; hmm::State::COUNT]> = vec![[0.0; hmm::State::COUNT]; seq.len()]; + let mut path: Vec<[Option; hmm::State::COUNT]> = + vec![[Some(hmm::State::S); hmm::State::COUNT]; seq.len()]; let mut temp_i: [usize; hmm::PERIOD] = [0; hmm::PERIOD]; let mut temp_i_1: [usize; hmm::PERIOD] = [0; hmm::PERIOD]; - - for _ in 0..seq.len() { - alpha.push([0.0; hmm::State::COUNT]); - path.push([Some(hmm::State::S); hmm::State::COUNT]); - } alpha[0].copy_from_slice(&global.pi); for i in &mut alpha[0] { *i *= -1.0