diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculation.java @ 8900:d32c22fc686c

Merge
author mschaefer
date Thu, 22 Feb 2018 14:11:19 +0100
parents 89f3c5462a16 b6f7961e4cc5
children 0a900d605d52
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculation.java	Thu Feb 22 12:07:16 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculation.java	Thu Feb 22 14:11:19 2018 +0100
@@ -32,6 +32,9 @@
 import org.dive4elements.river.artifacts.resources.Resources;
 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact;
 import org.dive4elements.river.artifacts.sinfo.flowdepth.FlowDepthAccess.DifferencesPair;
+import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 import org.dive4elements.river.artifacts.states.WaterlevelData;
 import org.dive4elements.river.artifacts.states.WaterlevelFetcher;
 import org.dive4elements.river.model.BedHeight;
@@ -68,6 +71,7 @@
         /* access input data */
         final FlowDepthAccess access = new FlowDepthAccess(sinfo);
         final River river = access.getRiver();
+        final RiverInfo riverInfo = new RiverInfo(river);
 
         final Collection<DifferencesPair> diffPairs = access.getDifferencePairs();
 
@@ -85,7 +89,7 @@
 
         final String calcModeLabel = Resources.getMsg(this.context.getMeta(), sinfo.getCalculationMode().name());
 
-        final FlowDepthCalculationResults results = new FlowDepthCalculationResults(calcModeLabel, user, river, from, to, useTkh);
+        final FlowDepthCalculationResults results = new FlowDepthCalculationResults(calcModeLabel, user, riverInfo, calcRange, useTkh);
 
         for (final DifferencesPair diffPair : diffPairs) {
             final FlowDepthCalculationResult result = calculateResult(river, calcRange, diffPair, problems, gaugeIndex, useTkh);
@@ -107,6 +111,7 @@
         final String wstId = diffPair.getWstId();
 
         final BedHeight bedHeight = loadBedHeight(soundingId);
+        final BedHeight bedHeight = loadBedHeight(soundingId);
         if (bedHeight == null) {
             final String message = Resources.format(this.context.getMeta(), "Failed to access sounding with id '{0}'", soundingId);
             problems.addProblem(message);
@@ -127,7 +132,8 @@
         final String label = String.format("%s - %s", wspLabel, soundingLabel);
 
         checkYearDifference(label, waterlevel, bedHeight, problems);
-        checkWaterlevelDiscretisation(wstKms, problems);
+        checkWaterlevelDiscretisation(wstKms, calcRange, problems);
+        // TODO: prüfen, ob sohlhöen die calcRange abdecken/überschneiden
 
         /* re-determine the reference gauge, in the same way as the WaterlevelArtifact would do it */
         final String notinrange = Resources.getMsg(this.context.getMeta(), CSV_NOT_IN_GAUGE_RANGE, CSV_NOT_IN_GAUGE_RANGE);
@@ -202,7 +208,9 @@
 
             if (!calcRange.containsDouble(km))
                 continue;
-            
+            if (!calcRange.containsDouble(km))
+                continue;
+
             try {
                 // FIXME: check out of range
                 final double wst = wstInterpolator.value(km);
@@ -287,7 +295,6 @@
                     break;
                 }
 
-
                 // REMARK: access the location once only during calculation
                 final String location = LocationProvider.getLocation(river.getName(), km);
 
@@ -356,7 +363,8 @@
 
         final int difference = Math.abs(soundingYear - wstYear);
         if (difference > maxDifference) {
-            final String message = Resources.getMsg(this.context.getMeta(), "sinfo_calc_flow_depth.warning.year_difference", null, label, difference);
+            final String message = Resources.getMsg(this.context.getMeta(), "sinfo_calc_flow_depth.warning.year_difference", null, label, wstYear,
+                    soundingYear);
             problems.addProblem(message);
         }
     }
@@ -392,18 +400,22 @@
     }
 
     /* Checks if the discretisation of the waterlevel exceeds 1000m */
-    // FIXME: vermutlich sollten wir diesen check auf den gültigkeitsbereich einschränken
-    private void checkWaterlevelDiscretisation(final WKms wstKms, final Calculation problems) {
+
+    private void checkWaterlevelDiscretisation(final WKms wstKms, final DoubleRange calcRange, final Calculation problems) {
+
         final int size = wstKms.size();
         for (int i = 0; i < size - 2; i++) {
             final double kmPrev = wstKms.getKm(i);
             final double kmNext = wstKms.getKm(i + 1);
 
-            if (Math.abs(kmPrev - kmNext) > 1) {
-                final String label = wstKms.getName();
+            /* only check if we are within the calculation range */
+            if (calcRange.overlapsRange(new DoubleRange(kmPrev, kmNext))) {
+                if (Math.abs(kmPrev - kmNext) > 1) {
+                    final String label = wstKms.getName();
 
-                final String message = Resources.getMsg(this.context.getMeta(), "sinfo_calc_flow_depth.warning.waterlevel_discretisation", null, label);
-                problems.addProblem(kmPrev, message);
+                    final String message = Resources.getMsg(this.context.getMeta(), "sinfo_calc_flow_depth.warning.waterlevel_discretisation", null, label);
+                    problems.addProblem(kmPrev, message);
+                }
             }
         }
     }

http://dive4elements.wald.intevation.org