annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedloadDiameterResult.java @ 8581:073ea4bcea58

(issue1755) Interpolate BedQuality Results This adds an interpolation function to each various bedQuality result class. Imho this is ok as the interpolation function can be seen as part of the result. The interpolation function is initalized on first use and can be accessed through get.*Interpol functions.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 16 Mar 2015 15:36:38 +0100
parents af13ceeba52a
children
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3785
diff changeset
9 package org.dive4elements.river.artifacts.model.minfo;
3784
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3785
diff changeset
11 import org.dive4elements.river.artifacts.model.DateRange;
8581
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
12 import org.dive4elements.river.utils.DoubleUtil;
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
13
3784
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14 import gnu.trove.TDoubleArrayList;
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
15
8581
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
16 import org.apache.commons.math.analysis.polynomials.PolynomialSplineFunction;
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
17
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
18 import org.apache.commons.math.ArgumentOutsideDomainException;
3784
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
19
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
20 public class BedloadDiameterResult
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
21 extends BedQualityDiameterResult
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
22 {
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
23 protected TDoubleArrayList diameter;
8581
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
24 protected PolynomialSplineFunction interpol;
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
25
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
26 /** Set to true if this result can't be interpolated.*/
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
27 protected boolean nonInterpolResult;
3784
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29 public BedloadDiameterResult(
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 String type,
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31 TDoubleArrayList diameter,
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
32 TDoubleArrayList km,
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33 DateRange range
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
34 ) {
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
35 super (type, km);
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
36 this.diameter = diameter;
8581
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
37 interpol = null;
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
38 nonInterpolResult = false;
3784
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39 }
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41 public double getDiameter(int ndx) {
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
42 if (diameter != null) {
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
43 return this.diameter.get(ndx);
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44 }
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45 return Double.NaN;
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46 }
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3784
diff changeset
48 public double getDiameter(double km) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3784
diff changeset
49 if (kms.indexOf(km) >= 0) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3784
diff changeset
50 return diameter.get(kms.indexOf(km));
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3784
diff changeset
51 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3784
diff changeset
52 return Double.NaN;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3784
diff changeset
53 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3784
diff changeset
54
8581
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
55 public double getDiameterInterpol(double km) {
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
56 if (nonInterpolResult) {
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
57 return Double.NaN;
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
58 }
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
59 if (interpol == null) {
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
60 interpol = DoubleUtil.getLinearInterpolator(kms, diameter);
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
61 if (interpol == null) {
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
62 nonInterpolResult = true;
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
63 return Double.NaN;
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
64 }
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
65 }
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
66 try {
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
67 return interpol.value(km);
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
68 } catch (ArgumentOutsideDomainException e) {
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
69 /* This is expected for many results. */
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
70 return Double.NaN;
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
71 }
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
72 }
073ea4bcea58 (issue1755) Interpolate BedQuality Results
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5994
diff changeset
73
3784
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
74 public double[][] getDiameterData() {
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
75 return new double[][] {
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
76 kms.toNativeArray(),
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
77 diameter.toNativeArray()
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
78 };
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
79 }
9f9d5ada96ca Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
80 }

http://dive4elements.wald.intevation.org