class Scaffolder::AnnotationLocator

Public Class Methods

new(scaffold_file,sequence_file,gff_file) click to toggle source
Calls superclass method
# File lib/scaffolder/annotation_locator.rb, line 10
def initialize(scaffold_file,sequence_file,gff_file)
  @scaffold_file = scaffold_file
  @sequence_file = sequence_file
  @gff_file      = gff_file

  updated_records = Array.new
  scaffold.inject(0) do |prior_length,entry|

    if entry.entry_type == :sequence
      records[entry.source].each do |record|

        # Don't include this record if it overlaps with an insert
        next if record.overlap?(entry.inserts.map{|i| (i.open..i.close)})

        # Skip this record it lies in the start or stop trimmed regions
        next if record.start < entry.start
        next if record.end   > entry.stop

        # Update record location by size differences of prior inserts
        entry.inserts.select {|i| i.close < record.start }.each do |insert|
          record.change_position_by insert.size_diff
        end

        # Decrease record position by distance contig is trimmed at start
        record.change_position_by(1 - entry.start)

        # Reverse complement record positions if contig is reversed
        record.reverse_complement_by entry.sequence.length if entry.reverse

        # Increase record position by length of prior contigs
        record.change_position_by prior_length

        record.seqname = "scaffold"

        updated_records << record
      end
    end

    prior_length + entry.sequence.length
  end

  super updated_records
end

Public Instance Methods

records() click to toggle source
# File lib/scaffolder/annotation_locator.rb, line 59
def records
  gff3 = Bio::GFF::GFF3.new(File.read(@gff_file)).records
  gff3.inject(Hash.new{|h,k| h[k] = Array.new }) do |hash,record|
    hash[record.seqname] << record
    hash
  end
end
scaffold() click to toggle source
# File lib/scaffolder/annotation_locator.rb, line 54
def scaffold
  YAML::ENGINE.yamler = 'syck' if defined? YAML::ENGINE
  Scaffolder.new(YAML.load(File.read(@scaffold_file)),@sequence_file)
end