autoload :Dynamic, 'maasha/seq/dynamic'
autoload :Homopolymer, 'maasha/seq/homopolymer'
autoload :Levenshtein, 'maasha/seq/levenshtein'
+autoload :Ambiguity, 'maasha/seq/ambiguity'
# Residue alphabets
DNA = %w[a t c g]
# Method to determine the Hamming Distance between
# two Sequence objects (case insensitive).
- def hamming_distance(entry)
- self.seq.upcase.hamming_distance(entry.seq.upcase)
+ def hamming_distance(entry, options = nil)
+ if options and options[:ambiguity]
+ Ambiguity.hamming_distance(self.seq, entry.seq)
+ else
+ self.seq.upcase.hamming_distance(entry.seq.upcase)
+ end
end
# Method to determine the Edit Distance between
assert_equal(1, seq1.hamming_distance(seq2))
end
+ test "#hamming_distance with ambiguity codes return correctly" do
+ seq1 = Seq.new("test1", "ATCG")
+ seq2 = Seq.new("test2", "atng")
+
+ assert_equal(1, seq1.hamming_distance(seq2))
+ assert_equal(0, seq1.hamming_distance(seq2, ambiguity: true))
+ end
+
test "#edit_distance returns correctly" do
seq1 = Seq.new("test1", "ATCG")
seq2 = Seq.new("test2", "tgncg")