UNPKG

solar-scores

Version:

Compute scores for solar decathlon competition - Cali 2015

82 lines (66 loc) 2.81 kB
'use strict'; const utils = require('./../utils'); const baseScore = require('./../baseScore'); class Luminosity extends baseScore { constructor(options) { super(options); } setReference(value, param) { this.reference = utils.filterValues(value, param); this.reference = utils.resampleWithMax([this.reference], [param], 'Luminosity'); } setInternal(value, param) { this.luminosity = utils.filterValues(value, param); this.luminosity = this.luminosity.filter(function(val) { return val[param] > 10; }); this.luminosity = utils.resampleWithMax([this.luminosity], [param], 'Luminosity'); } getScore(asOfDate) { // Remove null values var refByDay = utils.filterByEpochPerDay(this.reference, 'Luminosity'); var byDay = utils.filterByEpochPerDay(this.luminosity, 'Luminosity'); for(let i=0; i<byDay.length; i++) { let data = byDay[i].data; let refData = refByDay[i].data; let l = byDay[i].periods.length; byDay[i].points = new Array(l); byDay[i].pointsFraction = new Array(l); byDay[i].maxUntilNow = new Array(l); byDay[i].fraction = new Array(l); for(var j=0; j < l; j++) { var luminosities = data[j].map(function(val) { return val.value; }); luminosities = utils.interpolate(luminosities); var ref = refData[j].map(function(val) { return val.value; }); ref = utils.interpolate(ref); var elapsedFraction = utils.getElapsedFraction([byDay[i].periods[j]], asOfDate); if (ref.length < 3 || ref[0] === null) { byDay[i].points[j] = 0; byDay[i].maxUntilNow[j] = byDay[i].periods[j].points * elapsedFraction; byDay[i].fraction[j] = 0; continue; } var avg = 0; var count = 0; for (let k = 1; k < ref.length - 1; k++) { let refAvg = ref[k-1] + ref[k] + ref[k+1]; refAvg /= 3; if(refAvg <= 0) continue; let perc = luminosities[k] / refAvg; avg += this.scoringFunction(perc); count++; } avg /= count; byDay[i].fraction[j] = avg; byDay[i].points[j] = avg * byDay[i].periods[j].points * elapsedFraction; byDay[i].maxUntilNow[j] = byDay[i].periods[j].points * elapsedFraction; } } return utils.finalizeScores(byDay); } } module.exports = Luminosity;