annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculation.java @ 8915:d9dbf0b74bc2

Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
author gernotbelger
date Wed, 28 Feb 2018 17:27:15 +0100
parents e3519c3e7a0a
children 5d5d482da3e9
rev   line source
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
1 /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
2 * Software engineering by
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
5 *
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
9 */
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.sinfo.flowdepth;
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
11
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
12 import java.util.Collection;
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
13
8894
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
14 import org.apache.commons.lang.math.DoubleRange;
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
15 import org.dive4elements.artifacts.CallContext;
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
16 import org.dive4elements.river.artifacts.BedHeightsArtifact;
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
17 import org.dive4elements.river.artifacts.model.Calculation;
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
18 import org.dive4elements.river.artifacts.model.CalculationResult;
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
19 import org.dive4elements.river.artifacts.model.WKms;
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
20 import org.dive4elements.river.artifacts.resources.Resources;
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
21 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact;
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
22 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
23 import org.dive4elements.river.artifacts.sinfo.flowdepth.FlowDepthAccess.DifferencesPair;
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
24 import org.dive4elements.river.artifacts.sinfo.tkhcalculation.DischargeValuesFinder;
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
25 import org.dive4elements.river.artifacts.sinfo.tkhcalculation.TkhCalculator;
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
26 import org.dive4elements.river.artifacts.sinfo.tkhstate.BedHeightsFinder;
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
27 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
8894
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
28 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
29 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
30 import org.dive4elements.river.artifacts.states.WaterlevelData;
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
31 import org.dive4elements.river.artifacts.states.WaterlevelFetcher;
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
32 import org.dive4elements.river.model.River;
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
33 import org.dive4elements.river.utils.RiverUtils;
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
34
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
35 class FlowDepthCalculation {
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
36
8914
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents: 8911
diff changeset
37 // private static Logger log = Logger.getLogger(FlowDepthCalculation.class);
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents: 8891
diff changeset
38
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
39 private final CallContext context;
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
40
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
41 public FlowDepthCalculation(final CallContext context) {
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
42 this.context = context;
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
43 }
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
44
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
45 public CalculationResult calculate(final SINFOArtifact sinfo) {
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
46
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
47 final String user = CalculationUtils.findArtifactUser(this.context, sinfo);
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
48
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
49 /* access input data */
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
50 final FlowDepthAccess access = new FlowDepthAccess(sinfo);
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
51 final River river = access.getRiver();
8894
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
52 final RiverInfo riverInfo = new RiverInfo(river);
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
53
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
54 final Collection<DifferencesPair> diffPairs = access.getDifferencePairs();
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
55
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
56 final DoubleRange calcRange = access.getRange();
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
57
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
58 final boolean useTkh = access.isUseTransportBodies();
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
59
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
60 /* calculate results for each diff pair */
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
61 final Calculation problems = new Calculation();
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
62
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
63 final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange);
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
64
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
65 final String calcModeLabel = Resources.getMsg(this.context.getMeta(), sinfo.getCalculationMode().name());
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
66
8894
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
67 final FlowDepthCalculationResults results = new FlowDepthCalculationResults(calcModeLabel, user, riverInfo, calcRange, useTkh);
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
68
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
69 for (final DifferencesPair diffPair : diffPairs) {
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
70 final FlowDepthCalculationResult result = calculateResult(calcRange, diffPair, problems, infoProvider, useTkh);
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
71 if (result != null)
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
72 results.addResult(result);
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
73 }
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
74
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
75 return new CalculationResult(results, problems);
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
76 }
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
77
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents: 8891
diff changeset
78 /**
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents: 8891
diff changeset
79 * Calculates one W-MSH differences pair.
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
80 *
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
81 * @param infoProvider
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents: 8891
diff changeset
82 */
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
83 private FlowDepthCalculationResult calculateResult(final DoubleRange calcRange, final DifferencesPair diffPair,
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
84 final Calculation problems, final RiverInfoProvider infoProvider, final boolean useTkh) {
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
85
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
86 /* access real input data from database */
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
87 final String soundingId = diffPair.getSoundingId();
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
88 final String wstId = diffPair.getWstId();
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
89
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
90 final BedHeightsFinder bedHeight = loadBedHeight(soundingId, calcRange);
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
91 if (bedHeight == null) {
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents: 8883
diff changeset
92 final String message = Resources.format(this.context.getMeta(), "Failed to access sounding with id '{0}'", soundingId);
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
93 problems.addProblem(message);
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
94 return null;
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
95 }
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
96
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
97 /* REMARK: fetch ALL wst kms, because we want to determine the original reference gauge */
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents: 8883
diff changeset
98 final WaterlevelData waterlevel = new WaterlevelFetcher().findWaterlevel(this.context, wstId, Double.NaN, Double.NaN);
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
99 if (waterlevel == null) {
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents: 8883
diff changeset
100 final String message = Resources.format(this.context.getMeta(), "Failed to access waterlevel with id '{0}'", wstId);
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
101 problems.addProblem(message);
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
102 return null;
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
103 }
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
104 final WKms wstKms = waterlevel.getWkms();
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
105
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
106 final String wspLabel = wstKms.getName();
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
107 final String soundingLabel = bedHeight.getInfo().getDescription();
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
108 final String label = String.format("%s - %s", wspLabel, soundingLabel);
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
109
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
110 checkYearDifference(label, waterlevel, bedHeight.getInfo().getYear(), problems);
8894
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
111 checkWaterlevelDiscretisation(wstKms, calcRange, problems);
8901
0a900d605d52 S-INFO Flowdepth work on TKH calculation
mschaefer
parents: 8900
diff changeset
112 // TODO: prüfen, ob sohlhöhen die calcRange abdecken/überschneiden
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
113
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
114 /* re-determine the reference gauge, in the same way as the WaterlevelArtifact would do it */
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
115 final RiverInfoProvider riverInfoProvider = infoProvider.forWaterlevel(waterlevel);
8894
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
116
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
117 final int wspYear = waterlevel.getYear();
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
118 final WstInfo wstInfo = new WstInfo(wspLabel, wspYear, riverInfoProvider.getReferenceGauge());
8914
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents: 8911
diff changeset
119
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
120 final DischargeValuesFinder dischargeProvider = DischargeValuesFinder.fromKms(wstKms);
8886
cc86b0f9b3c3 SINFO-FlowDepth - work on tkh themes
gernotbelger
parents: 8884
diff changeset
121
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
122 final River river = riverInfoProvider.getRiver();
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
123 final TkhCalculator tkhCalculator = TkhCalculator.buildTkhCalculator(useTkh, this.context, problems, label, river, calcRange, dischargeProvider,
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
124 bedHeight);
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
125
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
126 final FlowDepthCalculator calculator = new FlowDepthCalculator(riverInfoProvider, wstKms, dischargeProvider, bedHeight, tkhCalculator);
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
127 return calculator.execute(label, wstInfo, calcRange);
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
128 }
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
129
8891
f431aec10d2c Implemented access to bed measurements
gernotbelger
parents: 8886
diff changeset
130
f431aec10d2c Implemented access to bed measurements
gernotbelger
parents: 8886
diff changeset
131 /**
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
132 * Checks the year difference between waterlevels and sounding, and issues a warning if too big.
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
133 *
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
134 * Zeitraum Zeitliche Differenz [a]
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
135 * X ≥ 1998 ± 3
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
136 * 1958 ≤ X < 1998 ± 6
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
137 * 1918 ≤ X < 1958 ± 12
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
138 * X < 1918 ± 25
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
139 */
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
140 private void checkYearDifference(final String label, final WaterlevelData waterlevel, final Integer soundingYear, final Calculation problems) {
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
141 if (soundingYear == null)
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
142 return;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
143
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
144 final int wstYear = waterlevel.getYear();
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
145 if (wstYear < 0)
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
146 return;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
147
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
148 final int maxDifference = getMaxDifferenceYears(soundingYear);
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
149
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
150 final int difference = Math.abs(soundingYear - wstYear);
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
151 if (difference > maxDifference) {
8894
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
152 final String message = Resources.getMsg(this.context.getMeta(), "sinfo_calc_flow_depth.warning.year_difference", null, label, wstYear,
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
153 soundingYear);
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
154 problems.addProblem(message);
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
155 }
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
156 }
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
157
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
158 private int getMaxDifferenceYears(final int year) {
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
159
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
160 if (year < 1918)
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
161 return 25;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
162
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
163 if (1918 <= year && year < 1958)
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
164 return 12;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
165
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
166 if (1958 <= year && year < 1998)
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
167 return 6;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
168
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
169 /* >= 1998 */
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
170 return 3;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
171 }
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
172
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
173 /* Checks if the discretisation of the waterlevel exceeds 1000m */
8894
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
174
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
175 private void checkWaterlevelDiscretisation(final WKms wstKms, final DoubleRange calcRange, final Calculation problems) {
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
176
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
177 final int size = wstKms.size();
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
178 for (int i = 0; i < size - 2; i++) {
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
179 final double kmPrev = wstKms.getKm(i);
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
180 final double kmNext = wstKms.getKm(i + 1);
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
181
8894
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
182 /* only check if we are within the calculation range */
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
183 if (calcRange.overlapsRange(new DoubleRange(kmPrev, kmNext))) {
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
184 if (Math.abs(kmPrev - kmNext) > 1) {
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
185 final String label = wstKms.getName();
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
186
8894
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
187 final String message = Resources.getMsg(this.context.getMeta(), "sinfo_calc_flow_depth.warning.waterlevel_discretisation", null, label);
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
188 problems.addProblem(kmPrev, message);
a66f2a7c4f84 SINFO FlowDepth - slight code cleanup
gernotbelger
parents: 8891
diff changeset
189 }
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
190 }
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
191 }
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
192 }
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
193
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
194 private BedHeightsFinder loadBedHeight(final String soundingId, final DoubleRange calcRange) {
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
195
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
196 // REMARK: absolutely unbelievable....
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents: 8891
diff changeset
197 // The way how bed-heights (and other data too) is accessed is different for nearly every calculation-type
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
198 // throughout flys.
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
199 // The knowledge on how to parse the datacage-ids is spread through the complete code-base...
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
200
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
201 // We use here the way on how bed-heights are accessed by the BedDifferenceAccess/BedDifferenceCalculation, but
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
202 // this is plain random
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
203 final String[] parts = soundingId.split(";");
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
204
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
205 final BedHeightsArtifact artifact = (BedHeightsArtifact) RiverUtils.getArtifact(parts[0], this.context);
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
206
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
207 final Integer bedheightId = artifact.getDataAsInteger("height_id");
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
208 if (bedheightId == null) {
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
209 // FIXME: error message!
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
210 return null;
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
211 }
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
212
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
213 // REMARK: this only works with type 'single'; unclear on how to distinguish from epoch data (or whatever the
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
214 // other type means)
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
215 // Luckily, the requirement is to only access 'single' data here.
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
216 // final String bedheightType = artifact.getDataAsString("type");
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
217
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
218 // REMARK: BedDifferences uses this, but we also need the metadata of the BedHeight
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8882
diff changeset
219 // REMARK: second absolutely awful thing: BedHeight is a hibernate binding class, accessing the database via
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
220 // hibernate stuff
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
221 // BedHeightFactory uses its own (direct) way of accessing the data, with its own implemented data classes.
8882
f762fadc5313 Further work on SINFO-FlowDepth
gernotbelger
parents: 8879
diff changeset
222 // return BedHeightFactory.getHeight(bedheightType, bedheightId, from, to);
8877
9f7a285b0ee3 Some work on SINFO FlowDepth
gernotbelger
parents: 8863
diff changeset
223
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
224 return BedHeightsFinder.forId(bedheightId, calcRange);
8898
89f3c5462a16 Implemented S-INFO Flowdepth TKH calculation
mschaefer
parents: 8891
diff changeset
225 }
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents: 8883
diff changeset
226 }

http://dive4elements.wald.intevation.org