[PATCH] (issue1788) Fix area split if there are no NaN's in the data

Wald Commits scm-commit at wald.intevation.org
Mon Jun 8 16:54:29 CEST 2015


# HG changeset patch
# User Andre Heinecke <andre.heinecke at intevation.de>
# Date 1433775234 -7200
# Node ID 36d7bda0b47ab7ff847195ed1d758dbb77f14221
# Parent  e9d912c97fa850d388c2273c179497cd53b20e08
(issue1788) Fix area split if there are no NaN's in the data

    The split algorithmn splits in a way that it always creates
    at least two datasets. One before the NaN, one after the NaN.

    This is broken in case the dataset does not contain any NaN
    value as it resulted in two identical datasets. This changed
    the display and resulted in a broken area calculation.

    I've also added some commented out debug code that was helpful
    tracking down this problem.

diff -r e9d912c97fa8 -r 36d7bda0b47a artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java
--- a/artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java	Fri Jun 05 16:56:47 2015 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java	Mon Jun 08 16:53:54 2015 +0200
@@ -621,6 +621,31 @@
         return false;
     }
 
+    protected static boolean hasNaN(XYDataset dataset) {
+        int N = dataset.getItemCount(0);
+        int M = dataset.getItemCount(1);
+
+        int i = 0, j = 0;
+        boolean haveNaN = false;
+        for (; i < N; ++i) {
+            double x = dataset.getXValue(0, i);
+            double y = dataset.getYValue(0, i);
+            if (Double.isNaN(x) || Double.isNaN(y)) {
+                return true;
+            }
+        }
+
+        for (; j < M; ++j) {
+            double x = dataset.getXValue(1, j);
+            double y = dataset.getYValue(1, j);
+            if (Double.isNaN(x) || Double.isNaN(y)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+
     protected static List<XYDataset> splitByNaNsTwoSeries(
         XYDataset dataset
     ) {
@@ -628,6 +653,11 @@
 
         List<XYDataset> datasets = new ArrayList<XYDataset>();
 
+        if (!hasNaN(dataset)) {
+            datasets.add(dataset);
+            return datasets;
+        }
+
         int N = dataset.getItemCount(0);
         int M = dataset.getItemCount(1);
 
@@ -846,9 +876,44 @@
             log.debug("datasets after split: " + datasets.size());
         }
 
+        /*
+        log.debug("Begin dump datasets: ");
+        log.debug("Original");
+        i=0;
+        dumpDataset(dataset, "Original" );
+        for (XYDataset set: datasets) {
+            dumpDataset(dataset, "New: " + i++);
+        }
+        log.debug("End dump datasets: ");
+        */
+
         return datasets;
     }
 
+    /*
+    public static void dumpDataset(XYDataset dataset, String msg) {
+        log.debug("Begin dump Dataset: " + msg);
+
+        int N = dataset.getItemCount(0);
+        int M = dataset.getItemCount(1);
+
+        int i = 0, j = 0;
+        for (; i < N; ++i) {
+            double x = dataset.getXValue(0, i);
+            double y = dataset.getYValue(0, i);
+            log.debug("0 " + i + " X: "+ x + "Y: "+ y);
+        }
+
+        for (; j < M; ++j) {
+            double x = dataset.getXValue(1, j);
+            double y = dataset.getYValue(1, j);
+            log.debug("1 " + i + " X: "+ x + "Y: "+ y);
+        }
+        log.debug("End dump Dataset: " + msg);
+    }
+    */
+
+
     public static List<XYDataset> splitByNaNs(XYDataset dataset)  {
 
         switch (dataset.getSeriesCount()) {


More information about the Dive4Elements-commits mailing list