Skip to content

Commit 27b2bd9

Browse files
authored
Feature/emissions release (#247)
* update emissions vol default chart curve * Update calculate-carbon-intensity.js * workaround for imports energy flipping signs * remove imports workaround in 12 mth rolling sum calculations * update emissions calculations when dates are zoomed * fix: remove emissions domain filter for loads
1 parent d6c4d8f commit 27b2bd9

File tree

7 files changed

+65
-32
lines changed

7 files changed

+65
-32
lines changed

components/Charts/EmissionsChart.vue

+10
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,10 @@ export default {
272272
emissionsOptions: {
273273
type: Object,
274274
default: () => emissionsOptions
275+
},
276+
isEnergyType: {
277+
type: Boolean,
278+
default: false
275279
}
276280
},
277281
@@ -706,6 +710,12 @@ export default {
706710
this.$emit('changeDataset', this.changeSinceDataset)
707711
this.chartHeight = this.visHeight
708712
this.handleTypeClick()
713+
714+
if (this.isEnergyType) {
715+
this.$store.commit('chartOptionsEmissionsVolume/chartCurve', 'step')
716+
} else {
717+
this.$store.commit('chartOptionsEmissionsVolume/chartCurve', 'smooth')
718+
}
709719
},
710720
711721
methods: {

components/Energy/VisSection.vue

+2-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
:prop-name="propName"
4646
:incomplete-intervals="incompleteIntervals"
4747
:filter-period="filterPeriod"
48+
:is-energy-type="isEnergyType"
4849
@dateHover="handleDateHover"
4950
@isHovering="handleIsHovering"
5051
@zoomExtent="handleZoomExtent"
@@ -255,7 +256,7 @@ export default {
255256
256257
created() {
257258
this.clearHoverFocus()
258-
this.setEmissionsStepCurve()
259+
// this.setEmissionsStepCurve()
259260
this.zoomExtent = this.filteredDates
260261
},
261262

data/calculate-carbon-intensity.js

+42-25
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import _includes from 'lodash/includes'
12
import * as FT from '@/constants/energy-fuel-techs/group-detailed.js'
23

34
function calAverage(isEnergyType, isWemOrAu, dataset) {
@@ -34,31 +35,40 @@ export default function({
3435
isEnergyType,
3536
isWemOrAu
3637
}) {
37-
3838

39-
const addUp = (data, domain, hasSource) => {
40-
// if (isCalculateByGeneration) {
41-
// // only if it's a source AND it's not imports
42-
// if (domain.category === 'source' && domain.fuelTech !== 'imports') {
43-
// return data[domain.id] || 0
44-
// }
45-
// } else {
46-
// // it's not a load OR it's exports
47-
// if (domain.category !== 'load' || domain.fuelTech === 'exports') {
48-
// return Math.abs(data[domain.id]) || 0
49-
// }
50-
// }
51-
52-
if (hasSource) {
53-
// only if it's a source AND it's not imports
54-
if (domain.category === 'source' && domain.fuelTech !== 'imports') {
39+
/**
40+
when viewing generation:
41+
sum(all emissions from visible sources except imports) / energy from all of the above
42+
43+
when viewing consumption:
44+
sum(all emissions from visible sources) minus exports / energy from all of the above
45+
*/
46+
const getEmissions = (data, domain) => {
47+
if (isCalculateByGeneration) {
48+
/** Generation */
49+
// return value if category is source and not imports
50+
if (domain.category === 'source' && !_includes(domain.id, 'imports')) {
5551
return data[domain.id] || 0
5652
}
57-
return 0
5853
} else {
59-
// if all the selected domains are loads
60-
return Math.abs(data[domain.id]) || 0
54+
/** Consumption */
55+
// return exports as negative value
56+
if (_includes(domain.id, 'exports')) {
57+
return -data[domain.id] || 0
58+
}
59+
60+
// return value if category is source
61+
if (domain.category === 'source') {
62+
return data[domain.id] || 0
63+
}
6164
}
65+
66+
// else return 0
67+
return 0
68+
}
69+
70+
const getPowerEnergy = (data, domain) => {
71+
return data[domain.id] || 0
6272
}
6373

6474
const batteryDischarging = domainPowerEnergy.find(
@@ -79,6 +89,7 @@ export default function({
7989
time: d.time,
8090
_isIncompleteBucket: d._isIncompleteBucket
8191
}
92+
8293
let totalEmissions = 0,
8394
totalEmissionsMinusLoads = 0,
8495
totalPowerEnergy = 0,
@@ -89,15 +100,15 @@ export default function({
89100
}
90101

91102
emissionsDomains.forEach((domain) => {
92-
totalEmissions += addUp(d, domain, hasSource)
103+
totalEmissions += getEmissions(d, domain)
93104

94105
if (domain.category !== 'load') {
95-
totalEmissionsMinusLoads += addUp(d, domain, hasSource)
106+
totalEmissionsMinusLoads += getEmissions(d, domain)
96107
}
97108
})
98109

99110
powerEnergyDomains.forEach((domain) => {
100-
totalPowerEnergy += addUp(d, domain, hasSource)
111+
totalPowerEnergy += getPowerEnergy(d, domain)
101112
})
102113

103114
const totalPowerEnergyMinusBatteryDischarging =
@@ -120,7 +131,7 @@ export default function({
120131
ei = ei * 12
121132
}
122133
}
123-
134+
124135
const isValidEI = Number.isFinite(ei)
125136

126137
if (ei < 0 || ei > 1500) {
@@ -141,7 +152,13 @@ export default function({
141152
)
142153
const averageEmissions = hasSource
143154
? sumEmissionsMinusLoads / dataset.length
144-
: sumEmissions / dataset.length
155+
: Math.abs(sumEmissions / dataset.length)
156+
157+
if (averageEmissions < 0) {
158+
// console.log(`averageEmissions < 0: ${averageEmissions}`)
159+
} else {
160+
// console.log(`emissions intensity... ${averageEmissions}`, hasSource, sumEmissionsMinusLoads, dataset.length, powerEnergyDomains, emissionsDomains)
161+
}
145162

146163
return {
147164
emissionIntensityData: dataset,

data/transform/energy-12-month-rolling-sum.js

+2
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ const perfTime = new PerfTime()
88

99
export default function (data, keys) {
1010
perfTime.time()
11+
// console.log('keys', keys)
1112
for (let x = data.length - 1; x >= 0; x--) {
1213
const d = data[x]
1314
const last = subMonths(data[x].date, 12)
1415

1516
keys.forEach((k) => {
1617
const id = k.id
1718
const isTemperatureKey = isTemperature(k.type)
19+
1820
let sum = d[id] || 0
1921
let index = x - 1
2022
let hasNulls = false

pages/energy/_region/index.vue

+7-4
Original file line numberDiff line numberDiff line change
@@ -298,9 +298,7 @@ export default {
298298
},
299299
300300
emissionsDomains() {
301-
const domains = this.currentDomainEmissions.filter(
302-
(d) => d.category !== FT.LOAD || d.fuelTech === FT.EXPORTS
303-
)
301+
const domains = this.currentDomainEmissions
304302
const hidden = this.hiddenFuelTechs
305303
return domains
306304
? domains.filter((d) => !_includes(hidden, d[this.property]))
@@ -355,6 +353,7 @@ export default {
355353
isZoomed: dates.length > 0,
356354
filterPeriod: this.filterPeriod
357355
})
356+
this.updateEmissionsData()
358357
},
359358
filterPeriod(period) {
360359
this.doUpdateDatasetByFilterPeriod({
@@ -553,8 +552,12 @@ export default {
553552
},
554553
555554
updateEmissionsData() {
555+
const filteredTimes = this.filteredDates.map(d => d.getTime())
556+
const dataset = filteredTimes.length
557+
? this.currentDataset.filter(d => d.time >= filteredTimes[0] && d.time < filteredTimes[filteredTimes.length - 1])
558+
: this.currentDataset
556559
this.doUpdateEmissionIntensityDataset({
557-
datasetAll: this.currentDataset,
560+
datasetAll: dataset,
558561
isCalculateByGeneration: this.calculateByGeneration,
559562
emissionsDomains: this.emissionsDomains,
560563
powerEnergyDomains: this.powerEnergyDomains,

store/chartOptions.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,6 @@ export const actions = {
6868
commit('chartDisplayPrefix', SI.BASE)
6969
},
7070
setStepCurve({ commit }) {
71-
commit('chartCurve', OPTIONS.CHART_CURVE_SMOOTH)
71+
commit('chartCurve', OPTIONS.CHART_CURVE_STEP)
7272
}
7373
}

store/chartOptionsEmissionsVolume.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export const state = () => ({
55
chartDefaultType: OPTIONS.CHART_STACKED,
66
chartType: OPTIONS.CHART_STACKED,
77
chartYAxis: OPTIONS.CHART_YAXIS_EMISSIONS_VOL,
8-
chartCurve: OPTIONS.CHART_CURVE_STEP,
8+
chartCurve: OPTIONS.CHART_CURVE_SMOOTH,
99

1010
chartUnit: 'tCO₂e',
1111
chartUnitPrefix: SI.MEGA,

0 commit comments

Comments
 (0)