solar-scores
Version:
Compute scores for solar decathlon competition - Cali 2015
59 lines (45 loc) • 1.83 kB
JavaScript
;
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;