# Method that determines if a quality score string can be
# absolutely identified as base 33.
def qual_base33?
- self.qual.match(/[!-:]/)
+ self.qual.match(/[!-:]/) ? true : false
end
# Method that determines if a quality score string can be
# absolutely identified as base 64.
def qual_base64?
- self.qual.match(/[K-h]/)
+ self.qual.match(/[K-h]/) ? true : false
+ end
+
+ # Method to determine if a quality score is valid.
+ def qual_valid?(encoding)
+ raise SeqError, "Missing qual" if self.qual.nil?
+
+ case encoding.downcase
+ when "sanger" then return true if self.qual.match(/^[!-I]*$/)
+ when "454" then return true if self.qual.match(/^[@-h]*$/)
+ when "solexa" then return true if self.qual.match(/^[;-h]*$/)
+ when "illumina13" then return true if self.qual.match(/^[@-h]*$/)
+ when "illumina15" then return true if self.qual.match(/^[@-h]*$/)
+ when "illumina18" then return true if self.qual.match(/^[!-J]*$/)
+ else raise SeqError, "unknown quality score encoding: #{encoding}"
+ end
+
+ false
end
# Method to convert quality scores inbetween formats.
# 454 base 64, range 0-40
# Solexa base 64, range -5-40
# Illumina13 base 64, range 0-40
- # Illumina15 base 64, range 3-40
+ # Illumina15 base 64, range 0-40
# Illumina18 base 33, range 0-41
def convert_scores!(from, to)
unless from == to