diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/BedDiffCalculation.java @ 3898:95d699c769fb

Bedheight difference calculation has chart outpus now. flys-artifacts/trunk@5562 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 21 Sep 2012 14:29:32 +0000
parents a1c79d84e3cd
children
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/BedDiffCalculation.java	Fri Sep 21 14:18:16 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/BedDiffCalculation.java	Fri Sep 21 14:29:32 2012 +0000
@@ -2,6 +2,7 @@
 
 import gnu.trove.TDoubleArrayList;
 
+import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -18,7 +19,7 @@
 {
 
     private static final Logger logger = Logger
-        .getLogger(BedQualityCalculation.class);
+        .getLogger(BedDiffCalculation.class);
 
     protected String river;
     protected String yearEpoch;
@@ -28,12 +29,13 @@
     }
 
     public CalculationResult calculate(BedDifferencesAccess access) {
-        logger.info("BedQualityCalculation.calculate");
+        logger.info("BedDiffCalculation.calculate");
 
         String river = access.getRiver();
         String yearEpoch = access.getYearEpoch();
         FLYSArtifact[][] artifacts = access.getDifferenceArtifacts();
 
+        logger.debug("got artifacts: " + artifacts.length + "; " + artifacts[0].length);
         if (river == null) {
             // TODO: i18n
             addProblem("minfo.missing.river");
@@ -58,28 +60,34 @@
     }
 
     private CalculationResult internalCalculate() {
-        List<BedDifferencesResult> results =
-            new LinkedList<BedDifferencesResult>();
 
         if (yearEpoch.equals("year")) {
+            List<BedDiffYearResult> results =
+                new LinkedList<BedDiffYearResult>();
+
             for (int i = 0; i < artifacts.length; i++) {
                 BedHeight[] pair =
                     getHeightPair(artifacts[i][0], artifacts[i][1], "single");
-                BedDifferencesResult res = calculateYearDifference(pair);
+                BedDiffYearResult res = calculateYearDifference(pair);
                 results.add(res);
             }
+            return new CalculationResult(
+                results.toArray(new BedDiffYearResult[results.size()]), this);
         }
         if (yearEpoch.equals("epoch")) {
+            List<BedDiffEpochResult> results =
+                new LinkedList<BedDiffEpochResult>();
             for (int i = 0; i < artifacts.length; i++) {
                 BedHeight[] pair =
                     getHeightPair(artifacts[i][0], artifacts[i][1], "epoch");
-                BedDifferencesResult res = calculateEpochDifference(pair);
+                BedDiffEpochResult res = calculateEpochDifference(pair);
                 results.add(res);
             }
+            return new CalculationResult(
+                results.toArray(new BedDiffEpochResult[results.size()]), this);
         }
 
-       return new CalculationResult(
-            results.toArray(new BedDifferencesResult[results.size()]), this);
+       return new CalculationResult();
     }
 
     private BedHeight[] getHeightPair(
@@ -101,7 +109,9 @@
         TDoubleArrayList stations = pair[0].getStations();
         TDoubleArrayList diffRes = new TDoubleArrayList();
         TDoubleArrayList kms = new TDoubleArrayList();
-        TDoubleArrayList morphs = new TDoubleArrayList();
+        TDoubleArrayList heights1 = new TDoubleArrayList();
+        TDoubleArrayList heights2 = new TDoubleArrayList();
+
         for (int i = 0; i < stations.size(); i++) {
             if (!Double.isNaN(pair[0].getHeight(stations.get(i))) &&
                 !Double.isNaN(pair[1].getHeight(stations.get(i)))) {
@@ -110,15 +120,13 @@
                     pair[1].getHeight(stations.get(i));
                 diffRes.add(hDiff);
                 kms.add(stations.get(i));
-                if (pair[0].getMorphWidth(i) > pair[1].getMorphWidth(i)) {
-                    morphs.add(pair[0].getMorphWidth(i));
-                }
-                else {
-                    morphs.add(pair[1].getMorphWidth(i));
-                }
+                heights1.add(pair[0].getHeight(stations.get(i)));
+                heights2.add(pair[1].getHeight(stations.get(i)));
             }
         }
-        return new BedDiffEpochResult(kms, diffRes, morphs);
+        Date start = ((BedHeightEpoch)pair[0]).getStart();
+        Date end = ((BedHeightEpoch)pair[1]).getEnd();
+        return new BedDiffEpochResult(kms, diffRes, heights1, heights2, start, end);
     }
 
     private BedDiffYearResult calculateYearDifference(BedHeight[] pair) {
@@ -127,8 +135,11 @@
         TDoubleArrayList diffRes = new TDoubleArrayList();
         TDoubleArrayList kms = new TDoubleArrayList();
         TDoubleArrayList morphs = new TDoubleArrayList();
-        TDoubleArrayList heights = new TDoubleArrayList();
+        TDoubleArrayList absolute = new TDoubleArrayList();
         TDoubleArrayList gap = new TDoubleArrayList();
+        TDoubleArrayList heights1 = new TDoubleArrayList();
+        TDoubleArrayList heights2 = new TDoubleArrayList();
+
         BedHeightSingle s1 = (BedHeightSingle)pair[0];
         BedHeightSingle s2 = (BedHeightSingle)pair[1];
         int range = s1.getYear() - s2.getYear();
@@ -136,28 +147,41 @@
             range = range * -1;
         }
         for (int i = 0; i < stations.size(); i++) {
-            if (!Double.isNaN(pair[0].getHeight(stations.get(i))) &&
-                !Double.isNaN(pair[1].getHeight(stations.get(i)))) {
+            if (!Double.isNaN(s1.getHeight(stations.get(i))) &&
+                !Double.isNaN(s2.getHeight(stations.get(i)))) {
                 double hDiff =
-                    pair[0].getHeight(stations.get(i)) -
-                    pair[1].getHeight(stations.get(i));
+                    s1.getHeight(stations.get(i)) -
+                    s2.getHeight(stations.get(i));
                 diffRes.add(hDiff);
-                kms.add(stations.get(i));
-                if (pair[0].getMorphWidth(i) > pair[1].getMorphWidth(i)) {
-                    morphs.add(pair[0].getMorphWidth(i));
+                double km = stations.get(i);
+                kms.add(km);
+                if (s1.getMorphWidth(km) >
+                    s2.getMorphWidth(km)) {
+                    morphs.add(s1.getMorphWidth(km));
                 }
                 else {
-                    morphs.add(pair[1].getMorphWidth(i));
+                    morphs.add(s2.getMorphWidth(km));
                 }
-                if (pair[0].getDataGap(i) > pair[1].getDataGap(i)) {
-                    gap.add(pair[0].getDataGap(i));
+                if (s1.getDataGap(km) > s2.getDataGap(km)) {
+                    gap.add(s1.getDataGap(km));
                 }
                 else {
-                    gap.add(pair[1].getDataGap(i));
+                    gap.add(s2.getDataGap(km));
                 }
-                heights.add(hDiff / range);
+                absolute.add((hDiff / range) * 100);
+                heights1.add(s1.getHeight(km));
+                heights2.add(s2.getHeight(km));
             }
         }
-        return new BedDiffYearResult(kms, diffRes, morphs, heights, gap);
+        return new BedDiffYearResult(
+            kms,
+            diffRes,
+            heights1,
+            heights2,
+            morphs,
+            absolute,
+            gap,
+            s1.getYear(),
+            s2.getYear());
     }
 }

http://dive4elements.wald.intevation.org