annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFacet.java @ 6679:0c593745bcd6

Added @Override annotation.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Mon, 29 Jul 2013 09:22:39 +0200
parents c74261e05a62
children 274948f91dd6
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: 5867
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: 5867
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: 5778
diff changeset
9 package org.dive4elements.river.artifacts.model.minfo;
5778
4a1bd43e7aa6 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5744
diff changeset
10
6382
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
11 import gnu.trove.TDoubleArrayList;
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
12
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
13 import org.dive4elements.artifactdatabase.state.Facet;
5778
4a1bd43e7aa6 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5744
diff changeset
14
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
15 import org.dive4elements.artifacts.Artifact;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
16 import org.dive4elements.artifacts.CallContext;
5778
4a1bd43e7aa6 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5744
diff changeset
17
5867
59ff03ff48f1 River artifacts: Renamed FLYSArtifact(Collection) to D4EArtifact(Collection).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5865
diff changeset
18 import org.dive4elements.river.artifacts.D4EArtifact;
5778
4a1bd43e7aa6 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5744
diff changeset
19
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
20 import org.dive4elements.river.artifacts.model.CalculationResult;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
21 import org.dive4elements.river.artifacts.model.DataFacet;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
22 import org.dive4elements.river.artifacts.model.FacetTypes;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
23
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
24 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
25
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
26 import org.dive4elements.river.model.MeasurementStation;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
27
5865
73da40528cf2 River artifacts: Renamed FLYSUtils to RiverUtils.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
28 import org.dive4elements.river.utils.RiverUtils;
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
30 import java.util.ArrayList;
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
31 import java.util.Collections;
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
32 import java.util.List;
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
33 import java.util.Map;
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
34 import java.util.TreeMap;
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
35
5778
4a1bd43e7aa6 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5744
diff changeset
36 import org.apache.log4j.Logger;
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
37
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38
5647
ddb2a4e982b8 Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5645
diff changeset
39 /** Facet to access various sediment loads. */
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 public class SedimentLoadFacet
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41 extends DataFacet
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42 {
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
43 /** Very own logger. */
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44 private static Logger logger = Logger.getLogger(SedimentLoadFacet.class);
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45
5647
ddb2a4e982b8 Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5645
diff changeset
46 /** Used as tolerance value when fetching measurement stations. */
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
47 private static double EPSILON = 1e-5;
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
48
5647
ddb2a4e982b8 Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5645
diff changeset
49
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 public SedimentLoadFacet() {
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 }
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 public SedimentLoadFacet(int idx, String name, String description,
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 ComputeType type, String stateId, String hash) {
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 super(idx, name, description, type, hash, stateId);
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 }
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57
6679
0c593745bcd6 Added @Override annotation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6412
diff changeset
58 @Override
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 public Object getData(Artifact artifact, CallContext context) {
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60 logger.debug("Get data for sediment load at index: " + index);
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61
5867
59ff03ff48f1 River artifacts: Renamed FLYSArtifact(Collection) to D4EArtifact(Collection).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5865
diff changeset
62 D4EArtifact flys = (D4EArtifact) artifact;
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
63
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
64 CalculationResult res = (CalculationResult) flys.compute(context, hash,
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
65 stateId, type, false);
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
66
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
67 Object[] data =
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
68 (SedimentLoadResult[]) res.getData(); // TODO CAST TO SPECIFIC CLASS
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
69
5865
73da40528cf2 River artifacts: Renamed FLYSUtils to RiverUtils.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
70 List<MeasurementStation> allStations = RiverUtils.getRiver(flys).getMeasurementStations();
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
71 SedimentLoadResult result = data != null && data.length > index ? (SedimentLoadResult)data[index] : null;
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
72 if (result == null) {
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
73 return null;
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
74 }
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
75
6382
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
76 // These complicated calculations were necessary because
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
77 // SedimentLoad/Fraction did not contain the ranges of the given
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
78 // values. Since this changed, the code is somewhat obsolete, but stable.
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
79 // For an example of easier calculation, see the "total" part below.
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
80
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
81 List<Double> sortedStarts = new ArrayList<Double>();
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
82 // Filter stations according to type.
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
83 List<MeasurementStation> stations = new ArrayList<MeasurementStation>();
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
84 for (MeasurementStation station: allStations) {
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
85 if (station.getRange() == null || station.getMeasurementType() == null) {
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
86 continue;
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
87 }
6412
c74261e05a62 issue1235: revert some changes, use correct Schwebstoff/Geschiebe-measurement-stations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6382
diff changeset
88 if (this.getName().contains("susp_sediment")
c74261e05a62 issue1235: revert some changes, use correct Schwebstoff/Geschiebe-measurement-stations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6382
diff changeset
89 && station.getMeasurementType().equals("Schwebstoff")) {
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
90 stations.add(station);
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
91 sortedStarts.add(station.getStation());
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
92 }
6412
c74261e05a62 issue1235: revert some changes, use correct Schwebstoff/Geschiebe-measurement-stations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6382
diff changeset
93 else if (!this.getName().contains("susp_sediment")
c74261e05a62 issue1235: revert some changes, use correct Schwebstoff/Geschiebe-measurement-stations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6382
diff changeset
94 && station.getMeasurementType().equals("Geschiebe")) {
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
95 stations.add(station);
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
96 sortedStarts.add(station.getStation());
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
97 }
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
98 }
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
99 Collections.sort(sortedStarts);
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
100
6382
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
101 // Handle sediment load differently, as it respects already
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
102 // the ranges that were added to SedimentLoad/Fraction.
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
103 if (getName().equals(FacetTypes.SEDIMENT_LOAD_TOTAL)) {
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
104 SedimentLoad load = result.getLoad();
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
105 TDoubleArrayList xPos = new TDoubleArrayList();
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
106 TDoubleArrayList yPos = new TDoubleArrayList();
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
107 double lastX = -1d;
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
108 for (double km: load.getKms()) {
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
109 SedimentLoadFraction fraction = load.getFraction(km);
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
110 if (fraction.getTotal() != 0) {
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
111 if (Math.abs(lastX-km) >= EPSILON) {
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
112 xPos.add(Double.NaN);
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
113 yPos.add(Double.NaN);
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
114 }
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
115 xPos.add(km);
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
116 yPos.add(fraction.getTotal());
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
117 xPos.add(fraction.getTotalRange().getEnd());
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
118 yPos.add(fraction.getTotal());
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
119 lastX = fraction.getTotalRange().getEnd();
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
120 }
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
121 }
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
122 return new double[][] {xPos.toNativeArray(), yPos.toNativeArray()};
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
123 }
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
124
43ef4943e0c2 SedimentLoadFacet: Now that we have total load values with correct ranges in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6343
diff changeset
125 // Access data according to type (except total - see above).
5648
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
126 double[][] sd = getLoadData(result);
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
127
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
128 // Sort by km.
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
129 TreeMap<Double, Double> sortedKmLoad = new TreeMap<Double,Double>();
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
130
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
131 double[] km = sd[0];
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
132 double[] load = sd[1];
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
133
6342
b8cd8e2d0c35 SedimentLoadFacet, issue1235: Ignore values not measured at measurement stations
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6341
diff changeset
134 // Build map of km->load, but directly exclude the ones which do
b8cd8e2d0c35 SedimentLoadFacet, issue1235: Ignore values not measured at measurement stations
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6341
diff changeset
135 // not match against a measurements station ranges start.
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
136 for (int i = 0 ; i < km.length; i++) {
6342
b8cd8e2d0c35 SedimentLoadFacet, issue1235: Ignore values not measured at measurement stations
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6341
diff changeset
137 for (MeasurementStation station: stations) {
b8cd8e2d0c35 SedimentLoadFacet, issue1235: Ignore values not measured at measurement stations
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6341
diff changeset
138 if (Math.abs(station.getStation() - km[i]) <= EPSILON) {
b8cd8e2d0c35 SedimentLoadFacet, issue1235: Ignore values not measured at measurement stations
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6341
diff changeset
139 sortedKmLoad.put(km[i], load[i]);
b8cd8e2d0c35 SedimentLoadFacet, issue1235: Ignore values not measured at measurement stations
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6341
diff changeset
140 continue;
b8cd8e2d0c35 SedimentLoadFacet, issue1235: Ignore values not measured at measurement stations
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6341
diff changeset
141 }
b8cd8e2d0c35 SedimentLoadFacet, issue1235: Ignore values not measured at measurement stations
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6341
diff changeset
142 }
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
143 }
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
144
6341
3ec08ff0f497 Comment.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6340
diff changeset
145 // [0] -> x, [1] -> y
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
146 double[][] values = new double[2][];
6342
b8cd8e2d0c35 SedimentLoadFacet, issue1235: Ignore values not measured at measurement stations
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6341
diff changeset
147 values[0] = new double[sortedKmLoad.size()*3];
b8cd8e2d0c35 SedimentLoadFacet, issue1235: Ignore values not measured at measurement stations
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6341
diff changeset
148 values[1] = new double[sortedKmLoad.size()*3];
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
149
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
150 // Find station via its station (km).
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
151 // TODO use a binarySearch instead of linear absdiff approach
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
152 int i = 0;
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
153 for (Map.Entry<Double, Double> kmLoad: sortedKmLoad.entrySet()) {
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
154 boolean matchFound = false;
6343
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
155 for (int k = 0; k < stations.size(); k++) {
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
156 MeasurementStation station = stations.get(k);
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
157 if (Math.abs(station.getStation() - kmLoad.getKey()) < EPSILON) {
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
158 // Value has been taken at measurement station.
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
159 values[0][i*3] = station.getRange().getA().doubleValue() + EPSILON;
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
160 values[1][i*3] = kmLoad.getValue();
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
161 double endValue = 0d;
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
162 // Valid until next measurements stations begin of range,
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
163 // or end of current range if last value.
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
164 if (k+2 <= stations.size()) {
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
165 endValue = stations.get(k+1).getRange().getA().doubleValue();
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
166 }
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
167 else {
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
168 endValue = station.getRange().getB().doubleValue();
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
169 }
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
170 values[0][i*3+1] = endValue;
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
171 values[1][i*3+1] = kmLoad.getValue();
6343
588e99129883 issue1235: Values are valid until next measurements station range start.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6342
diff changeset
172 values[0][i*3+2] = endValue;
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
173 values[1][i*3+2] = kmLoad.getValue();
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
174 matchFound = true;
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
175 }
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
176 }
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
177 // Store points without match for later assessment.
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
178 if (!matchFound) {
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
179 logger.warn("measurement without station ("+kmLoad.getKey()+")!");
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
180 }
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
181 i++;
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
182 }
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
183
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
184 for (int x = 0; x < values[0].length-1; x++) {
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
185 // Introduce gaps where no data in measurement station.
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
186 if (Math.abs(values[0][x+1] - values[0][x]) > 3*EPSILON
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
187 && values[1][x+1] != values[1][x]) {
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
188 values[0][x] = Double.NaN;
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
189 values[1][x] = Double.NaN;
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
190 }
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
191 }
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
192
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
193 return values;
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
194 }
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
195
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
196
5648
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
197 /** Get data according to type of facet. */
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
198 private double[][] getLoadData(SedimentLoadResult result) {
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
199 if (getName().equals(FacetTypes.SEDIMENT_LOAD_SAND))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
200 return result.getSandData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
201 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_COARSE))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
202 return result.getCoarseData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
203 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_FINEMIDDLE))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
204 return result.getFineMiddleData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
205 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_SUSP_SAND))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
206 return result.getSuspSandData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
207 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_SUSP_SAND_BED))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
208 return result.getSuspSandBedData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
209 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_SUSP_SEDIMENT))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
210 return result.getSuspSedimentData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
211 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_TOTAL_LOAD))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
212 return result.getTotalLoadData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
213 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_TOTAL))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
214 return result.getTotalData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
215 else {
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
216 logger.error("SedimentLoadFacet " + getName() + " cannot determine data type.");
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
217 return null;
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
218 }
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
219 }
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
220
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
221 /** Copy deeply. */
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
222 @Override
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
223 public Facet deepCopy() {
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
224 SedimentLoadFacet copy = new SedimentLoadFacet();
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
225 copy.set(this);
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
226 copy.type = type;
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
227 copy.hash = hash;
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
228 copy.stateId = stateId;
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
229 return copy;
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
230 }
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
231 }
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
232 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org