meeting 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/features/meeting_committees.feature +62 -0
- data/features/meeting_emissions.feature +8 -3
- data/lib/meeting/carbon_model.rb +47 -3
- metadata +40 -40
@@ -27,6 +27,20 @@ Feature: Meeting Committee Calculations
|
|
27
27
|
Then the committee should have used quorum "from state"
|
28
28
|
And the conclusion of the committee should have "number" of "9"
|
29
29
|
|
30
|
+
Scenario: eGRID subregion committee from zip code
|
31
|
+
Given a meeting emitter
|
32
|
+
And a characteristic "zip_code.name" of "94122"
|
33
|
+
When the "egrid_subregion" committee is calculated
|
34
|
+
Then the committee should have used quorum "from zip code"
|
35
|
+
And the conclusion of the committee should have "abbreviation" of "CAMX"
|
36
|
+
|
37
|
+
Scenario: eGRID region committee from eGRID subregion
|
38
|
+
Given a meeting emitter
|
39
|
+
And a characteristic "egrid_subregion.abbreviation" of "CAMX"
|
40
|
+
When the "egrid_region" committee is calculated
|
41
|
+
Then the committee should have used quorum "from eGRID subregion"
|
42
|
+
And the conclusion of the committee should have "name" of "W"
|
43
|
+
|
30
44
|
Scenario: District heat intensity committee from default
|
31
45
|
Given a meeting emitter
|
32
46
|
When the "district_heat_intensity" committee is calculated
|
@@ -46,6 +60,15 @@ Feature: Meeting Committee Calculations
|
|
46
60
|
Then the committee should have used quorum "default"
|
47
61
|
And the conclusion of the committee should be "0.072444"
|
48
62
|
|
63
|
+
Scenario: Electricity intensity committee from eGRID region
|
64
|
+
Given a meeting emitter
|
65
|
+
And a characteristic "zip_code.name" of "94122"
|
66
|
+
When the "egrid_subregion" committee is calculated
|
67
|
+
And the "egrid_region" committee is calculated
|
68
|
+
And the "electricity_intensity" committee is calculated
|
69
|
+
Then the committee should have used quorum "from eGRID region"
|
70
|
+
And the conclusion of the committee should be "0.080493"
|
71
|
+
|
49
72
|
Scenario: Electricity intensity committee from census division
|
50
73
|
Given a meeting emitter
|
51
74
|
And a characteristic "census_division.number" of "9"
|
@@ -53,6 +76,17 @@ Feature: Meeting Committee Calculations
|
|
53
76
|
Then the committee should have used quorum "from census division"
|
54
77
|
And the conclusion of the committee should be "3"
|
55
78
|
|
79
|
+
Scenario: Electricity intensity committee from eGRID region and census division
|
80
|
+
Given a meeting emitter
|
81
|
+
And a characteristic "zip_code.name" of "94122"
|
82
|
+
When the "state" committee is calculated
|
83
|
+
And the "census_division" committee is calculated
|
84
|
+
And the "egrid_subregion" committee is calculated
|
85
|
+
And the "egrid_region" committee is calculated
|
86
|
+
And the "electricity_intensity" committee is calculated
|
87
|
+
Then the committee should have used quorum "from eGRID region and census division"
|
88
|
+
And the conclusion of the committee should be "3.33333"
|
89
|
+
|
56
90
|
Scenario: Fuel oil intensity committee from default
|
57
91
|
Given a meeting emitter
|
58
92
|
When the "fuel_oil_intensity" committee is calculated
|
@@ -99,3 +133,31 @@ Feature: Meeting Committee Calculations
|
|
99
133
|
And the "emission_factor" committee is calculated
|
100
134
|
Then the committee should have used quorum "from fuel intensities"
|
101
135
|
And the conclusion of the committee should be "8.50002"
|
136
|
+
|
137
|
+
Scenario: Emission factor committee from eGRID subregion
|
138
|
+
Given a meeting emitter
|
139
|
+
And a characteristic "zip_code.name" of "94122"
|
140
|
+
When the "egrid_subregion" committee is calculated
|
141
|
+
And the "egrid_region" committee is calculated
|
142
|
+
And the "natural_gas_intensity" committee is calculated
|
143
|
+
And the "fuel_oil_intensity" committee is calculated
|
144
|
+
And the "electricity_intensity" committee is calculated
|
145
|
+
And the "district_heat_intensity" committee is calculated
|
146
|
+
And the "emission_factor" committee is calculated
|
147
|
+
Then the committee should have used quorum "from eGRID subregion and fuel intensities"
|
148
|
+
And the conclusion of the committee should be "0.09030"
|
149
|
+
|
150
|
+
Scenario: Emission factor committee from eGRID subregion and census division
|
151
|
+
Given a meeting emitter
|
152
|
+
And a characteristic "zip_code.name" of "94122"
|
153
|
+
When the "state" committee is calculated
|
154
|
+
And the "census_division" committee is calculated
|
155
|
+
And the "egrid_subregion" committee is calculated
|
156
|
+
And the "egrid_region" committee is calculated
|
157
|
+
And the "natural_gas_intensity" committee is calculated
|
158
|
+
And the "fuel_oil_intensity" committee is calculated
|
159
|
+
And the "electricity_intensity" committee is calculated
|
160
|
+
And the "district_heat_intensity" committee is calculated
|
161
|
+
And the "emission_factor" committee is calculated
|
162
|
+
Then the committee should have used quorum "from eGRID subregion and fuel intensities"
|
163
|
+
And the conclusion of the committee should be "5.83336"
|
@@ -14,16 +14,21 @@ Feature: Meeting Emissions Calculations
|
|
14
14
|
Scenario: Calculations starting from area
|
15
15
|
Given a meeting has "area" of "1000"
|
16
16
|
When emissions are calculated
|
17
|
-
Then the emission value should be within "1" kgs of "1237.6"
|
17
|
+
Then the emission value should be within "0.1" kgs of "1237.6"
|
18
|
+
|
19
|
+
Scenario: Calculations starting from state
|
20
|
+
Given a meeting has "state.postal_abbreviation" of "CA"
|
21
|
+
When emissions are calculated
|
22
|
+
Then the emission value should be within "0.1" kgs of "80547.2"
|
18
23
|
|
19
24
|
Scenario: Calculations starting from zip code
|
20
25
|
Given a meeting has "zip_code.name" of "94122"
|
21
26
|
When emissions are calculated
|
22
|
-
Then the emission value should be within "1" kgs of "
|
27
|
+
Then the emission value should be within "0.1" kgs of "55277.5"
|
23
28
|
|
24
29
|
Scenario: Calculations starting from duration, area, and zip code
|
25
30
|
Given a meeting has "duration" of "1"
|
26
31
|
And it has "area" of "1000"
|
27
32
|
And it has "zip_code.name" of "94122"
|
28
33
|
When emissions are calculated
|
29
|
-
Then the emission value should be within "0.1" kgs of "
|
34
|
+
Then the emission value should be within "0.1" kgs of "5833.4"
|
data/lib/meeting/carbon_model.rb
CHANGED
@@ -16,6 +16,30 @@ module BrighterPlanet
|
|
16
16
|
end
|
17
17
|
|
18
18
|
committee :emission_factor do # returns kg CO2e / square metre hour
|
19
|
+
quorum 'from eGRID subregion and fuel intensities', :needs => [:egrid_subregion, :natural_gas_intensity, :fuel_oil_intensity, :electricity_intensity, :district_heat_intensity] do |characteristics|
|
20
|
+
natural_gas = FuelType.find_by_name "Commercial Natural Gas"
|
21
|
+
fuel_oil = FuelType.find_by_name "Distillate Fuel Oil 2"
|
22
|
+
|
23
|
+
# FIXME TODO won't need this once we convert emission factors to co2 / unit energy
|
24
|
+
# kg / J kg / cubic m J / cubic m
|
25
|
+
natural_gas_energy_ef = natural_gas.emission_factor / 38_339_000
|
26
|
+
|
27
|
+
# FIXME TODO won't need this once we convert emission factors to co2 / unit energy
|
28
|
+
# kg / J kg / l J / l
|
29
|
+
fuel_oil_energy_ef = fuel_oil.emission_factor / 38_655_000
|
30
|
+
|
31
|
+
# based on CA-CP calculator
|
32
|
+
# assume district heat is 50% natural gas 50% distillate fuel
|
33
|
+
# assume natural gas boilers 81.7% efficient; fuel oil boilers 84.6% efficient
|
34
|
+
# assume 5% transmission loss
|
35
|
+
district_heat_emission_factor = (((natural_gas_energy_ef / 0.817) / 2) + ((fuel_oil_energy_ef / 0.846) / 2)) / 0.95
|
36
|
+
|
37
|
+
(characteristics[:natural_gas_intensity] * natural_gas.emission_factor) +
|
38
|
+
(characteristics[:fuel_oil_intensity] * fuel_oil.emission_factor) +
|
39
|
+
(characteristics[:electricity_intensity] * characteristics[:egrid_subregion].electricity_emission_factor) +
|
40
|
+
(characteristics[:district_heat_intensity] * district_heat_emission_factor)
|
41
|
+
end
|
42
|
+
|
19
43
|
quorum 'from fuel intensities', :needs => [:natural_gas_intensity, :fuel_oil_intensity, :electricity_intensity, :district_heat_intensity] do |characteristics|
|
20
44
|
natural_gas = FuelType.find_by_name "Commercial Natural Gas"
|
21
45
|
fuel_oil = FuelType.find_by_name "Distillate Fuel Oil 2"
|
@@ -51,7 +75,7 @@ module BrighterPlanet
|
|
51
75
|
CensusDivision.fallback.meeting_building_natural_gas_intensity
|
52
76
|
end
|
53
77
|
end
|
54
|
-
|
78
|
+
|
55
79
|
committee :fuel_oil_intensity do # returns litres per square metre hour
|
56
80
|
quorum 'from census division', :needs => :census_division do |characteristics|
|
57
81
|
characteristics[:census_division].meeting_building_fuel_oil_intensity
|
@@ -61,17 +85,25 @@ module BrighterPlanet
|
|
61
85
|
CensusDivision.fallback.meeting_building_fuel_oil_intensity
|
62
86
|
end
|
63
87
|
end
|
64
|
-
|
88
|
+
|
65
89
|
committee :electricity_intensity do # returns kilowatt hours per square metre hour
|
90
|
+
quorum 'from eGRID region and census division', :needs => [:egrid_region, :census_division] do |characteristics|
|
91
|
+
characteristics[:census_division].meeting_building_electricity_intensity / (1 - characteristics[:egrid_region].loss_factor)
|
92
|
+
end
|
93
|
+
|
66
94
|
quorum 'from census division', :needs => :census_division do |characteristics|
|
67
95
|
characteristics[:census_division].meeting_building_electricity_intensity
|
68
96
|
end
|
69
97
|
|
98
|
+
quorum 'from eGRID region', :needs => :egrid_region do |characteristics|
|
99
|
+
CensusDivision.fallback.meeting_building_electricity_intensity / (1 - characteristics[:egrid_region].loss_factor)
|
100
|
+
end
|
101
|
+
|
70
102
|
quorum 'default' do
|
71
103
|
CensusDivision.fallback.meeting_building_electricity_intensity
|
72
104
|
end
|
73
105
|
end
|
74
|
-
|
106
|
+
|
75
107
|
committee :district_heat_intensity do # returns joules per square metre hour
|
76
108
|
quorum 'from census division', :needs => :census_division do |characteristics|
|
77
109
|
characteristics[:census_division].meeting_building_district_heat_intensity
|
@@ -82,6 +114,18 @@ module BrighterPlanet
|
|
82
114
|
end
|
83
115
|
end
|
84
116
|
|
117
|
+
committee :egrid_region do # returns eGRID region
|
118
|
+
quorum 'from eGRID subregion', :needs => :egrid_subregion do |characteristics|
|
119
|
+
characteristics[:egrid_subregion].egrid_region
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
committee :egrid_subregion do # returns eGRID subregion
|
124
|
+
quorum 'from zip code', :needs => :zip_code do |characteristics|
|
125
|
+
characteristics[:zip_code].egrid_subregion
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
85
129
|
committee :census_division do # returns census division
|
86
130
|
quorum 'from state', :needs => :state do |characteristics|
|
87
131
|
characteristics[:state].census_division
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: meeting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 5
|
10
|
+
version: 0.0.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andy Rossmeissl
|
@@ -19,14 +19,13 @@ autorequire:
|
|
19
19
|
bindir: bin
|
20
20
|
cert_chain: []
|
21
21
|
|
22
|
-
date: 2010-09-22 00:00:00 -
|
22
|
+
date: 2010-09-22 00:00:00 -07:00
|
23
23
|
default_executable:
|
24
24
|
dependencies:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
|
-
type: :development
|
27
|
-
prerelease: false
|
28
26
|
name: activerecord
|
29
|
-
|
27
|
+
prerelease: false
|
28
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
30
29
|
none: false
|
31
30
|
requirements:
|
32
31
|
- - ~>
|
@@ -37,12 +36,12 @@ dependencies:
|
|
37
36
|
- 0
|
38
37
|
- 0
|
39
38
|
version: 3.0.0
|
40
|
-
requirement: *id001
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
39
|
type: :development
|
43
|
-
|
40
|
+
version_requirements: *id001
|
41
|
+
- !ruby/object:Gem::Dependency
|
44
42
|
name: bundler
|
45
|
-
|
43
|
+
prerelease: false
|
44
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
46
45
|
none: false
|
47
46
|
requirements:
|
48
47
|
- - ~>
|
@@ -53,12 +52,12 @@ dependencies:
|
|
53
52
|
- 0
|
54
53
|
- 0
|
55
54
|
version: 1.0.0
|
56
|
-
requirement: *id002
|
57
|
-
- !ruby/object:Gem::Dependency
|
58
55
|
type: :development
|
59
|
-
|
56
|
+
version_requirements: *id002
|
57
|
+
- !ruby/object:Gem::Dependency
|
60
58
|
name: cucumber
|
61
|
-
|
59
|
+
prerelease: false
|
60
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
62
61
|
none: false
|
63
62
|
requirements:
|
64
63
|
- - ~>
|
@@ -69,12 +68,12 @@ dependencies:
|
|
69
68
|
- 8
|
70
69
|
- 3
|
71
70
|
version: 0.8.3
|
72
|
-
requirement: *id003
|
73
|
-
- !ruby/object:Gem::Dependency
|
74
71
|
type: :development
|
75
|
-
|
72
|
+
version_requirements: *id003
|
73
|
+
- !ruby/object:Gem::Dependency
|
76
74
|
name: jeweler
|
77
|
-
|
75
|
+
prerelease: false
|
76
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
78
77
|
none: false
|
79
78
|
requirements:
|
80
79
|
- - ~>
|
@@ -85,12 +84,12 @@ dependencies:
|
|
85
84
|
- 4
|
86
85
|
- 0
|
87
86
|
version: 1.4.0
|
88
|
-
requirement: *id004
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
87
|
type: :development
|
91
|
-
|
88
|
+
version_requirements: *id004
|
89
|
+
- !ruby/object:Gem::Dependency
|
92
90
|
name: rake
|
93
|
-
|
91
|
+
prerelease: false
|
92
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
94
93
|
none: false
|
95
94
|
requirements:
|
96
95
|
- - ">="
|
@@ -99,12 +98,12 @@ dependencies:
|
|
99
98
|
segments:
|
100
99
|
- 0
|
101
100
|
version: "0"
|
102
|
-
requirement: *id005
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
101
|
type: :development
|
105
|
-
|
102
|
+
version_requirements: *id005
|
103
|
+
- !ruby/object:Gem::Dependency
|
106
104
|
name: rdoc
|
107
|
-
|
105
|
+
prerelease: false
|
106
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
108
107
|
none: false
|
109
108
|
requirements:
|
110
109
|
- - ">="
|
@@ -113,12 +112,12 @@ dependencies:
|
|
113
112
|
segments:
|
114
113
|
- 0
|
115
114
|
version: "0"
|
116
|
-
requirement: *id006
|
117
|
-
- !ruby/object:Gem::Dependency
|
118
115
|
type: :development
|
119
|
-
|
116
|
+
version_requirements: *id006
|
117
|
+
- !ruby/object:Gem::Dependency
|
120
118
|
name: rspec
|
121
|
-
|
119
|
+
prerelease: false
|
120
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
122
121
|
none: false
|
123
122
|
requirements:
|
124
123
|
- - ~>
|
@@ -131,12 +130,12 @@ dependencies:
|
|
131
130
|
- beta
|
132
131
|
- 17
|
133
132
|
version: 2.0.0.beta.17
|
134
|
-
requirement: *id007
|
135
|
-
- !ruby/object:Gem::Dependency
|
136
133
|
type: :development
|
137
|
-
|
134
|
+
version_requirements: *id007
|
135
|
+
- !ruby/object:Gem::Dependency
|
138
136
|
name: sniff
|
139
|
-
|
137
|
+
prerelease: false
|
138
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
140
139
|
none: false
|
141
140
|
requirements:
|
142
141
|
- - ~>
|
@@ -147,12 +146,12 @@ dependencies:
|
|
147
146
|
- 1
|
148
147
|
- 12
|
149
148
|
version: 0.1.12
|
150
|
-
|
149
|
+
type: :development
|
150
|
+
version_requirements: *id008
|
151
151
|
- !ruby/object:Gem::Dependency
|
152
|
-
type: :runtime
|
153
|
-
prerelease: false
|
154
152
|
name: emitter
|
155
|
-
|
153
|
+
prerelease: false
|
154
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
156
155
|
none: false
|
157
156
|
requirements:
|
158
157
|
- - ~>
|
@@ -163,7 +162,8 @@ dependencies:
|
|
163
162
|
- 1
|
164
163
|
- 4
|
165
164
|
version: 0.1.4
|
166
|
-
|
165
|
+
type: :runtime
|
166
|
+
version_requirements: *id009
|
167
167
|
description: A software model in Ruby for the greenhouse gas emissions of a meeting
|
168
168
|
email: andy@rossmeissl.net
|
169
169
|
executables: []
|