annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculation.java @ 9617:1d4262a68f1f

#12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
author dnt_bjoernsen <d.tironi@bjoernsen.de>
date Thu, 10 Oct 2019 15:29:02 +0200
parents f2473dc34535
children
rev   line source
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
1 /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
2 * Software engineering by
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
5 *
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
9 */
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.sinfo.collision;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
11
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9067
diff changeset
12 import java.util.ArrayList;
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9067
diff changeset
13 import java.util.Collection;
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
14 import java.util.Collections;
9613
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
15 import java.util.Date;
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
16 import java.util.HashMap;
9487
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
17 import java.util.List;
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
18 import java.util.Map;
9613
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
19 import java.util.Map.Entry;
9487
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
20 import java.util.NavigableSet;
9613
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
21 import java.util.TreeMap;
9487
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
22 import java.util.TreeSet;
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9067
diff changeset
23
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
24 import org.apache.commons.lang.math.DoubleRange;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
25 import org.dive4elements.artifacts.CallContext;
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9067
diff changeset
26 import org.dive4elements.river.artifacts.common.GeneralResultType;
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9067
diff changeset
27 import org.dive4elements.river.artifacts.common.ResultRow;
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
28 import org.dive4elements.river.artifacts.model.Calculation;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
29 import org.dive4elements.river.artifacts.model.CalculationResult;
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
30 import org.dive4elements.river.artifacts.model.DateRange;
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
31 import org.dive4elements.river.artifacts.resources.Resources;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
32 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact;
9176
1614cb14308f Work on calculations for S-Info flood duration workflow
mschaefer
parents: 9157
diff changeset
33 import org.dive4elements.river.artifacts.sinfo.common.GaugeDischargeValuesFinder;
9202
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9176
diff changeset
34 import org.dive4elements.river.artifacts.sinfo.common.GaugeMainValueFinder;
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
35 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
36 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
37 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
38 import org.dive4elements.river.backend.utils.DateUtil;
9613
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
39 import org.dive4elements.river.model.DischargeTable;
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
40 import org.dive4elements.river.model.Gauge;
9176
1614cb14308f Work on calculations for S-Info flood duration workflow
mschaefer
parents: 9157
diff changeset
41 import org.dive4elements.river.model.MainValueType.MainValueTypeKey;
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
42 import org.dive4elements.river.model.River;
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
43 import org.dive4elements.river.model.sinfo.CollisionAggregateValue;
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
44 import org.dive4elements.river.model.sinfo.CollisionValue;
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
45
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
46 class CollisionCalculation {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
47
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
48 // private static Logger log = Logger.getLogger(FloodDurationCalculation.class);
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
49
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
50 private final CallContext context;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
51
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
52 public CollisionCalculation(final CallContext context) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
53 this.context = context;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
54 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
55
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
56 public CalculationResult calculate(final SINFOArtifact sinfo) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
57
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
58 final String user = CalculationUtils.findArtifactUser(this.context, sinfo);
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
59
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
60 final int qfinderProblemCount = 0;
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
61
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
62 // access input data
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
63 final CollisionAccess access = new CollisionAccess(sinfo);
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
64 final River river = access.getRiver();
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
65 final RiverInfo riverInfo = new RiverInfo(river);
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
66
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
67 final DoubleRange calcRange = access.getRange();
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
68
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
69 // calculate results for each year or epoch
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
70 final Calculation problems = new Calculation();
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
71
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
72 final String calcModeLabel = Resources.getMsg(this.context.getMeta(), sinfo.getCalculationMode().name());
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
73
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
74 final CollisionCalculationResults results = new CollisionCalculationResults(calcModeLabel, user, riverInfo, calcRange, access.getYearsHeader());
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
75
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9067
diff changeset
76 final Collection<ResultRow> overViewRows = new ArrayList<>();
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
77
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
78 final List<DateRange> years = new ArrayList<>();
9487
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
79 final NavigableSet<Integer> detailYears = new TreeSet<>();
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
80 final List<CollisionCalcOverviewResult> singleYearResults = new ArrayList<>();
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
81 if (access.getYears() != null) {
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
82 for (final int year : access.getYears()) {
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
83 calculateOverview(overViewRows, river, access.getLowerKm(), access.getUpperKm(), year, year, false);
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
84 years.add(new DateRange(DateUtil.getStartDateFromYear(year), DateUtil.getEndDateFromYear(year)));
9487
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
85 detailYears.add(Integer.valueOf(year));
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
86 }
9318
7b2b086e45f0 collision pdf details, ResultType refactoring, bezugswst result
gernotbelger
parents: 9204
diff changeset
87 } else {
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
88 for (final DateRange dr : access.getEpochs()) {
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
89 calculateOverview(overViewRows, river, access.getLowerKm(), access.getUpperKm(), dr.getFromYear(), dr.getToYear(), true);
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
90 years.add(dr);
9487
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
91 detailYearsAdd(detailYears, dr);
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
92 }
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
93
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
94 for (final Integer year : detailYears) {
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
95
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
96 final Collection<ResultRow> yearRows = new ArrayList<>();
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
97 calculateOverview(yearRows, river, access.getLowerKm(), access.getUpperKm(), year, year, false);
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
98
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
99 if (!yearRows.isEmpty()) {
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
100 final DateRange yearRange = new DateRange(DateUtil.getStartDateFromYear(year), DateUtil.getEndDateFromYear(year));
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
101 final CollisionCalcOverviewResult yearResult = new CollisionCalcOverviewResult(Integer.toString(year), false,
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
102 Collections.singleton(yearRange), yearRows);
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
103 singleYearResults.add(yearResult);
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
104 }
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
105 }
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
106 }
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
107 final CollisionCalcOverviewResult overviewResult = new CollisionCalcOverviewResult(access.getYearsHeader(), (access.getYears() == null), years,
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
108 overViewRows);
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
109 results.addResult(overviewResult, problems);
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
110
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
111 /* add the single year from epochs, after the epochs, so they will be exported at the end of the table etc. */
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
112 for (final CollisionCalcOverviewResult result : singleYearResults)
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
113 results.addResult(result, problems);
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
114
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
115 // calculate secondary results for each year
9613
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
116 final Map<String, TreeMap<Date, GaugeDischargeValuesFinder>> qFinders = new HashMap<>();
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
117 final Map<String, GaugeMainValueFinder> zoneFinders = new HashMap<>();
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9067
diff changeset
118 final Collection<ResultRow> detailsRows = new ArrayList<>();
9487
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
119 for (final Integer year : detailYears)
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
120 calculateDetails(detailsRows, river, access, year, qFinders, zoneFinders, problems, years, qfinderProblemCount);
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9067
diff changeset
121 final CollisionCalcDetailResult detailResult = new CollisionCalcDetailResult("Details", detailsRows);
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
122 results.addResult(detailResult, problems);
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9067
diff changeset
123
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
124 return new CalculationResult(results, problems);
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
125 }
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
126
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
127 /**
9487
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
128 * Adds all years of an epoch to a set
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
129 */
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
130 private void detailYearsAdd(final NavigableSet<Integer> detailYears, final DateRange epoch) {
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
131 for (int year = epoch.getFromYear(); year <= epoch.getToYear(); year++)
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
132 detailYears.add(Integer.valueOf(year));
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
133 }
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
134
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
135 /**
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
136 * Calculates the collision counts for a km range of a river and a year or year range (epoch),
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
137 * and adds them to a ResultRow collection
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
138 */
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
139 private void calculateOverview(final Collection<ResultRow> rows, final River river, final double fromKm, final double toKm, final int fromYear,
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
140 final int toYear, final boolean isEpoch) {
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
141 for (final CollisionAggregateValue aggregate : CollisionAggregateValue.getValuesByKm(river, fromKm, toKm, fromYear, toYear)) {
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
142 rows.add(ResultRow.create().putValue(GeneralResultType.station, aggregate.getStation())
9582
8b457ca70512 Punkt 8.1 Grundberührungen Header
gernotbelger
parents: 9540
diff changeset
143 .putValue(SInfoResultType.years, yearsToString(isEpoch, fromYear, toYear)).putValue(SInfoResultType.collisionCount, aggregate.getCount()));
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
144 }
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
145 }
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
146
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
147 /**
9487
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
148 * Returns the string representation of a year or epoch
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
149 */
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
150 public static String yearsToString(final boolean isEpoch, final DateRange years) {
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
151 return yearsToString(isEpoch, years.getFromYear(), years.getToYear());
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
152 }
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
153
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
154 /**
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
155 * Returns the string representation of a year or epoch
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
156 */
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
157 public static String yearsToString(final boolean isEpoch, final int fromYear, final int toYear) {
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
158 return (isEpoch ? String.format("%d-%d", fromYear, toYear) : Integer.toString(fromYear));
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
159 }
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
160
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
161 /**
504f63512379 Sinfo collisions: calculation of multiple epochs, avoiding duplicate collision events in the details report
mschaefer
parents: 9318
diff changeset
162 * Calculates the collision details for a km range of a river and a year, and adds them to a ResultRow collection
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
163 *
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
164 * @param qfinderProblemCount
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
165 */
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
166 private void calculateDetails(final Collection<ResultRow> rows, final River river, final CollisionAccess access, final int year,
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
167 final Map<String, TreeMap<Date, GaugeDischargeValuesFinder>> qFinders, final Map<String, GaugeMainValueFinder> zoneFinders,
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
168 final Calculation problems, final List<DateRange> years, final int qfinderProblemCount) {
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
169
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
170 final double fromKm = access.getLowerKm();
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
171 final double toKm = access.getUpperKm();
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
172
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
173 for (final CollisionValue collision : CollisionValue.getValues(river, fromKm, toKm, DateUtil.getStartDateFromYear(year),
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
174 DateUtil.getEndDateFromYear(year))) {
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
175 final String gaugeName = collision.getGaugeName();
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
176 final double q = getQ(qFinders, gaugeName, collision.getGaugeW().doubleValue(), collision.getEventDate(), river, problems, years,
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
177 qfinderProblemCount);
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
178 final double qOut = Double.isInfinite(q) ? Double.NaN : q;
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
179 final String zone = getZone(zoneFinders, gaugeName, q, river, problems);
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
180 rows.add(ResultRow.create().putValue(GeneralResultType.station, collision.getStation())
9582
8b457ca70512 Punkt 8.1 Grundberührungen Header
gernotbelger
parents: 9540
diff changeset
181 .putValue(GeneralResultType.dateShort, collision.getEventDate()).putValue(SInfoResultType.collisionGaugeW, collision.getGaugeW())
8b457ca70512 Punkt 8.1 Grundberührungen Header
gernotbelger
parents: 9540
diff changeset
182 .putValue(GeneralResultType.gaugeLabel, gaugeName).putValue(SInfoResultType.dischargeLong, qOut)
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
183 .putValue(SInfoResultType.dischargeZone, zone));
9157
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
184 }
f9bb5d0a6ff3 Added the S-Info collision calculation and chart output
mschaefer
parents: 9150
diff changeset
185 }
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
186
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
187 /**
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
188 * Gets the discharge of a gauge and a W
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
189 *
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
190 * @param years
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
191 * @param qfinderProblemCount
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
192 */
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
193 private double getQ(final Map<String, TreeMap<Date, GaugeDischargeValuesFinder>> qFinders, final String gaugeName, final double w, final Date when,
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
194 final River river, final Calculation problems, final List<DateRange> years, int qfinderProblemCount) {
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
195 // Find the gauge and load its discharge table, if not already in the map
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
196 final String gnKey = gaugeName.toLowerCase();
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
197 if (!qFinders.containsKey(gnKey))
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
198 addQFinders(qFinders, gaugeName, problems, river, years);
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
199
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
200 // Interpolate W.
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
201 // Interpolate W.
9613
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
202 final GaugeDischargeValuesFinder qFinder = getQFinder(qFinders.get(gnKey), when);
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
203 if (qFinder == null) {
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
204 qfinderProblemCount++;
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
205 if (qfinderProblemCount == 1)
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
206 problems.addProblem("gauge_discharge_table.missing", gaugeName);
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
207 return Double.NaN;
9613
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
208 }
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
209 return qFinder.getDischarge(w);
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
210 }
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
211
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
212 /**
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
213 * Add the discharge finders for a gauge and the active time period
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
214 */
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
215 private void addQFinders(final Map<String, TreeMap<Date, GaugeDischargeValuesFinder>> qFinders, final String gaugeName, final Calculation problems,
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
216 final River river, final List<DateRange> years) {
9613
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
217 final String gnKey = gaugeName.toLowerCase();
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
218 final Gauge gauge = river.determineGaugeByName(gaugeName);
9613
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
219 if (gauge == null) {
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
220 qFinders.put(gnKey, new TreeMap<Date, GaugeDischargeValuesFinder>());
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
221 return;
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
222 }
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
223 final List<DischargeTable> qtables = DischargeTable.fetchHistoricalDischargeTables(gauge, years.get(0).getFrom(), years.get(years.size() - 1).getTo());
9613
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
224 qFinders.put(gnKey, new TreeMap<Date, GaugeDischargeValuesFinder>());
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
225 for (final DischargeTable qtable : qtables)
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
226 qFinders.get(gnKey).put(qtable.getTimeInterval().getStartTime(), GaugeDischargeValuesFinder.loadValues(qtable, river, gaugeName, problems));
9613
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
227 }
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
228
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
229 /**
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
230 * Searches a q values finder map for a date time
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
231 */
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
232 private GaugeDischargeValuesFinder getQFinder(final TreeMap<Date, GaugeDischargeValuesFinder> qFinders, final Date when) {
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
233 if (qFinders.containsKey(when))
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
234 return qFinders.get(when);
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
235 final Entry<Date, GaugeDischargeValuesFinder> found = qFinders.floorEntry(when);
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
236 if (found == null)
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
237 return null;
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
238 if ((found.getValue().getEndTime() != null) && found.getValue().getEndTime().before(when))
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
239 return null;
f2473dc34535 Nachtrag Pos. 19: Q calculation with historical discharge tables instead of master discharge table
mschaefer
parents: 9582
diff changeset
240 return found.getValue();
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
241 }
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
242
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
243 /**
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
244 * Gets the main value zone name of a gauge and a Q
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
245 */
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
246 private String getZone(final Map<String, GaugeMainValueFinder> zoneFinders, final String gaugeName, final double q, final River river,
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
247 final Calculation problems) {
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
248 // Find the gauge and load its main value list, if not already in the map
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
249 final String gnKey = gaugeName.toLowerCase();
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
250 if (!zoneFinders.containsKey(gnKey))
9617
1d4262a68f1f #12 Minuend/Subtrahend + MergeConflict #19 CollisionCalculation
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9613
diff changeset
251 zoneFinders.put(gnKey, GaugeMainValueFinder.loadValues(MainValueTypeKey.Q, river, gaugeName, problems, "GLQ"));
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
252 // Build the zone name
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
253 if (zoneFinders.get(gnKey) == null)
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
254 return "";
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
255 return zoneFinders.get(gnKey).findZoneName(q);
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9499
diff changeset
256 }
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
257 }

http://dive4elements.wald.intevation.org