Mercurial > gemma
comparison 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 |
comparison
equal
deleted
inserted
replaced
3096:cb3360653652 | 3097:e6ba32b060df |
---|---|
472 measureDate = measureDate.UTC() | 472 measureDate = measureDate.UTC() |
473 issueDate = issueDate.UTC() | 473 issueDate = issueDate.UTC() |
474 | 474 |
475 if hasCurrent { | 475 if hasCurrent { |
476 if !current.when.Equal(measureDate) { | 476 if !current.when.Equal(measureDate) { |
477 if !math.IsNaN(current.observed) { | 477 if !math.IsNaN(current.observed) && len(current.predicted) > 0 { |
478 values = append(values, current) | 478 values = append(values, current) |
479 } | 479 } |
480 current = observedPredictedValues{ | 480 current = observedPredictedValues{ |
481 observed: math.NaN(), | 481 observed: math.NaN(), |
482 when: measureDate, | 482 when: measureDate, |
489 when: measureDate, | 489 when: measureDate, |
490 } | 490 } |
491 } | 491 } |
492 | 492 |
493 if predicted { | 493 if predicted { |
494 current.predicted = append( | 494 // current prediction same as last two? |
495 current.predicted, | 495 if l := len(current.predicted); l > 1 && current.predicted[l-1].Value == value && current.predicted[l-2].Value == value { |
496 common.TimedValue{When: issueDate, Value: value}, | 496 // only update last time. |
497 ) | 497 current.predicted[l-1].When = issueDate |
498 } else { | |
499 current.predicted = append( | |
500 current.predicted, | |
501 common.TimedValue{When: issueDate, Value: value}, | |
502 ) | |
503 } | |
498 } else { | 504 } else { |
499 current.observed = value | 505 current.observed = value |
500 } | 506 } |
501 } | 507 } |
502 | 508 |
503 if err := rows.Err(); err != nil { | 509 if err := rows.Err(); err != nil { |
504 return nil, err | 510 return nil, err |
505 } | 511 } |
506 | 512 |
507 if hasCurrent && !math.IsNaN(current.observed) { | 513 if hasCurrent && !math.IsNaN(current.observed) && len(current.predicted) > 0 { |
508 values = append(values, current) | 514 values = append(values, current) |
509 } | 515 } |
516 | |
517 // for i := range values { | |
518 // log.Printf("%v %f %d\n", values[i].when, values[i].observed, len(values[i].predicted)) | |
519 // if len(values[i].predicted) > 0 { | |
520 // for j := range values[i].predicted { | |
521 // log.Printf("\t%v %f\n", values[i].predicted[j].When, values[i].predicted[j].Value) | |
522 // } | |
523 // } | |
524 // } | |
510 | 525 |
511 return values, nil | 526 return values, nil |
512 } | 527 } |
513 | 528 |
514 func nashSutcliffe( | 529 func nashSutcliffe( |