annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/BedQualityD50KmValueFinder.java @ 8920:29442c03c6e3

d50 aggregation by median instead of arithmetic mean, negative tkh replaced by 0
author mschaefer
date Thu, 01 Mar 2018 09:01:58 +0100
parents d9dbf0b74bc2
children 48d5812e8fd5
rev   line source
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
1 /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
2 * Software engineering by
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
5 *
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
9 */
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
10
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
11 package org.dive4elements.river.artifacts.sinfo.tkhcalculation;
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
12
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
13 import java.util.Calendar;
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
14 import java.util.Date;
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
15 import java.util.List;
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
16
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
17 import org.apache.commons.lang.math.DoubleRange;
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
18 import org.apache.commons.math.ArgumentOutsideDomainException;
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
19 import org.apache.commons.math.analysis.interpolation.LinearInterpolator;
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
20 import org.apache.commons.math.analysis.polynomials.PolynomialSplineFunction;
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
21 import org.apache.log4j.Logger;
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
22 import org.dive4elements.river.artifacts.math.Utils;
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
23 import org.dive4elements.river.backend.SedDBSessionHolder;
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
24 import org.dive4elements.river.model.River;
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
25 import org.hibernate.SQLQuery;
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
26 import org.hibernate.Session;
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
27 import org.hibernate.type.StandardBasicTypes;
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
28
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
29 import gnu.trove.TDoubleArrayList;
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
30
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
31 /**
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
32 * Searchable sorted km array with parallel bed measurements value array and linear interpolation for km and d50 between
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
33 * the array elements.<br />
8901
0a900d605d52 S-INFO Flowdepth work on TKH calculation
mschaefer
parents: 8898
diff changeset
34 * <br />
0a900d605d52 S-INFO Flowdepth work on TKH calculation
mschaefer
parents: 8898
diff changeset
35 * See comment of SQL command on how the values are filtered and aggregated.
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
36 *
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
37 * @author Matthias Schäfer
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
38 *
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
39 */
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
40 public class BedQualityD50KmValueFinder {
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
41
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
42 /***** FIELDS *****/
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
43
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
44 /**
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
45 * Private log to use here.
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
46 */
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
47 private static Logger log = Logger.getLogger(BedQualityD50KmValueFinder.class);
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
48
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
49 /**
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
50 * Query selecting all sub layer bed measurements with their d50 for a km range and a time period<br />
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
51 * <br />
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
52 * A km may have bed measurements for multiple dates, multiple distances from the river bank, and multiple depth layers.
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
53 * The query filters by km range, time period and layer (sub layer: below bed to max. 50 cm depth).<br />
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
54 *
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
55 * If PostgreSQL would support a median aggregate function like Oracle does, the aggregation could be placed into this query.
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
56 */
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
57 private static final String SQL_BED_D50_SUBLAYER_MEASUREMENT =
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
58 "SELECT t.km, t.datum, p.tiefevon, p.tiefebis, a.d50"
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
59 + " FROM sohltest t INNER JOIN station s ON t.stationid = s.stationid"
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
60 + " INNER JOIN gewaesser g ON s.gewaesserid = g.gewaesserid"
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
61 + " INNER JOIN sohlprobe p ON t.sohltestid = p.sohltestid"
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
62 + " INNER JOIN siebanalyse a ON p.sohlprobeid = a.sohlprobeid"
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
63 + " WHERE (g.name = :name) AND (s.km BETWEEN :fromkm - 0.0001 AND :tokm + 0.0001)"
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
64 + " AND (p.tiefevon > 0.0) AND (p.tiefebis <= 0.5)"
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
65 + " AND (t.datum BETWEEN :fromdate AND :todate)"
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
66 + " ORDER BY t.km ASC, a.d50 ASC";
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
67
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
68 /**
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
69 * Real linear interpolator for kms and d50 values (m)
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
70 */
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
71 private final PolynomialSplineFunction interpolator;
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
72
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
73
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
74 /***** CONSTRUCTORS *****/
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
75
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
76 private BedQualityD50KmValueFinder(final double[] kms, final double[] values) {
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
77 this.interpolator = new LinearInterpolator().interpolate(kms, values);
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
78 }
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
79
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
80 /***** METHODS *****/
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
81
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
82 /**
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
83 * Sohlbeschaffenheit (D50 Korndurchmesser aus Seddb)
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
84 * Abhängig von Peiljahr
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
85 */
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
86 public static BedQualityD50KmValueFinder loadBedMeasurements(final River river, final DoubleRange kmRange, final int soundingYear, final int validYears) {
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
87
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
88 /* construct valid measurement time range */
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
89 final Calendar cal = Calendar.getInstance();
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
90 cal.clear();
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
91
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
92 cal.set(soundingYear - validYears, 0, 1);
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
93 final Date startTime = cal.getTime();
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
94
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
95 cal.set(soundingYear + validYears, 11, 31);
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
96 final Date endTime = cal.getTime();
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
97
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
98 log.debug(String.format("loadValues km %.3f - %.3f %tF - %tF", kmRange.getMinimumDouble(), kmRange.getMaximumDouble(), startTime, endTime));
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
99 final Session session = SedDBSessionHolder.HOLDER.get();
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
100 final SQLQuery sqlQuery = session.createSQLQuery(SQL_BED_D50_SUBLAYER_MEASUREMENT).addScalar("km", StandardBasicTypes.DOUBLE)
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
101 .addScalar("datum", StandardBasicTypes.DATE).addScalar("tiefevon", StandardBasicTypes.DOUBLE)
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
102 .addScalar("tiefebis", StandardBasicTypes.DOUBLE).addScalar("d50", StandardBasicTypes.DOUBLE);
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
103 final String seddbRiver = river.nameForSeddb();
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
104 sqlQuery.setString("name", seddbRiver);
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
105 sqlQuery.setDouble("fromkm", kmRange.getMinimumDouble());
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
106 sqlQuery.setDouble("tokm", kmRange.getMaximumDouble());
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
107 sqlQuery.setDate("fromdate", startTime);
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
108 sqlQuery.setDate("todate", endTime);
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
109
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
110 final List<Object[]> rows = sqlQuery.list();
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
111 final TDoubleArrayList kms = new TDoubleArrayList();
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
112 final TDoubleArrayList values = new TDoubleArrayList();
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
113 final TDoubleArrayList kmd50s = new TDoubleArrayList();
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
114 for (int i = 0; i <= rows.size() - 1; i++) {
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
115 kmd50s.add((double) rows.get(i)[4]);
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
116 if (((i == rows.size() - 1) || !Utils.epsilonEquals((double) rows.get(i)[0], (double) rows.get(i+1)[0], 0.0001))) {
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
117 int k = kmd50s.size() / 2;
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
118 values.add(((k + k < kmd50s.size()) ? kmd50s.get(k) : (kmd50s.get(k-1) + kmd50s.get(k)) / 2) / 1000);
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
119 kms.add((double) rows.get(i)[0]);
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
120 log.debug(String.format("loadValues km %.3f d50(mm) %.1f count %d", kms.get(kms.size()-1), values.get(values.size()-1), kmd50s.size()));
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
121 kmd50s.clear();
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
122 }
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
123 }
8911
37ff7f435912 SINFO Flowdepth: more error checks, d50 interpolation, avoid negative tkh
mschaefer
parents: 8901
diff changeset
124 try {
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
125 return new BedQualityD50KmValueFinder(kms.toNativeArray(), values.toNativeArray());
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
126 }
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
127 catch (final Exception e) {
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
128 e.printStackTrace();
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
129 return null;
8911
37ff7f435912 SINFO Flowdepth: more error checks, d50 interpolation, avoid negative tkh
mschaefer
parents: 8901
diff changeset
130 }
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
131 }
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents:
diff changeset
132
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
133 /**
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
134 * Returns the d50 value interpolated according to a km
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
135 *
8920
29442c03c6e3 d50 aggregation by median instead of arithmetic mean,
mschaefer
parents: 8915
diff changeset
136 * @return d50 (m) of the km, or NaN
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
137 */
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
138 public double findD50(final double km) throws ArgumentOutsideDomainException {
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
139 return this.interpolator.value(km);
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
140 /*
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
141 * ohne interpolation:
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
142 * if ((kms == null) || (kms.size() == 0))
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
143 * return Double.NaN;
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
144 * int i = kms.binarySearch(km);
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
145 * if (i >= 0)
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
146 * return values.get(i);
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
147 * i = -i - 1;
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
148 * if ((i - 1 >= 0) && Utils.epsilonEquals(km, kms.get(i - 1), 0.0001))
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
149 * return values.get(i - 1);
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
150 * else if ((i >= 0) && (i <= kms.size() - 1) && Utils.epsilonEquals(km, kms.get(i), 0.0001))
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
151 * return values.get(i);
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
152 * else
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
153 * return Double.NaN;
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
154 */
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
155 }
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8911
diff changeset
156 }

http://dive4elements.wald.intevation.org