class CTioga2::Data::Backends::MathBackend

Public Class Methods

new() click to toggle source
Calls superclass method CTioga2::Data::Backends::Backend::new
# File lib/ctioga2/data/backends/backends/math.rb, line 50
def initialize
  super()
  @samples = 100
  @x_range = -10.0..10.0
  @t_range = -10.0..10.0
  @log = false
end

Public Instance Methods

query_dataset(set) click to toggle source

This is called by the architecture to get the data. It first splits the set name into func@range.

# File lib/ctioga2/data/backends/backends/math.rb, line 60
def query_dataset(set)
  if set =~ /(.*)@(.*)/
    set = $1
    range = $2
  end          
  name = "#{set}"

  
  if set.split_at_toplevel(/:/).size > 1         # parametric
    if range
      set_param_from_string(:t_range, range)
    end
    varname = "t"
    values = make_dvector(@t_range, @samples, @log)
  else
    if range
      set_param_from_string(:x_range, range)
    end
    varname = "x"
    values = make_dvector(@x_range, @samples, @log)
    set = "x:#{set}"
  end
  return Dataset.dataset_from_spec(name, set) do |b|
    get_data_column(b, varname, values)
  end
end

Protected Instance Methods

get_data_column(column, variable, values) click to toggle source

Uses compute_formula to get data from

# File lib/ctioga2/data/backends/backends/math.rb, line 112
def get_data_column(column, variable, values)
  column.gsub!(/\b#{variable}\b/, "(column[0])")
  return Ruby.compute_formula(column, [values])
end
make_dvector(range, nb_points, log = @log) click to toggle source

Turns a Range and a number of points into a Dvector

# File lib/ctioga2/data/backends/backends/math.rb, line 91
def make_dvector(range, nb_points, log = @log)
  n = nb_points -1
  a = Dvector.new(nb_points) { |i| 
    i.to_f/(n.to_f)
  }
  # a is in [0:1] inclusive...
  if log
    delta = range.last/range.first
    # delta is positive necessarily
    a *= delta.log
    a.exp!
    a *= range.first
  else
    delta = range.last - range.first
    a *= delta
    a += range.first
  end
  return a
end