]> git.donarmstrong.com Git - biopieces.git/blobdiff - bp_bin/blast_seq_pair
changed blast_seq_pair to do multiple pairs
[biopieces.git] / bp_bin / blast_seq_pair
index 5c4c678a4bbc7f89eb25aeb82f2d8a1ca2e3dfe4..ca1d543533a8056f62d0eeff6ed22cdc92f2fbef 100755 (executable)
@@ -79,7 +79,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 +121,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'
@@ -155,8 +155,8 @@ 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   = ""
 
@@ -164,36 +164,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
-      end
-
-      unless got2
-        Fasta.open(infile2, mode="w") do |fasta_io|
-          fasta_io.puts record
+      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
       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