annotate artifacts/src/main/java/org/dive4elements/river/artifacts/states/WaterlevelData.java @ 9425:3f49835a00c3

Extended CrossSectionFacet so it may fetch different data from within the artifact result. Also allows to have acces to the potentially already computed artifact result via its normal computation cache.
author gernotbelger
date Fri, 17 Aug 2018 15:31:02 +0200
parents ba1e2e8f05d1
children
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
9365
ba1e2e8f05d1 sinfo.flowdepth Results.isShowRefGauge==false->spalte ausblenden; result.isShowRefGauge==false&&results.isShowRefGauge==true->result.refGauge=""
gernotbelger
parents: 9362
diff changeset
32 private final boolean showRefGauges;
9362
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
33
9365
ba1e2e8f05d1 sinfo.flowdepth Results.isShowRefGauge==false->spalte ausblenden; result.isShowRefGauge==false&&results.isShowRefGauge==true->result.refGauge=""
gernotbelger
parents: 9362
diff changeset
34 public WaterlevelData(final WKms wkms, final int year, final boolean showAllGauges, final boolean showRefGauges) {
9362
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
35 this(wkms.getName(), wkms, year, showAllGauges, showRefGauges);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
36 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
37
9365
ba1e2e8f05d1 sinfo.flowdepth Results.isShowRefGauge==false->spalte ausblenden; result.isShowRefGauge==false&&results.isShowRefGauge==true->result.refGauge=""
gernotbelger
parents: 9362
diff changeset
38 private WaterlevelData(final String name, final WKms wkms, final int year, final boolean showAllGauges, final boolean showRefGauges) {
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
39 this.name = name;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
40 this.wkms = wkms;
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
41 this.year = year;
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
42 this.showAllGauges = showAllGauges;
9362
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
43 this.showRefGauges = showRefGauges;
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
44 }
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 public WaterlevelData filterByRange(final double from, final double to) {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
47 if (Double.isNaN(from) || Double.isNaN(to)) {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
48 return this;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
49 }
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 final WKms filteredWkms = this.wkms.filteredKms(from, to);
9365
ba1e2e8f05d1 sinfo.flowdepth Results.isShowRefGauge==false->spalte ausblenden; result.isShowRefGauge==false&&results.isShowRefGauge==true->result.refGauge=""
gernotbelger
parents: 9362
diff changeset
52 return new WaterlevelData(this.name, filteredWkms, this.year, this.showAllGauges, this.showRefGauges);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
53 }
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 public WaterlevelData withName(final String nameToSet) {
9365
ba1e2e8f05d1 sinfo.flowdepth Results.isShowRefGauge==false->spalte ausblenden; result.isShowRefGauge==false&&results.isShowRefGauge==true->result.refGauge=""
gernotbelger
parents: 9362
diff changeset
56 return new WaterlevelData(nameToSet, this.wkms, this.year, this.showAllGauges, this.showRefGauges);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
57 }
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 public String getName() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
60 return this.name;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
61 }
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 public WKms getWkms() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
64 return this.wkms;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
65 }
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 public boolean isShowAllGauges() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
68 return this.showAllGauges;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
69 }
9365
ba1e2e8f05d1 sinfo.flowdepth Results.isShowRefGauge==false->spalte ausblenden; result.isShowRefGauge==false&&results.isShowRefGauge==true->result.refGauge=""
gernotbelger
parents: 9362
diff changeset
70
9362
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
71 public boolean isShowRefGauges() {
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
72 return this.showRefGauges;
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
73 }
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
74
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
75 public int getYear() {
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
76 return this.year;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
77 }
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
78
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 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
80
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 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
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 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
84 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
85
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 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
87 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
88 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
89
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 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
91 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
92 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
93
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
94 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
95 }
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
96 }

http://dive4elements.wald.intevation.org