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(