Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java @ 9298:0b1a51b0c42e
Included the infrastructure-less stations in the S-Info flood duration long. sections, and the selected wspls in their w/q duration curves
author | mschaefer |
---|---|
date | Wed, 25 Jul 2018 11:33:48 +0200 |
parents | 7100a555607c |
children | 9055afc19ec6 |
rev | line source |
---|---|
9145 | 1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde |
2 * Software engineering by | |
3 * Björnsen Beratende Ingenieure GmbH | |
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt | |
5 * | |
6 * This file is Free Software under the GNU AGPL (>=v3) | |
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the | |
8 * documentation coming with Dive4Elements River for details. | |
9 */ | |
10 package org.dive4elements.river.artifacts.sinfo.flood_duration; | |
11 | |
12 import java.util.ArrayList; | |
9266
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
13 import java.util.Collection; |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
14 import java.util.HashMap; |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
15 import java.util.List; |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
16 import java.util.Map; |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
17 import java.util.Set; |
9145 | 18 |
19 import org.apache.commons.lang.math.DoubleRange; | |
9150
23945061daec
gigantic refactoring: exporter, result, results
gernotbelger
parents:
9145
diff
changeset
|
20 import org.dive4elements.artifacts.CallContext; |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
21 import org.dive4elements.river.artifacts.WINFOArtifact; |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
22 import org.dive4elements.river.artifacts.access.ComputationRangeAccess; |
9145 | 23 import org.dive4elements.river.artifacts.common.GeneralResultType; |
24 import org.dive4elements.river.artifacts.common.ResultRow; | |
9150
23945061daec
gigantic refactoring: exporter, result, results
gernotbelger
parents:
9145
diff
changeset
|
25 import org.dive4elements.river.artifacts.model.Calculation; |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
26 import org.dive4elements.river.artifacts.model.Calculation.Problem; |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
27 import org.dive4elements.river.artifacts.model.CalculationResult; |
9252 | 28 import org.dive4elements.river.artifacts.model.WQDay; |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
29 import org.dive4elements.river.artifacts.model.WQKms; |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
30 import org.dive4elements.river.artifacts.model.WstValueTable; |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
31 import org.dive4elements.river.artifacts.model.WstValueTable.QPosition; |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
32 import org.dive4elements.river.artifacts.model.WstValueTableFactory; |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
33 import org.dive4elements.river.artifacts.resources.Resources; |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
34 import org.dive4elements.river.artifacts.sinfo.common.GaugeDurationValuesFinder; |
9145 | 35 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider; |
36 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; | |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
37 import org.dive4elements.river.artifacts.sinfo.flood_duration.RiversideRadioChoice.RiversideChoiceKey; |
9205
3dae6b78e1da
inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents:
9202
diff
changeset
|
38 import org.dive4elements.river.exports.WaterlevelDescriptionBuilder; |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
39 import org.dive4elements.river.jfree.StickyAxisAnnotation; |
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
40 import org.dive4elements.river.jfree.StickyAxisAnnotation.SimpleAxis; |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
41 import org.dive4elements.river.model.Attribute.AttributeKey; |
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
42 import org.dive4elements.river.model.Gauge; |
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
43 import org.dive4elements.river.model.sinfo.InfrastructureValue; |
9145 | 44 |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
45 import gnu.trove.TDoubleArrayList; |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
46 |
9145 | 47 /** |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
48 * Calculation of the result rows of the flood duration of the infrastructures in a river km range |
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
49 * and selected main value durations |
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
50 * |
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
51 * @author Matthias Schäfer |
9145 | 52 */ |
53 final class FloodDurationCalculator { | |
54 | |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
55 private final List<ResultRow> rows = new ArrayList<>(); |
9145 | 56 |
57 private final RiverInfoProvider riverInfoProvider; | |
58 | |
9150
23945061daec
gigantic refactoring: exporter, result, results
gernotbelger
parents:
9145
diff
changeset
|
59 private final CallContext context; |
9145 | 60 |
9150
23945061daec
gigantic refactoring: exporter, result, results
gernotbelger
parents:
9145
diff
changeset
|
61 public FloodDurationCalculator(final CallContext context, final RiverInfoProvider riverInfoProvider) { |
23945061daec
gigantic refactoring: exporter, result, results
gernotbelger
parents:
9145
diff
changeset
|
62 this.context = context; |
9145 | 63 this.riverInfoProvider = riverInfoProvider; |
64 } | |
65 | |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
66 /** |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
67 * Calculate the infrastructures flood duration result rows |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
68 */ |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
69 public void execute(final Calculation problems, final String label, final DoubleRange calcRange, final RiversideChoiceKey riverside, |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
70 final WINFOArtifact winfo, final FloodDurationCalculationResults results) { |
9145 | 71 |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
72 // Find all gauges of the calc range, and create the duration finders |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
73 final Map<Gauge, GaugeDurationValuesFinder> durFinders = new HashMap<>(); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
74 Gauge firstGauge = null; |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
75 for (final Gauge gauge : this.riverInfoProvider.getRiver().determineGauges(calcRange.getMinimumDouble(), calcRange.getMaximumDouble())) { |
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
76 durFinders.put(gauge, GaugeDurationValuesFinder.loadValues(gauge, problems)); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
77 if (firstGauge == null) |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
78 firstGauge = gauge; |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
79 } |
9150
23945061daec
gigantic refactoring: exporter, result, results
gernotbelger
parents:
9145
diff
changeset
|
80 |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
81 // Find all infrastructures within the calc range |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
82 final AttributeKey bankKey = riverside.getAttributeKey(); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
83 final List<InfrastructureValue> infras = InfrastructureValue.getValues(this.riverInfoProvider.getRiver(), calcRange.getMinimumDouble(), |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
84 calcRange.getMaximumDouble(), bankKey); |
9150
23945061daec
gigantic refactoring: exporter, result, results
gernotbelger
parents:
9145
diff
changeset
|
85 |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
86 // Merge all stations (range/step, borders of gauge ranges, infrastructures) |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
87 final Map<Double, InfrastructureValue> allStations = new HashMap<>(); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
88 final Map<Double, InfrastructureValue> secondBank = new HashMap<>(); // any second infrastructure in case of both-banks-option |
9236
b515ed950d39
S-Info flood durations with automatic km step width
mschaefer
parents:
9235
diff
changeset
|
89 addRangeStations(allStations, winfo); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
90 addGaugeLimits(allStations, durFinders.keySet(), calcRange.getMinimumDouble(), calcRange.getMaximumDouble()); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
91 addInfrastructures(allStations, secondBank, infras); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
92 final double[] stationsSorted = sortStations(allStations.keySet()); |
9150
23945061daec
gigantic refactoring: exporter, result, results
gernotbelger
parents:
9145
diff
changeset
|
93 |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
94 // Calculate W and Q for all stations and the selected discharge states/waterlevels |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
95 final WQKms[] wqkmsArray = calculateWsts(winfo, stationsSorted, problems); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
96 |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
97 // Determine discharge state labels of the waterlevels |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
98 updateWstLabels(wqkmsArray, winfo, problems); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
99 |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
100 final Map<Gauge, List<Double>> gaugeWstDurations = new HashMap<>(); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
101 calcGaugeWstDurations(winfo, new ArrayList<>(durFinders.keySet()), gaugeWstDurations, durFinders); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
102 |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
103 // Load base wst table (river).wst |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
104 // (should be in cache since already used in calculateWaterlevels (winfo.computeWaterlevelData) |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
105 final WstValueTable wst = WstValueTableFactory.getTable(this.riverInfoProvider.getRiver()); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
106 |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
107 // Create the result rows, and calculate and add the flood durations etc. |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
108 for (int i = 0; i <= stationsSorted.length - 1; i++) { |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
109 final Gauge gauge = this.riverInfoProvider.getGauge(stationsSorted[i], true); |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
110 final ResultRow row = createRow(stationsSorted[i], gauge, firstGauge, wqkmsArray, gaugeWstDurations.get(gauge), i); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
111 if (allStations.containsKey(stationsSorted[i]) && (allStations.get(stationsSorted[i]) != null)) |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
112 calculateInfrastructure(row, gauge, allStations.get(stationsSorted[i]), wst, durFinders); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
113 this.rows.add(row); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
114 if (secondBank.containsKey(stationsSorted[i])) { |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
115 final ResultRow row2 = ResultRow.create(row); |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
116 calculateInfrastructure(row2, gauge, secondBank.get(stationsSorted[i]), wst, durFinders); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
117 this.rows.add(row2); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
118 } |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
119 } |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
120 |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
121 // Get the labels of the selected waterlevels |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
122 final String[] wstLabels = new String[wqkmsArray.length]; |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
123 for (int i = 0; i <= wqkmsArray.length - 1; i++) |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
124 wstLabels[i] = wqkmsArray[i].getName(); |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
125 |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
126 results.addResult(new FloodDurationCalculationResult(label, wstLabels, this.rows), problems); |
9252 | 127 } |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
128 |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
129 /** |
9266
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
130 * Calculates the duration curve for a station |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
131 * (other than the version 3.2.1 W-Info Dauerlinie the wst column positions |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
132 * are taken from the Q values of the gauge's Q-D-table) |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
133 */ |
9266
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
134 public WQDay calcWQDays(final Calculation problems, final double station, final WINFOArtifact winfo) { |
9252 | 135 |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
136 final WstValueTable wst = WstValueTableFactory.getTable(this.riverInfoProvider.getRiver()); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
137 final Gauge gauge = this.riverInfoProvider.getRiver().determineGaugeByPosition(station); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
138 final Object[] obj = gauge.fetchDurationCurveData(); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
139 final int[] udays = (int[]) obj[0]; |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
140 final double[] qs = (double[]) obj[1]; |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
141 final int[] odays = new int[udays.length]; |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
142 final double[] oqs = new double[udays.length]; |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
143 final double[] ows = new double[udays.length]; |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
144 for (int i = 0, j = udays.length - 1; i <= udays.length - 1; i++, j--) { |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
145 odays[j] = 365 - udays[i]; |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
146 oqs[j] = qs[i]; |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
147 final QPosition qpos = wst.getQPosition(gauge.getStation().doubleValue(), qs[i]); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
148 if (qpos != null) |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
149 ows[j] = wst.interpolateW(station, qpos, problems); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
150 else |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
151 ows[j] = Double.NaN; |
9252 | 152 } |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
153 return new WQDay(odays, ows, oqs); |
9145 | 154 } |
155 | |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
156 /** |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
157 * Calculates the data for the Q main value lines in the duration curve chart |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
158 */ |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
159 public List<StickyAxisAnnotation> calcMainValueQAnnotations(final Calculation problems, final double station, final FloodDurationCalculationResult result) { |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
160 |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
161 // Search the station in the previously calculated result rows and terminate if no infrastructure row found |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
162 double station1 = station; |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
163 if (Double.isNaN(station)) { |
9298
0b1a51b0c42e
Included the infrastructure-less stations in the S-Info flood duration long. sections, and the selected wspls in their w/q duration curves
mschaefer
parents:
9297
diff
changeset
|
164 for (final ResultRow row : result.getAllRows()) { |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
165 station1 = row.getDoubleValue(GeneralResultType.station); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
166 break; |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
167 } |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
168 } |
9298
0b1a51b0c42e
Included the infrastructure-less stations in the S-Info flood duration long. sections, and the selected wspls in their w/q duration curves
mschaefer
parents:
9297
diff
changeset
|
169 final List<ResultRow> stationRows = searchStation(station1, result.getAllRows()); |
9297
7100a555607c
Small fixes of the S-Info flood duration outputs
mschaefer
parents:
9286
diff
changeset
|
170 if (stationRows.isEmpty()) { |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
171 return new ArrayList<>(); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
172 } |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
173 final ResultRow row = stationRows.get(0); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
174 final List<StickyAxisAnnotation> annotations = new ArrayList<>(); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
175 final List<DurationWaterlevel> wqds = (List<DurationWaterlevel>) row.getValue(SInfoResultType.customMultiRowColWaterlevel); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
176 for (final DurationWaterlevel wqd : wqds) { |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
177 final String label = wqd.getBezeichnung().startsWith("W=") ? "Q(" + wqd.getBezeichnung() + ")" : wqd.getBezeichnung(); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
178 final StickyAxisAnnotation annotation = new StickyAxisAnnotation(label, (float) wqd.getDischarge(), SimpleAxis.Y_AXIS, |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
179 FloodDurationCurveGenerator.YAXIS.Q.idx); |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
180 annotation.setHitPoint(wqd.getFloodDurDaysPerYear()); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
181 annotations.add(annotation); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
182 } |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
183 return annotations; |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
184 } |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
185 |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
186 /** |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
187 * Calculates the data for the W main value lines in the duration curve chart |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
188 */ |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
189 public List<StickyAxisAnnotation> calcMainValueWAnnotations(final Calculation problems, final double station, final FloodDurationCalculationResult result) { |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
190 |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
191 // Search the station in the previously calculated result rows and terminate if no infrastructure row found |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
192 double station1 = station; |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
193 if (Double.isNaN(station)) { |
9298
0b1a51b0c42e
Included the infrastructure-less stations in the S-Info flood duration long. sections, and the selected wspls in their w/q duration curves
mschaefer
parents:
9297
diff
changeset
|
194 for (final ResultRow row : result.getAllRows()) { |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
195 station1 = row.getDoubleValue(GeneralResultType.station); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
196 break; |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
197 } |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
198 } |
9298
0b1a51b0c42e
Included the infrastructure-less stations in the S-Info flood duration long. sections, and the selected wspls in their w/q duration curves
mschaefer
parents:
9297
diff
changeset
|
199 final List<ResultRow> stationRows = searchStation(station1, result.getAllRows()); |
9297
7100a555607c
Small fixes of the S-Info flood duration outputs
mschaefer
parents:
9286
diff
changeset
|
200 if (stationRows.isEmpty()) { |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
201 return new ArrayList<>(); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
202 } |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
203 final List<StickyAxisAnnotation> annotations = new ArrayList<>(); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
204 final ResultRow row = stationRows.get(0); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
205 final List<DurationWaterlevel> wqds = (List<DurationWaterlevel>) row.getValue(SInfoResultType.customMultiRowColWaterlevel); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
206 for (final DurationWaterlevel wqd : wqds) { |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
207 final String label = !wqd.getBezeichnung().startsWith("W=") ? "W(" + wqd.getBezeichnung() + ")" : wqd.getBezeichnung(); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
208 final StickyAxisAnnotation annotation = new StickyAxisAnnotation(label, (float) wqd.getWaterlevel(), SimpleAxis.Y_AXIS, |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
209 FloodDurationCurveGenerator.YAXIS.W.idx); |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
210 annotation.setHitPoint(wqd.getFloodDurDaysPerYear()); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
211 annotations.add(annotation); |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
212 } |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
213 return annotations; |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
214 } |
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
215 |
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
216 /** |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
217 * Calculate the data for the W and Q lines in the duration curve chart for the infrastructure height and add to result |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
218 * collection |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
219 */ |
9266
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
220 public List<StickyAxisAnnotation> calcInfrastructureAnnotations(final Calculation problems, final double station, |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
221 final FloodDurationCalculationResult result) { |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
222 |
9266
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
223 // Search the station in the previously calculated result rows and terminate if no infrastructure row found |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
224 double station1 = station; |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
225 if (Double.isNaN(station)) { |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
226 for (final ResultRow row : result.getRows()) { |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
227 station1 = row.getDoubleValue(GeneralResultType.station); |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
228 break; |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
229 } |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
230 } |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
231 final List<ResultRow> stationRows = searchStation(station1, result.getRows()); |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
232 if (stationRows.isEmpty() || (stationRows.get(0).getValue(SInfoResultType.infrastructuretype) == null)) { |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
233 return new ArrayList<>(); |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
234 } |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
235 // Same way as in MainValueWFacet and ..QFacet |
9266
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
236 final List<StickyAxisAnnotation> annotations = new ArrayList<>(); |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
237 for (final ResultRow row : stationRows) { |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
238 annotations.add(calcInfrastructureWAnnotation(row)); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
239 annotations.add(calcInfrastructureQAnnotation(row)); |
9266
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
240 } |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
241 return annotations; |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
242 } |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
243 |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
244 /** |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
245 * Searches the one or two rows of a station in a result rows collection |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
246 */ |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
247 private List<ResultRow> searchStation(final double station, final Collection<ResultRow> rows) { |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
248 final List<ResultRow> found = new ArrayList<>(); |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
249 for (final ResultRow row : rows) { |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
250 if (row.getDoubleValue(GeneralResultType.station) > station + 0.0001) |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
251 break; |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
252 else if (row.getDoubleValue(GeneralResultType.station) > station - 0.0001) |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
253 found.add(row); |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
254 } |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
255 return found; |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
256 } |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
257 |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
258 /** |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
259 * Calculates the Q annotation lines of an infrastructure |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
260 */ |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
261 private StickyAxisAnnotation calcInfrastructureQAnnotation(final ResultRow row) { |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
262 final String label = Resources.getMsg(this.context.getMeta(), "sinfo.chart.flood_duration.curve.infrastructure", |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
263 "sinfo.chart.flood_duration.curve.infrastructure", |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
264 SInfoResultType.infrastructuretype.exportValue(this.context, row.getValue(SInfoResultType.infrastructuretype)) |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
265 + ", " + SInfoResultType.riverside.exportValue(this.context, row.getValue(SInfoResultType.riverside))); |
9266
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
266 final StickyAxisAnnotation annotation = new StickyAxisAnnotation(label, (float) row.getDoubleValue(SInfoResultType.floodDischarge), |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
267 SimpleAxis.Y_AXIS, FloodDurationCurveGenerator.YAXIS.Q.idx); |
9266
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
268 annotation.setHitPoint((float) row.getDoubleValue(SInfoResultType.floodDuration)); |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
269 return annotation; |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
270 } |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
271 |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
272 /** |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
273 * Calculates the W annotation lines of an infrastructure |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
274 */ |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
275 private StickyAxisAnnotation calcInfrastructureWAnnotation(final ResultRow row) { |
9266
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
276 final String label = Resources.getMsg(this.context.getMeta(), "sinfo.chart.flood_duration.curve.infrastructure", |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
277 "sinfo.chart.flood_duration.curve.infrastructure", |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
278 SInfoResultType.infrastructuretype.exportValue(this.context, row.getValue(SInfoResultType.infrastructuretype)) |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
279 + ", " + SInfoResultType.riverside.exportValue(this.context, row.getValue(SInfoResultType.riverside))); |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
280 final StickyAxisAnnotation annotation = new StickyAxisAnnotation(label, (float) row.getDoubleValue(SInfoResultType.infrastructureHeight), |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
281 SimpleAxis.Y_AXIS, FloodDurationCurveGenerator.YAXIS.W.idx); |
9266
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
282 annotation.setHitPoint((float) row.getDoubleValue(SInfoResultType.floodDuration)); |
465347d12990
Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents:
9265
diff
changeset
|
283 return annotation; |
9257
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
284 } |
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
285 |
ef7b65576d4b
Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents:
9252
diff
changeset
|
286 /** |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
287 * Adds to a stations map all stations corresponding to the active range and step |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
288 */ |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
289 private void addRangeStations(final Map<Double, InfrastructureValue> allStations, final WINFOArtifact winfo) { |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
290 for (final double station : new ComputationRangeAccess(winfo).getKms()) |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
291 allStations.put(Double.valueOf(station), null); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
292 } |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
293 |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
294 /** |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
295 * Adds to a stations map all range limits of the gauges within the calc range |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
296 */ |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
297 private void addGaugeLimits(final Map<Double, InfrastructureValue> allStations, final Set<Gauge> gauges, final double fromKm, final double toKm) { |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
298 for (final Gauge gauge : gauges) { |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
299 final Double kmA = Double.valueOf(gauge.getRange().getA().doubleValue()); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
300 final Double kmB = Double.valueOf(gauge.getRange().getB().doubleValue()); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
301 if (kmA > fromKm - 0.0001) |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
302 allStations.put(kmA, null); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
303 if (kmB < toKm + 0.0001) |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
304 allStations.put(kmB, null); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
305 } |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
306 } |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
307 |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
308 /** |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
309 * Adds to a stations map all (first) infrastructures of a station, and the second, if any, to another map |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
310 */ |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
311 private void addInfrastructures(final Map<Double, InfrastructureValue> allStations, final Map<Double, InfrastructureValue> secondBank, |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
312 final List<InfrastructureValue> infrastructures) { |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
313 for (final InfrastructureValue infrastructure : infrastructures) { |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
314 final Double station = infrastructure.getStation(); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
315 if (!allStations.containsKey(station) || !(allStations.get(station) instanceof InfrastructureValue)) |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
316 allStations.put(station, infrastructure); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
317 else |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
318 secondBank.put(station, infrastructure); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
319 } |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
320 } |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
321 |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
322 /** |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
323 * Returns a double array with a sorted stations set |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
324 */ |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
325 private double[] sortStations(final Set<Double> stations) { |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
326 final TDoubleArrayList sorted = new TDoubleArrayList(); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
327 for (final Double station : stations) |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
328 sorted.add(station.doubleValue()); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
329 sorted.sort(); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
330 return sorted.toNativeArray(); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
331 } |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
332 |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
333 /** |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
334 * Calculates an array of w-q-longitudinal sections for all artifact W/Q options |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
335 */ |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
336 private WQKms[] calculateWsts(final WINFOArtifact winfo, final double[] stations, final Calculation problems) { |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
337 // First run may take long, further runs are faster since WstValueTable is in cache then |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
338 // (So funktioniert computeWaterlevelData wohl: |
9229
0dcd1cd41915
Different themes/facets for left bank and right bank infrastructures in S-Info flood durations, some fixmes done
mschaefer
parents:
9215
diff
changeset
|
339 // Es sucht die Spalte(n) zum Bezugspegel-Q in der W-Q-Tabelle ({river}.wst in Wst etc.), |
0dcd1cd41915
Different themes/facets for left bank and right bank infrastructures in S-Info flood durations, some fixmes done
mschaefer
parents:
9215
diff
changeset
|
340 // interpoliert die horizontale Tabellenposition (Q) und dann die vertikale Tabellenposition der station; |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
341 // das ergibt das W einer station für einen Abflusszustand; |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
342 // bei Vorgabe eines Pegel-W wird vorher anhand der W-Q-Tabelle des Pegels ({gauge}.at in DischargeTable) das Q |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
343 // interpoliert; |
9229
0dcd1cd41915
Different themes/facets for left bank and right bank infrastructures in S-Info flood durations, some fixmes done
mschaefer
parents:
9215
diff
changeset
|
344 // bei Vorgabe eines W auf freier Strecke wird wohl vorher noch die .wst-Interpolation eingesetzt, um das Q zu bekommen. |
0dcd1cd41915
Different themes/facets for left bank and right bank infrastructures in S-Info flood durations, some fixmes done
mschaefer
parents:
9215
diff
changeset
|
345 |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
346 final CalculationResult wstsData = winfo.computeWaterlevelData(stations); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
347 |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
348 /* copy all problems */ |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
349 final Calculation winfoProblems = wstsData.getReport(); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
350 final List<Problem> problems2 = winfoProblems.getProblems(); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
351 if (problems2 != null) { |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
352 for (final Problem problem : problems2) { |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
353 problems.addProblem(problem); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
354 } |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
355 } |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
356 return (WQKms[]) wstsData.getData(); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
357 } |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
358 |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
359 /** |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
360 * Determines the waterlevel/discharge state labels for the selected Q or W values and sets them in the WQKms array |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
361 */ |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
362 private void updateWstLabels(final WQKms[] wqkmsArray, final WINFOArtifact winfo, final Calculation problems) { |
9205
3dae6b78e1da
inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents:
9202
diff
changeset
|
363 |
9229
0dcd1cd41915
Different themes/facets for left bank and right bank infrastructures in S-Info flood durations, some fixmes done
mschaefer
parents:
9215
diff
changeset
|
364 for (int i = 0; i <= wqkmsArray.length - 1; i++) |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
365 wqkmsArray[i].setName(buildWQDescription(wqkmsArray[i], winfo)); |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
366 } |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
367 |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
368 /** |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
369 * Builds the description label of a waterlevel |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
370 */ |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
371 private String buildWQDescription(final WQKms wqkms, final WINFOArtifact winfo) { |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
372 |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
373 final WaterlevelDescriptionBuilder descBuilder = new WaterlevelDescriptionBuilder(winfo, this.context); |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
374 // TODO Zwischen numerischem Q-Wert und Dauerzahl-Hauptwert (0..364) unterscheiden |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
375 final String description = descBuilder.getDesc(wqkms); |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
376 if (!description.isEmpty() && Character.isDigit(description.charAt(0))) { |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
377 if (winfo.isQ()) |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
378 return "Q=" + description; |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
379 else |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
380 return "W=" + description; |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
381 } |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
382 else |
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
383 return description; |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
384 } |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
385 |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
386 /** |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
387 * Calculates the flood durations of the Qs of the waterlevels/discharge states for a map of gauges |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
388 */ |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
389 private void calcGaugeWstDurations(final WINFOArtifact winfo, final List<Gauge> gauges, final Map<Gauge, List<Double>> gaugeWstDurations, |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
390 final Map<Gauge, GaugeDurationValuesFinder> durFinders) { |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
391 |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
392 final double[] gaugeKms = new double[gauges.size()]; |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
393 for (int i = 0; i <= gauges.size() - 1; i++) { |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
394 gaugeKms[i] = gauges.get(i).getStation().doubleValue(); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
395 gaugeWstDurations.put(gauges.get(i), new ArrayList<Double>()); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
396 } |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
397 final CalculationResult wstsData = winfo.computeWaterlevelData(gaugeKms); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
398 final WQKms[] wsts = (WQKms[]) wstsData.getData(); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
399 for (int i = 0; i <= gauges.size() - 1; i++) { |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
400 final GaugeDurationValuesFinder durFinder = durFinders.get(gauges.get(i)); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
401 for (int j = 0; j <= wsts.length - 1; j++) { |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
402 final double d = durFinder.getDuration(wsts[j].getQ(i)); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
403 gaugeWstDurations.get(gauges.get(i)).add(Double.valueOf(underflowDaysToOverflowDays(d))); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
404 } |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
405 } |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
406 } |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
407 |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
408 /** |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
409 * Create a result row for a station and its gauge, and add w-q-values as selected |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
410 */ |
9259
66b003701546
Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents:
9257
diff
changeset
|
411 private ResultRow createRow(final Double station, final Gauge gauge, final Gauge firstGauge, final WQKms[] wqkmsArray, |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
412 final List<Double> gaugeDurations, final int kmIndex) { |
9145 | 413 |
414 final ResultRow row = ResultRow.create(); | |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
415 row.putValue(GeneralResultType.station, station); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
416 row.putValue(SInfoResultType.infrastructuretype, null); // is replaced later for an infrastructure |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
417 row.putValue(SInfoResultType.floodDuration, Double.NaN); // is replaced later for an infrastructure |
9205
3dae6b78e1da
inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents:
9202
diff
changeset
|
418 |
9229
0dcd1cd41915
Different themes/facets for left bank and right bank infrastructures in S-Info flood durations, some fixmes done
mschaefer
parents:
9215
diff
changeset
|
419 final String gaugeLabel = this.riverInfoProvider.findGauge(station, (gauge == firstGauge)); |
9205
3dae6b78e1da
inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents:
9202
diff
changeset
|
420 row.putValue(SInfoResultType.gaugeLabel, gaugeLabel); |
3dae6b78e1da
inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents:
9202
diff
changeset
|
421 |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
422 final String location = this.riverInfoProvider.getLocation(station); |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
423 row.putValue(SInfoResultType.location, location); |
9145 | 424 |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
425 final List<DurationWaterlevel> wsts = new ArrayList<>(wqkmsArray.length); |
9205
3dae6b78e1da
inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents:
9202
diff
changeset
|
426 |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
427 for (int i = 0; i <= wqkmsArray.length - 1; i++) { |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
428 assert (wqkmsArray[i].getKm(kmIndex) == station.doubleValue()); |
9205
3dae6b78e1da
inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents:
9202
diff
changeset
|
429 |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
430 final int overflowDays = (int) Math.round(gaugeDurations.get(i)); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
431 |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
432 final DurationWaterlevel dw = new DurationWaterlevel(wqkmsArray[i].getW(kmIndex), overflowDays, wqkmsArray[i].getQ(kmIndex), |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
433 wqkmsArray[i].getName()); |
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
434 wsts.add(dw); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
435 } |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
436 row.putValue(SInfoResultType.customMultiRowColWaterlevel, wsts); |
9205
3dae6b78e1da
inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents:
9202
diff
changeset
|
437 |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
438 return row; |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
439 } |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
440 |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
441 /** |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
442 * Calculate the result row fields for one infrastructure |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
443 */ |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
444 private void calculateInfrastructure(final ResultRow row, final Gauge gauge, final InfrastructureValue infrastructure, final WstValueTable wst, |
9205
3dae6b78e1da
inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents:
9202
diff
changeset
|
445 final Map<Gauge, GaugeDurationValuesFinder> durFinders) { |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
446 |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
447 // Interpolate the infrastructure height in the wst table to get the corresponding Q |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
448 final Calculation problems = new Calculation(); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
449 final double[] qs = wst.findQsForW(infrastructure.getStation().doubleValue(), infrastructure.getHeight().doubleValue(), problems); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
450 // TODO Fehlerbehandlung (kein Q gefunden) |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
451 final double q = (qs.length >= 1) ? qs[0] : Double.NaN; |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
452 // Determine the relative column position of the Q of the infrastructure height |
9269
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
453 final QPosition qPos = wst.getQPosition(infrastructure.getStation().doubleValue(), q); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
454 // Get the Q for the found column position for the station of the gauge |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
455 final double qGauge = wst.getQ(qPos, gauge.getStation().doubleValue()); |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
456 // Interpolate the Q-D-table of the gauge |
83ebeb620b5a
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents:
9266
diff
changeset
|
457 final double dur = underflowDaysToOverflowDays(durFinders.get(gauge).getDuration(qGauge)); |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
458 // Set the result row |
9229
0dcd1cd41915
Different themes/facets for left bank and right bank infrastructures in S-Info flood durations, some fixmes done
mschaefer
parents:
9215
diff
changeset
|
459 row.putValue(SInfoResultType.riverside, infrastructure.getAttributeKey()); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
460 row.putValue(SInfoResultType.floodDuration, dur); |
9286
bcbae86ce7b3
Improved flood duration curve calculation as specified by BfG
mschaefer
parents:
9269
diff
changeset
|
461 row.putValue(SInfoResultType.floodDischarge, q); |
9176
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
462 row.putValue(SInfoResultType.infrastructureHeight, infrastructure.getHeight()); |
1614cb14308f
Work on calculations for S-Info flood duration workflow
mschaefer
parents:
9170
diff
changeset
|
463 row.putValue(SInfoResultType.infrastructuretype, infrastructure.getInfrastructure().getType().getName()); |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
464 } |
9145 | 465 |
9202
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
466 /** |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
467 * Translates underflow duration into overflow duration |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
468 */ |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
469 private double underflowDaysToOverflowDays(final double underflowDays) { |
b4402594213b
More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents:
9176
diff
changeset
|
470 return 365 - underflowDays; |
9145 | 471 } |
472 } |