comparison artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java @ 8748:36d7bda0b47a

(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.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 08 Jun 2015 16:53:54 +0200
parents 4dd6d89ce95e
children c4654863108d
comparison
equal deleted inserted replaced
8747:e9d912c97fa8 8748:36d7bda0b47a
619 return true; 619 return true;
620 } 620 }
621 return false; 621 return false;
622 } 622 }
623 623
624 protected static boolean hasNaN(XYDataset dataset) {
625 int N = dataset.getItemCount(0);
626 int M = dataset.getItemCount(1);
627
628 int i = 0, j = 0;
629 boolean haveNaN = false;
630 for (; i < N; ++i) {
631 double x = dataset.getXValue(0, i);
632 double y = dataset.getYValue(0, i);
633 if (Double.isNaN(x) || Double.isNaN(y)) {
634 return true;
635 }
636 }
637
638 for (; j < M; ++j) {
639 double x = dataset.getXValue(1, j);
640 double y = dataset.getYValue(1, j);
641 if (Double.isNaN(x) || Double.isNaN(y)) {
642 return true;
643 }
644 }
645 return false;
646 }
647
648
624 protected static List<XYDataset> splitByNaNsTwoSeries( 649 protected static List<XYDataset> splitByNaNsTwoSeries(
625 XYDataset dataset 650 XYDataset dataset
626 ) { 651 ) {
627 boolean debug = log.isDebugEnabled(); 652 boolean debug = log.isDebugEnabled();
628 653
629 List<XYDataset> datasets = new ArrayList<XYDataset>(); 654 List<XYDataset> datasets = new ArrayList<XYDataset>();
655
656 if (!hasNaN(dataset)) {
657 datasets.add(dataset);
658 return datasets;
659 }
630 660
631 int N = dataset.getItemCount(0); 661 int N = dataset.getItemCount(0);
632 int M = dataset.getItemCount(1); 662 int M = dataset.getItemCount(1);
633 663
634 int i = 0, j = 0; 664 int i = 0, j = 0;
844 874
845 if (debug) { 875 if (debug) {
846 log.debug("datasets after split: " + datasets.size()); 876 log.debug("datasets after split: " + datasets.size());
847 } 877 }
848 878
879 /*
880 log.debug("Begin dump datasets: ");
881 log.debug("Original");
882 i=0;
883 dumpDataset(dataset, "Original" );
884 for (XYDataset set: datasets) {
885 dumpDataset(dataset, "New: " + i++);
886 }
887 log.debug("End dump datasets: ");
888 */
889
849 return datasets; 890 return datasets;
850 } 891 }
892
893 /*
894 public static void dumpDataset(XYDataset dataset, String msg) {
895 log.debug("Begin dump Dataset: " + msg);
896
897 int N = dataset.getItemCount(0);
898 int M = dataset.getItemCount(1);
899
900 int i = 0, j = 0;
901 for (; i < N; ++i) {
902 double x = dataset.getXValue(0, i);
903 double y = dataset.getYValue(0, i);
904 log.debug("0 " + i + " X: "+ x + "Y: "+ y);
905 }
906
907 for (; j < M; ++j) {
908 double x = dataset.getXValue(1, j);
909 double y = dataset.getYValue(1, j);
910 log.debug("1 " + i + " X: "+ x + "Y: "+ y);
911 }
912 log.debug("End dump Dataset: " + msg);
913 }
914 */
915
851 916
852 public static List<XYDataset> splitByNaNs(XYDataset dataset) { 917 public static List<XYDataset> splitByNaNs(XYDataset dataset) {
853 918
854 switch (dataset.getSeriesCount()) { 919 switch (dataset.getSeriesCount()) {
855 case 0: 920 case 0:

http://dive4elements.wald.intevation.org