diff --git a/components/Charts/EmissionsChart.vue b/components/Charts/EmissionsChart.vue index 10e69625..08f10e70 100644 --- a/components/Charts/EmissionsChart.vue +++ b/components/Charts/EmissionsChart.vue @@ -272,6 +272,10 @@ export default { emissionsOptions: { type: Object, default: () => emissionsOptions + }, + isEnergyType: { + type: Boolean, + default: false } }, @@ -706,6 +710,12 @@ export default { this.$emit('changeDataset', this.changeSinceDataset) this.chartHeight = this.visHeight this.handleTypeClick() + + if (this.isEnergyType) { + this.$store.commit('chartOptionsEmissionsVolume/chartCurve', 'step') + } else { + this.$store.commit('chartOptionsEmissionsVolume/chartCurve', 'smooth') + } }, methods: { diff --git a/components/Energy/VisSection.vue b/components/Energy/VisSection.vue index 683f2cd9..73af4b83 100644 --- a/components/Energy/VisSection.vue +++ b/components/Energy/VisSection.vue @@ -45,6 +45,7 @@ :prop-name="propName" :incomplete-intervals="incompleteIntervals" :filter-period="filterPeriod" + :is-energy-type="isEnergyType" @dateHover="handleDateHover" @isHovering="handleIsHovering" @zoomExtent="handleZoomExtent" @@ -255,7 +256,7 @@ export default { created() { this.clearHoverFocus() - this.setEmissionsStepCurve() + // this.setEmissionsStepCurve() this.zoomExtent = this.filteredDates }, diff --git a/data/calculate-carbon-intensity.js b/data/calculate-carbon-intensity.js index e36f25b8..383f556f 100644 --- a/data/calculate-carbon-intensity.js +++ b/data/calculate-carbon-intensity.js @@ -1,3 +1,4 @@ +import _includes from 'lodash/includes' import * as FT from '@/constants/energy-fuel-techs/group-detailed.js' function calAverage(isEnergyType, isWemOrAu, dataset) { @@ -34,31 +35,40 @@ export default function({ isEnergyType, isWemOrAu }) { - - const addUp = (data, domain, hasSource) => { - // if (isCalculateByGeneration) { - // // only if it's a source AND it's not imports - // if (domain.category === 'source' && domain.fuelTech !== 'imports') { - // return data[domain.id] || 0 - // } - // } else { - // // it's not a load OR it's exports - // if (domain.category !== 'load' || domain.fuelTech === 'exports') { - // return Math.abs(data[domain.id]) || 0 - // } - // } - - if (hasSource) { - // only if it's a source AND it's not imports - if (domain.category === 'source' && domain.fuelTech !== 'imports') { + /** + when viewing generation: + sum(all emissions from visible sources except imports) / energy from all of the above + + when viewing consumption: + sum(all emissions from visible sources) minus exports / energy from all of the above + */ + const getEmissions = (data, domain) => { + if (isCalculateByGeneration) { + /** Generation */ + // return value if category is source and not imports + if (domain.category === 'source' && !_includes(domain.id, 'imports')) { return data[domain.id] || 0 } - return 0 } else { - // if all the selected domains are loads - return Math.abs(data[domain.id]) || 0 + /** Consumption */ + // return exports as negative value + if (_includes(domain.id, 'exports')) { + return -data[domain.id] || 0 + } + + // return value if category is source + if (domain.category === 'source') { + return data[domain.id] || 0 + } } + + // else return 0 + return 0 + } + + const getPowerEnergy = (data, domain) => { + return data[domain.id] || 0 } const batteryDischarging = domainPowerEnergy.find( @@ -79,6 +89,7 @@ export default function({ time: d.time, _isIncompleteBucket: d._isIncompleteBucket } + let totalEmissions = 0, totalEmissionsMinusLoads = 0, totalPowerEnergy = 0, @@ -89,15 +100,15 @@ export default function({ } emissionsDomains.forEach((domain) => { - totalEmissions += addUp(d, domain, hasSource) + totalEmissions += getEmissions(d, domain) if (domain.category !== 'load') { - totalEmissionsMinusLoads += addUp(d, domain, hasSource) + totalEmissionsMinusLoads += getEmissions(d, domain) } }) powerEnergyDomains.forEach((domain) => { - totalPowerEnergy += addUp(d, domain, hasSource) + totalPowerEnergy += getPowerEnergy(d, domain) }) const totalPowerEnergyMinusBatteryDischarging = @@ -120,7 +131,7 @@ export default function({ ei = ei * 12 } } - + const isValidEI = Number.isFinite(ei) if (ei < 0 || ei > 1500) { @@ -141,7 +152,13 @@ export default function({ ) const averageEmissions = hasSource ? sumEmissionsMinusLoads / dataset.length - : sumEmissions / dataset.length + : Math.abs(sumEmissions / dataset.length) + + if (averageEmissions < 0) { + // console.log(`averageEmissions < 0: ${averageEmissions}`) + } else { + // console.log(`emissions intensity... ${averageEmissions}`, hasSource, sumEmissionsMinusLoads, dataset.length, powerEnergyDomains, emissionsDomains) + } return { emissionIntensityData: dataset, diff --git a/data/transform/energy-12-month-rolling-sum.js b/data/transform/energy-12-month-rolling-sum.js index 0e46cea5..ec56b1de 100644 --- a/data/transform/energy-12-month-rolling-sum.js +++ b/data/transform/energy-12-month-rolling-sum.js @@ -8,6 +8,7 @@ const perfTime = new PerfTime() export default function (data, keys) { perfTime.time() + // console.log('keys', keys) for (let x = data.length - 1; x >= 0; x--) { const d = data[x] const last = subMonths(data[x].date, 12) @@ -15,6 +16,7 @@ export default function (data, keys) { keys.forEach((k) => { const id = k.id const isTemperatureKey = isTemperature(k.type) + let sum = d[id] || 0 let index = x - 1 let hasNulls = false diff --git a/pages/energy/_region/index.vue b/pages/energy/_region/index.vue index 9631bb00..5f3b5229 100644 --- a/pages/energy/_region/index.vue +++ b/pages/energy/_region/index.vue @@ -298,9 +298,7 @@ export default { }, emissionsDomains() { - const domains = this.currentDomainEmissions.filter( - (d) => d.category !== FT.LOAD || d.fuelTech === FT.EXPORTS - ) + const domains = this.currentDomainEmissions const hidden = this.hiddenFuelTechs return domains ? domains.filter((d) => !_includes(hidden, d[this.property])) @@ -355,6 +353,7 @@ export default { isZoomed: dates.length > 0, filterPeriod: this.filterPeriod }) + this.updateEmissionsData() }, filterPeriod(period) { this.doUpdateDatasetByFilterPeriod({ @@ -553,8 +552,12 @@ export default { }, updateEmissionsData() { + const filteredTimes = this.filteredDates.map(d => d.getTime()) + const dataset = filteredTimes.length + ? this.currentDataset.filter(d => d.time >= filteredTimes[0] && d.time < filteredTimes[filteredTimes.length - 1]) + : this.currentDataset this.doUpdateEmissionIntensityDataset({ - datasetAll: this.currentDataset, + datasetAll: dataset, isCalculateByGeneration: this.calculateByGeneration, emissionsDomains: this.emissionsDomains, powerEnergyDomains: this.powerEnergyDomains, diff --git a/store/chartOptions.js b/store/chartOptions.js index c3f31bec..38130819 100644 --- a/store/chartOptions.js +++ b/store/chartOptions.js @@ -68,6 +68,6 @@ export const actions = { commit('chartDisplayPrefix', SI.BASE) }, setStepCurve({ commit }) { - commit('chartCurve', OPTIONS.CHART_CURVE_SMOOTH) + commit('chartCurve', OPTIONS.CHART_CURVE_STEP) } } diff --git a/store/chartOptionsEmissionsVolume.js b/store/chartOptionsEmissionsVolume.js index f7227278..9ce98dc9 100644 --- a/store/chartOptionsEmissionsVolume.js +++ b/store/chartOptionsEmissionsVolume.js @@ -5,7 +5,7 @@ export const state = () => ({ chartDefaultType: OPTIONS.CHART_STACKED, chartType: OPTIONS.CHART_STACKED, chartYAxis: OPTIONS.CHART_YAXIS_EMISSIONS_VOL, - chartCurve: OPTIONS.CHART_CURVE_STEP, + chartCurve: OPTIONS.CHART_CURVE_SMOOTH, chartUnit: 'tCO₂e', chartUnitPrefix: SI.MEGA,