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