diff pkg/common/nashsutcliffe.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 cb3360653652
children 8f2ac24b0cb3
line wrap: on
line diff
--- a/pkg/common/nashsutcliffe.go	Tue Apr 23 16:53:56 2019 +0200
+++ b/pkg/common/nashsutcliffe.go	Tue Apr 23 18:10:19 2019 +0200
@@ -49,9 +49,11 @@
 			continue
 		}
 		if m1.When.Equal(when) {
+			//log.Printf("matches first: %f\n", m1.Value)
 			return m1.Value, true
 		}
 		if m2.When.Equal(when) {
+			//log.Printf("matches second: %f\n", m1.Value)
 			return m2.Value, true
 		}
 
@@ -69,13 +71,27 @@
 		a := (m1.Value - m2.Value) / m1.When.Sub(m2.When).Seconds()
 		b := m1.Value - m1.When.Sub(utc0).Seconds()*a
 		m := when.Sub(utc0).Seconds()*a + b
+
+		//log.Printf("%f %f %f\n", m1.Value, m, m2.Value)
 		return m, true
 	}
 
-	if len(mvs) == 1 && when.Equal(mvs[0].When) {
-		return mvs[0].Value, true
+	if l := len(mvs); l > 0 {
+		if when.Equal(mvs[0].When) {
+			//log.Printf("at start\n")
+			return mvs[0].Value, true
+		}
+		if !when.Before(mvs[l-1].When) {
+			//log.Printf("after end\n")
+		}
+		return mvs[l-1].Value, true
 	}
 
+	//if len(mvs) > 0 {
+	//	log.Printf("does not match %v %v %v\n",
+	//		mvs[0].When, mvs[len(mvs)-1].When.Sub(mvs[0].When), when)
+	//}
+
 	return 0, false
 }