gatk-3.8/ruby/validateIndex.rb

104 lines
2.5 KiB
Ruby

# this ruby files validates a linear index
# set the include path to include the current directory
$LOAD_PATH << File.dirname(__FILE__)
# require a couple of files
require "index/Index.rb"
require "index/LinearIndex.rb"
require "index/IntervalIndex.rb"
require "optparse"
require "yaml"
# This hash will hold all of the options
# parsed from the command-line by
# OptionParser.
options = {}
optparse = OptionParser.new do|opts|
# Set a banner, displayed at the top
# of the help screen.
opts.banner = "Usage: ruby validateIndex.rb [options] file1 file2 ..."
# Define the options, and what they do
options[:index] = [] if options[:index] == nil
opts.on( '-i', '--index INDEX (REQUIRED)', 'Specify the index. Multiple are allowed' ) do |file| options[:index].push(file) end
options[:verbose] = false
opts.on( '-v', '--verbose', 'Output more information' ) do options[:verbose] = true end
options[:validate] = false
opts.on( '-c', '--check', 'Check (Validate) the index(es) passed in as parameters' ) do options[:check] = true end
options[:diff] = false
opts.on( '-d', '--diff', 'Diff two indexes' ) do options[:diff] = true end
options[:print] = false
opts.on( '-p', '--print', 'Print all of the information about the file' ) do options[:print] = true end
# This displays the help screen, all programs are
# assumed to have this option.
opts.on_tail( '-h', '--help', 'Display this screen' ) do
puts opts
exit
end
end
# parse the command line
optparse.parse!
#Now raise an exception if we have not found a host option
if options[:index].size == 0
puts "you must at least specify an index file!"
puts optparse
end
# a function to load an index
def loadIndex(file)
indexTry = Index.new(file)
indexTry.close()
if (indexTry.type == 1)
puts "Linear index..."
index = LinearIndex.new(file)
else
puts "Interval index..."
index = IntervalIndex.new(file)
end
index
end
#################### Control Block ####################
# load all of the indexes
indexes = []
options[:index].each {|indexFile|
indexes.push(loadIndex(indexFile))
}
# switch on the flags supplied
if (options[:diff])
if (options[:index].size != 2)
print "Unable to diff indexes if you don't supply two and only two indexes\n";
exit(1)
else
indexes[0].diff(indexes[1])
end
elsif (options[:validate])
indexes.each {|index| index.validate() }
elsif (options[:print])
indexes.each {|index| puts YAML::dump( index ) }
end
# if they specified validate
if (options[:check])
options[:index].each {|index|
idx = Index.new(index).validate()
}
end
exit