solar-scores
Version:
Compute scores for solar decathlon competition - Cali 2015
69 lines (53 loc) • 2.24 kB
JavaScript
;
const utils = require('./../utils');
const baseScore = require('./../baseScore');
class Humidity extends baseScore {
constructor(options) {
super(options);
if(!options.singleScoringParams) {
throw new Error('Invalid options for humidity score');
}
this.series = [];
this.params = [];
this.scoringFunction = utils.getSingleScoringFunction.apply(null, options.singleScoringParams);
}
addSerie(serie, param) {
serie = utils.filterValues(serie, param);
serie = utils.filterByEpoch(serie, 'Humidity');
this.series.push(serie);
this.params.push(param);
}
getScore(asOfDate) {
var maxSerie = utils.resampleWithMax(this.series, this.params, 'Humidity');
var byDay = utils.filterByEpochPerDay(maxSerie, 'Humidity');
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].pointsFraction = new Array(l);
byDay[i].maxUntilNow = new Array(l);
byDay[i].fraction = new Array(l);
for(var j=0; j < l; j++) {
var humidities = utils.filterValues(data[j], 'value').map(function(val) {
return val.value;
});
var elapsedFraction = utils.getElapsedFraction([byDay[i].periods[j]], asOfDate);
if (humidities.length === 0) {
byDay[i].points[j] = 0;
byDay[i].maxUntilNow[j] = byDay[i].periods[j].points * elapsedFraction;
continue;
}
var avg = 0;
for (var k = 0; k < humidities.length; k++) {
avg += this.scoringFunction(humidities[k]);
}
avg /= humidities.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 = Humidity;