class BioVcf::BedFilter
Public Class Methods
new(bedfilen)
click to toggle source
# File lib/bio-vcf/bedfilter.rb, line 4 def initialize bedfilen require 'binary_search/native' # Parse Bed file and build up search array chrs = {} info = {} File.open(bedfilen).each_line { | line | (chr,start,stop,gene) = line.strip.split(/\t/)[0..3] chrs[chr] ||= [] chrs[chr].push(stop.to_i) info[chr+':'+stop] = [chr,start.to_i,stop.to_i,gene] } # Make sure chrs is sorted @chrs = {} chrs.each { | k,list | @chrs[k] = list.sort } @info = info end
Public Instance Methods
contains(rec)
click to toggle source
# File lib/bio-vcf/bedfilter.rb, line 24 def contains(rec) stop_list = @chrs[rec.chrom] if stop_list pos = rec.pos stop = stop_list.bsearch { |bedstop| bedstop >= pos } if stop rinfo = @info[rec.chrom+':'+stop.to_s] raise "Unexpected error in BED record for #{rec.chrom}:#{stop} position" if rinfo == nil start = rinfo[1] if pos >= start # p [rec.chrom,rec.pos,rinfo] return rinfo end end end nil end