class PavementConditionIndex::Lookups::DeductValues

Public Class Methods

new(pavement_type:nil,severity:nil,distress_type:nil) click to toggle source
# File lib/pavement_condition_index/lookups/deduct_values.rb, line 5
def initialize(pavement_type:nil,severity:nil,distress_type:nil)
  @pavement_type = pavement_type
  @severity = severity
  @distress_type = distress_type
end

Public Instance Methods

call(value) click to toggle source
# File lib/pavement_condition_index/lookups/deduct_values.rb, line 11
def call(value)
  deduct = PavementConditionIndex::Lookups::CalculatedDeductCoefficients::COEFFICIENTS[@pavement_type][@distress_type]
  coefficients = deduct[:coefficients][@severity]
  value = value.clamp(deduct[:valid_min],deduct[:valid_max])
  # Asphalt charts use logarithmic scale, concrete uses linear
  value = deduct[:chart_type] == :log ? Math.log10(value.to_f) : value.to_f
  return evaluate_polynomial(*coefficients).call(value).clamp(0.0,100.0)
end

Private Instance Methods

evaluate_polynomial(*coefficients) click to toggle source
# File lib/pavement_condition_index/lookups/deduct_values.rb, line 22
def evaluate_polynomial(*coefficients)
  Proc.new {|x| coefficients.map.with_index{|c,i| c*(x**i)}.reduce(:+)}
end