earth 0.11.8 → 0.11.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,7 +5,7 @@ require "earth/version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "earth"
7
7
  s.version = Earth::VERSION
8
- s.date = "2011-12-22"
8
+ s.date = "2012-01-24"
9
9
  s.platform = Gem::Platform::RUBY
10
10
  s.authors = ["Seamus Abshere", "Derek Kastner", "Andy Rossmeissl"]
11
11
  s.email = %q{andy@rossmeissl.net}
@@ -1,51 +1,78 @@
1
1
  require 'conversions'
2
- Conversions.register(:miles, :nautical_miles, 0.868976242)
3
- Conversions.register(:kilometres, :nautical_miles, 0.539956803)
4
- Conversions.register(:pounds_per_gallon, :kilograms_per_litre, 0.119826427)
5
- Conversions.register(:inches, :meters, 0.0254)
6
- Conversions.register(:kilowatt_hours, :watt_hours, 1_000.0)
7
- Conversions.register(:kilowatt_hours, :btus, 3_412.14163) # obsolete?
8
- Conversions.register(:watt_hours, :btus, 3.4121414799) # obsolete?
9
- Conversions.register(:watt_hours, :joules, 3_600.0)
10
- Conversions.register(:kilowatt_hours, :joules, 3_600_000.0)
11
2
 
12
- # Conversions.register(:btus, :gallons_of_kerosene, 0.000007419521097)
13
- Conversions.register(:joules, :litres_of_kerosene, 1.0 / (135_000.0 * 3.78541178 * 1_055.05585)) # should only be used for RECS 2005
3
+ # Distance: base unit = kilometre
4
+ Conversions.register :kilometres, :miles, 0.621371192
5
+ Conversions.register :kilometres, :nautical_miles, 0.539956803
14
6
 
15
- # Conversions.register(:btus, :gallons_of_propane, 0.000010471204188)
16
- Conversions.register(:joules, :litres_of_propane, 1.0 / (91_333.0 * 3.78541178 * 1_055.05585)) # should only be used for RECS 2005
7
+ # Area
8
+ Conversions.register :square_metres, :square_feet, 10.7639104
17
9
 
18
- # Conversions.register(:btus, :therms, 0.000010002388121)
19
- Conversions.register(:therms, :joules, 105_505_585.0) # should only be used for RECS 2005
10
+ # Volume, liquid: base unit = litre
11
+ Conversions.register :litres, :gallons, 0.264172052
12
+ Conversions.register :litres, :cubic_inches, 61.0237441
20
13
 
21
- # Conversions.register(:btus, :gallons_of_fuel_oil, 0.0000072007637183)
22
- Conversions.register(:joules, :litres_of_fuel_oil, 1.0 / (138_690.0 * 3.78541178 * 1_055.05585)) # should only be used for RECS 2005
14
+ # Volume, solid: base unit = cubic metre
15
+ Conversions.register :cubic_metres, :cubic_feet, 35.3146667
16
+ Conversions.register :cubic_metres, :hundred_cubic_feet, 0.353146667
23
17
 
24
- # Conversions.register(:tons_of_coal, :btus, 20_169_000.0)
25
- Conversions.register(:joules, :kilograms_of_coal, 1.0 / (22_342_000.0 * 0.00110231131 * 1_055.05585)) # should only be used for RECS 2005
18
+ # Mass: base unit = kilogram
19
+ Conversions.register :kilograms, :grams, 1_000.0
20
+ Conversions.register :kilograms, :metric_tonnes, 0.001
21
+ Conversions.register :kilograms, :pounds, 2.20462262
22
+ Conversions.register :kilograms, :tons, 0.00110231131
26
23
 
27
- Conversions.register(:kilograms, :lbs, 2.20462262)
28
- Conversions.register(:metric_tonnes, :kilograms, 1_000.0)
29
- Conversions.register(:kbtus, :btus, 1_000.0)
30
- Conversions.register(:square_feet, :square_metres, 0.09290304)
31
- Conversions.register(:pounds_per_square_foot, :kilograms_per_square_metre, 4.88242764)
32
- Conversions.register(:kilograms_per_kilowatt_hour, :kilograms_per_megawatt_hour, 1_000.0)
33
- Conversions.register(:btus, :joules, 1_055.05585)
34
- Conversions.register(:btus, :megajoules, 0.00105505585)
35
- Conversions.register(:kbtus, :joules, 1_000.0 * 1_055.05585)
36
- Conversions.register(:kbtus, :megajoules, 1.05505585)
37
- Conversions.register(:cords, :joules, 2.11011171e10)
24
+ # Energy: base unit = megajoule
25
+ Conversions.register :megajoules, :kbtus, 0.94781712
26
+ Conversions.register :megajoules, :kilowatt_hours, 0.277777778
38
27
 
39
- Conversions.register(:gallons_per_mile, :litres_per_kilometre, 2.35214583)
40
- Conversions.register(:pounds_per_mile, :kilograms_per_kilometre, 0.281849232)
41
- Conversions.register(:dollars, :cents, 100)
42
- Conversions.register(:cubic_inches, :litres, 0.016387064)
43
- Conversions.register(:cubic_feet, :cubic_metres, 0.0283168466)
44
- # 1 (kilocalories per pound) = 9 224.14105 joules per kilogram
45
- Conversions.register :kilocalories_per_pound, :joules_per_kilogram, 9_224.14105
46
- # 1 (grams per kilocalories) = 2.39005736 × 10-7 kilograms per joules
47
- Conversions.register :grams_per_kilocalorie, :kilograms_per_joule, 2.39005736e-7
48
- # 1 joule = 0.000239005736 kilocalories
49
- Conversions.register :joules, :kilocalories, 0.000239005736
28
+ # Monetary
29
+ Conversions.register :dollars, :cents, 100.0
50
30
 
31
+ # GHG
51
32
  Conversions.register :carbon, :co2, (44.0 / 12.0)
33
+
34
+ # Complex
35
+ Conversions.register :kilometres_per_litre, :miles_per_gallon, (1.kilometres.to(:miles) / 1.litres.to(:gallons))
36
+ Conversions.register :litres_per_kilometre, :gallons_per_mile, (1.litres.to(:gallons) / 1.kilometres.to(:miles))
37
+ Conversions.register :kilograms_per_square_metre, :pounds_per_square_foot, (1.kilograms.to(:pounds) / 1.square_metres.to(:square_feet))
38
+ Conversions.register :litres_per_square_metre_hour, :gallons_per_square_foot_hour, (1.litres.to(:gallons) / 1.square_metres.to(:square_feet))
39
+ Conversions.register :litres_per_room_night, :gallons_per_room_night, (1.litres.to(:gallons))
40
+ Conversions.register :cubic_metres_per_square_metre_hour, :hundred_cubic_feet_per_square_foot_hour, (1.cubic_metres.to(:hundred_cubic_feet) / 1.square_metres.to(:square_feet))
41
+ Conversions.register :cubic_metres_per_room_night, :hundred_cubic_feet_per_room_night, (1.cubic_metres.to(:hundred_cubic_feet))
42
+ Conversions.register :kilowatt_hours_per_square_metre_hour, :kilowatt_hours_per_square_foot_hour, (1 / 1.square_metres.to(:square_feet))
43
+ Conversions.register :megajoules_per_square_metre_hour, :kbtus_per_square_foot_hour, (1.megajoules.to(:kbtus) / 1.square_metres.to(:square_feet))
44
+ Conversions.register :megajoules_per_room_night, :kbtus_per_room_night, (1.megajoules.to(:kbtus))
45
+
46
+
47
+ # Odd units for pet - FIXME use megajoules rather than joules
48
+ Conversions.register :kilocalories, :joules, 4_184.0
49
+ Conversions.register :kilocalories_per_pound, :joules_per_kilogram, (1.kilocalories.to(:joules) / 1.pounds.to(:kilograms))
50
+ Conversions.register :grams_per_kilocalorie, :kilograms_per_joule, (1.grams.to(:kilograms) / 1.kilocalories.to(:joules))
51
+
52
+
53
+ # Odd units for residence - FIXME use megajoules rather than joules
54
+ Conversions.register :cords, :joules, 2.11011171e10
55
+ Conversions.register :therms, :joules, 105_505_585.0 # should only be used for RECS 2005
56
+ Conversions.register :joules, :litres_of_fuel_oil, (1.0 / (138_690.0 * 3.78541178 * 1_055.05585)) # should only be used for RECS 2005
57
+ Conversions.register :joules, :litres_of_propane, (1.0 / (91_333.0 * 3.78541178 * 1_055.05585)) # should only be used for RECS 2005
58
+ Conversions.register :joules, :litres_of_kerosene, (1.0 / (135_000.0 * 3.78541178 * 1_055.05585)) # should only be used for RECS 2005
59
+ Conversions.register :joules, :kilograms_of_coal, (1.0 / (22_342_000.0 * 0.00110231131 * 1_055.05585)) # should only be used for RECS 2005
60
+ Conversions.register :kbtus, :joules, (1_000.0 * 1_055.05585)
61
+ Conversions.register :watt_hours, :joules, 3_600.0
62
+ Conversions.register :kilowatt_hours, :joules, 3_600_000.0
63
+
64
+
65
+ # Only used in app1
66
+ Conversions.register(:pounds_per_gallon, :kilograms_per_litre, 0.119826427) # only used in app1
67
+ Conversions.register(:pounds_per_mile, :kilograms_per_kilometre, 0.281849232)
68
+
69
+
70
+ # DEPRECATE as of 1/20/2012 don't think these are used anywhere
71
+ Conversions.register(:kilowatt_hours, :watt_hours, 1_000.0)
72
+ Conversions.register(:kilowatt_hours, :btus, 3_412.14163)
73
+ Conversions.register(:watt_hours, :btus, 3.4121414799)
74
+ Conversions.register(:kbtus, :btus, 1_000.0)
75
+ Conversions.register(:btus, :joules, 1_055.05585)
76
+ Conversions.register(:btus, :megajoules, 0.00105505585)
77
+ Conversions.register(:kilograms, :lbs, 2.20462262)
78
+ Conversions.register(:kilograms_per_kilowatt_hour, :kilograms_per_megawatt_hour, 1_000.0)
@@ -14,4 +14,3 @@ FoodGroup.class_eval do
14
14
  end
15
15
  end
16
16
  end
17
-
@@ -6,6 +6,10 @@ class CommercialBuildingEnergyConsumptionSurveyResponse < ActiveRecord::Base
6
6
  extend CohortScope
7
7
  self.minimum_cohort_size = 8 # CBECS doesn't report averages based on fewer than 20 samples
8
8
 
9
+ def self.lodging_records
10
+ where :detailed_activity => ['Hotel', 'Motel or inn']
11
+ end
12
+
9
13
  col :id, :type => :integer
10
14
  col :census_region_number, :type => :integer
11
15
  col :census_division_number, :type => :integer
@@ -29,12 +33,18 @@ class CommercialBuildingEnergyConsumptionSurveyResponse < ActiveRecord::Base
29
33
  col :weekly_hours, :type => :integer
30
34
  col :electricity_use, :type => :float
31
35
  col :electricity_use_units
36
+ col :electricity_energy, :type => :float
37
+ col :electricity_energy_units
32
38
  col :natural_gas_use, :type => :float
33
39
  col :natural_gas_use_units
40
+ col :natural_gas_energy, :type => :float
41
+ col :natural_gas_energy_units
34
42
  col :fuel_oil_use, :type => :float
35
43
  col :fuel_oil_use_units
36
- col :district_heat_use, :type => :float
37
- col :district_heat_use_units
44
+ col :fuel_oil_energy, :type => :float
45
+ col :fuel_oil_energy_units
46
+ col :steam_use, :type => :float
47
+ col :steam_use_units
38
48
  col :stratum, :type => :integer
39
49
  col :pair, :type => :integer
40
50
  col :weighting, :type => :float
@@ -1,10 +1,6 @@
1
1
  require 'earth/locality/data_miner'
2
2
  CommercialBuildingEnergyConsumptionSurveyResponse.class_eval do
3
3
  data_miner do
4
- process 'Define some unit conversions' do
5
- Conversions.register :hundred_cubic_feet, :cubic_metres, 2.83168466
6
- end
7
-
8
4
  import 'building characteristics from the 2003 EIA Commercial Building Energy Consumption Survey',
9
5
  :url => 'http://www.eia.gov/emeu/cbecs/cbecs2003/public_use_2003/data/FILE01.csv',
10
6
  :skip => 1,
@@ -47,6 +43,7 @@ CommercialBuildingEnergyConsumptionSurveyResponse.class_eval do
47
43
  store 'heating_degree_days', :field_name => 'HDD658'
48
44
  store 'cooling_degree_days', :field_name => 'CDD658'
49
45
  store 'electricity_use', :synthesize => Proc.new { |row| row['ELCNS8'].to_i }, :units => :kilowatt_hours
46
+ store 'electricity_energy', :field_name => 'ELBTU8', :from_units => :kbtus, :to_units => :megajoules
50
47
  end
51
48
 
52
49
  import 'fuel use characteristics from the 2003 EIA Commercial Building Energy Consumption Survey',
@@ -54,9 +51,11 @@ CommercialBuildingEnergyConsumptionSurveyResponse.class_eval do
54
51
  :skip => 1,
55
52
  :headers => ["PUBID8", "REGION8", "CENDIV8", "SQFT8", "SQFTC8", "YRCONC8", "PBA8", "ELUSED8", "NGUSED8", "FKUSED8", "PRUSED8", "STUSED8", "HWUSED8", "ADJWT8", "STRATUM8", "PAIR8", "NGCNS8", "NGBTU8", "NGEXP8", "ZNGCNS8", "ZNGEXP8", "FKCNS8", "FKBTU8", "FKEXP8", "ZFKCNS8", "ZFKEXP8", "DHUSED8", "DHHT18", "DHHT28", "DHCOOL8", "DHWATR8", "DHCOOK8", "DHMANU8", "DHOTH8", "DHCNS8", "DHBTU8", "DHEXP8", "ZDHCNS8", "ZDHEXP8"] do
56
53
  key 'id', :field_name => 'PUBID8'
57
- store 'natural_gas_use', :field_name => 'NGCNS8', :from_units => :hundred_cubic_feet, :to_units => :cubic_metres #!!!!!!!!!!!!
58
- store 'fuel_oil_use', :field_name => 'FKCNS8', :from_units => :gallons, :to_units => :litres
59
- store 'district_heat_use', :field_name => 'DHBTU8', :from_units => :kbtus, :to_units => :megajoules
54
+ store 'natural_gas_use', :field_name => 'NGCNS8', :from_units => :hundred_cubic_feet, :to_units => :cubic_metres
55
+ store 'natural_gas_energy', :field_name => 'NGBTU8', :from_units => :kbtus, :to_units => :megajoules
56
+ store 'fuel_oil_use', :field_name => 'FKCNS8', :from_units => :gallons, :to_units => :litres
57
+ store 'fuel_oil_energy', :field_name => 'FKBTU8', :from_units => :kbtus, :to_units => :megajoules
58
+ store 'steam_use', :field_name => 'DHBTU8', :from_units => :kbtus, :to_units => :megajoules
60
59
  end
61
60
  end
62
61
  end
@@ -12,7 +12,7 @@ class CountryLodgingClass < ActiveRecord::Base
12
12
  col :fuel_oil_intensity_units
13
13
  col :electricity_intensity, :type => :float
14
14
  col :electricity_intensity_units
15
- col :district_heat_intensity, :type => :float
16
- col :district_heat_intensity_units
15
+ col :steam_intensity, :type => :float
16
+ col :steam_intensity_units
17
17
  col :weighting, :type => :float
18
18
  end
@@ -14,29 +14,30 @@ CountryLodgingClass.class_eval do
14
14
  end
15
15
 
16
16
  process "Calculate US lodging class fuel intensities from CommercialBuildingEnergyConsumptionSurveyResponse" do
17
- where(:country_iso_3166_code => 'US').each do |lodging_class|
18
- cbecs_responses = CommercialBuildingEnergyConsumptionSurveyResponse.where(:detailed_activity => lodging_class.cbecs_detailed_activity)
19
- intensities = {}
20
-
21
- [:natural_gas, :fuel_oil, :electricity, :district_heat].each do |fuel|
22
- intensity = cbecs_responses.inject(0) do |sum, response|
23
- next sum unless response.send("#{fuel}_use").present?
24
- occupied_room_nights = 365.0 / 7.0 / 12.0 * response.months_used * response.weekly_hours / 24.0 * response.lodging_rooms * 0.59
25
- sum + (response.weighting * response.send("#{fuel}_use") / occupied_room_nights)
26
- end
27
- intensities[fuel] = intensity / cbecs_responses.sum(:weighting)
17
+ connection.select_values("SELECT DISTINCT cbecs_detailed_activity FROM #{CountryLodgingClass.quoted_table_name}").each do |cbecs_activity|
18
+ [:natural_gas, :fuel_oil, :electricity, :steam].each do |fuel|
19
+ where(:cbecs_detailed_activity => cbecs_activity).update_all(%{
20
+ #{fuel}_intensity = (
21
+ SELECT SUM(
22
+ weighting * #{fuel}_use / (365.0 / 7.0 / 12.0 * months_used * weekly_hours / 24.0 * lodging_rooms * 0.59)
23
+ ) / SUM(weighting)
24
+ FROM #{CommercialBuildingEnergyConsumptionSurveyResponse.quoted_table_name}
25
+ WHERE detailed_activity = '#{cbecs_activity}'
26
+ )
27
+ })
28
28
  end
29
29
 
30
- lodging_class.natural_gas_intensity = intensities[:natural_gas]
31
- lodging_class.natural_gas_intensity_units = 'cubic_metres_per_room_night'
32
- lodging_class.fuel_oil_intensity = intensities[:fuel_oil]
33
- lodging_class.fuel_oil_intensity_units = 'litres_per_room_night'
34
- lodging_class.electricity_intensity = intensities[:electricity]
35
- lodging_class.electricity_intensity_units = 'kilowatt_hours_per_room_night'
36
- lodging_class.district_heat_intensity = intensities[:district_heat]
37
- lodging_class.district_heat_intensity_units = 'megajoules_per_room_night'
38
- lodging_class.weighting = (lodging_class.lodging_class_name == 'Motel' or lodging_class.lodging_class_name == 'Inn') ? cbecs_responses.sum(:weighting) / 2.0 : cbecs_responses.sum(:weighting) # hack to ensure that we don't double-weight motels and inns when we calculate US national average lodging fuel intensities
39
- lodging_class.save!
30
+ where(:cbecs_detailed_activity => cbecs_activity).update_all(%{
31
+ natural_gas_intensity_units = 'cubic_metres_per_room_night',
32
+ fuel_oil_intensity_units = 'litrs_per_room_night',
33
+ electricity_intensity_units = 'kilowatt_hours_per_room_night',
34
+ steam_intensity_units = 'megajoules_per_room_night',
35
+ weighting = (
36
+ SELECT SUM(weighting)
37
+ FROM #{CommercialBuildingEnergyConsumptionSurveyResponse.quoted_table_name}
38
+ WHERE detailed_activity = '#{cbecs_activity}'
39
+ ) / #{where(:cbecs_detailed_activity => cbecs_activity).count}
40
+ })
40
41
  end
41
42
  end
42
43
  end
@@ -0,0 +1,26 @@
1
+ class LodgingFuelUseEquation < ActiveRecord::Base
2
+ set_primary_key :name
3
+
4
+ def self.find_by_criteria(fuel, criteria)
5
+ first :conditions => {
6
+ :fuel => fuel,
7
+ :climate_zone_number => (criteria[:climate_zone_number].present? ? criteria[:climate_zone_number].value : nil),
8
+ :property_rooms => (criteria[:property_rooms].present? ? 1 : 0),
9
+ :construction_year => (criteria[:property_construction_year].present? ? 1 : 0)
10
+ }
11
+ end
12
+
13
+ col :name
14
+ col :regression
15
+ col :fuel
16
+ col :climate_zone_number, :type => :integer
17
+ col :property_rooms, :type => :boolean
18
+ col :construction_year, :type => :boolean
19
+ col :rooms_factor, :type => :float
20
+ col :year_factor, :type => :float
21
+ col :constant, :type => :float
22
+ col :units
23
+ col :oil_share, :type => :float
24
+ col :gas_share, :type => :float
25
+ col :steam_share, :type => :float
26
+ end
@@ -0,0 +1,20 @@
1
+ LodgingFuelUseEquation.class_eval do
2
+ data_miner do
3
+ import "fuel use equations derived from CBECS 2003",
4
+ :url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdGN0X2l3RjFaRTBFRWdseWJoc0ZvZkE&output=csv' do
5
+ key 'name'
6
+ store 'regression'
7
+ store 'fuel'
8
+ store 'climate_zone_number', :nullify => true
9
+ store 'property_rooms'
10
+ store 'construction_year'
11
+ store 'rooms_factor'
12
+ store 'year_factor'
13
+ store 'constant'
14
+ store 'units'
15
+ store 'oil_share'
16
+ store 'gas_share'
17
+ store 'steam_share'
18
+ end
19
+ end
20
+ end
@@ -26,12 +26,4 @@ class CensusDivision < ActiveRecord::Base
26
26
  col :meeting_building_electricity_intensity_units
27
27
  col :meeting_building_district_heat_intensity, :type => :float
28
28
  col :meeting_building_district_heat_intensity_units
29
- col :lodging_building_natural_gas_intensity, :type => :float
30
- col :lodging_building_natural_gas_intensity_units
31
- col :lodging_building_fuel_oil_intensity, :type => :float
32
- col :lodging_building_fuel_oil_intensity_units
33
- col :lodging_building_electricity_intensity, :type => :float
34
- col :lodging_building_electricity_intensity_units
35
- col :lodging_building_district_heat_intensity, :type => :float
36
- col :lodging_building_district_heat_intensity_units
37
29
  end
@@ -31,15 +31,5 @@ CensusDivision.class_eval do
31
31
  store 'meeting_building_electricity_intensity', :from_units => :kilowatt_hours_per_square_foot_hour, :to_units => :kilowatt_hours_per_square_metre_hour
32
32
  store 'meeting_building_district_heat_intensity', :from_units => :thousand_btu_per_square_foot_hour, :to_units => :megajoules_per_square_metre_hour
33
33
  end
34
-
35
- import 'lodging building fuel intensities derived from CBECS 2003',
36
- :url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdGkxNExTajZPSjRWU3REVks5SFJ0cmc&output=csv',
37
- :select => lambda { |row| row['census_division'].to_i.between?(1, 9) } do
38
- key 'number', :field_name => 'census_division'
39
- store 'lodging_building_electricity_intensity', :field_name => 'electricity_intensity', :units_field_name => 'electricity_intensity_units'
40
- store 'lodging_building_natural_gas_intensity', :field_name => 'natural_gas_intensity', :from_units => :hundred_cubic_feet_per_room_night, :to_units => :cubic_metres_per_room_night
41
- store 'lodging_building_fuel_oil_intensity', :field_name => 'fuel_oil_intensity', :from_units => :gallons_per_room_night, :to_units => :litres_per_room_night
42
- store 'lodging_building_district_heat_intensity', :field_name => 'district_heat_intensity', :from_units => :thousand_btu_per_room_night, :to_units => :megajoules_per_room_night
43
- end
44
34
  end
45
35
  end
@@ -10,4 +10,3 @@ CensusRegion.class_eval do
10
10
  end
11
11
  end
12
12
  end
13
-
@@ -5,9 +5,25 @@ class ClimateDivision < ActiveRecord::Base
5
5
  belongs_to :state, :foreign_key => 'state_postal_abbreviation'
6
6
 
7
7
  RADIUS = 750
8
-
8
+
9
+ def climate_zone_number
10
+ if cooling_degree_days < 2000
11
+ if heating_degree_days > 7000
12
+ 1
13
+ elsif heating_degree_days > 5499
14
+ 2
15
+ elsif heating_degree_days > 3999
16
+ 3
17
+ else
18
+ 4
19
+ end
20
+ else
21
+ 5
22
+ end
23
+ end
24
+
9
25
  col :name
10
26
  col :heating_degree_days, :type => :float
11
27
  col :cooling_degree_days, :type => :float
12
28
  col :state_postal_abbreviation
13
- end
29
+ end
@@ -10,4 +10,3 @@ ClimateDivision.class_eval do
10
10
  #associate :state, :key => :state_postal_abbreviation, :foreign_key => :postal_abbreviation
11
11
  end
12
12
  end
13
-
@@ -26,8 +26,8 @@ class Country < ActiveRecord::Base
26
26
  :lodging_fuel_oil_intensity_units => lambda { united_states.lodging_fuel_oil_intensity_units }, # for now assume US represents world
27
27
  :lodging_electricity_intensity => lambda { united_states.lodging_electricity_intensity }, # for now assume US represents world
28
28
  :lodging_electricity_intensity_units => lambda { united_states.lodging_electricity_intensity_units }, # for now assume US represents world
29
- :lodging_district_heat_intensity => lambda { united_states.lodging_district_heat_intensity }, # for now assume US represents world
30
- :lodging_district_heat_intensity_units => lambda { united_states.lodging_district_heat_intensity_units }, # for now assume US represents world
29
+ :lodging_steam_intensity => lambda { united_states.lodging_steam_intensity }, # for now assume US represents world
30
+ :lodging_steam_intensity_units => lambda { united_states.lodging_steam_intensity_units }, # for now assume US represents world
31
31
  :rail_trip_distance => lambda { weighted_average(:rail_trip_distance, :weighted_by => :rail_passengers) },
32
32
  :rail_trip_distance_units => 'kilometres', # FIXME TODO derive this
33
33
  :rail_speed => lambda { weighted_average(:rail_speed, :weighted_by => :rail_passengers) },
@@ -67,8 +67,8 @@ class Country < ActiveRecord::Base
67
67
  col :lodging_fuel_oil_intensity_units
68
68
  col :lodging_electricity_intensity, :type => :float
69
69
  col :lodging_electricity_intensity_units
70
- col :lodging_district_heat_intensity, :type => :float
71
- col :lodging_district_heat_intensity_units
70
+ col :lodging_steam_intensity, :type => :float
71
+ col :lodging_steam_intensity_units
72
72
  col :rail_passengers, :type => :float
73
73
  col :rail_trip_distance, :type => :float
74
74
  col :rail_trip_distance_units
@@ -118,8 +118,8 @@ Country.class_eval do
118
118
  country.lodging_fuel_oil_intensity_units = 'gallons_per_room_night' # FIXME TODO derive this
119
119
  country.lodging_electricity_intensity = country.lodging_classes.weighted_average(:electricity_intensity)
120
120
  country.lodging_electricity_intensity_units = 'kilowatt_hours_per_room_night' # FIXME TODO derive this
121
- country.lodging_district_heat_intensity = country.lodging_classes.weighted_average(:district_heat_intensity)
122
- country.lodging_district_heat_intensity_units = 'megajoules_per_room_night' # FIXME TODO derive this
121
+ country.lodging_steam_intensity = country.lodging_classes.weighted_average(:steam_intensity)
122
+ country.lodging_steam_intensity_units = 'megajoules_per_room_night' # FIXME TODO derive this
123
123
  country.save!
124
124
  end
125
125
  end
@@ -10,10 +10,15 @@ class State < ActiveRecord::Base
10
10
  def country
11
11
  Country.united_states
12
12
  end
13
-
13
+
14
+ def climate_zone_number
15
+ potential_zones = climate_divisions.map(&:climate_zone_number)
16
+ potential_zones.uniq.length == 1 ? potential_zones.first : nil
17
+ end
18
+
14
19
  col :postal_abbreviation
15
20
  col :fips_code, :type => :integer
16
21
  col :name
17
22
  col :census_division_number
18
23
  col :petroleum_administration_for_defense_district_code
19
- end
24
+ end
@@ -17,18 +17,18 @@ class ResidentialEnergyConsumptionSurveyResponse < ActiveRecord::Base
17
17
  SUBCOHORT_THRESHOLD = 5 # per Matt
18
18
 
19
19
  INPUT_CHARACTERISTICS = [
20
- :census_region,
21
- :heating_degree_days,
22
- :cooling_degree_days,
23
- :residence_class,
24
- :rooms,
25
- :bedrooms,
26
- :bathrooms,
27
- :floorspace,
28
- :residents,
29
- :urbanity,
30
- :construction_year,
31
20
  :ownership,
21
+ :construction_year,
22
+ :urbanity,
23
+ :residents,
24
+ :floorspace,
25
+ :bathrooms,
26
+ :bedrooms,
27
+ :rooms,
28
+ :residence_class,
29
+ :cooling_degree_days,
30
+ :heating_degree_days,
31
+ :census_region
32
32
  ]
33
33
 
34
34
  # sabshere 9/20/10 sorted with sort -d -t "'" -k 2 ~/Desktop/parts.txt
@@ -1,3 +1,3 @@
1
1
  module Earth
2
- VERSION = "0.11.8"
2
+ VERSION = "0.11.9"
3
3
  end
@@ -22,7 +22,7 @@ describe Earth do
22
22
 
23
23
  describe '.resources' do
24
24
  it 'should get a list of all resource names' do
25
- Earth.resources.length.should == 95
25
+ Earth.resources.length.should == 96
26
26
  Earth.resources.should include('Aircraft')
27
27
  Earth.resources.should include('Industry')
28
28
  end
@@ -33,7 +33,7 @@ describe Earth do
33
33
  Earth.resources('computation').length.should == 3
34
34
  Earth.resources('diet').length.should == 2
35
35
  Earth.resources('fuel').length.should == 5
36
- Earth.resources('hospitality').length.should == 4
36
+ Earth.resources('hospitality').length.should == 5
37
37
  Earth.resources('industry').length.should == 13
38
38
  Earth.resources('locality').length.should == 10
39
39
  Earth.resources('pet').length.should == 4
metadata CHANGED
@@ -1,270 +1,273 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: earth
3
- version: !ruby/object:Gem::Version
4
- version: 0.11.8
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 0.11.9
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Seamus Abshere
9
9
  - Derek Kastner
10
10
  - Andy Rossmeissl
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2011-12-22 00:00:00.000000000Z
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
14
+
15
+ date: 2012-01-24 00:00:00 +01:00
16
+ default_executable:
17
+ dependencies:
18
+ - !ruby/object:Gem::Dependency
17
19
  name: data_miner
18
- requirement: &2181048400 !ruby/object:Gem::Requirement
20
+ requirement: &id001 !ruby/object:Gem::Requirement
19
21
  none: false
20
- requirements:
21
- - - ! '>='
22
- - !ruby/object:Gem::Version
23
- version: '1.3'
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: "1.3"
24
26
  type: :runtime
25
27
  prerelease: false
26
- version_requirements: *2181048400
27
- - !ruby/object:Gem::Dependency
28
+ version_requirements: *id001
29
+ - !ruby/object:Gem::Dependency
28
30
  name: to_regexp
29
- requirement: &2181047980 !ruby/object:Gem::Requirement
31
+ requirement: &id002 !ruby/object:Gem::Requirement
30
32
  none: false
31
- requirements:
32
- - - ! '>='
33
- - !ruby/object:Gem::Version
34
- version: '0'
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: "0"
35
37
  type: :runtime
36
38
  prerelease: false
37
- version_requirements: *2181047980
38
- - !ruby/object:Gem::Dependency
39
+ version_requirements: *id002
40
+ - !ruby/object:Gem::Dependency
39
41
  name: cohort_scope
40
- requirement: &2181047260 !ruby/object:Gem::Requirement
42
+ requirement: &id003 !ruby/object:Gem::Requirement
41
43
  none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
46
48
  type: :runtime
47
49
  prerelease: false
48
- version_requirements: *2181047260
49
- - !ruby/object:Gem::Dependency
50
+ version_requirements: *id003
51
+ - !ruby/object:Gem::Dependency
50
52
  name: table_warnings
51
- requirement: &2181046760 !ruby/object:Gem::Requirement
53
+ requirement: &id004 !ruby/object:Gem::Requirement
52
54
  none: false
53
- requirements:
54
- - - ! '>='
55
- - !ruby/object:Gem::Version
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
56
58
  version: 0.0.6
57
59
  type: :runtime
58
60
  prerelease: false
59
- version_requirements: *2181046760
60
- - !ruby/object:Gem::Dependency
61
+ version_requirements: *id004
62
+ - !ruby/object:Gem::Dependency
61
63
  name: remote_table
62
- requirement: &2181046180 !ruby/object:Gem::Requirement
64
+ requirement: &id005 !ruby/object:Gem::Requirement
63
65
  none: false
64
- requirements:
65
- - - ! '>='
66
- - !ruby/object:Gem::Version
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
67
69
  version: 1.3.0
68
70
  type: :runtime
69
71
  prerelease: false
70
- version_requirements: *2181046180
71
- - !ruby/object:Gem::Dependency
72
+ version_requirements: *id005
73
+ - !ruby/object:Gem::Dependency
72
74
  name: falls_back_on
73
- requirement: &2181045720 !ruby/object:Gem::Requirement
75
+ requirement: &id006 !ruby/object:Gem::Requirement
74
76
  none: false
75
- requirements:
76
- - - ! '>='
77
- - !ruby/object:Gem::Version
78
- version: '0'
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: "0"
79
81
  type: :runtime
80
82
  prerelease: false
81
- version_requirements: *2181045720
82
- - !ruby/object:Gem::Dependency
83
+ version_requirements: *id006
84
+ - !ruby/object:Gem::Dependency
83
85
  name: fixed_width-multibyte
84
- requirement: &2181045260 !ruby/object:Gem::Requirement
86
+ requirement: &id007 !ruby/object:Gem::Requirement
85
87
  none: false
86
- requirements:
87
- - - ! '>='
88
- - !ruby/object:Gem::Version
89
- version: '0'
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: "0"
90
92
  type: :runtime
91
93
  prerelease: false
92
- version_requirements: *2181045260
93
- - !ruby/object:Gem::Dependency
94
+ version_requirements: *id007
95
+ - !ruby/object:Gem::Dependency
94
96
  name: geokit
95
- requirement: &2181044840 !ruby/object:Gem::Requirement
97
+ requirement: &id008 !ruby/object:Gem::Requirement
96
98
  none: false
97
- requirements:
98
- - - ! '>='
99
- - !ruby/object:Gem::Version
100
- version: '0'
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: "0"
101
103
  type: :runtime
102
104
  prerelease: false
103
- version_requirements: *2181044840
104
- - !ruby/object:Gem::Dependency
105
+ version_requirements: *id008
106
+ - !ruby/object:Gem::Dependency
105
107
  name: fuzzy_match
106
- requirement: &2181044340 !ruby/object:Gem::Requirement
108
+ requirement: &id009 !ruby/object:Gem::Requirement
107
109
  none: false
108
- requirements:
109
- - - ! '>='
110
- - !ruby/object:Gem::Version
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
111
113
  version: 1.1.0
112
114
  type: :runtime
113
115
  prerelease: false
114
- version_requirements: *2181044340
115
- - !ruby/object:Gem::Dependency
116
+ version_requirements: *id009
117
+ - !ruby/object:Gem::Dependency
116
118
  name: weighted_average
117
- requirement: &2181043740 !ruby/object:Gem::Requirement
119
+ requirement: &id010 !ruby/object:Gem::Requirement
118
120
  none: false
119
- requirements:
120
- - - ! '>='
121
- - !ruby/object:Gem::Version
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
122
124
  version: 1.0.2
123
125
  type: :runtime
124
126
  prerelease: false
125
- version_requirements: *2181043740
126
- - !ruby/object:Gem::Dependency
127
+ version_requirements: *id010
128
+ - !ruby/object:Gem::Dependency
127
129
  name: mini_record-compat
128
- requirement: &2181043260 !ruby/object:Gem::Requirement
130
+ requirement: &id011 !ruby/object:Gem::Requirement
129
131
  none: false
130
- requirements:
131
- - - ! '>='
132
- - !ruby/object:Gem::Version
133
- version: '0'
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: "0"
134
136
  type: :runtime
135
137
  prerelease: false
136
- version_requirements: *2181043260
137
- - !ruby/object:Gem::Dependency
138
+ version_requirements: *id011
139
+ - !ruby/object:Gem::Dependency
138
140
  name: activesupport
139
- requirement: &2181042580 !ruby/object:Gem::Requirement
141
+ requirement: &id012 !ruby/object:Gem::Requirement
140
142
  none: false
141
- requirements:
142
- - - ! '>='
143
- - !ruby/object:Gem::Version
144
- version: '0'
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: "0"
145
147
  type: :runtime
146
148
  prerelease: false
147
- version_requirements: *2181042580
148
- - !ruby/object:Gem::Dependency
149
+ version_requirements: *id012
150
+ - !ruby/object:Gem::Dependency
149
151
  name: activerecord
150
- requirement: &2181041540 !ruby/object:Gem::Requirement
152
+ requirement: &id013 !ruby/object:Gem::Requirement
151
153
  none: false
152
- requirements:
153
- - - ! '>='
154
- - !ruby/object:Gem::Version
155
- version: '0'
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: "0"
156
158
  type: :runtime
157
159
  prerelease: false
158
- version_requirements: *2181041540
159
- - !ruby/object:Gem::Dependency
160
+ version_requirements: *id013
161
+ - !ruby/object:Gem::Dependency
160
162
  name: bundler
161
- requirement: &2181040760 !ruby/object:Gem::Requirement
163
+ requirement: &id014 !ruby/object:Gem::Requirement
162
164
  none: false
163
- requirements:
164
- - - ! '>='
165
- - !ruby/object:Gem::Version
166
- version: '0'
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: "0"
167
169
  type: :development
168
170
  prerelease: false
169
- version_requirements: *2181040760
170
- - !ruby/object:Gem::Dependency
171
+ version_requirements: *id014
172
+ - !ruby/object:Gem::Dependency
171
173
  name: bueller
172
- requirement: &2181039500 !ruby/object:Gem::Requirement
174
+ requirement: &id015 !ruby/object:Gem::Requirement
173
175
  none: false
174
- requirements:
175
- - - ! '>='
176
- - !ruby/object:Gem::Version
177
- version: '0'
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: "0"
178
180
  type: :development
179
181
  prerelease: false
180
- version_requirements: *2181039500
181
- - !ruby/object:Gem::Dependency
182
+ version_requirements: *id015
183
+ - !ruby/object:Gem::Dependency
182
184
  name: cucumber
183
- requirement: &2181039000 !ruby/object:Gem::Requirement
185
+ requirement: &id016 !ruby/object:Gem::Requirement
184
186
  none: false
185
- requirements:
186
- - - ! '>='
187
- - !ruby/object:Gem::Version
188
- version: '0'
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: "0"
189
191
  type: :development
190
192
  prerelease: false
191
- version_requirements: *2181039000
192
- - !ruby/object:Gem::Dependency
193
+ version_requirements: *id016
194
+ - !ruby/object:Gem::Dependency
193
195
  name: rake
194
- requirement: &2181038280 !ruby/object:Gem::Requirement
196
+ requirement: &id017 !ruby/object:Gem::Requirement
195
197
  none: false
196
- requirements:
197
- - - ! '>='
198
- - !ruby/object:Gem::Version
199
- version: '0'
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: "0"
200
202
  type: :development
201
203
  prerelease: false
202
- version_requirements: *2181038280
203
- - !ruby/object:Gem::Dependency
204
+ version_requirements: *id017
205
+ - !ruby/object:Gem::Dependency
204
206
  name: rdoc
205
- requirement: &2162584420 !ruby/object:Gem::Requirement
207
+ requirement: &id018 !ruby/object:Gem::Requirement
206
208
  none: false
207
- requirements:
208
- - - ! '>='
209
- - !ruby/object:Gem::Version
210
- version: '0'
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: "0"
211
213
  type: :development
212
214
  prerelease: false
213
- version_requirements: *2162584420
214
- - !ruby/object:Gem::Dependency
215
+ version_requirements: *id018
216
+ - !ruby/object:Gem::Dependency
215
217
  name: rspec
216
- requirement: &2162583900 !ruby/object:Gem::Requirement
218
+ requirement: &id019 !ruby/object:Gem::Requirement
217
219
  none: false
218
- requirements:
219
- - - ! '>='
220
- - !ruby/object:Gem::Version
221
- version: '0'
220
+ requirements:
221
+ - - ">="
222
+ - !ruby/object:Gem::Version
223
+ version: "0"
222
224
  type: :development
223
225
  prerelease: false
224
- version_requirements: *2162583900
225
- - !ruby/object:Gem::Dependency
226
+ version_requirements: *id019
227
+ - !ruby/object:Gem::Dependency
226
228
  name: sqlite3-ruby
227
- requirement: &2162583360 !ruby/object:Gem::Requirement
229
+ requirement: &id020 !ruby/object:Gem::Requirement
228
230
  none: false
229
- requirements:
230
- - - ! '>='
231
- - !ruby/object:Gem::Version
232
- version: '0'
231
+ requirements:
232
+ - - ">="
233
+ - !ruby/object:Gem::Version
234
+ version: "0"
233
235
  type: :development
234
236
  prerelease: false
235
- version_requirements: *2162583360
236
- - !ruby/object:Gem::Dependency
237
+ version_requirements: *id020
238
+ - !ruby/object:Gem::Dependency
237
239
  name: mysql
238
- requirement: &2162581940 !ruby/object:Gem::Requirement
240
+ requirement: &id021 !ruby/object:Gem::Requirement
239
241
  none: false
240
- requirements:
241
- - - ! '>='
242
- - !ruby/object:Gem::Version
243
- version: '0'
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: "0"
244
246
  type: :development
245
247
  prerelease: false
246
- version_requirements: *2162581940
247
- - !ruby/object:Gem::Dependency
248
+ version_requirements: *id021
249
+ - !ruby/object:Gem::Dependency
248
250
  name: pg
249
- requirement: &2162579920 !ruby/object:Gem::Requirement
251
+ requirement: &id022 !ruby/object:Gem::Requirement
250
252
  none: false
251
- requirements:
252
- - - ! '>='
253
- - !ruby/object:Gem::Version
254
- version: '0'
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ version: "0"
255
257
  type: :development
256
258
  prerelease: false
257
- version_requirements: *2162579920
259
+ version_requirements: *id022
258
260
  description: An earth-simulation environment with ActiveRecord models and data
259
261
  email: andy@rossmeissl.net
260
- executables:
262
+ executables:
261
263
  - earth_tester.rb
262
264
  extensions: []
263
- extra_rdoc_files:
265
+
266
+ extra_rdoc_files:
264
267
  - LICENSE
265
268
  - LICENSE-PREAMBLE
266
269
  - README.markdown
267
- files:
270
+ files:
268
271
  - .document
269
272
  - .gitignore
270
273
  - Gemfile
@@ -462,6 +465,8 @@ files:
462
465
  - lib/earth/hospitality/data_miner.rb
463
466
  - lib/earth/hospitality/lodging_class.rb
464
467
  - lib/earth/hospitality/lodging_class/data_miner.rb
468
+ - lib/earth/hospitality/lodging_fuel_use_equation.rb
469
+ - lib/earth/hospitality/lodging_fuel_use_equation/data_miner.rb
465
470
  - lib/earth/hospitality/lodging_property.rb
466
471
  - lib/earth/industry.rb
467
472
  - lib/earth/industry/cbecs_energy_intensity.rb
@@ -628,32 +633,41 @@ files:
628
633
  - vendor/geokit-rails/test/schema.rb
629
634
  - vendor/geokit-rails/test/tasks.rake
630
635
  - vendor/geokit-rails/test/test_helper.rb
636
+ has_rdoc: true
631
637
  homepage: https://github.com/brighterplanet/earth
632
638
  licenses: []
639
+
633
640
  post_install_message:
634
- rdoc_options:
641
+ rdoc_options:
635
642
  - --charset=UTF-8
636
- require_paths:
643
+ require_paths:
637
644
  - lib
638
- required_ruby_version: !ruby/object:Gem::Requirement
645
+ required_ruby_version: !ruby/object:Gem::Requirement
639
646
  none: false
640
- requirements:
641
- - - ! '>='
642
- - !ruby/object:Gem::Version
643
- version: '0'
644
- required_rubygems_version: !ruby/object:Gem::Requirement
647
+ requirements:
648
+ - - ">="
649
+ - !ruby/object:Gem::Version
650
+ hash: 3547937136240416644
651
+ segments:
652
+ - 0
653
+ version: "0"
654
+ required_rubygems_version: !ruby/object:Gem::Requirement
645
655
  none: false
646
- requirements:
647
- - - ! '>='
648
- - !ruby/object:Gem::Version
649
- version: '0'
656
+ requirements:
657
+ - - ">="
658
+ - !ruby/object:Gem::Version
659
+ hash: 3547937136240416644
660
+ segments:
661
+ - 0
662
+ version: "0"
650
663
  requirements: []
664
+
651
665
  rubyforge_project:
652
- rubygems_version: 1.8.10
666
+ rubygems_version: 1.6.2
653
667
  signing_key:
654
668
  specification_version: 3
655
669
  summary: Land, sky, and sea
656
- test_files:
670
+ test_files:
657
671
  - features/automobile_fuel.feature
658
672
  - features/automobile_make.feature
659
673
  - features/automobile_make_fleet_year.feature