annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/Calculation4.java @ 9479:2b83d3a96703

i18n TODO "benutzerdefiniert" = "custom" fixed
author gernotbelger
date Mon, 10 Sep 2018 15:31:55 +0200
parents 5e38e2924c07
children 33ce8eba9806
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: 5869
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: 5869
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: 5138
diff changeset
9 package org.dive4elements.river.artifacts.model;
4821
bcf25d8c183e Moved NaN removal code from W to DoubleUtil. Create QKms when calculating the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4812
diff changeset
10
4798
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
11 import java.util.ArrayList;
3441
bfbd478bd607 FixA: Moved Q -> W conversion code into segments to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3439
diff changeset
12 import java.util.Arrays;
bfbd478bd607 FixA: Moved Q -> W conversion code into segments to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3439
diff changeset
13 import java.util.List;
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 import org.apache.log4j.Logger;
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
16 import org.dive4elements.artifacts.CallMeta;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
17 import org.dive4elements.river.artifacts.access.Calculation4Access;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
18 import org.dive4elements.river.artifacts.math.BackJumpCorrector;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
19 import org.dive4elements.river.artifacts.math.Function;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
20 import org.dive4elements.river.artifacts.math.Identity;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
21 import org.dive4elements.river.artifacts.math.Linear;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
22 import org.dive4elements.river.artifacts.model.WstValueTable.QPosition;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
23 import org.dive4elements.river.artifacts.resources.Resources;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
24 import org.dive4elements.river.model.River;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
25 import org.dive4elements.river.utils.DoubleUtil;
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
27 public class Calculation4 extends Calculation {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7261
diff changeset
28 private static Logger log = Logger.getLogger(Calculation4.class);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 public static final double MINIMAL_STEP_WIDTH = 1e-5;
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 protected List<Segment> segments;
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33
4812
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
34 protected boolean isQ;
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
35 protected double from;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
36 protected double to;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
37 protected double step;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
38 protected String river;
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 public Calculation4() {
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
43 public Calculation4(final Calculation4Access access) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7261
diff changeset
44 log.debug("Calculation4Access.cnst");
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
45 final String river = access.getRiverName();
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
46 final List<Segment> segments = access.getSegments();
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
47 final double[] range = access.getFromToStep();
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
48 final boolean isQ = access.isQ();
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49
4812
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
50 if (river == null) {
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
51 addProblem("no.river.selected");
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
52 }
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53
4812
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
54 if (range == null) {
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
55 addProblem("no.range.found");
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
56 }
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
57
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
58 if (segments == null || segments.isEmpty()) {
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
59 addProblem("cannot.create.segments");
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
60 }
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
61
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
62 if (!hasProblems()) {
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
63 this.river = river;
4812
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
64 this.segments = segments;
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
65 this.from = range[0];
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
66 this.to = range[1];
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
67 this.step = range[2];
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
68 this.isQ = isQ;
4812
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
69 }
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
72 public CalculationResult calculate(final CallMeta meta) {
4812
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
73 if (hasProblems()) {
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
74 return new CalculationResult(new WQKms[0], this);
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
75 }
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
76
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
77 WstValueTable table = null;
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
78 final River r = RiverFactory.getRiver(this.river);
4812
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
79 if (r == null) {
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
80 addProblem("no.river.found");
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
81 } else {
4812
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
82 table = WstValueTableFactory.getTable(r);
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
83 if (table == null) {
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
84 addProblem("no.wst.for.river");
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
85 } else {
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
86 Segment.setReferencePointConvertQ(this.segments, r, this.isQ, this);
4812
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
87 }
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
88 }
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
89
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
90 return hasProblems() ? new CalculationResult(new WQKms[0], this) : innerCalculate(table, meta);
4812
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
91 }
65bfb6faa538 Bring Access pattern to "W fuer ungleichwertige Abflusslaengsschnitte".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4799
diff changeset
92
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
93 protected CalculationResult innerCalculate(final WstValueTable table, final CallMeta meta) {
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
94 final boolean debug = log.isDebugEnabled();
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96 if (debug) {
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
97 log.debug("calculate from " + this.from + " to " + this.to + " step " + this.step);
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
98 log.debug("# segments: " + this.segments.size());
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
99 for (final Segment segment : this.segments) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7261
diff changeset
100 log.debug(" " + segment);
686
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 656
diff changeset
101 }
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
104 final int numResults = this.segments.get(0).values.length;
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
106 if (numResults < 1) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7261
diff changeset
107 log.debug("no values given");
2166
2898b1ff6013 I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 742
diff changeset
108 addProblem("no.values.given");
709
3b7e9ddf6bb1 New model to transport data and error reports of calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 704
diff changeset
109 return new CalculationResult(new WQKms[0], this);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
111
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
112 final WQKms[] results = new WQKms[numResults];
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
113 for (int i = 0; i < results.length; ++i) {
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
114 results[i] = new WQKms();
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
115 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
116
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
117 if (Math.abs(this.step) < MINIMAL_STEP_WIDTH) {
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
118 this.step = MINIMAL_STEP_WIDTH;
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
120
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
121 if (this.from > this.to) {
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
122 this.step = -this.step;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
123 }
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
125 final QPosition[] qPositions = new QPosition[numResults];
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
126
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
127 final Function[] functions = new Function[numResults];
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
128
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
129 final double[] out = new double[2];
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
130
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
131 final Segment sentinel = new Segment(Double.MAX_VALUE);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
132 Segment s1 = sentinel, s2 = sentinel;
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
133
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
134 for (double pos = this.from; this.from < this.to ? pos <= this.to : pos >= this.to; pos = DoubleUtil.round(pos + this.step)) {
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135 if (pos < s1.referencePoint || pos > s2.referencePoint) {
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
136 if (debug) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7261
diff changeset
137 log.debug("need to find new interval for " + pos);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139 // find new interval
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
140 if (pos <= this.segments.get(0).referencePoint) {
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141 // before first segment -> "gleichwertig"
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 if (debug) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7261
diff changeset
143 log.debug("before first segment -> gleichwertig");
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144 }
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
145 final Segment first = this.segments.get(0);
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
146 final double[] values = first.values;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
147 final double refPos = first.referencePoint;
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148 for (int i = 0; i < qPositions.length; ++i) {
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
149 qPositions[i] = table.getQPosition(refPos, values[i]);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
150 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
151 sentinel.setReferencePoint(-Double.MAX_VALUE);
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
152 s1 = sentinel;
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
153 s2 = this.segments.get(0);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
154 Arrays.fill(functions, Identity.IDENTITY);
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
155 } else if (pos >= this.segments.get(this.segments.size() - 1).referencePoint) {
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
156 // after last segment -> "gleichwertig"
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
157 if (debug) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7261
diff changeset
158 log.debug("after last segment -> gleichwertig");
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
159 }
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
160 final Segment last = this.segments.get(this.segments.size() - 1);
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
161 final double[] values = last.values;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
162 final double refPos = last.referencePoint;
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
163 for (int i = 0; i < qPositions.length; ++i) {
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
164 qPositions[i] = table.getQPosition(refPos, values[i]);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
165 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
166 sentinel.setReferencePoint(Double.MAX_VALUE);
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
167 s1 = last;
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
168 s2 = sentinel;
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
169 Arrays.fill(functions, Identity.IDENTITY);
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
170 } else { // "ungleichwertig"
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
171 // find matching interval
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
172 if (debug) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7261
diff changeset
173 log.debug("in segments -> ungleichwertig");
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
174 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
175 s1 = s2 = null;
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
176 for (int i = 1, N = this.segments.size(); i < N; ++i) {
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
177 final Segment si1 = this.segments.get(i - 1);
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
178 final Segment si = this.segments.get(i);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
179 if (debug) {
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
180 log.debug("check " + pos + " in " + si1.referencePoint + " - " + si.referencePoint);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
181 }
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
182 if (pos >= si1.referencePoint && pos <= si.referencePoint) {
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
183 s1 = si1;
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
184 s2 = si;
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
185 break;
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
186 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
187 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
188
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
189 if (s1 == null) {
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
190 throw new IllegalStateException("no interval found");
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
191 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
192
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
193 Segment anchor, free;
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
194
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
195 if (this.from > this.to) {
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
196 anchor = s1;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
197 free = s2;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
198 } else {
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
199 anchor = s2;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
200 free = s1;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
201 }
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
202
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
203 // build transforms based on "gleichwertiger" phase
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
204 for (int i = 0; i < qPositions.length; ++i) {
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
205 final QPosition qi = table.getQPosition(anchor.referencePoint, anchor.values[i]);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
206
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
207 if ((qPositions[i] = qi) == null) {
2166
2898b1ff6013 I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 742
diff changeset
208 addProblem(pos, "cannot.find.q", anchor.values[i]);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
209 functions[i] = Identity.IDENTITY;
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
210 } else {
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
211 final double qA = table.getQ(qi, anchor.referencePoint);
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
212 final double qF = table.getQ(qi, free.referencePoint);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
213
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
214 functions[i] = Double.isNaN(qA) || Double.isNaN(qF) ? Identity.IDENTITY : new Linear(qA, qF, anchor.values[i], free.values[i]);
686
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 656
diff changeset
215
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 656
diff changeset
216 if (debug) {
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
217 log.debug(anchor.referencePoint + ": " + qA + " -> " + functions[i].value(qA) + " / " + free.referencePoint + ": " + qF + " -> "
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
218 + functions[i].value(qF));
686
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 656
diff changeset
219 }
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
220 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
221 } // build transforms
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
222 } // "ungleichwertiges" interval
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
223 } // find matching interval
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
224
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
225 for (int i = 0; i < qPositions.length; ++i) {
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
226 final QPosition qPosition = qPositions[i];
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
227
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
228 if (qPosition == null) {
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
229 continue;
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
230 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
231
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
232 if (table.interpolate(pos, out, qPosition, functions[i])) {
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
233 results[i].add(out[0], out[1], pos);
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
234 } else {
2166
2898b1ff6013 I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 742
diff changeset
235 addProblem(pos, "cannot.interpolate.w.q");
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
236 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
237 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
238 }
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
239 final String custom = Resources.format(meta, "common.custom");
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
240
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
241 // Backjump correction
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
242 for (int i = 0; i < results.length; ++i) {
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
243 final BackJumpCorrector bjc = new BackJumpCorrector();
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
244
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
245 final double[] ws = results[i].getWs();
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
246 final double[] kms = results[i].getKms();
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
247
686
3dc61e00385e Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 656
diff changeset
248 if (bjc.doCorrection(kms, ws, this)) {
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
249 results[i] = new WQCKms(results[i], bjc.getCorrected());
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
250 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
251 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
252
4967
2954eed04288 Calculation4: Doc and TODO/issue.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4839
diff changeset
253 // Name the curves.
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
254 for (int i = 0; i < results.length; ++i) {
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
255 results[i].setName(createName(i, custom));
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
256 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
257
4798
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
258 // Generate the "Umhuellende".
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
259 final ConstantWQKms[] infoldings = generateInfolding(table, results, this.from, this.to, this.step);
4821
bcf25d8c183e Moved NaN removal code from W to DoubleUtil. Create QKms when calculating the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4812
diff changeset
260
bcf25d8c183e Moved NaN removal code from W to DoubleUtil. Create QKms when calculating the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4812
diff changeset
261 // TODO: Use qkms in a new result type.
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
262 final WQKms[] newResults = new WQKms[results.length + infoldings.length];
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
263 System.arraycopy(results, 0, newResults, 0, results.length);
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
264 System.arraycopy(infoldings, 0, newResults, results.length, infoldings.length);
4798
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
265
4835
8e72777c961c Introduced a fake ConstantWQKms class to have type information to only generate w facets for curves which really carry w data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4821
diff changeset
266 return new CalculationResult(newResults, this);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
267 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
268
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
269 protected ConstantWQKms[] generateInfolding(final WstValueTable wst, final WQKms[] results, final double from, final double to, final double step) {
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
270 final WstValueTable.Column[] columns = wst.getColumns();
4798
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
271
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
272 final InfoldingColumns ic = new InfoldingColumns(columns);
4798
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
273 ic.markInfoldingColumns(results);
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
274
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
275 final List<ConstantWQKms> infoldings = new ArrayList<>();
4798
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
276
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
277 final boolean[] infoldingColumns = ic.getInfoldingColumns();
4821
bcf25d8c183e Moved NaN removal code from W to DoubleUtil. Create QKms when calculating the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4812
diff changeset
278
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
279 double[] kms = null;
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
280 double[] ws = null;
4821
bcf25d8c183e Moved NaN removal code from W to DoubleUtil. Create QKms when calculating the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4812
diff changeset
281
4798
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
282 for (int i = 0; i < infoldingColumns.length; ++i) {
4799
e3532c7850b9 Trivial typo in selecting infolding columns.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4798
diff changeset
283 if (!infoldingColumns[i]) {
4798
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
284 continue;
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
285 }
4821
bcf25d8c183e Moved NaN removal code from W to DoubleUtil. Create QKms when calculating the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4812
diff changeset
286
4835
8e72777c961c Introduced a fake ConstantWQKms class to have type information to only generate w facets for curves which really carry w data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4821
diff changeset
287 if (kms == null) {
8e72777c961c Introduced a fake ConstantWQKms class to have type information to only generate w facets for curves which really carry w data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4821
diff changeset
288 kms = DoubleUtil.explode(from, to, step);
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
289 ws = new double[kms.length];
4835
8e72777c961c Introduced a fake ConstantWQKms class to have type information to only generate w facets for curves which really carry w data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4821
diff changeset
290 }
4821
bcf25d8c183e Moved NaN removal code from W to DoubleUtil. Create QKms when calculating the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4812
diff changeset
291
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
292 final QRangeTree.QuickQFinder qf = columns[i].getQRangeTree().new QuickQFinder();
4821
bcf25d8c183e Moved NaN removal code from W to DoubleUtil. Create QKms when calculating the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4812
diff changeset
293
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
294 final int numProblemsBefore = numProblems();
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
295 final double[] qs = qf.findQs(kms, this);
4821
bcf25d8c183e Moved NaN removal code from W to DoubleUtil. Create QKms when calculating the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4812
diff changeset
296
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
297 final String name = columns[i].getName();
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
298 final ConstantWQKms infolding = new ConstantWQKms(kms, qs, ws, name);
4821
bcf25d8c183e Moved NaN removal code from W to DoubleUtil. Create QKms when calculating the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4812
diff changeset
299
bcf25d8c183e Moved NaN removal code from W to DoubleUtil. Create QKms when calculating the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4812
diff changeset
300 if (numProblems() > numProblemsBefore) {
4835
8e72777c961c Introduced a fake ConstantWQKms class to have type information to only generate w facets for curves which really carry w data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4821
diff changeset
301 infolding.removeNaNs();
4798
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
302 }
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
303
4835
8e72777c961c Introduced a fake ConstantWQKms class to have type information to only generate w facets for curves which really carry w data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4821
diff changeset
304 infoldings.add(infolding);
4798
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
305 }
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
306
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
307 for (int i = 0, I = infoldings.size(); i < I; i++) {
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
308 final ConstantWQKms infolding = infoldings.get(i);
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
309 final String name = infolding.getName();
5138
fc0cdcae8f07 New facet types and renaming for infoldings.
Raimund Renkert <rrenkert@intevation.de>
parents: 4967
diff changeset
310 // TODO: i18n
fc0cdcae8f07 New facet types and renaming for infoldings.
Raimund Renkert <rrenkert@intevation.de>
parents: 4967
diff changeset
311 if (i == 0) {
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
312 infolding.setName("untere Umh\u00fcllende " + name);
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
313 } else if (i == I - 1) {
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
314 infolding.setName("obere Umh\u00fcllende " + name);
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
315 } else {
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
316 infolding.setName("geschnitten " + name);
5138
fc0cdcae8f07 New facet types and renaming for infoldings.
Raimund Renkert <rrenkert@intevation.de>
parents: 4967
diff changeset
317 }
fc0cdcae8f07 New facet types and renaming for infoldings.
Raimund Renkert <rrenkert@intevation.de>
parents: 4967
diff changeset
318 }
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
319
4835
8e72777c961c Introduced a fake ConstantWQKms class to have type information to only generate w facets for curves which really carry w data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4821
diff changeset
320 return infoldings.toArray(new ConstantWQKms[infoldings.size()]);
4798
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
321 }
39885bdfc6fc Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3450
diff changeset
322
4967
2954eed04288 Calculation4: Doc and TODO/issue.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4839
diff changeset
323 // TODO: issue1109/2, merge with FixRealizingCalculation
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
324 protected String createName(final int index, final String custom) {
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
325
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
326 final StringBuilder sb = new StringBuilder(this.isQ ? "Q" : "W");
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
327 sb.append(" ").append(custom).append(" (");
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
328 for (int i = 0, N = this.segments.size(); i < N; ++i) {
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
329 if (i > 0) {
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
330 sb.append("; ");
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
331 }
9479
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
332 final Segment segment = this.segments.get(i);
2b83d3a96703 i18n TODO "benutzerdefiniert" = "custom" fixed
gernotbelger
parents: 8856
diff changeset
333 sb.append((segment.backup != null ? segment.backup : segment.values)[index]);
655
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
334 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
335 sb.append(')');
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
336 return sb.toString();
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
337 }
913b52064449 Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
338 }

http://dive4elements.wald.intevation.org