diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java @ 9252:c2a0028bfa9f

Work on S-Info flood duration curve chart
author mschaefer
date Thu, 12 Jul 2018 18:09:48 +0200
parents b515ed950d39
children ef7b65576d4b
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java	Thu Jul 12 18:02:58 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java	Thu Jul 12 18:09:48 2018 +0200
@@ -25,6 +25,7 @@
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.Calculation.Problem;
 import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.model.WQDay;
 import org.dive4elements.river.artifacts.model.WQKms;
 import org.dive4elements.river.artifacts.sinfo.common.GaugeDurationValuesFinder;
 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
@@ -60,8 +61,8 @@
     /**
      * Calculate the infrastructures flood duration result rows
      */
-    public FloodDurationCalculationResult execute(final Calculation problems, final String label, final DoubleRange calcRange,
-            final RiversideChoiceKey riverside, final WINFOArtifact winfo) {
+    public void execute(final Calculation problems, final String label, final DoubleRange calcRange,
+            final RiversideChoiceKey riverside, final WINFOArtifact winfo, final FloodDurationCalculationResults results) {
 
         // Find all gauges of the calc range, and create the duration finders
         final Map<Gauge, GaugeDurationValuesFinder> durFinders = new HashMap<>();
@@ -113,8 +114,29 @@
                 this.rows.add(row2);
             }
         }
+        results.addResult(new FloodDurationCalculationResult(label, mainValueLabels, this.rows), problems);
+        calcWQDays(problems, stationsSorted[0], AttributeKey.LEFT, winfo, results);
+    }
 
-        return new FloodDurationCalculationResult(label, mainValueLabels, this.rows);
+    public void calcWQDays(final Calculation problems, final double station, final AttributeKey riverside, final WINFOArtifact winfo,
+            final FloodDurationCalculationResults results) {
+
+        winfo.addStringData("ld_locations", Double.toString(station));
+        final CalculationResult res = winfo.getDurationCurveData();
+        final WQDay underflow = (WQDay) res.getData();
+        // Transform underflow days into overflow days and re-sort
+        final int[] days = new int[underflow.getWs().length];
+        final double[] ws = new double[days.length];
+        final double[] qs = new double[days.length];
+        for (int i = 0, j = days.length - 1; i <= days.length - 1; i++, j--) {
+            days[j] = 365 - underflow.getDay(i);
+            ws[j] = underflow.getW(i);
+            qs[j] = underflow.getQ(i);
+        }
+        res.setData(new WQDay(days, ws, qs));
+        // TODO Infrastrukturhoehe
+        // TODO WSPL/Hauptwerte
+        results.setDurationCurve(res);
     }
 
     /**

http://dive4elements.wald.intevation.org