Skip to content

Commit

Permalink
Feature/emissions release (#247)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
chienleng authored Feb 7, 2024
1 parent d6c4d8f commit 27b2bd9
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 32 deletions.
10 changes: 10 additions & 0 deletions components/Charts/EmissionsChart.vue
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,10 @@ export default {
emissionsOptions: {
type: Object,
default: () => emissionsOptions
},
isEnergyType: {
type: Boolean,
default: false
}
},
Expand Down Expand Up @@ -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: {
Expand Down
3 changes: 2 additions & 1 deletion components/Energy/VisSection.vue
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
:prop-name="propName"
:incomplete-intervals="incompleteIntervals"
:filter-period="filterPeriod"
:is-energy-type="isEnergyType"
@dateHover="handleDateHover"
@isHovering="handleIsHovering"
@zoomExtent="handleZoomExtent"
Expand Down Expand Up @@ -255,7 +256,7 @@ export default {
created() {
this.clearHoverFocus()
this.setEmissionsStepCurve()
// this.setEmissionsStepCurve()
this.zoomExtent = this.filteredDates
},
Expand Down
67 changes: 42 additions & 25 deletions data/calculate-carbon-intensity.js
Original file line number Diff line number Diff line change
@@ -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) {
Expand Down Expand Up @@ -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(
Expand All @@ -79,6 +89,7 @@ export default function({
time: d.time,
_isIncompleteBucket: d._isIncompleteBucket
}

let totalEmissions = 0,
totalEmissionsMinusLoads = 0,
totalPowerEnergy = 0,
Expand All @@ -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 =
Expand All @@ -120,7 +131,7 @@ export default function({
ei = ei * 12
}
}

const isValidEI = Number.isFinite(ei)

if (ei < 0 || ei > 1500) {
Expand All @@ -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,
Expand Down
2 changes: 2 additions & 0 deletions data/transform/energy-12-month-rolling-sum.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@ 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)

keys.forEach((k) => {
const id = k.id
const isTemperatureKey = isTemperature(k.type)

let sum = d[id] || 0
let index = x - 1
let hasNulls = false
Expand Down
11 changes: 7 additions & 4 deletions pages/energy/_region/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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]))
Expand Down Expand Up @@ -355,6 +353,7 @@ export default {
isZoomed: dates.length > 0,
filterPeriod: this.filterPeriod
})
this.updateEmissionsData()
},
filterPeriod(period) {
this.doUpdateDatasetByFilterPeriod({
Expand Down Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion store/chartOptions.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
2 changes: 1 addition & 1 deletion store/chartOptionsEmissionsVolume.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit 27b2bd9

Please sign in to comment.