Class: EngineTune::Calculations

Inherits:
Object
  • Object
show all
Defined in:
lib/engine-tune/calculations.rb

Overview

After getting instantiated with a set of meterological and geological observations, a Calculations object can determine a number of calculations related to engine efficiency.

Constant Summary collapse

OBSERVATION_ATTRS =

Names of observations required for calculations to compute

[:temperature, :dew_point, :altitude, :altimeter]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(observations) ⇒ Calculations

Instantiates a new instance with a hash of observations that must include temperature, dew_point, altimeter and altitude. These observations are the only required data to calculate all the engine tuning metrics exposed in this object.



21
22
23
24
# File 'lib/engine-tune/calculations.rb', line 21

def initialize(observations)
  observations.each { |method, value| send("#{method}=", value) }
  @metric = true
end

Instance Attribute Details

#metric=(value) ⇒ Object (writeonly)

Sets the attribute metric

Parameters:

  • value

    the value to set the attribute metric to.



14
15
16
# File 'lib/engine-tune/calculations.rb', line 14

def metric=(value)
  @metric = value
end

Instance Method Details

#==(object) ⇒ Object

Objects are equal if their observations are identical



29
30
31
# File 'lib/engine-tune/calculations.rb', line 29

def ==(object)
  self.observations == object.observations
end

#absolute_pressureObject



67
68
69
70
71
# File 'lib/engine-tune/calculations.rb', line 67

def absolute_pressure
  @absolute_air_pressure ||= EngineTune::Calculator.absolute_pressure(altimeter, altitude)
  @absolute_air_pressure_inches ||= EngineTune::Calculator.millibars_to_inches(@absolute_air_pressure)
  metric? ? @absolute_air_pressure : @absolute_air_pressure_inches
end

#densityObject



73
74
75
# File 'lib/engine-tune/calculations.rb', line 73

def density
  @density ||= EngineTune::Calculator.density(altimeter, altitude, dew_point, temperature)
end

#density_altitudeObject



91
92
93
94
95
# File 'lib/engine-tune/calculations.rb', line 91

def density_altitude
  @density_altitude ||= EngineTune::Calculator.density_altitude(altimeter, altitude, dew_point, temperature)
  @density_altitude_feet ||= EngineTune::Calculator.meters_to_feet(@density_altitude)
  metric? ? @density_altitude : @density_altitude_feet
end

#dyno_correction_factorObject



81
82
83
# File 'lib/engine-tune/calculations.rb', line 81

def dyno_correction_factor
  @dyno_correction_factor ||= EngineTune::Calculator.dyno_correction_factor(altimeter, altitude, dew_point, temperature)
end

#english?Boolean

Returns true if calculations should be returned using the English system

Returns:

  • (Boolean)


53
54
55
# File 'lib/engine-tune/calculations.rb', line 53

def english?
  !@metric
end

#metric?Boolean

Returns true if calculations should be returned using the metric system

Returns:

  • (Boolean)


46
47
48
# File 'lib/engine-tune/calculations.rb', line 46

def metric?
  @metric
end

#observationsObject

Returns a hash of observations for this set of calculations



36
37
38
39
40
41
# File 'lib/engine-tune/calculations.rb', line 36

def observations
  OBSERVATION_ATTRS.inject({}) do |result, o| 
    result[o] = send(o)
    result
  end
end

#relative_densityObject



77
78
79
# File 'lib/engine-tune/calculations.rb', line 77

def relative_density
  @relative_density ||= EngineTune::Calculator.relative_density(altimeter, altitude, dew_point, temperature)
end

#relative_horsepowerObject



97
98
99
# File 'lib/engine-tune/calculations.rb', line 97

def relative_horsepower
  @relative_horsepower ||= EngineTune::Calculator.relative_horsepower(altimeter, altitude, dew_point, temperature)
end

#relative_humidityObject



63
64
65
# File 'lib/engine-tune/calculations.rb', line 63

def relative_humidity
  @relative_humidity ||= EngineTune::Calculator.relative_humidity(temperature, dew_point)
end

#vapor_pressureObject



57
58
59
60
61
# File 'lib/engine-tune/calculations.rb', line 57

def vapor_pressure
  @vapor_pressure ||= EngineTune::Calculator.vapor_pressure(dew_point)
  @vapor_pressure_inches ||= EngineTune::Calculator.millibars_to_inches(@vapor_pressure)
  metric? ? @vapor_pressure : @vapor_pressure_inches
end

#virtual_temperatureObject



85
86
87
88
89
# File 'lib/engine-tune/calculations.rb', line 85

def virtual_temperature
  @virtual_temperature ||= EngineTune::Calculator.virtual_temperature(altimeter, altitude, dew_point, temperature)
  @virtual_temperature_f ||= EngineTune::Calculator.celsius_to_fahrenheit(@virtual_temperature)
  metric? ? @virtual_temperature : @virtual_temperature_f
end