]> git.donarmstrong.com Git - biopieces.git/blobdiff - bp_bin/read_fastq
rewrite of FASTQ internals
[biopieces.git] / bp_bin / read_fastq
index bbfbdd4cc00fc265f7e3fd49e1ee4157e8b1516c..78a3fcceaf689bcf198e2544fb45316e8c92cb4b 100755 (executable)
@@ -31,7 +31,7 @@
 require 'maasha/biopieces'
 require 'maasha/fastq'
 
-allowed_enc = 'auto,sanger,solexa,illumina1.3,illumina1.5,illumina1.8'
+allowed_enc = 'auto,base_33,base_64'
 
 casts = []
 casts << {:long=>'data_in',  :short=>'i', :type=>'files!', :mandatory=>false, :default=>nil,    :allowed=>nil,         :disallowed=>nil}
@@ -40,9 +40,10 @@ casts << {:long=>'encoding', :short=>'e', :type=>'string', :mandatory=>false, :d
 
 options = Biopieces.options_parse(ARGV, casts)
 
-num   = 0
-first = true
-last  = false
+MAX_TEST = 1_000
+
+num  = 0
+last = false
 
 Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
   unless options[:data_in] and options[:data_in].first == '-'
@@ -53,25 +54,25 @@ Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
 
   if options[:data_in]
     options[:data_in].each do |file|
-      encoding = options[:encoding].downcase.delete('.')
+      encoding = options[:encoding].downcase.to_sym
 
       Fastq.open(file, mode='r') do |fastq|
         fastq.each do |entry|
-          if encoding == 'auto'
-            if entry.qual_base33? # sanger or illumina18
-              encoding = 'illumina18'
-            elsif entry.qual_base64? # solexa or illumina13 or illumina15
-              encoding = 'illumina13'
+          if encoding == :auto
+            if entry.qual_base33?
+              encoding = :base_33
+            elsif entry.qual_base64?
+              encoding = :base_64
             else
               raise SeqError, "Could not auto-detect quality score encoding"
             end
           end
 
-          entry.convert_scores!(encoding, 'illumina13')
+          entry.qual_convert!(encoding, :base_33)
+          entry.qual_coerce!(:base_33)
 
-          if first
-#            raise SeqError, "Quality score outside valid range" unless entry.qual_valid?('illumina13')
-            first = false
+          if num < MAX_TEST
+            raise SeqError, "Quality score outside valid range" unless entry.qual_valid?(:base_33)
           end
 
           output.puts entry.to_bp