Mercurial > dive4elements > river
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 : |