diff pkg/controllers/gauges.go @ 3097:e6ba32b060df

Nash Sutcliffe: Treat last prediction date as valid afterwards. Small optimizsations.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 23 Apr 2019 18:10:19 +0200
parents 7dc9660df743
children f516ac26f4db
line wrap: on
line diff
--- a/pkg/controllers/gauges.go	Tue Apr 23 16:53:56 2019 +0200
+++ b/pkg/controllers/gauges.go	Tue Apr 23 18:10:19 2019 +0200
@@ -474,7 +474,7 @@
 
 		if hasCurrent {
 			if !current.when.Equal(measureDate) {
-				if !math.IsNaN(current.observed) {
+				if !math.IsNaN(current.observed) && len(current.predicted) > 0 {
 					values = append(values, current)
 				}
 				current = observedPredictedValues{
@@ -491,10 +491,16 @@
 		}
 
 		if predicted {
-			current.predicted = append(
-				current.predicted,
-				common.TimedValue{When: issueDate, Value: value},
-			)
+			// current prediction same as last two?
+			if l := len(current.predicted); l > 1 && current.predicted[l-1].Value == value && current.predicted[l-2].Value == value {
+				// only update last time.
+				current.predicted[l-1].When = issueDate
+			} else {
+				current.predicted = append(
+					current.predicted,
+					common.TimedValue{When: issueDate, Value: value},
+				)
+			}
 		} else {
 			current.observed = value
 		}
@@ -504,10 +510,19 @@
 		return nil, err
 	}
 
-	if hasCurrent && !math.IsNaN(current.observed) {
+	if hasCurrent && !math.IsNaN(current.observed) && len(current.predicted) > 0 {
 		values = append(values, current)
 	}
 
+	// for i := range values {
+	// 	log.Printf("%v %f %d\n", values[i].when, values[i].observed, len(values[i].predicted))
+	// 	if len(values[i].predicted) > 0 {
+	// 		for j := range values[i].predicted {
+	// 			log.Printf("\t%v %f\n", values[i].predicted[j].When, values[i].predicted[j].Value)
+	// 		}
+	// 	}
+	// }
+
 	return values, nil
 }