https://github.com/csw/bioruby-maf
Raw File
Tip revision: 02961d2e33d8c45ca0a115e7faa9adc43d180c1c authored by Clayton Wheeler on 12 June 2012, 15:57:24 UTC
Cleaned up code a little.
Tip revision: 02961d2
maf_index
#!/usr/bin/env ruby

require 'benchmark'
require 'bio-maf'
require 'optparse'
require 'ostruct'

def build_index(maf, index)
  parser = Bio::MAF::Parser.new(maf)
  idx = Bio::MAF::KyotoIndex.build(parser, index)
  idx.close
end

PRINTERS = {
  'flat' => :FlatPrinter,
  'stack' => :CallStackPrinter,
  'graph' => :GraphHtmlPrinter
}

options = OpenStruct.new
options.mode = :build

op = OptionParser.new do |opts|
  opts.banner = "Usage: maf_index [options] <maf> <index>"
  #opts.separator ""
  #opts.separator "Options:"
  opts.on("--time", "print elapsed time") do
    options.bench = true
  end
  opts.on("-d", "--dump") do
    options.mode = :dump
  end
  opts.on("--ruby-prof PATH", "Profile with ruby-prof") do |pspec|
    require 'ruby-prof'
    if pspec =~ /(\w+):(.+)/
      options.ruby_prof_printer = RubyProf.const_get(PRINTERS.fetch($1))
      options.ruby_prof_path = $2
    else
      options.ruby_prof_printer = Ruby_Prof::FlatPrinter
      options.ruby_prof_path = pspec
    end
  end
end

op.parse!(ARGV)

maf_p = ARGV.shift if options.mode == :build
index_p = ARGV.shift

unless (maf_p || options.mode == :dump) && index_p
  $stderr.puts op
  exit 1
end

if options.ruby_prof_path
  RubyProf.start
end

case options.mode
when :build
  if ! options.bench
    build_index(maf_p, index_p)
  else
    bm_res = Benchmark.measure do
      build_index(maf_p, index_p)
    end
    puts bm_res
  end
when :dump
  idx = Bio::MAF::KyotoIndex.open(index_p)
  idx.dump
else
  raise "Unsupported mode: #{options.mode}"
end

if options.ruby_prof_path
  res = RubyProf.stop
  printer = options.ruby_prof_printer.new(res)
  File.open(options.ruby_prof_path, 'w') do |f|
    printer.print(f)
  end
end
back to top