annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/extreme/ExtremeCalculation.java @ 5863:4897a58c8746

River artifacts: Added new copyright headers.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 28 Apr 2013 14:40:59 +0200
parents 5aa05a7a34b7
children af13ceeba52a
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 *
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
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
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
6 * documentation coming with Dive4Elements River for details.
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: 4433
diff changeset
9 package org.dive4elements.river.artifacts.model.extreme;
3775
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
11 import org.apache.commons.logging.Log;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
12 import org.apache.commons.logging.LogFactory;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
13
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
14 import org.apache.commons.math.MathException;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
15
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
16 import org.apache.commons.math.optimization.fitting.CurveFitter;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
17
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
18 import org.apache.commons.math.optimization.general.LevenbergMarquardtOptimizer;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
19
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
20 import org.dive4elements.river.artifacts.access.ExtremeAccess;
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
21
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
22 import org.dive4elements.river.artifacts.math.Linear;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
23 //import org.dive4elements.river.artifacts.math.Utils;
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
24
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
25 import org.dive4elements.river.artifacts.math.fitting.Function;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
26 import org.dive4elements.river.artifacts.math.fitting.FunctionFactory;
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
27
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
28 import org.dive4elements.river.artifacts.model.Calculation;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
29 import org.dive4elements.river.artifacts.model.CalculationResult;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
30 import org.dive4elements.river.artifacts.model.RangeWithValues;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
31 import org.dive4elements.river.artifacts.model.RiverFactory;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
32 import org.dive4elements.river.artifacts.model.WQKms;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
33 import org.dive4elements.river.artifacts.model.WstValueTable;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
34 import org.dive4elements.river.artifacts.model.WstValueTableFactory;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
35
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
36 import org.dive4elements.river.model.River;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
37
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
38 import org.dive4elements.river.utils.DoubleUtil;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4433
diff changeset
39 import org.dive4elements.river.utils.KMIndex;
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
40
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
41 import gnu.trove.TDoubleArrayList;
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
42
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
43 import java.util.List;
3775
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
45 import java.awt.geom.Line2D;
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
46
4040
363445873737 Documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 3785
diff changeset
47 /** Calculate extrapolated W. */
3775
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 public class ExtremeCalculation
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 extends Calculation
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 {
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
51 private static final Log log =
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
52 LogFactory.getLog(ExtremeCalculation.class);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
53
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
54 protected String river;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
55 protected String function;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
56 protected double from;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
57 protected double to;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
58 protected double step;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
59 protected double percent;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
60 protected List<RangeWithValues> ranges;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
61
3775
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 public ExtremeCalculation() {
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 }
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 public ExtremeCalculation(ExtremeAccess access) {
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
66 String river = access.getRiver();
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
67 String function = access.getFunction();
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
68 Double from = access.getFrom();
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
69 Double to = access.getTo();
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
70 Double step = access.getStep();
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
71 Double percent = access.getPercent();
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
72 List<RangeWithValues> ranges = access.getRanges();
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
73
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
74 if (river == null) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
75 // TODO: i18n
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
76 addProblem("extreme.no.river");
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
77 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
78
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
79 if (function == null) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
80 // TODO: i18n
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
81 addProblem("extreme.no.function");
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
82 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
83
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
84 if (from == null) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
85 // TODO: i18n
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
86 addProblem("extreme.no.from");
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
87 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
88
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
89 if (to == null) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
90 // TODO: i18n
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
91 addProblem("extreme.no.to");
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
92 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
93
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
94 if (step == null) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
95 // TODO: i18n
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
96 addProblem("extreme.no.step");
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
97 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
98
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
99 if (percent == null) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
100 // TODO: i18n
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
101 addProblem("extreme.no.percent");
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
102 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
103
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
104 if (ranges == null) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
105 // TODO: i18n
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
106 addProblem("extreme.no.ranges");
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
107 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
108
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
109 if (!hasProblems()) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
110 this.river = river;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
111 this.function = function;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
112 this.from = Math.min(from, to);
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
113 this.to = Math.max(from, to);
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
114 this.step = Math.max(0.001d, Math.abs(step)/1000d);
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
115 this.percent = Math.max(0d, Math.min(100d, percent));
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
116 this.ranges = ranges;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
117 }
3775
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118 }
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119
4059
c63f0b4ac1b4 Documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4040
diff changeset
120
c63f0b4ac1b4 Documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4040
diff changeset
121 /** Calculate an extreme curve (extrapolate). */
3775
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
122 public CalculationResult calculate() {
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
123
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
124 WstValueTable wst = null;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
125
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
126 River river = RiverFactory.getRiver(this.river);
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
127 if (river == null) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
128 // TODO: i18n
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
129 addProblem("extreme.no.such.river", this.river);
3775
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130 }
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
131 else {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
132 wst = WstValueTableFactory.getTable(river);
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
133 if (wst == null) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
134 // TODO: i18n
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
135 addProblem("extreme.no.wst.table");
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
136 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
137 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
138
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
139 Function function =
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
140 FunctionFactory.getInstance().getFunction(this.function);
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
141 if (function == null) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
142 // TODO: i18n
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
143 addProblem("extreme.no.such.function", this.function);
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
144 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
145
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
146 return hasProblems()
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
147 ? new CalculationResult(this)
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
148 : innerCalculate(wst, function);
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
149 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
150
4416
73200f5462fa ExtremeCalculation: Doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4385
diff changeset
151
73200f5462fa ExtremeCalculation: Doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4385
diff changeset
152 /** Name of wqkms like W(5000,6000) */
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
153 protected String wqkmsName(int i) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
154 StringBuilder sb = new StringBuilder("W(");
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
155 boolean already = false;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
156 for (RangeWithValues r: ranges) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
157 double [] values = r.getValues();
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
158 if (i < values.length) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
159 if (already) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
160 sb.append(", ");
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
161 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
162 else {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
163 already = true;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
164 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
165 // TODO: i18n
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
166 sb.append(values[i]);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
167 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
168 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
169 return sb.append(')').toString();
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
170 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
171
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
172 protected WQKms [] allocWQKms() {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
173 int max = 0;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
174 for (RangeWithValues r: ranges) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
175 double [] values = r.getValues();
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
176 if (values.length > max) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
177 max = values.length;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
178 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
179 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
180 WQKms [] wqkms = new WQKms[max];
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
181 for (int i = 0; i < max; ++i) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
182 wqkms[i] = new WQKms(wqkmsName(i));
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
183 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
184 return wqkms;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
185 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
186
4059
c63f0b4ac1b4 Documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4040
diff changeset
187
c63f0b4ac1b4 Documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4040
diff changeset
188 /** Calculate an extreme curve (extrapolate). */
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
189 protected CalculationResult innerCalculate(
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
190 WstValueTable wst,
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
191 Function function
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
192 ) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
193 RangeWithValues range = null;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
194
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
195 double [] chiSqr = { 0d };
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
196
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
197 KMIndex<Curve> curves = new KMIndex<Curve>();
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
198 WQKms [] wqkms = allocWQKms();
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
199
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
200 boolean debug = log.isDebugEnabled();
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
201
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
202 from = DoubleUtil.round(from);
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
203 to = DoubleUtil.round(to);
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
204
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
205 for (double km = from; km <= to; km = DoubleUtil.round(km+step)) {
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
206
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
207 if (debug) {
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
208 log.debug("km: " + km);
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
209 }
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
210
4417
d09dbff54e38 ExtremeCalculation: Resolve probably too nested break.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4416
diff changeset
211 boolean foundRange = false;
d09dbff54e38 ExtremeCalculation: Resolve probably too nested break.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4416
diff changeset
212
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
213 if (range == null || !range.inside(km)) {
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
214 for (RangeWithValues r: ranges) {
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
215 if (r.inside(km)) {
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
216 range = r;
4417
d09dbff54e38 ExtremeCalculation: Resolve probably too nested break.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4416
diff changeset
217 foundRange = true;
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
218 break;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
219 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
220 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
221 // TODO: i18n
4417
d09dbff54e38 ExtremeCalculation: Resolve probably too nested break.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4416
diff changeset
222 if (!foundRange) {
d09dbff54e38 ExtremeCalculation: Resolve probably too nested break.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4416
diff changeset
223 addProblem(km, "extreme.no.range.inner");
d09dbff54e38 ExtremeCalculation: Resolve probably too nested break.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4416
diff changeset
224 continue;
d09dbff54e38 ExtremeCalculation: Resolve probably too nested break.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4416
diff changeset
225 }
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
226 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
227
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
228 double [][] wqs = wst.interpolateTabulated(km);
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
229 if (wqs == null) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
230 // TODO: i18n
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
231 addProblem(km, "extreme.no.raw.data");
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
232 continue;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
233 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
234
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
235 // XXX: This should not be necessary for model data.
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
236 if (!DoubleUtil.isValid(wqs)) {
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
237 // TODO: i18n
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
238 addProblem(km, "extreme.invalid.data");
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
239 continue;
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
240 }
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
241
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
242 double [][] fitWQs = extractPointsToFit(wqs);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
243 if (fitWQs == null) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
244 // TODO: i18n
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
245 addProblem(km, "extreme.too.less.points");
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
246 continue;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
247 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
248
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
249 double [] coeffs = doFitting(function, fitWQs, chiSqr);
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
250 if (coeffs == null) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
251 // TODO: i18n
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
252 addProblem(km, "extreme.fitting.failed");
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
253 continue;
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
254 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
255
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
256 Curve curve = new Curve(
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
257 wqs[1], wqs[0],
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
258 function.getName(),
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
259 coeffs,
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
260 chiSqr[0]);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
261
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
262 curves.add(km, curve);
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
263
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
264 double [] values = range.getValues();
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
265
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
266 int V = Math.min(values.length, wqkms.length);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
267 for (int i = 0; i < V; ++i) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
268 double q = values[i];
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
269 double w = curve.value(q);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
270 if (Double.isNaN(w)) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
271 // TODO: i18n
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
272 addProblem(km, "extreme.evaluate.failed", values[i]);
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
273 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
274 else {
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
275 wqkms[i].add(w, q, km);
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
276 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
277 }
3785
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
278 }
a5f65e8983be Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3775
diff changeset
279
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
280 ExtremeResult result = new ExtremeResult(curves, wqkms);
3775
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
281 return new CalculationResult(result, this);
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
282 }
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
283
4355
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
284 protected double [] doFitting(
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
285 Function function,
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
286 double [][] wqs,
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
287 double [] chiSqr
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
288 ) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
289 LevenbergMarquardtOptimizer lmo = null;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
290
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
291 double [] coeffs = null;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
292
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
293 double [] ws = wqs[0];
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
294 double [] qs = wqs[1];
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
295
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
296 for (double tolerance = 1e-10; tolerance < 1e-3; tolerance *= 10d) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
297 lmo = new LevenbergMarquardtOptimizer();
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
298 lmo.setCostRelativeTolerance(tolerance);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
299 lmo.setOrthoTolerance(tolerance);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
300 lmo.setParRelativeTolerance(tolerance);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
301
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
302 CurveFitter cf = new CurveFitter(lmo);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
303
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
304 for (int i = 0; i < ws.length; ++i) {
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
305 cf.addObservedPoint(qs[i], ws[i]);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
306 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
307
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
308 try {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
309 coeffs = cf.fit(function, function.getInitialGuess());
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
310 break;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
311 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
312 catch (MathException me) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
313 if (log.isDebugEnabled()) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
314 log.debug("tolerance " + tolerance + " + failed.");
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
315 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
316 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
317 }
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
318 if (coeffs != null) {
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
319 chiSqr[0] = lmo.getChiSquare();
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
320 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
321 return coeffs;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
322 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
323
4355
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
324 protected double [][] extractPointsToFit(double [][] wqs) {
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
325
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
326 double [] ws = wqs[0];
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
327 double [] qs = wqs[1];
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
328
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
329 int N = Math.min(ws.length, qs.length);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
330
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
331 if (N < 2) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
332 log.warn("Too less points for fitting");
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
333 return null;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
334 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
335
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
336 double q2 = qs[N-1];
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
337 double w2 = ws[N-1];
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
338 double q1 = qs[N-2];
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
339 double w1 = ws[N-2];
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
340
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
341 boolean ascending = w2 > w1;
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
342
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
343 TDoubleArrayList ows = new TDoubleArrayList();
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
344 TDoubleArrayList oqs = new TDoubleArrayList();
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
345
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
346 oqs.add(q2); oqs.add(q1);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
347 ows.add(w2); ows.add(w1);
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
348
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
349 int lastDir = -2;
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
350
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
351 for (int i = N-3; i >= 0; --i) {
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
352 double q = qs[i];
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
353 double w = ws[i];
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
354
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
355 if ((ascending && w > w1) || (!ascending && w < w1)) {
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
356 break;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
357 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
358
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
359 int dir = Line2D.relativeCCW(q2, w2, q1, w1, q, w);
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
360 //int dir = Utils.relativeCCW(q2, w2, q1, w1, q, w);
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
361 if (lastDir == -2) {
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
362 lastDir = dir;
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
363 }
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
364 else if (lastDir != dir) {
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
365 break;
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
366 }
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
367
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
368 oqs.add(q);
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
369 ows.add(w);
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
370 w2 = w1;
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
371 q2 = q1;
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
372 w1 = w;
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
373 q1 = q;
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
374 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
375
4355
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
376 oqs.reverse();
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
377 ows.reverse();
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
378
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
379 boolean debug = log.isDebugEnabled();
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
380 if (debug) {
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
381 log.debug("from table: " + N);
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
382 log.debug("after trim: " + oqs.size());
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
383 }
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
384
4355
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
385 cutPercent(ows, oqs);
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
386
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
387 if (debug) {
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
388 log.debug("after percent cut: " + oqs.size());
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
389 }
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
390
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
391 return new double [][] {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
392 ows.toNativeArray(),
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
393 oqs.toNativeArray()
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
394 };
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4059
diff changeset
395 }
4355
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
396
4385
10e277c2fe0f Some fixes to make the calculation work.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4355
diff changeset
397
4355
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
398 protected void cutPercent(TDoubleArrayList ws, TDoubleArrayList qs) {
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
399 int N = qs.size();
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
400 if (percent <= 0d || N == 0) {
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
401 return;
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
402 }
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
403
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
404 double minQ = qs.getQuick(0);
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
405 double maxQ = qs.getQuick(N-1);
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
406 double factor = Math.min(Math.max(0d, percent/100d), 1d);
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
407 double cutQ = Linear.weight(factor, minQ, maxQ);
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
408 int cutIndex = 0;
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
409 for (; cutIndex < N; ++cutIndex) {
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
410 double q = qs.getQuick(cutIndex);
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
411 if (minQ < maxQ) {
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
412 if (q > cutQ) {
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
413 break;
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
414 }
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
415 }
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
416 else {
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
417 if (q < cutQ) {
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
418 break;
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
419 }
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
420 }
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
421 }
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
422 ws.remove(0, cutIndex);
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
423 qs.remove(0, cutIndex);
d095b4267772 Added missing percentage cut off in extreme calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4294
diff changeset
424 }
3775
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
425 }
d52c4ca93ffb More infrastructure stuff for the "Auslagerung extremer Wasserspiegellagen".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
426 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org