Sha256: 291fc56183ba82860a20ff9ac3fabbda0363f6fe656b0be2887ee559f8702a00
Contents?: true
Size: 1.79 KB
Versions: 1
Compression:
Stored size: 1.79 KB
Contents
module Bio class Graphics #The Track class holds and organises the features, ordering them into different rows if they overlap class Track attr_reader :glyph, :name, :label, :args, :track_height, :scale, :max_y, :min_width attr_accessor :features, :feature_rows, :name, :number_rows, :feature_height #Creates a new Track def initialize(args) @args = {:glyph => :generic, :name => "feature_track", :label => true, :feature_height => 10, :track_height => nil }.merge!(args) @glyph = @args[:glyph] @name = @args[:name] @label = @args[:label] @track_height = @args[:track_height] @features = [] @feature_rows = [] @scale = @args[:scale] @feature_height = @args[:feature_height] @number_of_rows = 1 @max_y = args[:max_y] @min_width = args[:min_width] end #Adds a new MiniFeature to the the @features array def add(feature) @features << feature end #Calculates how many rows are needed per track for overlapping features #and which row each feature should be in def get_rows current_row = 1 @feature_rows = Array.new(@features.length,1) @features.each_with_index do |f1, i| @features.each_with_index do |f2, j| next if i == j or j <= i if overlaps(f1,f2) @feature_rows[i] += 1 end end @number_rows = @feature_rows.max end end #Calculates if two MiniFeature objects overlap by examining their start and end positions. #If two features overlap then then will be placed on separate rows of the track # #+args+ #* f1 - a MiniFeature object #* f2 - a MiniFeature object def overlaps(f1, f2) (f1.start >= f2.start and f1.start <= f2.end) or (f1.end >= f2.start and f1.end <= f2.end) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
bio-svgenes-0.3.1 | lib/bio/graphics/track.rb |