UNPKG

solar-scores

Version:

Compute scores for solar decathlon competition - Cali 2015

59 lines (45 loc) 1.83 kB
'use strict'; const utils = require('./../utils'); const baseScore = require('./../baseScore'); class Freezing extends baseScore { constructor(options) { super(options); if(!this.scoringFunction) { throw new Error('Invalid options for freezing score'); } } getScore(values, param, asOfDate) { // Remove null values values = utils.filterValues(values, param); var byDay = utils.filterByEpochPerDay(values, 'Freezing'); for(let i=0; i<byDay.length; i++) { let data = byDay[i].data; let l = byDay[i].periods.length; byDay[i].points = new Array(l); byDay[i].maxUntilNow = new Array(l); byDay[i].fraction = new Array(l); for(var j=0; j < l; j++) { var freezing = data[j].map(function(val) { return val[param]; }); var elapsedFraction = utils.getElapsedFraction([byDay[i].periods[j]], asOfDate); if (!freezing.length) { byDay[i].points[j] = 0; byDay[i].maxUntilNow[j] = byDay[i].periods[j].points * elapsedFraction; byDay[i].fraction[j] = 0; continue; } var avg = 0; for (var k = 0; k < freezing.length; k++) { avg += this.scoringFunction(freezing[k]); } avg /= freezing.length; 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 = Freezing;