class Diadem::IsotopeDistribution

Constants

DEFAULT_ISOTOPE_TABLE

Attributes

intensities[RW]

should always add up to 1

nucleon_start[RW]

should be inclusive of last value

Public Class Methods

average(distributions, weights=nil) click to toggle source

returns a new distribution, uses equal weights if none given

# File lib/diadem/isotope_distribution.rb, line 29
def average(distributions, weights=nil)
  weights ||= Array.new(distributions.size, 1)
  min_nucleon_num = distributions.map(&:nucleon_start).min
  max_nucleon_num = distributions.map(&:nucleon_end).max

  new_intensity_arrays = distributions.zip(weights).map do |dist, weight|
    new_pcts = dist.intensities.dup
    right_pad = max_nucleon_num - dist.nucleon_end
    left_pad = dist.nucleon_start - min_nucleon_num
    [[right_pad, new_pcts.size], [left_pad, 0]].each do |pad, loc|
      new_pcts[loc,0] = Array.new(pad, 0.0)
    end
    new_pcts.map! {|v| v * weight }
    new_pcts
  end

  summed_intensities = new_intensity_arrays.transpose.map do |col|
    col.reduce(:+)
  end

  new_dist = self.new(summed_intensities, min_nucleon_num)
  new_dist.normalize!
end
from_formula(formula) click to toggle source
# File lib/diadem/isotope_distribution.rb, line 24
def from_formula(formula)
  Mspire::MolecularFormula[formula].isotope_distribution
end
new(intensities=[], nucleon_start=0) click to toggle source
# File lib/diadem/isotope_distribution.rb, line 14
def initialize(intensities=[], nucleon_start=0)
  @intensities, @nucleon_start = intensities, nucleon_start
end

Public Instance Methods

normalize!(normalize_to=1.0) click to toggle source

normalizes intensity values and returns self

# File lib/diadem/isotope_distribution.rb, line 55
def normalize!(normalize_to=1.0)
  sum = intensities.reduce(:+)
  intensities.map! {|v| (v.to_f/sum)*normalize_to }
  self
end
nucleon_end() click to toggle source
# File lib/diadem/isotope_distribution.rb, line 18
def nucleon_end
  nucleon_start + intensities.size - 1
end