https://github.com/csw/bioruby-maf
Revision f443fdc142c5992c47b6639f3a613d2496350f7e authored by Clayton Wheeler on 04 August 2012, 22:34:14 UTC, committed by Clayton Wheeler on 04 August 2012, 22:34:14 UTC
1 parent 4fc31e2
Raw File
Tip revision: f443fdc142c5992c47b6639f3a613d2496350f7e authored by Clayton Wheeler on 04 August 2012, 22:34:14 UTC
Use GZipReader instead of a gzip pipe. Performs better.
Tip revision: f443fdc
maf_index
#!/usr/bin/env ruby

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

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

$options = OpenStruct.new
$options.mode = :build
$options.ref_only = true

def build_index(maf, index)
  parser = Bio::MAF::Parser.new(maf,
                                :parse_extended => false)
  idx = Bio::MAF::KyotoIndex.build(parser, index, $options.ref_only)
  idx.close
end

op = OptionParser.new do |opts|
  opts.banner = "Usage: maf_index [options] <maf> <index>"
  opts.separator ""
  opts.separator "Options:"
  opts.on("-a", "--all", "Index all sequences, not just reference seq") do
    $options.ref_only = false
  end
  Bio::MAF::handle_logging_options(opts)
  opts.on("--time", "print elapsed time") do
    $options.bench = true
  end
  opts.on("-d", "--dump", "Dump contents of given INDEX") 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)
Bio::Log::CLI.configure('bio-maf')

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