Class: Bio::AssemblyGraphAlgorithms::BubblyAssembler::MetaPath

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/assembly/bubbly_assembler.rb

Constant Summary collapse

DIVERGES_FATE =
'diverges'
DEAD_END_FATE =
'dead end'
CIRCUIT_FATE =
'circuit'
NODE_COUNT_LIMIT_REACHED =
'too many nodes in bubble'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMetaPath

Returns a new instance of MetaPath.



335
336
337
# File 'lib/assembly/bubbly_assembler.rb', line 335

def initialize
  @internal_array = []
end

Instance Attribute Details

#fateObject

How does this metapath end?



331
332
333
# File 'lib/assembly/bubbly_assembler.rb', line 331

def fate
  @fate
end

Instance Method Details

#<<(oriented_node_or_bubble) ⇒ Object Also known as: push



367
368
369
# File 'lib/assembly/bubbly_assembler.rb', line 367

def <<(oriented_node_or_bubble)
  @internal_array << oriented_node_or_bubble
end

#[](index) ⇒ Object



345
346
347
# File 'lib/assembly/bubbly_assembler.rb', line 345

def [](index)
  @internal_array[index]
end

#coverageObject



436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
# File 'lib/assembly/bubbly_assembler.rb', line 436

def coverage
  coverages = []
  lengths = []
  each do |onode_or_bubble|
    if onode_or_bubble.kind_of?(Bio::AssemblyGraphAlgorithms::BubblyAssembler::Bubble)
      # Length isn't obvious, but let's go with reference path length just coz that's easy
      this_length = onode_or_bubble.reference_trail.length_in_bp_within_path
      lengths.push this_length

      # Coverage of a bubble is the coverage of each node in the bubble
      # each weighted by their length
      coverages.push onode_or_bubble.coverage
    else
      #regular node. So simple average coverage
      coverages.push onode_or_bubble.node.coverage
      lengths.push onode_or_bubble.node.length_alone
    end
  end

  # Then a simple weighted average
  i = -1
  total_length = lengths.reduce(:+)

  answer =  coverages.reduce(0.0) do |sum, cov|
    i += 1
    sum + (cov * lengths[i].to_f / total_length)
  end
  answer
end

#delete_at(index) ⇒ Object



349
350
351
# File 'lib/assembly/bubbly_assembler.rb', line 349

def delete_at(index)
  @internal_array.delete_at index
end

#eachObject



339
340
341
342
343
# File 'lib/assembly/bubbly_assembler.rb', line 339

def each
  @internal_array.each do |e|
    yield e
  end
end

#each_oriented_nodeObject

bits.



394
395
396
397
398
399
400
401
402
403
404
# File 'lib/assembly/bubbly_assembler.rb', line 394

def each_oriented_node
  @internal_array.each do |e|
    if e.kind_of?(Bio::AssemblyGraphAlgorithms::BubblyAssembler::Bubble)
      e.oriented_nodes.each do |onode|
        yield onode
      end
    else
      yield e
    end
  end
end

#empty?Boolean

Returns:

  • (Boolean)


353
354
355
# File 'lib/assembly/bubbly_assembler.rb', line 353

def empty?
  @internal_array.empty?
end

#last_oriented_nodeObject



357
358
359
360
361
362
363
364
365
# File 'lib/assembly/bubbly_assembler.rb', line 357

def last_oriented_node
  e = @internal_array[-1]
  if e.kind_of?(Bio::Velvet::Graph::OrientedNodeTrail::OrientedNode)
    return e
  else
    # it is a bubble
    return e.converging_oriented_node
  end
end

#lengthObject



388
389
390
# File 'lib/assembly/bubbly_assembler.rb', line 388

def length
  @internal_array.length
end

#length_in_bpObject



406
407
408
409
410
411
412
413
414
415
416
# File 'lib/assembly/bubbly_assembler.rb', line 406

def length_in_bp
  sum = 0
  each do |e|
    if e.kind_of?(Bio::AssemblyGraphAlgorithms::BubblyAssembler::Bubble)
      sum += e.reference_trail.length_in_bp_within_path
    else
      sum += e.node.length_alone
    end
  end
  return sum
end

#reference_trailObject



418
419
420
421
422
423
424
425
426
427
428
429
430
# File 'lib/assembly/bubbly_assembler.rb', line 418

def reference_trail
  trail = Bio::Velvet::Graph::OrientedNodeTrail.new

  trail.trail = collect do |e|
    if e.kind_of?(Bio::AssemblyGraphAlgorithms::BubblyAssembler::Bubble)
      e.reference_trail.trail
    else
      e
    end
  end.flatten

  return trail
end

#reverse!Object



376
377
378
379
380
381
382
383
384
385
386
# File 'lib/assembly/bubbly_assembler.rb', line 376

def reverse!
  # Do regular reversal
  @internal_array.reverse!

  # Reverse all the internal parts
  @internal_array.each do |e|
    e.reverse!
  end

  return nil
end

#sequenceObject



432
433
434
# File 'lib/assembly/bubbly_assembler.rb', line 432

def sequence
  reference_trail.sequence
end

#to_shorthandObject



372
373
374
# File 'lib/assembly/bubbly_assembler.rb', line 372

def to_shorthand
  @internal_array.collect{|e| e.to_shorthand}.join(',')
end