annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java @ 9514:ee6508687e3f

Added default vegetation zones tzo iota result map.
author gernotbelger
date Mon, 01 Oct 2018 13:03:42 +0200
parents 8b7bf26b8782
children 7c8d62867876
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
9a9f076d5716 Work on U-Info salix line calculation
mschaefer
parents: 9295
diff changeset
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;
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
22 import org.dive4elements.river.artifacts.model.river.MainWstValuesCalculator;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
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
b3d3c958a594 Renamed package name
gernotbelger
parents: 9321
diff changeset
26 import org.dive4elements.river.artifacts.uinfo.common.UInfoResultType;
9309
9a9f076d5716 Work on U-Info salix line calculation
mschaefer
parents: 9295
diff changeset
27 import org.dive4elements.river.artifacts.uinfo.salix.SalixLineAccess.ScenarioType;
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
28
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 * 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
31 *
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
32 * @author Matthias Schäfer
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
33 */
9321
a978b601a034 Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents: 9316
diff changeset
34 final class SalixLineCalculator {
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
35
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
36 private static final String MAIN_VALUE_MNQ = "MNQ";
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
37
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
38 private static final String MAIN_VALUE_MQ = "MQ";
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
39
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
40 private static final String MAIN_VALUE_MHQ = "MHQ";
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
41
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
42 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
43
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 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
45
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
46 private final RiverInfoProvider riverInfoProvider;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
47
9321
a978b601a034 Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents: 9316
diff changeset
48 public SalixLineCalculator(final RiverInfoProvider riverInfoProvider) {
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
49 this.riverInfoProvider = riverInfoProvider;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
50 }
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 * Calculate the salix line result rows
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
54 */
9309
9a9f076d5716 Work on U-Info salix line calculation
mschaefer
parents: 9295
diff changeset
55 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
56 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
57 final SalixLineCalculationResults results) {
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
58
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
59 final MainWstValuesCalculator mainWstValues = fetchGaugeMainValuePositions2(problems);
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
60
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
61 final WINFOArtifact winfo = new WinfoArtifactWrapper(uinfo);
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
62 winfo.addStringData("ld_mode", "distance");
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
63 winfo.addStringData("ld_step", "100");
9506
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
64
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
65 final List<ResultRow> rows = new ArrayList<>();
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
66 for (final double station : new ComputationRangeAccess(winfo).getKms())
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
67 rows.add(createRow(mainWstValues, station, rangeScenarios));
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
68
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
69 final SalixLineCalculationResult result = createResult(scenarioType, scenarioLabels, rangeString, additionalString, rows);
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
70 results.addResult(result, problems);
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
71 }
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 private SalixLineCalculationResult createResult(final ScenarioType scenarioType, final String[] scenarioLabels, final String rangeString,
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
74 final String additionalString, final List<ResultRow> rows) {
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
75
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
76 switch (scenarioType) {
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
77 case REGIONAL:
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
78 return new SalixLineCalculationRegionalResult("Salix-regional", scenarioLabels, rangeString, additionalString, rows);
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
79
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
80 case SUPRAREGIONAL:
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
81 return new SalixLineCalculationSupraRegionalResult("Salix-supra", scenarioLabels, rangeString, additionalString, rows);
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
82
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
83 case HISTORICAL:
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
84 return new SalixLineCalculationHistoricalResult("Salix-hist", scenarioLabels, rangeString, additionalString, rows);
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
85 default:
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
86 return new SalixLineCalculationResult("Salix-simple", rows);
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
87 }
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
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
90 private MainWstValuesCalculator fetchGaugeMainValuePositions2(final Calculation problems) {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
91 final MainWstValuesCalculator mainWstValues = MainWstValuesCalculator.forRiverInfo(this.riverInfoProvider, MAIN_VALUE_MQ, MAIN_VALUE_MNQ,
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
92 MAIN_VALUE_MHQ, MAIN_VALUE_HQ5);
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
93
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
94 if (!mainWstValues.hasPosition(MAIN_VALUE_MQ))
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
95 problems.addProblem("uinfo_salix_calc.warning.missing_mq");
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
96 else {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
97 if (!mainWstValues.hasPosition(MAIN_VALUE_MHQ))
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
98 problems.addProblem("uinfo_salix_calc.warning.missing_mhq");
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
99 if (!mainWstValues.hasPosition(MAIN_VALUE_MNQ))
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
100 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
101 }
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
102
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
103 return mainWstValues;
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
104 }
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 * 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
108 */
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
109 private ResultRow createRow(final MainWstValuesCalculator mainWstValues, final double station, final NavigableMap<Double, List<Double>> rangeScenarios) {
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
110
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
111 final ResultRow row = ResultRow.create();
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
112 row.putValue(GeneralResultType.station, station);
9394
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
113 // Find station's gauge (obsolete version which calculates gauge-wise)
9368
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
114 // final Gauge gauge = this.riverInfoProvider.getGauge(station, true);
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
115 // Interpolate mnw, mw, and mhw
9368
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
116 // final double mnw = interpolateW(station, this.gaugeMnwPos.get(gauge));
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
117 // final double mw = interpolateW(station, this.gaugeMwPos.get(gauge));
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
118 // final double mhw = interpolateW(station, this.gaugeMhwPos.get(gauge));
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
119 final double mnw = mainWstValues.interpolateW(station, MAIN_VALUE_MNQ);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
120 final double mw = mainWstValues.interpolateW(station, MAIN_VALUE_MQ);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
121 final double mhw = mainWstValues.interpolateW(station, MAIN_VALUE_MHQ);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
122 final double hw5 = mainWstValues.interpolateW(station, MAIN_VALUE_HQ5);
9429
bd5f5d2220fa Work on salix cross sections; waterlevels work now with different colors
gernotbelger
parents: 9397
diff changeset
123 row.putValue(UInfoResultType.waterlevelMNW, mnw);
bd5f5d2220fa Work on salix cross sections; waterlevels work now with different colors
gernotbelger
parents: 9397
diff changeset
124 row.putValue(UInfoResultType.waterlevelMW, mw);
bd5f5d2220fa Work on salix cross sections; waterlevels work now with different colors
gernotbelger
parents: 9397
diff changeset
125 row.putValue(UInfoResultType.waterlevelMHW, mhw);
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
126 row.putValue(UInfoResultType.waterlevelMH5, hw5);
9429
bd5f5d2220fa Work on salix cross sections; waterlevels work now with different colors
gernotbelger
parents: 9397
diff changeset
127
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
128 // Calc salix-line and mw-mnw
9490
e44c1a8b0c54 Fixed: rounding problems in iota/salix scenario calculation
mschaefer
parents: 9443
diff changeset
129 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
130 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
131 final double salixw = mhw - SALIX_DISTANCE;
9490
e44c1a8b0c54 Fixed: rounding problems in iota/salix scenario calculation
mschaefer
parents: 9443
diff changeset
132 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
133 // 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
134 final List<SalixScenario> scenarios = new ArrayList<>();
9394
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
135 final List<Double> deltaws = getDeltaWs(station, rangeScenarios);
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
136 for (final Double deltaw : deltaws) {
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
137 if (deltaw != null) {
9490
e44c1a8b0c54 Fixed: rounding problems in iota/salix scenario calculation
mschaefer
parents: 9443
diff changeset
138 final double salix = calcSalix(mhw, mw, deltaw.doubleValue());
e44c1a8b0c54 Fixed: rounding problems in iota/salix scenario calculation
mschaefer
parents: 9443
diff changeset
139 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
140 scenarios.add(new SalixScenario(deltaw * 100, salix, scen));
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents: 9490
diff changeset
141 } 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
142 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
143 }
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
144 }
9361
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
145 row.putValue(UInfoResultType.customMultiRowColSalixScenarios, scenarios);
9397
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
146 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
147 return row;
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
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
150 /**
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
151 * Calculates the salix value
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
152 */
9490
e44c1a8b0c54 Fixed: rounding problems in iota/salix scenario calculation
mschaefer
parents: 9443
diff changeset
153 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
154 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
155 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
156 return mhw - SALIX_DISTANCE - mw - deltamw;
9295
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
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 * Calculates the inverse MW-MNW difference
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
161 */
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
162 private double calcMwmnw(final double mw, final double mnw) {
9382
8ae7137b67d7 Fixed: avoiding NaN exception in BigDecimal rounding
mschaefer
parents: 9375
diff changeset
163 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
164 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
165 return mnw - mw;
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
166 }
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
167
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 * 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
170 */
9394
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
171 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
172 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
173 if (stationScenarios != null) {
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
174 return stationScenarios.getValue();
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
175 }
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
176 final List<Double> noScen = new ArrayList<>();
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
177 noScen.add(null);
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
178 return noScen;
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
179 }
9506
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9504
diff changeset
180 }

http://dive4elements.wald.intevation.org