Class: Bio::AssemblyGraphAlgorithms::BubblyAssembler::MetaPath
- Inherits:
-
Object
- Object
- Bio::AssemblyGraphAlgorithms::BubblyAssembler::MetaPath
- 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
-
#fate ⇒ Object
How does this metapath end?.
Instance Method Summary collapse
- #<<(oriented_node_or_bubble) ⇒ Object (also: #push)
- #[](index) ⇒ Object
- #coverage ⇒ Object
- #delete_at(index) ⇒ Object
- #each ⇒ Object
-
#each_oriented_node ⇒ Object
bits.
- #empty? ⇒ Boolean
-
#initialize ⇒ MetaPath
constructor
A new instance of MetaPath.
- #last_oriented_node ⇒ Object
- #length ⇒ Object
- #length_in_bp ⇒ Object
- #reference_trail ⇒ Object
- #reverse! ⇒ Object
- #sequence ⇒ Object
- #to_shorthand ⇒ Object
Constructor Details
#initialize ⇒ MetaPath
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
#fate ⇒ Object
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 |
#coverage ⇒ Object
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 |
#each ⇒ Object
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_node ⇒ Object
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
353 354 355 |
# File 'lib/assembly/bubbly_assembler.rb', line 353 def empty? @internal_array.empty? end |
#last_oriented_node ⇒ Object
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 |
#length ⇒ Object
388 389 390 |
# File 'lib/assembly/bubbly_assembler.rb', line 388 def length @internal_array.length end |
#length_in_bp ⇒ Object
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_trail ⇒ Object
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 |
#sequence ⇒ Object
432 433 434 |
# File 'lib/assembly/bubbly_assembler.rb', line 432 def sequence reference_trail.sequence end |
#to_shorthand ⇒ Object
372 373 374 |
# File 'lib/assembly/bubbly_assembler.rb', line 372 def to_shorthand @internal_array.collect{|e| e.to_shorthand}.join(',') end |