annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java @ 9269:83ebeb620b5a

Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
author mschaefer
date Thu, 19 Jul 2018 08:07:03 +0200
parents 465347d12990
children bcbae86ce7b3
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 */
9252
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
69 public void execute(final Calculation problems, final String label, final DoubleRange calcRange,
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
70 final RiversideChoiceKey riverside, 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
9202
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
94 // Calculate W and Q for all stations and the selected discharge states
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
95 // TODO Geht das schneller, wenn man WstValueTable statt WINFOArtifact.computeWaterlevelData nutzt?
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 final WQKms[] wqkmsArray = calculateWaterlevels(winfo, stationsSorted, problems);
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
97
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
98 // Determine discharge state labels of the main values
9259
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
99 updateMainValueLabels(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
100
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
101 // Load base wst table (river).wst - first run takes long time, then it's cached
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
102 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
103
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
104 // Calculate the durations and create the result rows
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
105 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
106 final Gauge gauge = this.riverInfoProvider.getGauge(stationsSorted[i], true);
9259
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
107 final ResultRow row = createRow(stationsSorted[i], gauge, firstGauge, wqkmsArray, durFinders.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
108 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
109 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
110 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
111 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
112 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
113 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
114 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
115 }
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
116 }
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
117
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
118 //// Create a finder for Q in the {river}.wst km-w-q table
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
119 // final WQBaseTableFinder wqFinder = WQBaseTableFinder.loadValues(this.riverInfoProvider.getRiver(),
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
120 //// calcRange.getMinimumDouble(),
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
121 // calcRange.getMaximumDouble(), problems);
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
122 //
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
123 //// Calculate the durations and create the result rows
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
124 // for (int i = 0; i <= stationsSorted.length - 1; i++) {
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
125 // final Gauge gauge = this.riverInfoProvider.getGauge(stationsSorted[i], true);
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
126 // final ResultRow row = createRow(stationsSorted[i], gauge, firstGauge, wqkmsArray, durFinders.get(gauge), i);
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
127 // if (allStations.containsKey(stationsSorted[i]) && (allStations.get(stationsSorted[i]) != null))
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
128 // calculateInfrastructure(row, gauge, allStations.get(stationsSorted[i]), wqFinder, durFinders);
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
129 // this.rows.add(row);
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
130 // if (secondBank.containsKey(stationsSorted[i])) {
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
131 // final ResultRow row2 = ResultRow.create(row);
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
132 // calculateInfrastructure(row2, gauge, secondBank.get(stationsSorted[i]), wqFinder, durFinders);
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
133 // this.rows.add(row2);
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
134 // }
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
135 // }
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
136
9259
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
137 final String[] mainValueLabels = new String[wqkmsArray.length];
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
138 for (int i = 0; i <= wqkmsArray.length - 1; i++)
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
139 mainValueLabels[i] = wqkmsArray[i].getName();
9252
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
140 results.addResult(new FloodDurationCalculationResult(label, mainValueLabels, this.rows), problems);
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
141 }
9202
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
142
9257
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
143 /**
9266
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
144 * Calculates the duration curve for a station
9257
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
145 */
9266
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
146 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
147
9257
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
148 // Same processing as in W-Info DurationCurveState
9252
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
149 winfo.addStringData("ld_locations", Double.toString(station));
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
150 final CalculationResult res = winfo.getDurationCurveData();
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
151 final WQDay underflow = (WQDay) res.getData();
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
152 // Transform underflow days into overflow days and re-sort
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
153 final int[] days = new int[underflow.getWs().length];
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
154 final double[] ws = new double[days.length];
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
155 final double[] qs = new double[days.length];
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
156 for (int i = 0, j = days.length - 1; i <= days.length - 1; i++, j--) {
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
157 days[j] = 365 - underflow.getDay(i);
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
158 ws[j] = underflow.getW(i);
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
159 qs[j] = underflow.getQ(i);
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents: 9236
diff changeset
160 }
9266
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
161 return new WQDay(days, ws, qs);
9145
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
162 }
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
163
9176
1614cb14308f Work on calculations for S-Info flood duration workflow
mschaefer
parents: 9170
diff changeset
164 /**
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
165 * 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
166 */
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
167 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
168
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
169 // 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
170 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
171 if (Double.isNaN(station)) {
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
172 for (final ResultRow row : result.getRows()) {
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
173 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
174 break;
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
175 }
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
176 }
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
177 final List<ResultRow> stationRows = searchStation(station1, result.getRows());
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
178 if (stationRows.isEmpty() || (stationRows.get(0).getValue(SInfoResultType.infrastructuretype) == null)) {
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
179 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
180 }
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
181 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
182 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
183 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
184 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
185 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
186 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
187 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
188 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
189 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
190 }
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
191 return annotations;
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
192 }
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
193
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
194 /**
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
195 * 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
196 */
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
197 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
198
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
199 // 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
200 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
201 if (Double.isNaN(station)) {
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
202 for (final ResultRow row : result.getRows()) {
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
203 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
204 break;
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
205 }
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
206 }
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
207 final List<ResultRow> stationRows = searchStation(station1, result.getRows());
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
208 if (stationRows.isEmpty() || (stationRows.get(0).getValue(SInfoResultType.infrastructuretype) == null)) {
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
209 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
210 }
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
211 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
212 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
213 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
214 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
215 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
216 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
217 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
218 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
219 annotations.add(annotation);
9257
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
220 }
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
221 return annotations;
9257
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
222 }
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
223
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
224 /**
9259
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
225 * 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
226 * collection
9257
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
227 */
9266
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
228 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
229 final FloodDurationCalculationResult result) {
9257
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
230
9266
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
231 // 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
232 double station1 = station;
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
233 if (Double.isNaN(station)) {
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
234 for (final ResultRow row : result.getRows()) {
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
235 station1 = row.getDoubleValue(GeneralResultType.station);
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
236 break;
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
237 }
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
238 }
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
239 final List<ResultRow> stationRows = searchStation(station1, result.getRows());
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
240 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
241 return new ArrayList<>();
9257
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
242 }
9259
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
243 // Same way as in MainValueWFacet and ..QFacet
9266
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
244 final List<StickyAxisAnnotation> annotations = new ArrayList<>();
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
245 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
246 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
247 annotations.add(calcInfrastructureQAnnotation(row));
9266
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
248 }
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
249 return annotations;
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
250 }
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
251
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
252 /**
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
253 * 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
254 */
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
255 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
256 final List<ResultRow> found = new ArrayList<>();
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
257 for (final ResultRow row : rows) {
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
258 if (row.getDoubleValue(GeneralResultType.station) > station + 0.0001)
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
259 break;
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
260 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
261 found.add(row);
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
262 }
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
263 return found;
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
264 }
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
265
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
266 /**
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
267 * Calculates the Q annotation lines of an infrastructure
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
268 */
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
269 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
270 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
271 "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
272 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
273 + ", " + 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
274 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
275 SimpleAxis.Y_AXIS, FloodDurationCurveGenerator.YAXIS.Q.idx);
9266
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
276 annotation.setHitPoint((float) row.getDoubleValue(SInfoResultType.floodDuration));
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
277 return annotation;
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
278 }
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
279
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
280 /**
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
281 * Calculates the W annotation lines of an infrastructure
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
282 */
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
283 private StickyAxisAnnotation calcInfrastructureWAnnotation(final ResultRow row) {
9266
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
284 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
285 "sinfo.chart.flood_duration.curve.infrastructure",
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
286 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
287 + ", " + 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
288 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
289 SimpleAxis.Y_AXIS, FloodDurationCurveGenerator.YAXIS.W.idx);
9266
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
290 annotation.setHitPoint((float) row.getDoubleValue(SInfoResultType.floodDuration));
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
291 return annotation;
9257
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
292 }
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
293
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
294 /**
9202
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 stations corresponding to the active range and step
9176
1614cb14308f Work on calculations for S-Info flood duration workflow
mschaefer
parents: 9170
diff changeset
296 */
9202
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 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
298 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
299 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
300 }
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
301
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
302 /**
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
303 * 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
304 */
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
305 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
306 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
307 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
308 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
309 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
310 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
311 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
312 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
313 }
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
314 }
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
315
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
316 /**
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
317 * 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
318 */
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
319 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
320 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
321 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
322 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
323 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
324 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
325 else
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
326 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
327 }
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
328 }
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
329
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
330 /**
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
331 * 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
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 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
334 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
335 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
336 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
337 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
338 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
339 }
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
340
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
341 /**
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
342 * 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
343 */
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
344 private WQKms[] calculateWaterlevels(final WINFOArtifact winfo, final double[] stations, final Calculation problems) {
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
345 // REMARK aus TkhCalculation - move to WinfoArtifactWrapper?
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
346 // TODO das ist ziemlich langsam - durch den WQBaseTableFinder ersetzen? (vorher W-Optionen in Q umrechnen)
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
347 // (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
348 // 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
349 // 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
350 // 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
351 // 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
352 // 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
353 // 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
354
9202
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
355 final CalculationResult waterlevelData = winfo.computeWaterlevelData(stations);
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
356
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
357 /* copy all problems */
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
358 final Calculation winfoProblems = waterlevelData.getReport();
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
359 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
360 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
361 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
362 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
363 }
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
364 }
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
365 return (WQKms[]) waterlevelData.getData();
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
366 }
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
367
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
368 /**
9259
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
369 * 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
370 */
9259
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
371 private void updateMainValueLabels(final WQKms[] wqkmsArray, final WINFOArtifact winfo, final Calculation problems) {
9205
3dae6b78e1da inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents: 9202
diff changeset
372
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
373 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
374 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
375 }
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
376
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
377 /**
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
378 *
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
379 * @param wqkms
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
380 * @param descBuilder
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
381 * @return
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
382 */
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
383 private String buildWQDescription(final WQKms wqkms, final WINFOArtifact winfo) {
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
384 final WaterlevelDescriptionBuilder descBuilder = new WaterlevelDescriptionBuilder(winfo, this.context);
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
385 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
386 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
387 if (winfo.isQ())
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
388 return "Q=" + description;
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
389 else
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
390 return "W=" + description;
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
391 }
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
392 else
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
393 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
394 }
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
395
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
396 /**
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
397 * 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
398 */
9259
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
399 private ResultRow createRow(final Double station, final Gauge gauge, final Gauge firstGauge, final WQKms[] wqkmsArray,
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
400 final GaugeDurationValuesFinder durationFinder, final int kmIndex) {
9145
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
401
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
402 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
403 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
404 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
405 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
406
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
407 final String gaugeLabel = this.riverInfoProvider.findGauge(station, (gauge == firstGauge));
9205
3dae6b78e1da inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents: 9202
diff changeset
408 row.putValue(SInfoResultType.gaugeLabel, gaugeLabel);
3dae6b78e1da inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents: 9202
diff changeset
409
9202
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
410 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
411 row.putValue(SInfoResultType.location, location);
9145
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
412
9205
3dae6b78e1da inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents: 9202
diff changeset
413 final List<DurationWaterlevel> waterlevels = new ArrayList<>(wqkmsArray.length);
3dae6b78e1da inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents: 9202
diff changeset
414
9259
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
415 for (final WQKms wqKms : wqkmsArray) {
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
416 assert (wqKms.getKm(kmIndex) == station.doubleValue());
9205
3dae6b78e1da inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents: 9202
diff changeset
417
9259
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
418 final int overflowDays = (int) Math.round(underflowDaysToOverflowDays(durationFinder.getDuration(wqKms.getQ(kmIndex))));
9205
3dae6b78e1da inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents: 9202
diff changeset
419
9259
66b003701546 Added infrastructure height and Q annotation to S-Info flood duration curve chart
mschaefer
parents: 9257
diff changeset
420 final DurationWaterlevel dw = new DurationWaterlevel(wqKms.getW(kmIndex), overflowDays, wqKms.getQ(kmIndex), wqKms.getName());
9205
3dae6b78e1da inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents: 9202
diff changeset
421 waterlevels.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
422 }
9205
3dae6b78e1da inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents: 9202
diff changeset
423 row.putValue(SInfoResultType.customMultiRowColWaterlevel, waterlevels);
3dae6b78e1da inundationDuration/floodDuration multiple columns+chartLines refactoring
gernotbelger
parents: 9202
diff changeset
424
9202
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
425 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
426 }
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
427
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
428 /// **
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
429 // * Calculate the result row fields for one infrastructure - gives wrong duration numbers where Q changes within the
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
430 /// gauge range
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
431 // */
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
432 // private void calculateInfrastructure(final ResultRow row, final Gauge gauge, final InfrastructureValue
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
433 /// infrastructure, final WQBaseTableFinder wqFinder,
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
434 // final Map<Gauge, GaugeDurationValuesFinder> durFinders) {
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
435 //
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
436 // final double q = wqFinder.getDischarge(infrastructure.getStation(), infrastructure.getHeight());
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
437 // final double qOut = Double.isInfinite(q) ? Double.NaN : q;
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
438 // final double dur = underflowDaysToOverflowDays(durFinders.get(gauge).getDuration(q));
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
439 // row.putValue(SInfoResultType.riverside, infrastructure.getAttributeKey());
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
440 // row.putValue(SInfoResultType.floodDuration, dur);
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
441 // row.putValue(SInfoResultType.floodDischarge, qOut);
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
442 // row.putValue(SInfoResultType.infrastructureHeight, infrastructure.getHeight());
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
443 // row.putValue(SInfoResultType.infrastructuretype, infrastructure.getInfrastructure().getType().getName());
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
444 // }
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
445
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 /**
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
447 * 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
448 */
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
449 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
450 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
451
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
452 // 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
453 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
454 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
455 // 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
456 final double q = (qs.length >= 1) ? qs[0] : Double.NaN;
9176
1614cb14308f Work on calculations for S-Info flood duration workflow
mschaefer
parents: 9170
diff changeset
457 final double qOut = Double.isInfinite(q) ? Double.NaN : q;
9269
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
458 // Determine the relative column position of the Q
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
459 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
460 // 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
461 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
462 // 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
463 final double dur = underflowDaysToOverflowDays(durFinders.get(gauge).getDuration(qGauge));
83ebeb620b5a Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
mschaefer
parents: 9266
diff changeset
464 // Set 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
465 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
466 row.putValue(SInfoResultType.floodDuration, dur);
9176
1614cb14308f Work on calculations for S-Info flood duration workflow
mschaefer
parents: 9170
diff changeset
467 row.putValue(SInfoResultType.floodDischarge, qOut);
1614cb14308f Work on calculations for S-Info flood duration workflow
mschaefer
parents: 9170
diff changeset
468 row.putValue(SInfoResultType.infrastructureHeight, infrastructure.getHeight());
1614cb14308f Work on calculations for S-Info flood duration workflow
mschaefer
parents: 9170
diff changeset
469 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
470 }
9145
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
471
9202
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
472 /**
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
473 * 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
474 */
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
475 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
476 return 365 - underflowDays;
9145
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
477 }
e6b63b2b41b9 sinfo.flood_duration pdf, csv, ui
gernotbelger
parents:
diff changeset
478 }

http://dive4elements.wald.intevation.org