diff pkg/controllers/gauges.go @ 3091:cec9d4af5f03

Simplified and fixed Nash Sutcliffe calculation.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 23 Apr 2019 10:10:54 +0200
parents 342c7bcb97f1
children 7dc9660df743
line wrap: on
line diff
--- a/pkg/controllers/gauges.go	Sun Apr 21 19:11:38 2019 +0200
+++ b/pkg/controllers/gauges.go	Tue Apr 23 10:10:54 2019 +0200
@@ -558,29 +558,26 @@
 		Coeffs []coeff           `json:"coeffs"`
 	}
 
-	var measurements []common.NSMeasurement
+	var predicted, observed []float64
 
 	cs := make([]coeff, 3)
 	for i := range cs {
 		cs[i].Hours = (i + 1) * 24
-		back := when.Add(time.Duration(-cs[i].Hours) * time.Hour)
+		delta := -time.Duration(-cs[i].Hours) * time.Hour
 
 		for j := range values {
-			if predicted, ok := values[j].predicted.Interpolate(back); ok {
-				measurements = append(measurements, common.NSMeasurement{
-					Observed:  values[j].observed,
-					Predicted: predicted,
-				})
+			when := values[j].when.Add(delta)
+			if p, ok := values[j].predicted.Interpolate(when); ok {
+				predicted = append(predicted, p)
+				observed = append(observed, values[j].observed)
 			}
 		}
 
-		cs[i].Value, cs[i].Samples = common.NashSutcliffe(
-			measurements,
-			when,
-			back,
-		)
+		cs[i].Value = common.NashSutcliffe(predicted, observed)
+		cs[i].Samples = len(predicted)
 
-		measurements = measurements[:0]
+		predicted = predicted[:0]
+		observed = observed[:0]
 	}
 
 	jr = JSONResult{