]> git.donarmstrong.com Git - biopieces.git/commitdiff
upgraded prodigal
authormartinahansen <martinahansen@74ccb610-7750-0410-82ae-013aeee3265d>
Tue, 7 Aug 2012 17:33:50 +0000 (17:33 +0000)
committermartinahansen <martinahansen@74ccb610-7750-0410-82ae-013aeee3265d>
Tue, 7 Aug 2012 17:33:50 +0000 (17:33 +0000)
git-svn-id: http://biopieces.googlecode.com/svn/trunk@1886 74ccb610-7750-0410-82ae-013aeee3265d

code_ruby/lib/maasha/prodigal.rb

index 33cae09a5879425321e78c807b6ca10aab20ab47..5fc03546f2afd94a361c597fb11f778817db7b26 100644 (file)
@@ -22,8 +22,6 @@
 
 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 
-require 'maasha/genbank'
-
 # Class for running the Prodigal gene finder.
 # http://prodigal.ornl.gov/
 class Prodigal
@@ -32,9 +30,9 @@ class Prodigal
   # Method to initialize a Prodigal object
   # given a temporary infile, outfile and options hash.
   def initialize(infile, outfile, options)
-    @infile  = infile
-    @outfile = outfile
-    @options = options
+    @infile  = infile    # FASTA
+    @outfile = outfile   # GFF
+    @options = options   # Options hash
   end
 
   # Method to run Prodigal.
@@ -43,19 +41,34 @@ class Prodigal
     commands << "prodigal"
     commands << "-c" if @options[:full]
     commands << "-p #{@options[:procedure]}"
+    commands << "-f gff"
     commands << "-i #{@infile}"
-    commands << "-o #{@outfile}"
+    commands << "-a #{@outfile}"
     commands << "-m"
+    commands << "-q" unless @options[:verbose]
 
     execute(commands, @options[:verbose])
   end
 
   # Method for iterating over the Prodigal results,
-  # which are in GenBank format.
+  # which are in GFF format.
   def each
-    Genbank.open(@outfile, mode='r') do |gb|
-      gb.each do |entry|
-        yield entry
+    Fasta.open(@outfile, 'r') do |ios|
+      ios.each do |entry|
+        record = {}
+
+        fields = entry.seq_name.split(" # ")
+
+        record[:REC_TYPE] = "GENE"
+        record[:SEQ_NAME] = fields[0]
+        record[:S_BEG]    = fields[1].to_i - 1
+        record[:S_END]    = fields[2].to_i - 1
+        record[:S_LEN]    = record[:S_END] - record[:S_BEG] + 1
+        record[:STRAND]   = fields[3] == '1' ? '+' : '-'
+        record[:SEQ]      = entry.seq
+        record[:SEQ_LEN]  = entry.length
+
+        yield record
       end
     end
   end
@@ -77,18 +90,13 @@ class Prodigal
   # TODO this wants to be in a module on its own.
   def execute(commands, verbose = false)
     commands.unshift "nice -n 19"
-    commands.push "> /dev/null 2>&1" unless verbose
+    commands << " > /dev/null"
 
     command = commands.join(" ")
 
-    begin
-      system(command)
-      raise "Command failed: #{command}" unless $?.success?
-    rescue
-      $stderr.puts "Command failed: #{command}"
-    end
+    system(command)
+    raise "Command failed: #{command}" unless $?.success?
   end
 end
 
-
 __END__