annotate artifacts/src/main/java/org/dive4elements/river/artifacts/states/WaterlevelData.java @ 8964:45f1ad66560e

Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
author gernotbelger
date Thu, 29 Mar 2018 15:48:17 +0200
parents cef37cc093f2
children 392745cccede
rev   line source
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
2 * Software engineering by
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
5 *
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
9 */
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.states;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
11
8964
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
12 import org.apache.commons.lang.math.DoubleRange;
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
13 import org.dive4elements.river.artifacts.model.WKms;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
14
8964
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
15 import gnu.trove.TDoubleArrayList;
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
16
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
17 /**
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
18 * Represents a waterlevel fetched with the {@link WaterlevelFetcher}.
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
19 *
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
20 * @author Gernot Belger
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
21 */
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
22 public class WaterlevelData {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
23 private final WKms wkms;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
24
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
25 private final String name;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
26
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
27 private final int year;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
28
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
29 /** If <code>true</code>, tabular export will show gauges for every station, else only for the first gauge */
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
30 private final boolean showAllGauges;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
31
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
32 public WaterlevelData(final WKms wkms, final int year) {
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
33 this(wkms, year, false);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
34 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
35
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
36 public WaterlevelData(final WKms wkms, final int year, final boolean showAllGauges) {
8934
cef37cc093f2 wkms name was lost
gernotbelger
parents: 8915
diff changeset
37 this(wkms.getName(), wkms, year, showAllGauges);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
38 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
39
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
40 private WaterlevelData(final String name, final WKms wkms, final int year, final boolean showAllGauges) {
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
41 this.name = name;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
42 this.wkms = wkms;
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
43 this.year = year;
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
44 this.showAllGauges = showAllGauges;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
45 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
46
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
47 public WaterlevelData filterByRange(final double from, final double to) {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
48 if (Double.isNaN(from) || Double.isNaN(to)) {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
49 return this;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
50 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
51
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
52 final WKms filteredWkms = this.wkms.filteredKms(from, to);
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
53 return new WaterlevelData(this.name, filteredWkms, this.year, this.showAllGauges);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
54 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
55
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
56 public WaterlevelData withName(final String nameToSet) {
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
57 return new WaterlevelData(nameToSet, this.wkms, this.year, this.showAllGauges);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
58 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
59
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
60 public String getName() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
61 return this.name;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
62 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
63
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
64 public WKms getWkms() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
65 return this.wkms;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
66 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
67
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
68 public boolean isShowAllGauges() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
69 return this.showAllGauges;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
70 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
71
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
72 public int getYear() {
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
73 return this.year;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
74 }
8964
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
75
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
76 public boolean covers(final DoubleRange simulationRange) {
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
77
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
78 final TDoubleArrayList allKms = this.wkms.allKms();
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
79
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
80 if (allKms.isEmpty())
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
81 return false;
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
82
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
83 final double min = allKms.min();
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
84 if (min > simulationRange.getMaximumDouble())
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
85 return false;
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
86
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
87 final double max = allKms.max();
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
88 if (max < simulationRange.getMinimumDouble())
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
89 return false;
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
90
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
91 return true;
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
92 }
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
93 }

http://dive4elements.wald.intevation.org