class GeneOntology

Constants

EXPECTED_HEADER_FIELDS

subsetdefs is an array, other is a hash for any key/value pairs not already defined here

VERSION

Attributes

header[RW]
id_to_term[RW]

Public Class Methods

from_file(filename) click to toggle source
# File lib/gene_ontology.rb, line 23
def from_file(filename)
  new.from_file(filename)
end

Public Instance Methods

from_file(filename) click to toggle source

returns self

# File lib/gene_ontology.rb, line 29
def from_file(filename)
  File.open(filename) do |io|
    @header = parse_header(io)
    @id_to_term = parse_terms(io)
  end
  self
end
parse_header(io) click to toggle source

returns a header object

# File lib/gene_ontology.rb, line 38
def parse_header(io)
  header = Header.new
  while md=io.gets.match(/^([\w\-]+): (.*)/)
    key, val = md[1].to_sym, md[2]
    if key == :subsetdef
      header.subsetdefs.push(val)
    elsif !header.respond_to?(key)
      header.other[key] = val
    else
      header[key] = val
    end
  end
  header
end
parse_terms(io, opts={}) click to toggle source

returns id_to_term is_a points to an array of actual objects

# File lib/gene_ontology.rb, line 66
def parse_terms(io, opts={})
  opts = {:link => true}.merge(opts)
  terms = []
  in_term = false
  while line = io.gets
    if (md=line.match(/^(\w+): (.+)/)) && (in_term)
      key, val = md[1].to_sym, md[2].split(' ! ').first
      if Term::PLURAL.include?(key)
        terms.last.send(key) << val
      else
        terms.last.send("#{key}=", val)
      end
    elsif line !~ /\w/
      in_term = false
    elsif line =~ /\[Term\]/
      terms << Term.new
      in_term = true
    end
  end
  id_to_term = self.class.link!(terms)
  id_to_term.values.each {|term| term.find_level }
  id_to_term
end