Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowVelocityKmModelValues.java @ 9096:9bd4505a20dc
Fixed removing duplicates
author | mschaefer |
---|---|
date | Sat, 26 May 2018 15:41:47 +0200 |
parents | 45f1ad66560e |
children |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowVelocityKmModelValues.java Fri May 25 16:03:15 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowVelocityKmModelValues.java Sat May 26 15:41:47 2018 +0200 @@ -14,6 +14,7 @@ import org.apache.commons.math.analysis.polynomials.PolynomialSplineFunction; import gnu.trove.TDoubleArrayList; +import gnu.trove.TIntArrayList; /** * Sorted arrays of a station's q, v, and tau model values, running in parallel @@ -36,6 +37,11 @@ private final TDoubleArrayList qs; /** + * Same q values count used to calculate mean + */ + private final TIntArrayList counts; + + /** * The station's main section velocity for the q values */ private final TDoubleArrayList vmains; @@ -83,6 +89,7 @@ public FlowVelocityKmModelValues(final double km) { this.km = km; this.qs = new TDoubleArrayList(); + this.counts = new TIntArrayList(); this.vmains = new TDoubleArrayList(); this.taus = new TDoubleArrayList(); this.vInterpolator = null; @@ -94,7 +101,7 @@ */ public FlowVelocityKmModelValues(final double km, final FlowVelocityKmModelValues src) { this(km); - src.copyTo(this.qs, this.vmains, this.taus); + src.copyTo(this.qs, this.counts, this.vmains, this.taus); } /***** METHODS *****/ @@ -116,9 +123,10 @@ /** * Adds all q-v-tau to another set of arrays */ - void copyTo(final TDoubleArrayList dstqs, final TDoubleArrayList dstvmains, final TDoubleArrayList dsttaus) { + void copyTo(final TDoubleArrayList dstqs, final TIntArrayList dstcounts, final TDoubleArrayList dstvmains, final TDoubleArrayList dsttaus) { for (int i = 0; i <= this.qs.size(); i++) { dstqs.add(this.qs.getQuick(i)); + dstcounts.add(this.counts.getQuick(i)); dstvmains.add(this.vmains.getQuick(i)); dsttaus.add(this.taus.getQuick(i)); } @@ -155,12 +163,22 @@ } /** - * Adds a q-v-tau value triple. + * Adds a q-v-tau value triple, averaging the last values if q duplicates. */ public void addValues(final double q, final double vmain, final double tau) { - this.qs.add(q); - this.vmains.add(vmain); - this.taus.add(tau); + final int j = this.qs.size() - 1; + if ((j >= 0) && (q < this.qs.getQuick(j) + 0.001)) { + this.qs.setQuick(j, (this.qs.getQuick(j) * this.counts.getQuick(j) + q) / (this.counts.getQuick(j) + 1)); + this.vmains.setQuick(j, (this.vmains.getQuick(j) * this.counts.getQuick(j) + vmain) / (this.counts.getQuick(j) + 1)); + this.taus.setQuick(j, (this.taus.getQuick(j) * this.counts.getQuick(j) + tau) / (this.counts.getQuick(j) + 1)); + this.counts.setQuick(j, this.counts.getQuick(j) + 1); + } + else { + this.qs.add(q); + this.counts.add(1); + this.vmains.add(vmain); + this.taus.add(tau); + } } /**