+
+ # Method to convert the quality scores from Solexa odd/ratio to
+ # Illumina format.
+ def convert_solexa2illumina!
+ self.qual.gsub! /./ do |score|
+ score = solexa_char2illumina_char(score)
+ end
+ end
+
+ private
+
+ # Method to convert a Solexa score (odd ratio) to
+ # a phred (probability) integer score.
+ def solexa2phred(score)
+ (10.0 * Math.log(10.0 ** (score / 10.0) + 1.0, 10)).to_i
+ end
+
+ # Method to convert a Solexa score encoded using base
+ # 64 ASCII to a Phred score encoded using base 64 ASCII.
+ def solexa_char2illumina_char(char)
+ score_solexa = char.ord - 64
+ score_phred = solexa2phred(score_solexa)
+ (score_phred + 64).chr
+ end