annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/WaterlevelFacet.java @ 6152:0587819960c3

Waterlevel differences & bed height differences: Add new model LinearInterpolated intented to unify the two very similiar calculations. The focus of the current implementation is correctness and not speed! The fact that the data sets more mostly sorted by station is not exploited. Doing so would improve performance significantly.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 02 Jun 2013 17:52:53 +0200
parents af13ceeba52a
children 2e0ba1f67900
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: 5445
diff changeset
9 package org.dive4elements.river.artifacts.model;
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5445
diff changeset
11 import org.dive4elements.artifactdatabase.state.Facet;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5445
diff changeset
12 import org.dive4elements.artifacts.Artifact;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5445
diff changeset
13 import org.dive4elements.artifacts.CallContext;
5867
59ff03ff48f1 River artifacts: Renamed FLYSArtifact(Collection) to D4EArtifact(Collection).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
14 import org.dive4elements.river.artifacts.D4EArtifact;
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5445
diff changeset
15 import org.dive4elements.river.artifacts.math.Linear;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5445
diff changeset
16 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5445
diff changeset
17 import org.dive4elements.river.artifacts.model.extreme.ExtremeResult;
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
18
2196
5f3726f31f00 "Bezugslinienverfahren": Added facet classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2125
diff changeset
19 import org.apache.log4j.Logger;
2017
e384d78ff78b Cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1721
diff changeset
20
1721
eb35570df0e8 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1136
diff changeset
21 /**
eb35570df0e8 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1136
diff changeset
22 * Facet of a Waterlevel (WQKms).
eb35570df0e8 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1136
diff changeset
23 */
2122
81312f84689a Refactored to easier enjoy benefits of caching.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2026
diff changeset
24 public class WaterlevelFacet extends DataFacet {
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
26 private static Logger logger = Logger.getLogger(WaterlevelFacet.class);
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
27
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28 public WaterlevelFacet(int index, String name, String description) {
2122
81312f84689a Refactored to easier enjoy benefits of caching.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2026
diff changeset
29 super(index, name, description, ComputeType.ADVANCE, null, null);
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 }
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31
722
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 709
diff changeset
32 public WaterlevelFacet(
742
c09c9e05ecfa Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 722
diff changeset
33 int index,
c09c9e05ecfa Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 722
diff changeset
34 String name,
722
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 709
diff changeset
35 String description,
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 709
diff changeset
36 ComputeType type,
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 709
diff changeset
37 String stateID,
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 709
diff changeset
38 String hash
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 709
diff changeset
39 ) {
2125
7a8f52267a5c Fix stateId/hash assignment in WaterlevelFacet.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2122
diff changeset
40 super(index, name, description, type, hash, stateID);
2122
81312f84689a Refactored to easier enjoy benefits of caching.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2026
diff changeset
41 }
81312f84689a Refactored to easier enjoy benefits of caching.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2026
diff changeset
42
81312f84689a Refactored to easier enjoy benefits of caching.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2026
diff changeset
43 public WaterlevelFacet() {
722
4800230fba8a Improved situtation on rendering "Abflusskurve am Pegel". Not fully working, yet.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 709
diff changeset
44 }
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45
3461
1481322efc02 FixA: Removed instanceof hack to fetch the WQKms of the fix realizations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3455
diff changeset
46 protected WQKms [] getWQKms(CalculationResult res) {
4303
d65cf8e40230 WaterlevelFacet: Deal with ExtremeResult if it is embedded in CalculationResult (instead of WQKms).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4045
diff changeset
47 if (res.getData() instanceof ExtremeResult)
d65cf8e40230 WaterlevelFacet: Deal with ExtremeResult if it is embedded in CalculationResult (instead of WQKms).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4045
diff changeset
48 return ((ExtremeResult) res.getData()).getWQKms();
5444
70e0732bd4dd WaterlevelFacet: Avoid classcastexceptions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4303
diff changeset
49 else if (res.getData() instanceof WQKms[]) {
70e0732bd4dd WaterlevelFacet: Avoid classcastexceptions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4303
diff changeset
50 return (WQKms []) res.getData();
70e0732bd4dd WaterlevelFacet: Avoid classcastexceptions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4303
diff changeset
51 }
70e0732bd4dd WaterlevelFacet: Avoid classcastexceptions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4303
diff changeset
52 else {
70e0732bd4dd WaterlevelFacet: Avoid classcastexceptions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4303
diff changeset
53 logger.error("WaterlevelFacet got wrong data type " + res.getData());
70e0732bd4dd WaterlevelFacet: Avoid classcastexceptions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4303
diff changeset
54 return null;
70e0732bd4dd WaterlevelFacet: Avoid classcastexceptions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4303
diff changeset
55 }
3461
1481322efc02 FixA: Removed instanceof hack to fetch the WQKms of the fix realizations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3455
diff changeset
56 }
1136
8da5f5a9ed3c Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
57
8da5f5a9ed3c Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
58 /**
8da5f5a9ed3c Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
59 * Get waterlevel data.
8da5f5a9ed3c Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
60 * @return a WQKms at given index.
8da5f5a9ed3c Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
61 */
4045
de6e2b933f33 Fix for ArrayIndexOutOfBoundsException (#818).
Christian Lins <christian.lins@intevation.de>
parents: 3597
diff changeset
62 @Override
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
63 public Object getData(Artifact artifact, CallContext context) {
2196
5f3726f31f00 "Bezugslinienverfahren": Added facet classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2125
diff changeset
64
5f3726f31f00 "Bezugslinienverfahren": Added facet classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2125
diff changeset
65 if (logger.isDebugEnabled()) {
5f3726f31f00 "Bezugslinienverfahren": Added facet classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2125
diff changeset
66 logger.debug("Get data for waterlevels at index: " + index +
5f3726f31f00 "Bezugslinienverfahren": Added facet classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2125
diff changeset
67 " /stateId: " + stateId);
5f3726f31f00 "Bezugslinienverfahren": Added facet classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2125
diff changeset
68 }
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
69
4045
de6e2b933f33 Fix for ArrayIndexOutOfBoundsException (#818).
Christian Lins <christian.lins@intevation.de>
parents: 3597
diff changeset
70 if (artifact == null) {
de6e2b933f33 Fix for ArrayIndexOutOfBoundsException (#818).
Christian Lins <christian.lins@intevation.de>
parents: 3597
diff changeset
71 logger.error("WaterlevelFacet.getData: artifact is null");
de6e2b933f33 Fix for ArrayIndexOutOfBoundsException (#818).
Christian Lins <christian.lins@intevation.de>
parents: 3597
diff changeset
72 return null;
de6e2b933f33 Fix for ArrayIndexOutOfBoundsException (#818).
Christian Lins <christian.lins@intevation.de>
parents: 3597
diff changeset
73 }
de6e2b933f33 Fix for ArrayIndexOutOfBoundsException (#818).
Christian Lins <christian.lins@intevation.de>
parents: 3597
diff changeset
74
5867
59ff03ff48f1 River artifacts: Renamed FLYSArtifact(Collection) to D4EArtifact(Collection).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
75 D4EArtifact winfo = (D4EArtifact) artifact;
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
76
709
3b7e9ddf6bb1 New model to transport data and error reports of calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 705
diff changeset
77 CalculationResult res = (CalculationResult)
2122
81312f84689a Refactored to easier enjoy benefits of caching.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2026
diff changeset
78 winfo.compute(context, hash, stateId, type, false);
709
3b7e9ddf6bb1 New model to transport data and error reports of calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 705
diff changeset
79
3455
1de62ac261f7 Let WaterlevelFacet handle FixationArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2196
diff changeset
80 if (res == null) {
1de62ac261f7 Let WaterlevelFacet handle FixationArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2196
diff changeset
81 logger.error("WaterlevelFacet.getData: null result");
1de62ac261f7 Let WaterlevelFacet handle FixationArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2196
diff changeset
82 return null;
1de62ac261f7 Let WaterlevelFacet handle FixationArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2196
diff changeset
83 }
1de62ac261f7 Let WaterlevelFacet handle FixationArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2196
diff changeset
84
3461
1481322efc02 FixA: Removed instanceof hack to fetch the WQKms of the fix realizations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3455
diff changeset
85 WQKms [] wqkms = getWQKms(res);
3597
deeda39ef01b Shortend overlong line. Simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
86 Object KM = context.getContextValue("currentKm");
3596
6aea625190da Handle former W calculations in fixA W/Q out.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 3461
diff changeset
87
5445
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
88 // Interpolation.
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
89 if (KM != null) {
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
90 linearInterpolate(wqkms[index], (Double) KM);
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
91 }
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
92 else {
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
93 logger.debug("Do not interpolate.");
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
94 }
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
95
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
96 return wqkms != null ? wqkms[index] : null;
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
97 }
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
98
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
99
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
100 /**
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
101 * Linear interpolation of WQKms.
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
102 * TODO rewrite.
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
103 * @return [w, q, km]
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
104 */
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
105 public WQKms linearInterpolate(WQKms wqkms, double km) {
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
106 logger.debug("interpolate at given km (" + km + ")");
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
107
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
108 WQKms resultWQKms = new WQKms();
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
109 int size = wqkms.size();
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
110 boolean kmIncreasing = wqkms.getKm(0) < wqkms.getKm(size-1);
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
111 int mod = kmIncreasing ? +1 : -1;
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
112 int idx = 0;
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
113 // Move idx to closest from one direction, check for match.
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
114 if (!kmIncreasing) {
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
115 while (idx < size && wqkms.getKm(idx) < km) {
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
116 if (Math.abs(wqkms.getKm(idx) - km) < 0.01d) {
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
117 resultWQKms.add(wqkms.getW(idx), wqkms.getQ(idx), wqkms.getKm(idx));
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
118 return resultWQKms;
3596
6aea625190da Handle former W calculations in fixA W/Q out.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 3461
diff changeset
119 }
5445
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
120 idx++;
3596
6aea625190da Handle former W calculations in fixA W/Q out.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 3461
diff changeset
121 }
5445
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
122 }
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
123 else {
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
124 idx = size-1;
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
125 while (idx > 0 && wqkms.getKm(idx) > km) {
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
126 if (Math.abs(wqkms.getKm(idx) - km) < 0.01d) {
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
127 resultWQKms.add(wqkms.getW(idx), wqkms.getQ(idx), wqkms.getKm(idx));
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
128 return resultWQKms;
3596
6aea625190da Handle former W calculations in fixA W/Q out.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 3461
diff changeset
129 }
5445
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
130 idx--;
3596
6aea625190da Handle former W calculations in fixA W/Q out.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 3461
diff changeset
131 }
5445
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
132 }
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
133 if (Math.abs(wqkms.getKm(idx) - km) < 0.01d) {
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
134 resultWQKms.add(wqkms.getW(idx), wqkms.getQ(idx), wqkms.getKm(idx));
3596
6aea625190da Handle former W calculations in fixA W/Q out.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 3461
diff changeset
135 return resultWQKms;
6aea625190da Handle former W calculations in fixA W/Q out.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 3461
diff changeset
136 }
3455
1de62ac261f7 Let WaterlevelFacet handle FixationArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2196
diff changeset
137
5445
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
138 if ((idx != -1) && (idx < size) && (idx - mod != -1) && (idx - mod < size)) {
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
139 double inW = Linear.linear(
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
140 km,
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
141 wqkms.getKm(idx), wqkms.getKm(idx - mod),
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
142 wqkms.getW(idx), wqkms.getW(idx - mod));
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
143 double inQ = Linear.linear(
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
144 km,
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
145 wqkms.getKm(idx), wqkms.getKm(idx - mod),
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
146 wqkms.getQ(idx), wqkms.getQ(idx - mod));
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
147 resultWQKms.add(inW, inQ, km);
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
148 }
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
149 else {
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
150 logger.debug("waterlevelfacet stuff " + idx + " size " + size + " mod: " + mod);
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
151 }
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
152
3c7e7d47939f WaterlevelFacet: Slight refactoring (more needed), fix flys/issue1149.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5444
diff changeset
153 return resultWQKms;
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
154 }
1061
b1b0a0b61845 Made facets cloneable with the right type.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 742
diff changeset
155
1136
8da5f5a9ed3c Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
156
8da5f5a9ed3c Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
157 /** Copy deeply. */
8da5f5a9ed3c Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1117
diff changeset
158 @Override
1061
b1b0a0b61845 Made facets cloneable with the right type.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 742
diff changeset
159 public Facet deepCopy() {
b1b0a0b61845 Made facets cloneable with the right type.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 742
diff changeset
160 WaterlevelFacet copy = new WaterlevelFacet();
b1b0a0b61845 Made facets cloneable with the right type.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 742
diff changeset
161 copy.set(this);
b1b0a0b61845 Made facets cloneable with the right type.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 742
diff changeset
162 copy.type = type;
2125
7a8f52267a5c Fix stateId/hash assignment in WaterlevelFacet.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2122
diff changeset
163 copy.hash = hash;
2122
81312f84689a Refactored to easier enjoy benefits of caching.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2026
diff changeset
164 copy.stateId = stateId;
1061
b1b0a0b61845 Made facets cloneable with the right type.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 742
diff changeset
165 return copy;
b1b0a0b61845 Made facets cloneable with the right type.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 742
diff changeset
166 }
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
167 }
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
168 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org