diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculation.java @ 8964:45f1ad66560e

Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
author gernotbelger
date Thu, 29 Mar 2018 15:48:17 +0200
parents 322b0e6298ea
children b5600453bb8f
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculation.java	Wed Mar 28 17:04:20 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculation.java	Thu Mar 29 15:48:17 2018 +0200
@@ -87,6 +87,9 @@
 
         /* access real input data from database */
         final String wstId = minMaxPair.getWstId();
+
+        // FIXME: bfg überzeugen dass man immer nur pärchen auswählen kann --> min/max id ist gleich!
+
         final String minSoundingId = minMaxPair.getMinSoundingId();
         final String maxSoundingId = minMaxPair.getMaxSoundingId();
 
@@ -96,7 +99,7 @@
             return null;
 
         /* REMARK: fetch ALL wst kms, because we want to determine the original reference gauge */
-        final WaterlevelData waterlevel = new WaterlevelFetcher().findWaterlevel(this.context, wstId, Double.NaN, Double.NaN, problems);
+        final WaterlevelData waterlevel = new WaterlevelFetcher().findWaterlevel(this.context, wstId, calcRange, problems);
         if (waterlevel == null)
             return null;
 
@@ -106,9 +109,6 @@
 
         final int soundingYear = checkSoundingYear(minBedHeight, maxBedHeight, problems);
         FlowDepthUtils.checkYearDifference(label, waterlevel.getYear(), soundingYear, problems);
-        // FIXME
-        // checkWaterlevelDiscretisation(wstKms, calcRange, problems);
-        // TODO: prüfen, ob sohlhöhen die calcRange abdecken/überschneiden
 
         /* re-determine the reference gauge, in the same way as the WaterlevelArtifact would do it */
         final RiverInfoProvider riverInfoProvider = infoProvider.forWaterlevel(waterlevel);
@@ -116,7 +116,7 @@
         final int wspYear = waterlevel.getYear();
         final WstInfo wstInfo = new WstInfo(waterlevel.getName(), wspYear, riverInfoProvider.getReferenceGauge());
 
-        final WaterlevelValuesFinder waterlevelProvider = WaterlevelValuesFinder.fromKms(wstKms);
+        final WaterlevelValuesFinder waterlevelProvider = WaterlevelValuesFinder.fromKms(problems, wstKms);
         final DischargeValuesFinder dischargeProvider = DischargeValuesFinder.fromKms(wstKms);
 
         final String waterlevelLabel = waterlevel.getName();
@@ -125,9 +125,9 @@
         /* real calculation loop */
         final Collection<SInfoResultRow> rows = new ArrayList<>();
 
-        // FIXME: determine what is the spatial discretisation that we will use...
-        final double[] allKms = wstKms.allKms().toNativeArray();
-        for (final double station : allKms) {
+        // FIXME: we use the stations of one of the bed heights atm, because we probably will later use only data from one bed heights datasets!
+        final Collection<Double> stations = minBedHeight == null ? maxBedHeight.getStations() : minBedHeight.getStations();
+        for (final double station : stations) {
             if (calcRange.containsDouble(station)) {
 
                 final double wst = waterlevelProvider.getWaterlevel(station);
@@ -140,6 +140,7 @@
                 final double maxFlowDepth = wst - maxBedHeightValue;
 
                 // FIXME: unclear what is meant here...
+                // FIXME: this will simply the bed height of 'the' bed height if we reduce this to simply using one sounding dataset
                 final double meanBedHeight = Double.NaN;
 
                 // REMARK: access the location once only during calculation

http://dive4elements.wald.intevation.org