# Method to update the score vector.
def vector_update
- new_vector = @vector.dup
+ new_vector = []
+ new_vector[0] = Score.new
(0 ... @pattern.length).each do |i|
+ score_diag = @vector[i]
+ score_up = new_vector[i] # insertion
+ score_left = @vector[i + 1] # deletion
+
if match?(@seq[@pos], @pattern[i])
- new_vector[i + 1] = @vector[i].dup
- new_vector[i + 1].matches += 1
+ new_score = score_diag.dup
+ new_score.matches += 1
else
- mismatch = @vector[i].dup
- insertion = new_vector[i].dup
- deletion = @vector[i + 1].dup
-
- if deletion?(mismatch, insertion, deletion)
- deletion.deletions += 1
- new_vector[i + 1] = deletion
- elsif mismatch?(mismatch, insertion, deletion)
- mismatch.mismatches += 1
- new_vector[i + 1] = mismatch
- elsif insertion?(mismatch, insertion, deletion)
- insertion.insertions += 1
- new_vector[i + 1] = insertion
+ if deletion?(score_diag, score_up, score_left)
+ new_score = score_left.dup
+ new_score.deletions += 1
+ elsif mismatch?(score_diag, score_up, score_left)
+ new_score = score_diag.dup
+ new_score.mismatches += 1
+ elsif insertion?(score_diag, score_up, score_left)
+ new_score = score_up.dup
+ new_score.insertions += 1
end
end
+
+ new_vector[i + 1] = new_score
end
@vector = new_vector