Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java @ 9316:72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
author | mschaefer |
---|---|
date | Thu, 26 Jul 2018 17:28:32 +0200 |
parents | 9a9f076d5716 |
children | a978b601a034 |
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.HashMap; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
14 import java.util.List; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
15 import java.util.Map; |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
16 import java.util.Map.Entry; |
9309 | 17 import java.util.NavigableMap; |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
18 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
19 import org.dive4elements.artifacts.CallContext; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
20 import org.dive4elements.river.artifacts.WINFOArtifact; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
21 import org.dive4elements.river.artifacts.access.ComputationRangeAccess; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
22 import org.dive4elements.river.artifacts.common.GeneralResultType; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
23 import org.dive4elements.river.artifacts.common.ResultRow; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
24 import org.dive4elements.river.artifacts.model.Calculation; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
25 import org.dive4elements.river.artifacts.model.WstValueTable; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
26 import org.dive4elements.river.artifacts.model.WstValueTable.QPosition; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
27 import org.dive4elements.river.artifacts.model.WstValueTableFactory; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
28 import org.dive4elements.river.artifacts.sinfo.common.GaugeDischargeValuesFinder; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
29 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
30 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
31 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
|
32 import org.dive4elements.river.artifacts.uinfo.UINFOArtifact; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
33 import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType; |
9309 | 34 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
|
35 import org.dive4elements.river.model.Gauge; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
36 import org.dive4elements.river.model.MainValue; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
37 import org.dive4elements.river.model.MainValueType.MainValueTypeKey; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
38 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
39 /** |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
40 * 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
|
41 * |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
42 * @author Matthias Schäfer |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
43 */ |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
44 public class SalixLineCalculator { |
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 List<ResultRow> rows = new ArrayList<>(); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
47 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
48 private final RiverInfoProvider riverInfoProvider; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
49 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
50 private final CallContext context; |
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 private final Map<Gauge, QPosition> gaugeMwPos; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
53 private final Map<Gauge, QPosition> gaugeMnwPos; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
54 private final Map<Gauge, QPosition> gaugeMhwPos; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
55 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
56 private Calculation problems; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
57 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
58 private WstValueTable wst; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
59 |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
60 /** |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
61 * List of delta-w (may be 0) mapped by km range |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
62 */ |
9309 | 63 private NavigableMap<Double, List<Double>> rangeScenarios; |
64 | |
65 | |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
66 public SalixLineCalculator(final CallContext context, final RiverInfoProvider riverInfoProvider) { |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
67 this.context = context; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
68 this.riverInfoProvider = riverInfoProvider; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
69 this.gaugeMwPos = new HashMap<>(); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
70 this.gaugeMnwPos = new HashMap<>(); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
71 this.gaugeMhwPos = new HashMap<>(); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
72 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
73 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
74 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
75 /** |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
76 * Calculate the salix line result rows |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
77 */ |
9309 | 78 public void execute(final Calculation problems, final UINFOArtifact uinfo, final NavigableMap<Double, List<Double>> rangeScenarios, |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
79 final ScenarioType scenarioType, final String[] scenarioLabels, final SalixLineCalculationResults results) { |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
80 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
81 this.problems = problems; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
82 this.wst = WstValueTableFactory.getTable(this.riverInfoProvider.getRiver()); |
9309 | 83 this.rangeScenarios = rangeScenarios; |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
84 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
85 fetchGaugeMainValuePositions(); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
86 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
87 final WINFOArtifact winfo = new WinfoArtifactWrapper(uinfo); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
88 winfo.addStringData("ld_mode", "distance"); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
89 winfo.addStringData("ld_step", "100"); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
90 for (final double station : new ComputationRangeAccess(winfo).getKms()) { |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
91 this.rows.add(createRow(station)); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
92 } |
9309 | 93 if (scenarioType == ScenarioType.REGIONAL) |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
94 results.addResult(new SalixLineCalculationRegionalResult("Salix", scenarioLabels, this.rows), problems); |
9309 | 95 else if (scenarioType == ScenarioType.SUPRAREGIONAL) |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
96 results.addResult(new SalixLineCalculationSupraRegionalResult("Salix", this.rows), problems); |
9309 | 97 else if (scenarioType == ScenarioType.HISTORICAL) |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
98 results.addResult(new SalixLineCalculationHistoricalResult("Salix", this.rows), problems); |
9309 | 99 else |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
100 results.addResult(new SalixLineCalculationNoScenarioResult("Salix", this.rows), problems); |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
101 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
102 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
103 /** |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
104 * Fetch MW, MNW and MHW of all gauges and determine the wst QPosition for each one |
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 private void fetchGaugeMainValuePositions() { |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
107 this.gaugeMwPos.clear(); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
108 this.gaugeMnwPos.clear(); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
109 this.gaugeMhwPos.clear(); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
110 for (final Gauge gauge : this.riverInfoProvider.getGauges()) { |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
111 this.gaugeMwPos.put(gauge, null); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
112 this.gaugeMnwPos.put(gauge, null); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
113 this.gaugeMhwPos.put(gauge, null); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
114 final GaugeDischargeValuesFinder finder = GaugeDischargeValuesFinder.loadValues(gauge, this.problems); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
115 if (finder == null) |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
116 continue; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
117 final double gaugeKm = gauge.getStation().doubleValue(); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
118 for (final MainValue mv : MainValue.getValuesOfGaugeAndType(gauge, MainValueTypeKey.W)) { |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
119 if (mv.getMainValue().getName().equalsIgnoreCase("mw")) |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
120 this.gaugeMwPos.put(gauge, this.wst.getQPosition(gaugeKm, finder.getDischarge(mv.getValue().doubleValue()))); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
121 else if (mv.getMainValue().getName().equalsIgnoreCase("mnw")) |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
122 this.gaugeMnwPos.put(gauge, this.wst.getQPosition(gaugeKm, finder.getDischarge(mv.getValue().doubleValue()))); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
123 else if (mv.getMainValue().getName().equalsIgnoreCase("mhw")) |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
124 this.gaugeMhwPos.put(gauge, this.wst.getQPosition(gaugeKm, finder.getDischarge(mv.getValue().doubleValue()))); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
125 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
126 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
127 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
128 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
129 /** |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
130 * 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
|
131 */ |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
132 private ResultRow createRow(final double station) { |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
133 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
134 final ResultRow row = ResultRow.create(); |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
135 // Find station's gauge |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
136 final Gauge gauge = this.riverInfoProvider.getGauge(station, true); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
137 row.putValue(GeneralResultType.station, station); |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
138 // Interpolate mnw, mw, and mhw |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
139 final double mnw = interpolateW(station, this.gaugeMnwPos.get(gauge)); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
140 final double mw = interpolateW(station, this.gaugeMwPos.get(gauge)); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
141 final double mhw = interpolateW(station, this.gaugeMhwPos.get(gauge)); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
142 row.putValue(SInfoResultType.waterlevel, mnw); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
143 row.putValue(SInfoResultType.waterlevel1, mw); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
144 row.putValue(SInfoResultType.waterlevel2, mhw); |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
145 // Calc salix-line and mw-mnw |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
146 row.putValue(UInfoResultType.salixline, calcSalix(mhw, mw)); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
147 row.putValue(UInfoResultType.salix_delta_mw, calcMwmnw(mw, mnw)); |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
148 // 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
|
149 final List<SalixScenario> scenarios = new ArrayList<>(); |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
150 final double[] deltaws = getDeltaWs(station); |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
151 for (int i = 0; i <= deltaws.length - 1; i++) { |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
152 if (Math.abs(deltaws[i]) < 0.0001) { |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
153 row.putValue(UInfoResultType.salix_line_scenario, Double.NaN); |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
154 row.putValue(UInfoResultType.salix_line_scenario_dwspl, 0); // TODO NaN when changed from int to double |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
155 } |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
156 else { |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
157 final double salix = calcSalix(mhw, mw + deltaws[i]); |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
158 row.putValue(UInfoResultType.salix_line_scenario, salix); |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
159 row.putValue(UInfoResultType.salix_line_scenario_dwspl, (int) (deltaws[i] * 100)); |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
160 scenarios.add(new SalixScenario((int) (deltaws[i] * 100), salix)); |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
161 } |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
162 } |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
163 row.putValue(UInfoResultType.customMultiRowColSalixRegionalValue_Dwspl, scenarios); |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
164 return row; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
165 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
166 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
167 /** |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
168 * Interpolates the W for a station with a fixed (virtual) wst column position |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
169 */ |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
170 private double interpolateW(final double station, final QPosition qPosition) { |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
171 if (qPosition != null) |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
172 return this.wst.interpolateW(station, qPosition, this.problems); |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
173 else |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
174 return Double.NaN; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
175 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
176 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
177 /** |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
178 * Calculates the salix value |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
179 */ |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
180 private double calcSalix(final double mhw, final double mw) { |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
181 return mhw - 2.31 - mw; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
182 } |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
183 |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
184 /** |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
185 * Calculates the inverse MW-MNW difference |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
186 */ |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
187 private double calcMwmnw(final double mw, final double mnw) { |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
188 return mnw - mw; |
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
189 } |
9316
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
190 |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
191 /** |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
192 * Gets the station-specific list of delta-ws of the active scenario, at least with one 0 item in any case |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
193 */ |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
194 private double[] getDeltaWs(final double station) { |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
195 final Entry<Double, List<Double>> stationScenarios = this.rangeScenarios.floorEntry(station); |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
196 if (stationScenarios == null) |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
197 return new double[] { 0.0 }; |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
198 else { |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
199 final double[] deltaws = new double[stationScenarios.getValue().size()]; |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
200 for (int i = 0; i <= stationScenarios.getValue().size() - 1; i++) |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
201 deltaws[i] = stationScenarios.getValue().get(i); |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
202 return deltaws; |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
203 } |
72b3270e1568
U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents:
9309
diff
changeset
|
204 } |
9295
385b52ccde23
Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff
changeset
|
205 } |