]> git.donarmstrong.com Git - biopieces.git/blobdiff - bp_bin/read_fastq
rewrote assemble_seq_velvet
[biopieces.git] / bp_bin / read_fastq
index cb114ff0a707dd8d6873feb79f07dcf415110e1f..c2f74cd7bb7a07219ac43ecfd574ad726f5b8f00 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env ruby
 
-# Copyright (C) 2007-2010 Martin A. Hansen.
+# Copyright (C) 2007-2011 Martin A. Hansen.
 
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 
 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 
-require 'biopieces'
-require 'fastq'
+require 'maasha/biopieces'
+require 'maasha/fastq'
 
-casts = []
-casts << {:long=>'data_in', :short=>'i', :type=>'files!', :mandatory=>false, :default=>nil, :allowed=>nil, :disallowed=>nil}
-casts << {:long=>'num',     :short=>'n', :type=>'uint',   :mandatory=>false, :default=>nil, :allowed=>nil, :disallowed=>'0'}
-
-PHRED_SCORES = Regexp.new('[!"#$%&\'()*+,-./0123456789:]')
-
-bp = Biopieces.new
+allowed_enc = 'auto,sanger,solexa,illumina1.3,illumina1.5,illumina1.8'
 
-options = bp.parse(ARGV, casts)
+casts = []
+casts << {:long=>'data_in',  :short=>'i', :type=>'files!', :mandatory=>false, :default=>nil,    :allowed=>nil,         :disallowed=>nil}
+casts << {:long=>'num',      :short=>'n', :type=>'uint',   :mandatory=>false, :default=>nil,    :allowed=>nil,         :disallowed=>'0'}
+casts << {:long=>'encoding', :short=>'e', :type=>'string', :mandatory=>false, :default=>'auto', :allowed=>allowed_enc, :disallowed=>nil}
 
-bp.each_record do |record|
-  bp.puts record
-end
+options = Biopieces.options_parse(ARGV, casts)
 
 num  = 0
 last = false
 
-if options.has_key? :data_in
-  options[:data_in].each do |file|
-    Fastq.open(file, mode='r') do |fastq|
-      fastq.each do |entry|
-        entry.convert! if entry.qual.match PHRED_SCORES
-        bp.puts entry.to_bp
-        num += 1
-
-        if options.has_key? :num and options[:num] == num
-          last = true
-          break
+Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
+  unless options[:data_in] and options[:data_in].first == '-'
+    input.each_record do |record|
+      output.puts record
+    end
+  end
+
+  if options[:data_in]
+    options[:data_in].each do |file|
+      encoding = options[:encoding].downcase.delete('.')
+
+      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'
+            else
+              raise SeqError, "Could not auto-detect quality score encoding"
+            end
+          end
+
+          entry.convert_scores!(encoding, 'illumina13')
+          output.puts entry.to_bp
+          num += 1
+
+          if options[:num] == num
+            last = true
+            break
+          end
         end
       end
-    end
 
-    break if last
+      break if last
+    end
   end
 end