# Class method to align sequences in a list of Seq objects and
# return these as a new list of Seq objects.
def self.muscle(entries)
- has_qual = false
- result = []
- index = {}
+ result = []
+ index = {}
Open3.popen3("muscle") do |stdin, stdout, stderr|
entries.each do |entry|
+ raise AlignError, "Duplicate sequence name: #{entry.seq_name}" if index.has_key entry.seq_name
+
index[entry.seq_name] = entry
stdin.puts entry.to_fasta
fa_entry.seq.scan(/-+/) do |m|
fq_entry.seq = fq_entry.seq[0 ... $`.length] + ('-' * m.length) + fq_entry.seq[$`.length .. -1]
- fq_entry.qual = fq_entry.qual[0 ... $`.length] + ('@' * m.length) + fq_entry.qual[$`.length .. -1]
+ fq_entry.qual = fq_entry.qual[0 ... $`.length] + ('@' * m.length) + fq_entry.qual[$`.length .. -1] unless fq_entry.qual.nil?
end
result << fq_entry