Sha256: 44c6bbebceff730d0709b8d39b3e879b4e6911919f2702cfeb6168e9e0bea95f

Contents?: true

Size: 1.93 KB

Versions: 8

Compression:

Stored size: 1.93 KB

Contents

# A velvet Graph where the nodes and arcs are in Ruby, but the NodedReads are in C
class Bio::FinishM::HybridGraph < Bio::Velvet::Graph
  include Bio::FinishM::Logging

  attr_accessor :bio_velvet_underground_graph

  def initialize(bio_velvet_graph, bio_velvet_underground_graph)
    @bio_velvet_underground_graph = bio_velvet_underground_graph

    @nodes = NodeArray.new(bio_velvet_graph, bio_velvet_underground_graph, self)
    @hash_length = bio_velvet_graph.hash_length
    @number_of_nodes = bio_velvet_graph.number_of_nodes
    @number_of_sequences = bio_velvet_graph.number_of_sequences
    @arcs = bio_velvet_graph.arcs
  end

  class NodeArray
    include Enumerable

    def initialize(bio_velvet_graph, bio_velvet_underground_graph, parent_graph)
      @bio_velvet_graph = bio_velvet_graph
      @bio_velvet_underground_graph = bio_velvet_underground_graph
      @parent_graph = parent_graph
    end

    def []=(node_id, value)
      raise "method not implemented"
    end

    def [](node_id)
      bio_velvet_node = @bio_velvet_graph.nodes[node_id]
      bio_velvet_node.short_reads = LazyShortReadArray.new(@bio_velvet_underground_graph.nodes[node_id])
      bio_velvet_node.parent_graph = @parent_graph
      return bio_velvet_node
    end

    def delete(node)
      @bio_velvet_graph.nodes.delete node
    end

    def length
      @bio_velvet_graph.nodes.length
    end

    def each(&block)
      @bio_velvet_graph.nodes.each do |node|
        block.yield self[node.node_id]
      end
    end
  end

  # Hold pointers to short reads, but don't actually create them until required.
  # Utilizes method_missing to pick up calls made to the underlying object
  class LazyShortReadArray
    @short_reads = nil

    def method_missing(m, *args, &block)
      read_short_reads.send(m, *args, &block)
    end

    def read_short_reads
      @short_reads ||= @parent_node.short_reads
    end

    def initialize(node)
      @parent_node = node
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
finishm-0.0.9 lib/assembly/hybrid_velvet_graph.rb
finishm-0.0.8 lib/assembly/hybrid_velvet_graph.rb
finishm-0.0.7 lib/assembly/hybrid_velvet_graph.rb
finishm-0.0.6 lib/assembly/hybrid_velvet_graph.rb
finishm-0.0.5 lib/assembly/hybrid_velvet_graph.rb
finishm-0.0.4 lib/assembly/hybrid_velvet_graph.rb
finishm-0.0.2 lib/assembly/hybrid_velvet_graph.rb
finishm-0.0.1 lib/assembly/hybrid_velvet_graph.rb