Mercurial > gemma
diff pkg/controllers/gauges.go @ 2878:4f66a3ba424b
Fixed selection for Nash-Sutcliffe coeff calculation.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 01 Apr 2019 15:57:36 +0200 |
parents | e6dc09896a4d |
children | fe3d5e824ee9 |
line wrap: on
line diff
--- a/pkg/controllers/gauges.go Mon Apr 01 13:24:32 2019 +0200 +++ b/pkg/controllers/gauges.go Mon Apr 01 15:57:36 2019 +0200 @@ -18,6 +18,7 @@ "encoding/csv" "fmt" "log" + "math" "net/http" "sort" "strconv" @@ -36,13 +37,10 @@ const ( selectPredictedObserveredSQL = ` SELECT - a.measure_date AS measure_date, - a.water_level AS predicted, - b.water_level AS observed -FROM waterway.gauge_measurements a JOIN waterway.gauge_measurements b - ON a.fk_gauge_id = b.fk_gauge_id AND - a.measure_date = b.measure_date AND - a.predicted AND NOT b.predicted + measure_date, + predicted, + water_level +FROM waterway.gauge_measurements WHERE a.fk_gauge_id = ( $1::char(2), @@ -51,11 +49,10 @@ $4::char(5), $5::int ) AND - a.measure_date BETWEEN + measure_date BETWEEN $6::timestamp AND $6::timestamp - '72hours'::interval -ORDER BY a.measure_date +ORDER BY measure_date, date_issue ` - selectWaterlevelsSQL = ` SELECT measure_date, @@ -457,21 +454,46 @@ var measurements []common.NSMeasurement + invalid := common.NSMeasurement{ + Predicted: math.NaN(), + Observed: math.NaN(), + } + current := invalid + for rows.Next() { - var m common.NSMeasurement + var ( + when time.Time + predicted bool + value float64 + ) if err = rows.Scan( - &m.When, - &m.Predicted, - &m.Observed, + &when, + &predicted, + &value, ); err != nil { return } - measurements = append(measurements, m) + if !when.Equal(current.When) { + if current.Valid() { + measurements = append(measurements, current) + } + current = invalid + } + if predicted { + current.Predicted = value + } else { + current.Observed = value + } } + if err = rows.Err(); err != nil { return } + if current.Valid() { + measurements = append(measurements, current) + } + type coeff struct { Value float64 `json:"value"` Samples int `json:"samples"`