Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java @ 9527:7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
author | gernotbelger |
---|---|
date | Tue, 02 Oct 2018 13:25:52 +0200 |
parents | ee6508687e3f |
children | 429b62373633 |
rev | line source |
---|---|
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
2 * Software engineering by |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
3 * Björnsen Beratende Ingenieure GmbH |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
5 * |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
6 * This file is Free Software under the GNU AGPL (>=v3) |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
8 * documentation coming with Dive4Elements River for details. |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
9 */ |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
10 package org.dive4elements.river.artifacts.uinfo.salix; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
11 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
12 import java.util.ArrayList; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
13 import java.util.List; |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
14 import java.util.Map.Entry; |
9309 | 15 import java.util.NavigableMap; |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
16 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
17 import org.dive4elements.river.artifacts.WINFOArtifact; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
18 import org.dive4elements.river.artifacts.access.ComputationRangeAccess; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
19 import org.dive4elements.river.artifacts.common.GeneralResultType; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
20 import org.dive4elements.river.artifacts.common.ResultRow; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
21 import org.dive4elements.river.artifacts.model.Calculation; |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
22 import org.dive4elements.river.artifacts.model.river.MainWstValues; |
9499 | 23 import org.dive4elements.river.artifacts.model.river.RiverInfoProvider; |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
24 import org.dive4elements.river.artifacts.sinfo.tkhstate.WinfoArtifactWrapper; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
25 import org.dive4elements.river.artifacts.uinfo.UINFOArtifact; |
9328 | 26 import org.dive4elements.river.artifacts.uinfo.common.UInfoResultType; |
9309 | 27 import org.dive4elements.river.artifacts.uinfo.salix.SalixLineAccess.ScenarioType; |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
28 import org.dive4elements.river.model.River; |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
29 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
30 /** |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
31 * Calculation of the result rows of the u-info salix line calc mode |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
32 * |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
33 * @author Matthias Schäfer |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
34 */ |
9321
a978b601a034
Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents:
9316
diff
changeset
|
35 final class SalixLineCalculator { |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
36 |
9504
76c0665888a3
No rounding during calculation (Meilenstein-2 2.4.2 and 2.9), delta-w-cm as double (for historical scenario)
mschaefer
parents:
9499
diff
changeset
|
37 private static final String MAIN_VALUE_MNQ = "MNQ"; |
9499 | 38 |
9504
76c0665888a3
No rounding during calculation (Meilenstein-2 2.4.2 and 2.9), delta-w-cm as double (for historical scenario)
mschaefer
parents:
9499
diff
changeset
|
39 private static final String MAIN_VALUE_MQ = "MQ"; |
9499 | 40 |
9504
76c0665888a3
No rounding during calculation (Meilenstein-2 2.4.2 and 2.9), delta-w-cm as double (for historical scenario)
mschaefer
parents:
9499
diff
changeset
|
41 private static final String MAIN_VALUE_MHQ = "MHQ"; |
9499 | 42 |
9504
76c0665888a3
No rounding during calculation (Meilenstein-2 2.4.2 and 2.9), delta-w-cm as double (for historical scenario)
mschaefer
parents:
9499
diff
changeset
|
43 private static final String MAIN_VALUE_HQ5 = "HQ5"; |
76c0665888a3
No rounding during calculation (Meilenstein-2 2.4.2 and 2.9), delta-w-cm as double (for historical scenario)
mschaefer
parents:
9499
diff
changeset
|
44 |
76c0665888a3
No rounding during calculation (Meilenstein-2 2.4.2 and 2.9), delta-w-cm as double (for historical scenario)
mschaefer
parents:
9499
diff
changeset
|
45 private static final double SALIX_DISTANCE = 2.31; |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
46 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
47 private final RiverInfoProvider riverInfoProvider; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
48 |
9321
a978b601a034
Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents:
9316
diff
changeset
|
49 public SalixLineCalculator(final RiverInfoProvider riverInfoProvider) { |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
50 this.riverInfoProvider = riverInfoProvider; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
51 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
52 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
53 /** |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
54 * Calculate the salix line result rows |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
55 */ |
9309 | 56 public void execute(final Calculation problems, final UINFOArtifact uinfo, final NavigableMap<Double, List<Double>> rangeScenarios, |
9361
2aec052d4088
Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents:
9328
diff
changeset
|
57 final ScenarioType scenarioType, final String[] scenarioLabels, final String rangeString, final String additionalString, |
2aec052d4088
Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents:
9328
diff
changeset
|
58 final SalixLineCalculationResults results) { |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
59 |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
60 final MainWstValues mainWstValues = fetchWstMainValues(problems); |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
61 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
62 final WINFOArtifact winfo = new WinfoArtifactWrapper(uinfo); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
63 winfo.addStringData("ld_mode", "distance"); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
64 winfo.addStringData("ld_step", "100"); |
9506
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
65 |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
66 final List<ResultRow> rows = new ArrayList<>(); |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
67 for (final double station : new ComputationRangeAccess(winfo).getKms()) |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
68 rows.add(createRow(mainWstValues, station, rangeScenarios)); |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
69 |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
70 final SalixLineCalculationResult result = createResult(scenarioType, scenarioLabels, rangeString, additionalString, rows); |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
71 results.addResult(result, problems); |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
72 } |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
73 |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
74 private SalixLineCalculationResult createResult(final ScenarioType scenarioType, final String[] scenarioLabels, final String rangeString, |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
75 final String additionalString, final List<ResultRow> rows) { |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
76 |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
77 switch (scenarioType) { |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
78 case REGIONAL: |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
79 return new SalixLineCalculationRegionalResult("Salix-regional", scenarioLabels, rangeString, additionalString, rows); |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
80 |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
81 case SUPRAREGIONAL: |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
82 return new SalixLineCalculationSupraRegionalResult("Salix-supra", scenarioLabels, rangeString, additionalString, rows); |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
83 |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
84 case HISTORICAL: |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
85 return new SalixLineCalculationHistoricalResult("Salix-hist", scenarioLabels, rangeString, additionalString, rows); |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
86 default: |
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
87 return new SalixLineCalculationResult("Salix-simple", rows); |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
88 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
89 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
90 |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
91 private MainWstValues fetchWstMainValues(final Calculation problems) { |
9430 | 92 |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
93 final MainWstValues values = MainWstValues.forRiver(this.riverInfoProvider.getRiver()); |
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
94 |
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
95 if (!values.hasPosition(MAIN_VALUE_MQ)) |
9499 | 96 problems.addProblem("uinfo_salix_calc.warning.missing_mq"); |
97 else { | |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
98 if (!values.hasPosition(MAIN_VALUE_MHQ)) |
9499 | 99 problems.addProblem("uinfo_salix_calc.warning.missing_mhq"); |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
100 if (!values.hasPosition(MAIN_VALUE_MNQ)) |
9499 | 101 problems.addProblem("uinfo_salix_calc.warning.missing_mnq"); |
9368
6f7e92c16050
Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents:
9361
diff
changeset
|
102 } |
9499 | 103 |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
104 return values; |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
105 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
106 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
107 /** |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
108 * Create a result row for a station and its gauge, and add w-q-values as selected |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
109 */ |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
110 private ResultRow createRow(final MainWstValues mainWstValues, final double station, final NavigableMap<Double, List<Double>> rangeScenarios) { |
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
111 |
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
112 final River river = this.riverInfoProvider.getRiver(); |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
113 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
114 final ResultRow row = ResultRow.create(); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
115 row.putValue(GeneralResultType.station, station); |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
116 |
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
117 final double mnw = mainWstValues.getW(river, MAIN_VALUE_MNQ, station); |
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
118 final double mw = mainWstValues.getW(river, MAIN_VALUE_MQ, station); |
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
119 final double mhw = mainWstValues.getW(river, MAIN_VALUE_MHQ, station); |
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
120 final double hw5 = mainWstValues.getW(river, MAIN_VALUE_HQ5, station); |
9429
bd5f5d2220fa
Work on salix cross sections; waterlevels work now with different colors
gernotbelger
parents:
9397
diff
changeset
|
121 row.putValue(UInfoResultType.waterlevelMNW, mnw); |
bd5f5d2220fa
Work on salix cross sections; waterlevels work now with different colors
gernotbelger
parents:
9397
diff
changeset
|
122 row.putValue(UInfoResultType.waterlevelMW, mw); |
bd5f5d2220fa
Work on salix cross sections; waterlevels work now with different colors
gernotbelger
parents:
9397
diff
changeset
|
123 row.putValue(UInfoResultType.waterlevelMHW, mhw); |
9430 | 124 row.putValue(UInfoResultType.waterlevelMH5, hw5); |
9429
bd5f5d2220fa
Work on salix cross sections; waterlevels work now with different colors
gernotbelger
parents:
9397
diff
changeset
|
125 |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
126 // Calc salix-line and mw-mnw |
9490
e44c1a8b0c54
Fixed: rounding problems in iota/salix scenario calculation
mschaefer
parents:
9443
diff
changeset
|
127 row.putValue(UInfoResultType.salixline, calcSalix(mhw, mw, 0.0)); |
9361
2aec052d4088
Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents:
9328
diff
changeset
|
128 row.putValue(UInfoResultType.salix_mw_mnw, calcMwmnw(mw, mnw)); |
9504
76c0665888a3
No rounding during calculation (Meilenstein-2 2.4.2 and 2.9), delta-w-cm as double (for historical scenario)
mschaefer
parents:
9499
diff
changeset
|
129 final double salixw = mhw - SALIX_DISTANCE; |
9490
e44c1a8b0c54
Fixed: rounding problems in iota/salix scenario calculation
mschaefer
parents:
9443
diff
changeset
|
130 row.putValue(UInfoResultType.salixw, salixw); |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
131 // Calc scenario values (always all scenario types set, Result variant extracts the fields needed) |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
132 final List<SalixScenario> scenarios = new ArrayList<>(); |
9394
439699ff9b2d
Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents:
9382
diff
changeset
|
133 final List<Double> deltaws = getDeltaWs(station, rangeScenarios); |
439699ff9b2d
Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents:
9382
diff
changeset
|
134 for (final Double deltaw : deltaws) { |
439699ff9b2d
Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents:
9382
diff
changeset
|
135 if (deltaw != null) { |
9490
e44c1a8b0c54
Fixed: rounding problems in iota/salix scenario calculation
mschaefer
parents:
9443
diff
changeset
|
136 final double salix = calcSalix(mhw, mw, deltaw.doubleValue()); |
e44c1a8b0c54
Fixed: rounding problems in iota/salix scenario calculation
mschaefer
parents:
9443
diff
changeset
|
137 final double scen = calcSalix(mhw, 0.0, deltaw.doubleValue()); |
9504
76c0665888a3
No rounding during calculation (Meilenstein-2 2.4.2 and 2.9), delta-w-cm as double (for historical scenario)
mschaefer
parents:
9499
diff
changeset
|
138 scenarios.add(new SalixScenario(deltaw * 100, salix, scen)); |
9499 | 139 } else { |
9361
2aec052d4088
Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents:
9328
diff
changeset
|
140 scenarios.add(null); |
2aec052d4088
Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents:
9328
diff
changeset
|
141 } |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
142 } |
9361
2aec052d4088
Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents:
9328
diff
changeset
|
143 row.putValue(UInfoResultType.customMultiRowColSalixScenarios, scenarios); |
9397 | 144 row.putValue(GeneralResultType.gaugeLabel, this.riverInfoProvider.findGauge(station)); |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
145 return row; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
146 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
147 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
148 /** |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
149 * Calculates the salix value |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
150 */ |
9490
e44c1a8b0c54
Fixed: rounding problems in iota/salix scenario calculation
mschaefer
parents:
9443
diff
changeset
|
151 private double calcSalix(final double mhw, final double mw, final double deltamw) { |
9382
8ae7137b67d7
Fixed: avoiding NaN exception in BigDecimal rounding
mschaefer
parents:
9375
diff
changeset
|
152 if (Double.isNaN(mw) || Double.isInfinite(mw) || Double.isNaN(mhw) || Double.isInfinite(mhw)) |
9490
e44c1a8b0c54
Fixed: rounding problems in iota/salix scenario calculation
mschaefer
parents:
9443
diff
changeset
|
153 return mhw - mw; // preserving NaN or Infinity |
9504
76c0665888a3
No rounding during calculation (Meilenstein-2 2.4.2 and 2.9), delta-w-cm as double (for historical scenario)
mschaefer
parents:
9499
diff
changeset
|
154 return mhw - SALIX_DISTANCE - mw - deltamw; |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
155 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
156 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
157 /** |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
158 * Calculates the inverse MW-MNW difference |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
159 */ |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
160 private double calcMwmnw(final double mw, final double mnw) { |
9382
8ae7137b67d7
Fixed: avoiding NaN exception in BigDecimal rounding
mschaefer
parents:
9375
diff
changeset
|
161 if (Double.isNaN(mw) || Double.isInfinite(mw) || Double.isNaN(mnw) || Double.isInfinite(mnw)) |
8ae7137b67d7
Fixed: avoiding NaN exception in BigDecimal rounding
mschaefer
parents:
9375
diff
changeset
|
162 return mnw - mw; // preserving NaN or Inifinity |
9504
76c0665888a3
No rounding during calculation (Meilenstein-2 2.4.2 and 2.9), delta-w-cm as double (for historical scenario)
mschaefer
parents:
9499
diff
changeset
|
163 return mnw - mw; |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
164 } |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
165 |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
166 /** |
9394
439699ff9b2d
Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents:
9382
diff
changeset
|
167 * Gets the station-specific list of delta-ws of the active scenario, at least with one null item in any case |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
168 */ |
9394
439699ff9b2d
Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents:
9382
diff
changeset
|
169 private List<Double> getDeltaWs(final double station, final NavigableMap<Double, List<Double>> rangeScenarios) { |
9321
a978b601a034
Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents:
9316
diff
changeset
|
170 final Entry<Double, List<Double>> stationScenarios = rangeScenarios.floorEntry(station); |
9394
439699ff9b2d
Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents:
9382
diff
changeset
|
171 if (stationScenarios != null) { |
439699ff9b2d
Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents:
9382
diff
changeset
|
172 return stationScenarios.getValue(); |
439699ff9b2d
Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents:
9382
diff
changeset
|
173 } |
439699ff9b2d
Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents:
9382
diff
changeset
|
174 final List<Double> noScen = new ArrayList<>(); |
439699ff9b2d
Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents:
9382
diff
changeset
|
175 noScen.add(null); |
439699ff9b2d
Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents:
9382
diff
changeset
|
176 return noScen; |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
177 } |
9506
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9504
diff
changeset
|
178 } |