# Method to update the score vector.
def vector_update
- new_vector = []
- new_vector[0] = Score.new
+ score_diag = @vector[0]
+ score_up = Score.new # insertion
+ score_left = @vector[1] # deletion
(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_score = score_diag.dup
new_score.matches += 1
end
end
- new_vector[i + 1] = new_score
- end
+ score_diag = @vector[i + 1]
+ score_up = new_score
+ score_left = @vector[i + 2]
- @vector = new_vector
+ @vector[i + 1] = new_score
+ end
end
# Method to determine if a match occurred.
end
# Method to determine if a mismatch occured.
- def mismatch?(mismatch, insertion, deletion)
- if mismatch.edit_distance <= insertion.edit_distance and
- mismatch.edit_distance <= deletion.edit_distance
+ def mismatch?(score_diag, score_up, score_left)
+ if score_diag.edit_distance <= score_up.edit_distance and
+ score_diag.edit_distance <= score_left.edit_distance
true
end
end
# Method to determine if an insertion occured.
- def insertion?(mismatch, insertion, deletion)
- if insertion.edit_distance <= mismatch.edit_distance and
- insertion.edit_distance <= deletion.edit_distance
+ def insertion?(score_diag, score_up, score_left)
+ if score_up.edit_distance <= score_diag.edit_distance and
+ score_up.edit_distance <= score_left.edit_distance
true
end
end
# Method to determine if a deletion occured.
- def deletion?(mismatch, insertion, deletion)
- if deletion.edit_distance <= mismatch.edit_distance and
- deletion.edit_distance <= insertion.edit_distance
+ def deletion?(score_diag, score_up, score_left)
+ if score_left.edit_distance <= score_diag.edit_distance and
+ score_left.edit_distance <= score_up.edit_distance
true
end
end