Module: Gene

Extended by:
Entity
Defined in:
lib/rbbt/entity/gene.rb

Constant Summary

Constants included from Entity

Entity::UNPERSISTED_PREFIX

Class Method Summary collapse

Methods included from Entity

extended

Class Method Details

.ensg2enst(organism, gene) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/rbbt/entity/gene.rb', line 17

def self.ensg2enst(organism, gene)
  @@ensg2enst ||= {}
  @@ensg2enst[organism] ||= Organism.gene_transcripts(organism).tsv(:type => :flat, :key_field => "Ensembl Gene ID", :fields => ["Ensembl Transcript ID"], :persist => true, :unnamed => true)

  if Array === gene
    @@ensg2enst[organism].values_at *gene
  else
    @@ensg2enst[organism][gene]
  end
end

.filter(query, field = nil, options = nil, entity = nil) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/rbbt/entity/gene.rb', line 28

def self.filter(query, field = nil, options = nil, entity = nil)
  return true if query == entity

  return true if query == Gene.setup(entity.dup, options.merge(:format => field)).name

  false
end

.gene_list_bases(genes) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/rbbt/entity/gene.rb', line 36

def self.gene_list_bases(genes)
  genes = genes.ensembl
  chromosome_genes = {}
  Misc.process_to_hash(genes){|genes| genes.chromosome}.each{|gene, chr| chromosome_genes[chr] ||= []; chromosome_genes[chr] << gene}
  total = 0
  chromosome_genes.each do |chr,gs|
    next if chr.nil?
    total += Misc.total_length(genes.annotate(gs).chr_range.compact)
  end
  
  total
end

.gene_list_exon_bases(genes) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/rbbt/entity/gene.rb', line 49

def self.gene_list_exon_bases(genes)
  genes = genes.ensembl
  chromosome_genes = {}
  Misc.process_to_hash(genes){|genes| genes.chromosome}.each{|gene, chr| chromosome_genes[chr] ||= []; chromosome_genes[chr] << gene}

  @@exon_range_tsv ||= {}
  organism = genes.organism
  @@exon_range_tsv[organism] ||= Organism.exons(organism).tsv :persist => true, :fields => ["Exon Chr Start", "Exon Chr End"], :type => :list, :cast => :to_i, :unnamed => true
  total = 0

  chromosome_genes.each do |chr,gs|
    next if chr.nil?
    exons = genes.annotate(gs).transcripts.compact.flatten.exons.compact.flatten.uniq

    exon_ranges = exons.collect{|exon|
      Log.low "Exon #{ exon } does not have range" unless @@exon_range_tsv[organism].include? exon
      next unless @@exon_range_tsv[organism].include? exon
      pos = @@exon_range_tsv[organism][exon]
      (pos.first..pos.last)
    }.compact
    total += Misc.total_length(exon_ranges)
  end
  
  total
end