diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 2418:899ca89f497e

Another partial fix for flys/issue499: Do the W to Q conversions needed for 'W am Pegel' correctly. flys-artifacts/trunk@4052 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 14 Feb 2012 16:48:13 +0000
parents 64dd65aa620d
children 44dc117aa2b7
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java	Tue Feb 14 09:02:51 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java	Tue Feb 14 16:48:13 2012 +0000
@@ -48,6 +48,7 @@
 import de.intevation.flys.model.FastCrossSectionLine;
 import de.intevation.flys.model.Gauge;
 import de.intevation.flys.model.River;
+import de.intevation.flys.model.DischargeTable;
 
 import de.intevation.flys.utils.DoubleUtil;
 import de.intevation.flys.utils.FLYSUtils;
@@ -925,36 +926,44 @@
             logger.debug("convert w->q with gauge '" + g.getName() + "'");
         }
 
-        DischargeTables dt = new DischargeTables(r.getName(), g.getName());
-        Map<String, double [][]>  tmp = dt.getValues();
+        DischargeTable dt = g.fetchMasterDischargeTable();
 
-        double[][] values = tmp.get(g.getName());
-        double[]   qs     = new double[ws.length];
+        if (dt == null) {
+            logger.warn("No master discharge table found for gauge '"
+                + g.getName() + "'");
+            return null;
+        }
+
+        double [][] values = DischargeTables.loadDischargeTableValues(dt, 1);
 
         TDoubleArrayList wsOut = new TDoubleArrayList(ws.length);
         TDoubleArrayList qsOut = new TDoubleArrayList(ws.length);
 
+        boolean generatedWs = false;
+
         for (int i = 0; i < ws.length; i++) {
             if (Double.isNaN(ws[i])) {
                 logger.warn("W is NaN: ignored");
                 continue;
             }
-            double w = ws[i] / 100.0;
-            double q = dt.getQForW(values, w);
-            if (Double.isNaN(q)) {
-                logger.warn("No Q found for W = " + ws[i]);
-                continue;
+            double w = ws[i] / 100d;
+            double [] qs = DischargeTables.getQsForW(values, w);
+
+            if (qs.length == 0) {
+                logger.warn("No Qs found for W = " + ws[i]);
             }
-            wsOut.add(w);
-            qsOut.add(q);
-            if (debug) {
-                logger.debug("w: " + w + " -> q: " + q);
+            else {
+                for (double q: qs) {
+                    wsOut.add(ws[i]);
+                    qsOut.add(q);
+                }
             }
+            generatedWs |= qs.length != 1;
         }
 
         return new double [][] {
             qsOut.toNativeArray(),
-            wsOut.toNativeArray()
+            generatedWs ? wsOut.toNativeArray() : null
         };
     }
 

http://dive4elements.wald.intevation.org