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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
2 * Software engineering by
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
5 *
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
9 */
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.sinfo.flood_duration;
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
11
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
18
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
23 import org.dive4elements.river.artifacts.common.GeneralResultType;
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
35 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
52 */
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
53 final class FloodDurationCalculator {
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
56
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
57 private final RiverInfoProvider riverInfoProvider;
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
58
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9145
diff changeset
59 private final CallContext context;
9145
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
63 this.riverInfoProvider = riverInfoProvider;
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
64 }
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
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
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
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
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
154 }
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
413
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
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
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
471 }
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
472 }

http://dive4elements.wald.intevation.org