UNPKG

solar-scores

Version:

Compute scores for solar decathlon competition - Cali 2015

69 lines (53 loc) 2.24 kB
'use strict'; 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;