Class: SequenceLogo::PPMLogo

Inherits:
Object
  • Object
show all
Defined in:
lib/sequence_logo/data_models/ppm_logo.rb

Overview

wrapper around PPM to make it possible to configure rendering in a flexible way

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ppm, options = {}) ⇒ PPMLogo

Returns a new instance of PPMLogo.



8
9
10
11
12
# File 'lib/sequence_logo/data_models/ppm_logo.rb', line 8

def initialize(ppm, options = {})
  @ppm = ppm
  @icd_mode = options[:icd_mode]
  @enable_threshold_lines = options[:enable_threshold_lines]
end

Instance Attribute Details

#enable_threshold_linesObject (readonly)

Returns the value of attribute enable_threshold_lines.



6
7
8
# File 'lib/sequence_logo/data_models/ppm_logo.rb', line 6

def enable_threshold_lines
  @enable_threshold_lines
end

#icd_modeObject (readonly)

Returns the value of attribute icd_mode.



6
7
8
# File 'lib/sequence_logo/data_models/ppm_logo.rb', line 6

def icd_mode
  @icd_mode
end

#ppmObject (readonly)

Returns the value of attribute ppm.



6
7
8
# File 'lib/sequence_logo/data_models/ppm_logo.rb', line 6

def ppm
  @ppm
end

Instance Method Details

#lengthObject



14
15
16
# File 'lib/sequence_logo/data_models/ppm_logo.rb', line 14

def length
  ppm.length
end

#logo_matrixObject



26
27
28
# File 'lib/sequence_logo/data_models/ppm_logo.rb', line 26

def logo_matrix
  ppm.(icd_mode)
end

#nameObject



18
19
20
# File 'lib/sequence_logo/data_models/ppm_logo.rb', line 18

def name
  ppm.name
end

#render(canvas_factory) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/sequence_logo/data_models/ppm_logo.rb', line 30

def render(canvas_factory)
  canvas = LogoCanvas.new(canvas_factory)
  canvas.background(canvas_factory.background_fill)
  word_count = ppm.each_position.map{|pos| pos.inject(0.0, &:+) }.max
  if icd_mode == :discrete && enable_threshold_lines
    canvas.draw_threshold_line( scale(icd2of4(word_count), relative_to: icd4of4(word_count)) )
    canvas.draw_threshold_line( scale(icdThc(word_count),  relative_to: icd4of4(word_count)) )
    canvas.draw_threshold_line( scale(icdTlc(word_count),  relative_to: icd4of4(word_count)) )
  end

  logo_matrix.each do |position|
    canvas.add_position_ordered( position_sorted_by_height(position) )
  end
  canvas.image
end

#revcompObject



22
23
24
# File 'lib/sequence_logo/data_models/ppm_logo.rb', line 22

def revcomp
  PPMLogo.new(ppm.revcomp, icd_mode: icd_mode, enable_threshold_lines: enable_threshold_lines)
end