]> git.donarmstrong.com Git - biopieces.git/blobdiff - bp_bin/blast_seq_pair
fixed encoding bug in read_454
[biopieces.git] / bp_bin / blast_seq_pair
index b6529fb4017a6c5d873747a7a26f8ab2560b0c1b..854ee424c3201110c9fb48f1dfcbe085737a884b 100755 (executable)
@@ -61,6 +61,7 @@ class Blast
     commands << "-j #{@infile2}"
     commands << "-o #{@outfile}"
     commands << "-p #{@program}"
+    commands << "-W #{options[:word_size]}" if options[:word_size]
     commands << "-D 1" # tabular output
     commands << "-e #{options[:e_val]}"
     commands << (options[:megablast] ? "-m T" : "-m F")
@@ -79,7 +80,7 @@ class Blast
   def each
     record = {}
 
-    File.open(@outfile, mode="r") do |ios|
+    File.open(@outfile, 'r') do |ios|
       ios.each_line do |line|
         if line !~ /^#/
           fields = line.chomp.split("\t")
@@ -121,14 +122,14 @@ class Blast
   def program_choose(type1, type2)
     program = ""
 
-    if type1 == 'protein'
-      if type2 == 'protein'
+    if type1 == :protein
+      if type2 == :protein
         program = 'blastp'
       else
         program = 'tblastn'
       end
     else
-      if type2 == 'protein'
+      if type2 == :protein
         program = 'blastx'
       else
         program = 'blastn'
@@ -147,17 +148,17 @@ casts << {:long=>'e_val',     :short=>'e', :type=>'float',  :mandatory=>false, :
 casts << {:long=>'filter',    :short=>'f', :type=>'string', :mandatory=>false, :default=>'no', :allowed=>'yes,no',    :disallowed=>nil}
 casts << {:long=>'megablast', :short=>'m', :type=>'flag',   :mandatory=>false, :default=>nil,  :allowed=>nil,         :disallowed=>nil}
 casts << {:long=>'no_gaps',   :short=>'G', :type=>'flag',   :mandatory=>false, :default=>nil,  :allowed=>nil,         :disallowed=>nil}
+casts << {:long=>'word_size', :short=>'w', :type=>'uint',   :mandatory=>false, :default=>nil,  :allowed=>nil,         :disallowed=>nil}
 
 options = Biopieces.options_parse(ARGV, casts)
 
 tmpdir  = Biopieces.mktmpdir
-tmpdir  = "Tmp"
 infile1 = File.join(tmpdir, "in1.fna")
 infile2 = File.join(tmpdir, "in2.fna")
 outfile = File.join(tmpdir, "blast.out")
 
-got1    = false
-got2    = false
+got1    = nil
+got2    = nil
 type1   = ""
 type2   = ""
 
@@ -165,37 +166,40 @@ Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
   input.each_record do |record|
     output.puts record
 
-    if record.has_key? :SEQ_NAME and record.has_key? :SEQ
-      unless got1
-        Fasta.open(infile1, mode="w") do |fasta_io|
-          fasta_io.puts record
+    if record[:SEQ_NAME] and record[:SEQ]
+      seq = Seq.new_bp(record)
+
+      if got1.nil?
+        Fasta.open(infile1, "w") do |fasta_io|
+          fasta_io.puts seq.to_fasta
         end
 
         got1  = true
-        type1 = Seq.new(nil, record[:SEQ][0 ... 100]).type_guess
-        next
-      end
-
-      unless got2
-        Fasta.open(infile2, mode="w") do |fasta_io|
-          fasta_io.puts record
+        type1 = Seq.new(seq: record[:SEQ][0 ... 100]).type_guess
+      elsif got2.nil?
+        Fasta.open(infile2, "w") do |fasta_io|
+          fasta_io.puts seq.to_fasta
         end
 
         got2  = true
-        type2 = Seq.new(nil, record[:SEQ][0 ... 100]).type_guess
+        type2 = Seq.new(seq: record[:SEQ][0 ... 100]).type_guess
       end
-    end
-  end
 
-  if got1 and got2
-    blast = Blast.new(infile1, infile2, outfile)
-    blast.program_set(type1, type2, options[:program])
-    blast.run(options)
+      if got1 and got2
+        blast = Blast.new(infile1, infile2, outfile)
+        blast.program_set(type1, type2, options[:program])
+        blast.run(options)
 
-    blast.each do |record|
-      output.puts record
+        blast.each do |new_record|
+          output.puts new_record
+        end
+
+        got1 = nil
+        got2 = nil
+      end
     end
   end
+
 end