Module: GENOME

Defined in:
lib/genome.rb,
lib/genome/snp.rb,
lib/genome/genome.rb,
lib/genome/version.rb,
lib/genome/genotype.rb

Defined Under Namespace

Classes: Genome, Genotype, SNP

Constant Summary collapse

VERSION =
'0.1.1'.freeze

Class Method Summary collapse

Class Method Details

.ancestry_reader(line) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/genome.rb', line 31

def self.ancestry_reader(line)
  rsid, chromosome, position, allele1, allele2 = line.split
  genotype = allele1 + allele2
  snp = SNP.new(chromosome = chromosome,
                position = position,
                genotype = Genotype.new(genotype))
  [rsid, snp]
end

.load(_filename, _provider = '23andme') ⇒ Object

Raises:



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/genome.rb', line 40

def self.load(_filename, _provider = '23andme')
  raise ProviderError, "#{_provider} is not supported." unless %w[23andme ancestry].include? _provider

  first_line = File.open(_filename, &:readline)
  if _provider == '23andme'
    raise FileTypeError, "#{_filename} is not in a correct #{_provider} format" unless first_line.downcase.include? '23'.downcase
  elsif _provider == 'ancestry'
    raise FileTypeError, "#{_filename} is not in a correct #{_provider} format" unless first_line.downcase.include? 'ancestry'.downcase
  end

  genome = Genome.new(name = _filename)
  reader = if _provider == '23andme'
             :ttandme_reader
           elsif _provider == 'ancestry'
             :ancestry_reader
           end
  File.open(_filename).each do |line|
    next if line.start_with?('#') || line.start_with?('rsid')

    rsid, snp = send reader, line
    genome[rsid] = snp
  end
  genome
end

.ttandme_reader(line) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/genome.rb', line 23

def self.ttandme_reader(line)
  rsid, chromosome, position, genotype = line.split
  snp = SNP.new(chromosome = chromosome,
                position = position,
                genotype = Genotype.new(genotype))
  [rsid, snp]
end