Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/extreme/ExtremeCalculation.java @ 5994:af13ceeba52a
Removed trailing whitespace.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Sun, 12 May 2013 18:13:50 +0200 |
parents | 4897a58c8746 |
children | a56fe3bc6700 |
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:
5863
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:
5863
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:
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 : |