require 'maasha/seq/trim'
require 'narray'
-autoload :BackTrack, 'maasha/seq/backtrack.rb'
-autoload :Dynamic, 'maasha/seq/dynamic.rb'
-autoload :Homopolymer, 'maasha/seq/homopolymer.rb'
+autoload :BackTrack, 'maasha/seq/backtrack'
+autoload :Dynamic, 'maasha/seq/dynamic'
+autoload :Homopolymer, 'maasha/seq/homopolymer'
+autoload :Hamming, 'maasha/seq/hamming'
+autoload :Levenshtein, 'maasha/seq/levenshtein'
+autoload :Ambiguity, 'maasha/seq/ambiguity'
# Residue alphabets
DNA = %w[a t c g]
"GTG" => "V", "GCG" => "A", "GAG" => "E", "GGG" => "G"
}
-
# Error class for all exceptions to do with Seq.
class SeqError < StandardError; end
@seq = seq
@type = type
@qual = qual
+
+ if @qual
+ raise SeqError, "Sequence length and score length mismatch: #{@seq.length} != #{@qual.length}" if @seq.length != @qual.length
+ end
end
# Method that guesses and returns the sequence type
# Method to determine the Hamming Distance between
# two Sequence objects (case insensitive).
- def hamming_distance(seq)
- self.seq.upcase.hamming_distance(seq.seq.upcase)
+ def hamming_distance(entry, options = nil)
+ if options and options[: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
+ # two Sequence objects (case insensitive).
+ def edit_distance(entry)
+ Levenshtein.distance(self.seq, entry.seq)
end
# Method that generates a random sequence of a given length and type.