class Iroki::Color::TwoGroupGradient

Attributes

g1_counts[RW]
g1_rabunds[RW]
g2_counts[RW]
g2_rabunds[RW]

Public Class Methods

new(samples, g1_counts, g2_counts, min_lumin, max_lumin) click to toggle source
# File lib/iroki/color/two_group_gradient.rb, line 24
def initialize samples,
               g1_counts,
               g2_counts,
               min_lumin,
               max_lumin

  assert(samples.count == g1_counts.count &&
               g1_counts.count == g2_counts.count,
               "Samples and counts are different lengths. " +
               "Check your biom file.")

  @min_lumin = min_lumin
  @max_lumin = max_lumin

  @samples = samples
  @g1_counts = g1_counts
  @g2_counts = g2_counts
  @g1_rabunds = counts_to_rabunds g1_counts
  @g2_rabunds = counts_to_rabunds g2_counts
  @color_hex_codes = calc_hex_codes @g1_rabunds, @g2_rabunds
end

Public Instance Methods

calc_hex_codes(g1_rabunds, g2_rabunds) click to toggle source
# File lib/iroki/color/two_group_gradient.rb, line 94
def calc_hex_codes g1_rabunds, g2_rabunds
  g1_rabunds.zip(g2_rabunds).map do |ra1, ra2|
    if ra1.zero? && ra2.zero?
      Iroki::Color::GRAY.html
    else
      hex_code ra1, ra2
    end
  end
end
hex_code(ra1, ra2) click to toggle source
# File lib/iroki/color/two_group_gradient.rb, line 84
def hex_code ra1, ra2
  perc = mix_percent ra1, ra2

  col = Iroki::Color::GREEN.mix_with Iroki::Color::BLUE, perc

  col.luminosity = lumin_level ra1, ra2

  col.html
end
lumin_level(ra1, ra2) click to toggle source
# File lib/iroki/color/two_group_gradient.rb, line 68
def lumin_level ra1, ra2
  if ra1 > ra2
    scale_reverse ra1,
                  new_min=@min_lumin,
                  new_max=@max_lumin,
                  old_min=0.0,
                  old_max=1.0
  else
    scale_reverse ra2,
                  new_min=@min_lumin,
                  new_max=@max_lumin,
                  old_min=0.0,
                  old_max=1.0
  end
end
mix_percent(ra1, ra2) click to toggle source
# File lib/iroki/color/two_group_gradient.rb, line 64
def mix_percent ra1, ra2
  1 - percent_of_group1_color(ra1, ra2)
end
percent_of_group1_color(ra1, ra2) click to toggle source
# File lib/iroki/color/two_group_gradient.rb, line 46
def percent_of_group1_color ra1, ra2
  if ra1 > ra2
    1 - scale(ra2 / ra1,
              new_min=0.0,
              new_max=0.5,
              old_min=0.0,
              old_max=1.0)
  elsif ra1 < ra2
    scale(ra1 / ra2,
          new_min=0.0,
          new_max=0.5,
          old_min=0.0,
          old_max=1.0)
  else
    0.5
  end
end