# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-require 'maasha/genbank'
-
# Class for running the Prodigal gene finder.
# http://prodigal.ornl.gov/
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.
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[:S_ID] = 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
# 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__