class PRbed::Reader
Attributes
bim[R]
fam[R]
Public Class Methods
new(bfile, &block)
click to toggle source
# File lib/PRbed.rb, line 38 def initialize(bfile, &block) @bfile = bfile @fam = load_fam("#{bfile}.fam") @bim = load_bim("#{bfile}.bim") each_variants(&block) if block end
Public Instance Methods
each_variants() { |v, fam, a| ... }
click to toggle source
# File lib/PRbed.rb, line 45 def each_variants nsamples = @fam.size mod = nsamples % SAMPLES_PER_BYTE nread_bytes = nsamples / SAMPLES_PER_BYTE nread_bytes += 1 unless mod ==0 File.open("#{@bfile}.bed", "rb") do |f| raise PRBedError.new("not plink bed file") unless f.read(3) == "\x6c\x1b\x01" parser = BytesParser.new(nsamples) buf = '\x0' * nsamples @bim.each do |v| b = f.read(nread_bytes, buf) raise PRBedError.new("unpxpected file end") unless b a = parser.parse(b) yield(v, @fam, a) end end self end
Also aliased as: each
inspect()
click to toggle source
# File lib/PRbed.rb, line 67 def inspect "#<#{self.class}: @bfile='#{@bfile}' @bim=#{@bim.size} @fam=#{@fam.size}>" end
Private Instance Methods
load_bim(bim)
click to toggle source
# File lib/PRbed.rb, line 85 def load_bim(bim) bs = [] File.open(bim) do |f| while s = f.gets s.chomp! chr, vid, _, bp, a1, a2 = s.split(/\s/) bs.push(Bim.new(Integer(chr, 10), vid, Integer(bp, 10), a1, a2)) end end bs end
load_fam(fam)
click to toggle source
# File lib/PRbed.rb, line 73 def load_fam(fam) fs = [] File.open(fam) do |f| while s = f.gets s.chomp! fid, iid, _, _, sex, pheno = s.split(/\s/) fs.push(Fam.new(fid, iid, Integer(sex, 10), Integer(pheno, 10))) end end fs end