earth 0.12.0 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/earth_tester.rb +1 -0
- data/data/automobile/annual_emission_controls.csv +1 -1
- data/data/automobile/annual_fuel_consumption.csv +1 -1
- data/data/automobile/auto_fuel_data.csv +1 -1
- data/data/automobile/emission_control_techs.csv +1 -1
- data/data/automobile/trip_distances.csv +5 -0
- data/data/locality/country_flight_data.csv +18 -0
- data/data/locality/egrid_relationships.csv +27 -0
- data/data/locality/misc_zip_data.csv +1 -0
- data/data/locality/us_auto_data.csv +2 -0
- data/data/locality/wri_hdd_cdd_data.csv +174 -0
- data/data/locality/zip_climate_divisions.csv +41359 -0
- data/errata/country/wri_errata.csv +24 -24
- data/lib/earth/automobile/automobile_activity_year/data_miner.rb +4 -3
- data/lib/earth/automobile/automobile_activity_year_type/data_miner.rb +4 -3
- data/lib/earth/automobile/automobile_activity_year_type_fuel.rb +1 -1
- data/lib/earth/automobile/automobile_activity_year_type_fuel/data_miner.rb +4 -4
- data/lib/earth/automobile/automobile_fuel.rb +5 -5
- data/lib/earth/automobile/automobile_fuel/data_miner.rb +18 -13
- data/lib/earth/automobile/automobile_make/data_miner.rb +4 -3
- data/lib/earth/automobile/automobile_make_model/data_miner.rb +6 -7
- data/lib/earth/automobile/automobile_make_model_year/data_miner.rb +1 -2
- data/lib/earth/automobile/automobile_make_model_year_variant/data_miner.rb +5 -10
- data/lib/earth/automobile/automobile_type_fuel.rb +2 -2
- data/lib/earth/automobile/automobile_type_fuel/data_miner.rb +8 -7
- data/lib/earth/automobile/automobile_type_fuel_control.rb +1 -1
- data/lib/earth/automobile/automobile_type_fuel_control/data_miner.rb +1 -1
- data/lib/earth/automobile/automobile_type_fuel_year.rb +5 -5
- data/lib/earth/automobile/automobile_type_fuel_year/data_miner.rb +7 -6
- data/lib/earth/automobile/automobile_type_fuel_year_control.rb +4 -4
- data/lib/earth/automobile/automobile_type_fuel_year_control/data_miner.rb +2 -2
- data/lib/earth/conversions_ext.rb +2 -0
- data/lib/earth/industry/industry.rb +0 -2
- data/lib/earth/industry/industry/data_miner.rb +5 -2
- data/lib/earth/locality/census_division.rb +2 -1
- data/lib/earth/locality/country.rb +3 -7
- data/lib/earth/locality/country/data_miner.rb +54 -75
- data/lib/earth/locality/egrid_country.rb +9 -3
- data/lib/earth/locality/egrid_country/data_miner.rb +14 -8
- data/lib/earth/locality/egrid_region.rb +15 -6
- data/lib/earth/locality/egrid_region/data_miner.rb +14 -18
- data/lib/earth/locality/egrid_subregion.rb +21 -19
- data/lib/earth/locality/egrid_subregion/data_miner.rb +27 -47
- data/lib/earth/locality/zip_code.rb +5 -4
- data/lib/earth/locality/zip_code/data_miner.rb +25 -14
- data/lib/earth/rail/rail_company/data_miner.rb +1 -1
- data/lib/earth/version.rb +1 -1
- data/spec/earth/automobile/automobile_activity_year_type_fuel_spec.rb +1 -1
- data/spec/earth/automobile/automobile_fuel_spec.rb +1 -1
- data/spec/earth/automobile/automobile_type_fuel_spec.rb +1 -1
- data/spec/earth/automobile/automobile_type_fuel_year_control_spec.rb +6 -6
- data/spec/earth/automobile/automobile_type_fuel_year_spec.rb +6 -6
- data/spec/earth/industry/industry_spec.rb +1 -3
- data/spec/earth/locality/country_spec.rb +67 -34
- data/spec/earth/locality/egrid_country_spec.rb +26 -0
- data/spec/earth/locality/egrid_region_spec.rb +27 -0
- data/spec/earth/locality/egrid_subregion_spec.rb +49 -0
- data/spec/earth/locality/zip_code_spec.rb +13 -24
- metadata +17 -4
@@ -1,25 +1,25 @@
|
|
1
1
|
date,name,email,type,section,action,x,y,condition,notes
|
2
|
-
1/25/
|
3
|
-
1/25/
|
4
|
-
1/25/
|
5
|
-
1/25/
|
6
|
-
1/25/
|
7
|
-
3/15/
|
8
|
-
1/25/
|
9
|
-
1/25/
|
10
|
-
1/25/
|
11
|
-
1/25/
|
12
|
-
1/25/
|
13
|
-
1/25/
|
14
|
-
1/25/
|
15
|
-
1/25/
|
16
|
-
1/25/
|
17
|
-
1/25/
|
18
|
-
1/25/
|
19
|
-
1/25/
|
20
|
-
1/25/
|
21
|
-
1/25/
|
22
|
-
1/25/
|
23
|
-
1/25/
|
24
|
-
1/25/
|
25
|
-
1/25/
|
2
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,meta,Intended use,,Country degree days import,,,
|
3
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Bolivia,"Bolivia, Plurinational State of",,match iso country names
|
4
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Bosnia & Herzegovina,Bosnia and Herzegovina,,match iso country names
|
5
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Brunei*,Brunei Darussalam,,match iso country names
|
6
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,"Congo, Dem. Republic","Congo, The Democratic Republic of the",,match iso country names
|
7
|
+
3/15/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Cote d'Ivoire,Côte d'Ivoire,,be sure to include utf8 chars
|
8
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Iran,"Iran, Islamic Republic of",,match iso country names
|
9
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Iraq*,Iraq,,match iso country names
|
10
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Korea (North),"Korea, Democratic People's Republic of ",,match iso country names
|
11
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Korea (South),"Korea, Republic of ",,match iso country names
|
12
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Laos,Lao People's Democratic Republic,,match iso country names
|
13
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Libya,Libyan Arab Jamahiriya,,match iso country names
|
14
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,"Macedonia, FYR","Macedonia, The Former Yugoslav Republic of",,match iso country names
|
15
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Moldova,"Moldova, Republic of",,match iso country names
|
16
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Saint Kitts & Nevis,Saint Kitts and Nevis,,match iso country names
|
17
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Sao Tome & Principe,Sao Tome and Principe,,match iso country names
|
18
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Serbia & Montenegro,Serbia,,match iso country names
|
19
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Syria,Syrian Arab Republic,,match iso country names
|
20
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Taiwan*,"Taiwan, Province of China",,match iso country names
|
21
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Tanzania,"Tanzania, United Republic of",,match iso country names
|
22
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Trinidad & Tobago,Trinidad and Tobago,,match iso country names
|
23
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,United States of America,United States,,match iso country names
|
24
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Venezuela,"Venezuela, Bolivarian Republic of",,match iso country names
|
25
|
+
1/25/12,Ian Hough,ian@brighterplanet.com,technical,country,replace,Vietnam,Viet Nam,,match iso country names
|
@@ -18,9 +18,10 @@ AutomobileActivityYear.class_eval do
|
|
18
18
|
|
19
19
|
process "Derive hfc emission factor from AutomobileActivityYearType" do
|
20
20
|
find_each do |ay|
|
21
|
-
ay.
|
22
|
-
|
23
|
-
|
21
|
+
ay.update_attributes!(
|
22
|
+
:hfc_emission_factor => ay.activity_year_types.sum(&:hfc_emissions) / ay.activity_year_types.sum{ |ayt| ayt.activity_year_type_fuels.sum(&:distance) },
|
23
|
+
:hfc_emission_factor_units => ay.activity_year_types.first.hfc_emission_factor_units
|
24
|
+
)
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
@@ -18,9 +18,10 @@ AutomobileActivityYearType.class_eval do
|
|
18
18
|
|
19
19
|
process "Derive hfc emission factor from AutomobileActivityYearTypeFuel" do
|
20
20
|
find_each do |ayt|
|
21
|
-
ayt.
|
22
|
-
|
23
|
-
|
21
|
+
ayt.update_attributes!(
|
22
|
+
:hfc_emission_factor => ayt.hfc_emissions / ayt.activity_year_type_fuels.sum(:distance),
|
23
|
+
:hfc_emission_factor_units => ayt.hfc_emissions_units + '_per_' + ayt.activity_year_type_fuels.first.distance_units.singularize
|
24
|
+
)
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
@@ -9,7 +9,7 @@ class AutomobileActivityYearTypeFuel < ActiveRecord::Base
|
|
9
9
|
col :name
|
10
10
|
col :activity_year, :type => :integer
|
11
11
|
col :type_name
|
12
|
-
col :
|
12
|
+
col :fuel_group
|
13
13
|
col :distance, :type => :float
|
14
14
|
col :distance_units
|
15
15
|
col :fuel_consumption, :type => :float
|
@@ -14,7 +14,7 @@ AutomobileActivityYearTypeFuel.class_eval do
|
|
14
14
|
key 'name', :synthesize => proc { |row| "#{row['Year']} #{type} gasoline" }
|
15
15
|
store 'activity_year', :field_name => 'Year'
|
16
16
|
store 'type_name', :static => type
|
17
|
-
store '
|
17
|
+
store 'fuel_group', :static => 'gasoline'
|
18
18
|
store 'distance', :field_name => type, :from_units => :billion_miles, :to_units => :kilometres
|
19
19
|
end
|
20
20
|
|
@@ -27,7 +27,7 @@ AutomobileActivityYearTypeFuel.class_eval do
|
|
27
27
|
key 'name', :synthesize => proc { |row| "#{row['Year']} #{type} diesel" }
|
28
28
|
store 'activity_year', :field_name => 'Year'
|
29
29
|
store 'type_name', :static => type
|
30
|
-
store '
|
30
|
+
store 'fuel_group', :static => 'diesel'
|
31
31
|
store 'distance', :field_name => type, :from_units => :billion_miles, :to_units => :kilometres
|
32
32
|
end
|
33
33
|
|
@@ -40,7 +40,7 @@ AutomobileActivityYearTypeFuel.class_eval do
|
|
40
40
|
key 'name', :synthesize => proc { |row| "#{row['Year']} #{type} alternative" }
|
41
41
|
store 'activity_year', :field_name => 'Year'
|
42
42
|
store 'type_name', :static => type
|
43
|
-
store '
|
43
|
+
store 'fuel_group', :static => 'alternative'
|
44
44
|
store 'distance', :field_name => type, :from_units => :billion_miles, :to_units => :kilometres
|
45
45
|
end
|
46
46
|
end
|
@@ -50,7 +50,7 @@ AutomobileActivityYearTypeFuel.class_eval do
|
|
50
50
|
key 'name'
|
51
51
|
store 'activity_year'
|
52
52
|
store 'type_name'
|
53
|
-
store '
|
53
|
+
store 'fuel_group'
|
54
54
|
store 'fuel_consumption', :from_units => :million_gallons, :to_units => :litres
|
55
55
|
end
|
56
56
|
end
|
@@ -8,16 +8,16 @@ class AutomobileFuel < ActiveRecord::Base
|
|
8
8
|
belongs_to :blend_fuel, :class_name => 'Fuel', :foreign_key => 'blend_fuel_name'
|
9
9
|
|
10
10
|
# for calculating gas and diesel annual distance and ch4 + n2o efs
|
11
|
-
has_many :type_fuels, :foreign_key => :
|
11
|
+
has_many :type_fuels, :foreign_key => :fuel_group, :primary_key => :group, :class_name => 'AutomobileTypeFuel'
|
12
12
|
|
13
13
|
# for fallback
|
14
14
|
class << self
|
15
15
|
def diesel
|
16
|
-
|
16
|
+
find 'diesel'
|
17
17
|
end
|
18
18
|
|
19
19
|
def gasoline
|
20
|
-
|
20
|
+
find 'gasoline'
|
21
21
|
end
|
22
22
|
|
23
23
|
def fallback_blend_portion
|
@@ -68,7 +68,7 @@ class AutomobileFuel < ActiveRecord::Base
|
|
68
68
|
|
69
69
|
col :name
|
70
70
|
col :code
|
71
|
-
col :
|
71
|
+
col :group
|
72
72
|
col :distance_key
|
73
73
|
col :base_fuel_name
|
74
74
|
col :blend_fuel_name
|
@@ -89,7 +89,7 @@ class AutomobileFuel < ActiveRecord::Base
|
|
89
89
|
col :total_consumption_units
|
90
90
|
|
91
91
|
warn_unless_size 12
|
92
|
-
warn_if_blanks :code, :
|
92
|
+
warn_if_blanks :code, :group, :distance_key
|
93
93
|
warn_if do
|
94
94
|
if exists?("name != 'electricity' AND base_fuel_name IS NULL")
|
95
95
|
"Records missing #{col}"
|
@@ -10,7 +10,7 @@ AutomobileFuel.class_eval do
|
|
10
10
|
:url => "file://#{Earth::DATA_DIR}/automobile/auto_fuel_data.csv" do
|
11
11
|
key 'name'
|
12
12
|
store 'code'
|
13
|
-
store '
|
13
|
+
store 'group'
|
14
14
|
store 'distance_key'
|
15
15
|
store 'base_fuel_name', :nullify => true
|
16
16
|
store 'blend_fuel_name', :nullify => true
|
@@ -22,10 +22,10 @@ AutomobileFuel.class_eval do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
process "Derive energy content and co2 emission factors from Fuel" do
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
AutomobileFuel.find('electricity').update_attributes!(
|
26
|
+
:energy_content => 1.kilowatt_hours.to(:megajoules),
|
27
|
+
:energy_content_units => 'megajoules_per_kilowatt_hour'
|
28
|
+
)
|
29
29
|
|
30
30
|
where("name != 'electricity'").each do |auto_fuel|
|
31
31
|
%w{ energy_content co2_emission_factor co2_biogenic_emission_factor }.each do |method|
|
@@ -34,10 +34,12 @@ AutomobileFuel.class_eval do
|
|
34
34
|
else
|
35
35
|
auto_fuel.base_fuel.send method
|
36
36
|
end
|
37
|
-
|
38
|
-
auto_fuel.
|
37
|
+
|
38
|
+
auto_fuel.update_attributes!(
|
39
|
+
:"#{method}" => value,
|
40
|
+
:"#{method}_units" => auto_fuel.base_fuel.send("#{method}_units")
|
41
|
+
)
|
39
42
|
end
|
40
|
-
auto_fuel.save!
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
@@ -56,14 +58,17 @@ AutomobileFuel.class_eval do
|
|
56
58
|
find_each do |record|
|
57
59
|
if (type_fuels = record.type_fuels).any?
|
58
60
|
%w{ annual_distance ch4_emission_factor n2o_emission_factor }.each do |item|
|
59
|
-
record.
|
60
|
-
|
61
|
+
record.update_attributes!(
|
62
|
+
:"#{item}" => type_fuels.weighted_average(item, :weighted_by => :vehicles),
|
63
|
+
:"#{item}_units" => type_fuels.first.send("#{item}_units")
|
64
|
+
)
|
61
65
|
end
|
62
66
|
unless record.name =~ / gasoline/
|
63
|
-
record.
|
64
|
-
|
67
|
+
record.update_attributes!(
|
68
|
+
:total_consumption => record.type_fuels.sum(:fuel_consumption),
|
69
|
+
:total_consumption_units => record.type_fuels.first.fuel_consumption_units
|
70
|
+
)
|
65
71
|
end
|
66
|
-
record.save!
|
67
72
|
end
|
68
73
|
end
|
69
74
|
end
|
@@ -18,9 +18,10 @@ AutomobileMake.class_eval do
|
|
18
18
|
|
19
19
|
process "Derive fuel efficiency from AutomobileMakeYear" do
|
20
20
|
find_each do |make|
|
21
|
-
make.
|
22
|
-
|
23
|
-
|
21
|
+
make.update_attributes!(
|
22
|
+
:fuel_efficiency => make.make_years.weighted_average(:fuel_efficiency),
|
23
|
+
:fuel_efficiency_units => make.make_years.first.fuel_efficiency_units
|
24
|
+
)
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
@@ -25,18 +25,17 @@ AutomobileMakeModel.class_eval do
|
|
25
25
|
find_each do |amm|
|
26
26
|
codes = amm.model_years.map(&:fuel_code).uniq
|
27
27
|
if codes.count == 1
|
28
|
-
amm.fuel_code
|
28
|
+
amm.update_attributes! :fuel_code => codes.first
|
29
29
|
elsif codes.all?{ |code| ['R', 'P', 'G'].include? code }
|
30
|
-
amm.fuel_code
|
30
|
+
amm.update_attributes! :fuel_code => 'G'
|
31
31
|
end
|
32
32
|
|
33
33
|
alt_codes = amm.model_years.map(&:alt_fuel_code).uniq
|
34
|
-
amm.alt_fuel_code = (alt_codes.first if alt_codes.count == 1)
|
35
|
-
|
36
34
|
type_names = amm.model_years.map(&:type_name).uniq
|
37
|
-
amm.
|
38
|
-
|
39
|
-
|
35
|
+
amm.update_attributes!(
|
36
|
+
:alt_fuel_code => (alt_codes.first if alt_codes.count == 1),
|
37
|
+
:type_name => (type_names.first if type_names.one?)
|
38
|
+
)
|
40
39
|
end
|
41
40
|
end
|
42
41
|
|
@@ -63,8 +63,7 @@ AutomobileMakeModelYear.class_eval do
|
|
63
63
|
process "Derive type name from AutomobileMakeModelYearVariant" do
|
64
64
|
find_each do |ammy|
|
65
65
|
type_names = AutomobileMakeModelYearVariant.where(:make_name => ammy.make_name, :model_name => ammy.model_name, :year => ammy.year).map(&:type_name).uniq
|
66
|
-
ammy.type_name
|
67
|
-
ammy.save!
|
66
|
+
ammy.update_attributes! :type_name => (type_names.first if type_names.one?)
|
68
67
|
end
|
69
68
|
end
|
70
69
|
|
@@ -391,8 +391,7 @@ AutomobileMakeModelYearVariant.class_eval do
|
|
391
391
|
hybrids << where(:make_name => 'Buick', :model_name => 'REGAL', :year => 2012, :alt_fuel_code => nil).sort_by!(&:fuel_efficiency_city).last
|
392
392
|
end
|
393
393
|
hybrids.each do |hybrid|
|
394
|
-
hybrid.model_name
|
395
|
-
hybrid.save!
|
394
|
+
hybrid.update_attributes! :model_name => hybrid.model_name + ' HYBRID'
|
396
395
|
end
|
397
396
|
end
|
398
397
|
|
@@ -400,9 +399,8 @@ AutomobileMakeModelYearVariant.class_eval do
|
|
400
399
|
where(:make_name => 'Chevrolet', :model_name => 'CAVALIER DUAL-FUEL', :fuel_code => 'C').each do |cng_variant|
|
401
400
|
gasoline_variant = where(:make_name => 'Chevrolet', :model_name => 'CAVALIER DUAL-FUEL', :fuel_code => ['R', 'P'], :alt_fuel_code => nil).find_by_year(cng_variant.year)
|
402
401
|
%w{ fuel_code fuel_efficiency_city fuel_efficiency_city_units fuel_efficiency_highway fuel_efficiency_highway_units }.each do |attribute|
|
403
|
-
gasoline_variant.
|
402
|
+
gasoline_variant.update_attributes! :"alt_#{attribute}" => cng_variant.send(attribute)
|
404
403
|
end
|
405
|
-
gasoline_variant.save!
|
406
404
|
cng_variant.destroy
|
407
405
|
end
|
408
406
|
end
|
@@ -439,9 +437,8 @@ AutomobileMakeModelYearVariant.class_eval do
|
|
439
437
|
|
440
438
|
if gasoline_variant.present?
|
441
439
|
%w{ fuel_code fuel_efficiency_city fuel_efficiency_city_units fuel_efficiency_highway fuel_efficiency_highway_units }.each do |attribute|
|
442
|
-
gasoline_variant.
|
440
|
+
gasoline_variant.update_attributes! :"alt_#{attribute}" => ethanol_variant.send(attribute)
|
443
441
|
end
|
444
|
-
gasoline_variant.save!
|
445
442
|
ethanol_variant.destroy
|
446
443
|
end
|
447
444
|
end
|
@@ -450,8 +447,7 @@ AutomobileMakeModelYearVariant.class_eval do
|
|
450
447
|
process "Update model name to indicate flex-fuel variants of models where variants in some years are not flex-fuel" do
|
451
448
|
where("alt_fuel_code = 'E' AND model_name NOT LIKE '% FFV'").each do |variant|
|
452
449
|
if where(:make_name => variant.make_name, :model_name => variant.model_name, :alt_fuel_code => nil).any?
|
453
|
-
variant.model_name
|
454
|
-
variant.save!
|
450
|
+
variant.update_attributes! :model_name => variant.model_name + ' FFV'
|
455
451
|
end
|
456
452
|
end
|
457
453
|
end
|
@@ -459,8 +455,7 @@ AutomobileMakeModelYearVariant.class_eval do
|
|
459
455
|
process "Update model name to indicate diesel variants of models where variants in some years are not diesel" do
|
460
456
|
where("fuel_code = 'D' AND model_name NOT LIKE '% DIESEL'").each do |variant|
|
461
457
|
if where("make_name = ? AND model_name = ? AND fuel_code != 'D'", variant.make_name, variant.model_name).any?
|
462
|
-
variant.model_name
|
463
|
-
variant.save!
|
458
|
+
variant.update_attributes! :model_name => variant.model_name + ' DIESEL'
|
464
459
|
end
|
465
460
|
end
|
466
461
|
end
|
@@ -3,12 +3,12 @@ class AutomobileTypeFuel < ActiveRecord::Base
|
|
3
3
|
|
4
4
|
# for calculating vehicles
|
5
5
|
def latest_activity_year_type_fuel
|
6
|
-
AutomobileActivityYearTypeFuel.latest.where(:type_name => type_name, :
|
6
|
+
AutomobileActivityYearTypeFuel.latest.where(:type_name => type_name, :fuel_group => fuel_group).first
|
7
7
|
end
|
8
8
|
|
9
9
|
col :name
|
10
10
|
col :type_name
|
11
|
-
col :
|
11
|
+
col :fuel_group
|
12
12
|
col :annual_distance, :type => :float
|
13
13
|
col :annual_distance_units
|
14
14
|
col :fuel_consumption, :type => :float
|
@@ -13,9 +13,9 @@ AutomobileTypeFuel.class_eval do
|
|
13
13
|
:src => AutomobileTypeFuelYear,
|
14
14
|
:dest => AutomobileTypeFuel,
|
15
15
|
:cols => {
|
16
|
-
[:type_name, :
|
16
|
+
[:type_name, :fuel_group] => :name,
|
17
17
|
:type_name => :type_name,
|
18
|
-
:
|
18
|
+
:fuel_group => :fuel_group
|
19
19
|
}
|
20
20
|
)
|
21
21
|
end
|
@@ -23,7 +23,7 @@ AutomobileTypeFuel.class_eval do
|
|
23
23
|
process "Derive annual distance and emission factors from AutomobileTypeFuelYear" do
|
24
24
|
type_fuels = arel_table
|
25
25
|
type_fuel_years = AutomobileTypeFuelYear.arel_table
|
26
|
-
join_relation = type_fuel_years[:type_name].eq(type_fuels[:type_name]).and(type_fuel_years[:
|
26
|
+
join_relation = type_fuel_years[:type_name].eq(type_fuels[:type_name]).and(type_fuel_years[:fuel_group].eq(type_fuels[:fuel_group]))
|
27
27
|
|
28
28
|
%w{ annual_distance ch4_emission_factor n2o_emission_factor }.each do |item|
|
29
29
|
item_sql = AutomobileTypeFuelYear.where(join_relation).weighted_average_relation(:"#{item}", :weighted_by => :share_of_type).to_sql
|
@@ -42,10 +42,11 @@ AutomobileTypeFuel.class_eval do
|
|
42
42
|
|
43
43
|
process "Derive number of vehicles and fuel consumption from AutomobileActivityYearTypeFuel" do
|
44
44
|
find_each do |atf|
|
45
|
-
atf.
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
atf.update_attributes!(
|
46
|
+
:vehicles => atf.latest_activity_year_type_fuel.distance / atf.annual_distance,
|
47
|
+
:fuel_consumption => atf.latest_activity_year_type_fuel.fuel_consumption,
|
48
|
+
:fuel_consumption_units => atf.latest_activity_year_type_fuel.fuel_consumption_units
|
49
|
+
)
|
49
50
|
end
|
50
51
|
end
|
51
52
|
end
|
@@ -7,7 +7,7 @@ AutomobileTypeFuelControl.class_eval do
|
|
7
7
|
:url => "file://#{Earth::DATA_DIR}/automobile/emission_control_techs.csv" do
|
8
8
|
key 'name'
|
9
9
|
store 'type_name'
|
10
|
-
store '
|
10
|
+
store 'fuel_group'
|
11
11
|
store 'control_name'
|
12
12
|
store 'ch4_emission_factor', :from_units => :grams_per_mile, :to_units => :kilograms_per_kilometre
|
13
13
|
store 'n2o_emission_factor', :from_units => :grams_per_mile, :to_units => :kilograms_per_kilometre
|
@@ -2,22 +2,22 @@ class AutomobileTypeFuelYear < ActiveRecord::Base
|
|
2
2
|
self.primary_key = "name"
|
3
3
|
|
4
4
|
# Used by Automobile and AutomobileTrip
|
5
|
-
def self.
|
5
|
+
def self.find_by_type_name_and_fuel_group_and_closest_year(type_name, fuel_group, year)
|
6
6
|
if year > maximum(:year)
|
7
|
-
where(:type_name => type_name, :
|
7
|
+
where(:type_name => type_name, :fuel_group => fuel_group, :year => maximum(:year)).first
|
8
8
|
else
|
9
|
-
where(:type_name => type_name, :
|
9
|
+
where(:type_name => type_name, :fuel_group => fuel_group, :year => [year, minimum(:year)].max).first
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
# for calculating ch4 and n2o ef
|
14
14
|
def type_fuel_year_controls
|
15
|
-
AutomobileTypeFuelYearControl.
|
15
|
+
AutomobileTypeFuelYearControl.find_all_by_type_name_and_fuel_group_and_closest_year(type_name, fuel_group, year)
|
16
16
|
end
|
17
17
|
|
18
18
|
col :name
|
19
19
|
col :type_name
|
20
|
-
col :
|
20
|
+
col :fuel_group
|
21
21
|
col :year, :type => :integer
|
22
22
|
col :share_of_type, :type => :float
|
23
23
|
col :annual_distance, :type => :float
|
@@ -16,7 +16,7 @@ AutomobileTypeFuelYear.class_eval do
|
|
16
16
|
:select => proc { |row| row['age'].to_i.to_s == row['age'] } do
|
17
17
|
key 'name', :synthesize => proc { |row| "#{type} #{fuel} #{2009 - row['age'].to_i}" }
|
18
18
|
store 'type_name', :static => type
|
19
|
-
store '
|
19
|
+
store 'fuel_group', :static => fuel
|
20
20
|
store 'year', :synthesize => proc { |row| 2009 - row['age'].to_i }
|
21
21
|
store 'share_of_type', :synthesize => proc { |row| row[code].to_f / (code == 'LDDV' ? 57.5 : 100) } # total percent only sums to 57.5 for diesel cars
|
22
22
|
end
|
@@ -40,11 +40,12 @@ AutomobileTypeFuelYear.class_eval do
|
|
40
40
|
# Can't use an update all here b/c efs are methods defined on ATFYC that look up the ef from ATFC
|
41
41
|
process "Derive ch4 and n2o emission factor from AutomobileTypeFuelYearControl" do
|
42
42
|
find_each do |atfy|
|
43
|
-
atfy.
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
43
|
+
atfy.update_attributes!(
|
44
|
+
:ch4_emission_factor => atfy.type_fuel_year_controls.sum{ |atfyc| atfyc.total_travel_percent * atfyc.ch4_emission_factor },
|
45
|
+
:n2o_emission_factor => atfy.type_fuel_year_controls.sum{ |atfyc| atfyc.total_travel_percent * atfyc.n2o_emission_factor },
|
46
|
+
:ch4_emission_factor_units => atfy.type_fuel_year_controls.first.ch4_emission_factor_units,
|
47
|
+
:n2o_emission_factor_units => atfy.type_fuel_year_controls.first.n2o_emission_factor_units
|
48
|
+
)
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end
|