Class: Bio::DB::Faidx

Inherits:
Object
  • Object
show all
Defined in:
lib/bio-faidx/faidx.rb

Defined Under Namespace

Classes: Entry

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ Faidx

Returns a new instance of Faidx.



10
11
12
13
14
15
# File 'lib/bio-faidx/faidx.rb', line 10

def initialize(opts)
  @cache = false
  @cache = opts[:cache] if opts[:cache]
  @filename = opts[:filename]
  @inited = false
end

Instance Method Details

#[](entry) ⇒ Object



32
33
34
35
# File 'lib/bio-faidx/faidx.rb', line 32

def [](entry)
  init_cache unless @inited
 @entries[entry]
end

#each_entryObject



54
55
56
57
58
59
60
# File 'lib/bio-faidx/faidx.rb', line 54

def each_entry
  unless @cache
    read_entries { |e| yield e }
  else
    entries_order.each { |e|  yield @entries[e] }
  end
end

#entriesObject



27
28
29
30
# File 'lib/bio-faidx/faidx.rb', line 27

def entries
  init_cache unless @inited
  @entries
end

#entries_orderObject



38
39
40
41
# File 'lib/bio-faidx/faidx.rb', line 38

def entries_order
  init_cache unless @inited
  return @entries_order
end

#init_cacheObject



17
18
19
20
21
22
23
24
25
# File 'lib/bio-faidx/faidx.rb', line 17

def init_cache
  @inited = true
  @entries = Hash.new
  @entries_order = Array.new
  read_entries do |e|
    @entries[e.name] = e
    @entries_order << e.name 
  end
end

#read_entriesObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/bio-faidx/faidx.rb', line 43

def read_entries
    CSV.foreach(@filename, :col_sep => "\t", :skip_lines=>/^#/, :skip_blanks=>true) do |row|
    fasta_entry = Bio::DB::Faidx::Entry.new
    [:name, :length, :offset, :linebases, :linewidth].each_with_index do |sym, i|
      answer = row[i]
      answer = answer.to_i if [:length, :offset, :linebases, :linewidth].include?(sym)
      fasta_entry.send("#{sym}=".to_sym, answer)
      yield fasta_entry
    end
  end

  def each_entry
    unless @cache
      read_entries { |e| yield e }
    else
      entries_order.each { |e|  yield @entries[e] }
    end
  end
end