diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/BedQualityCalculation.java @ 3867:d8c99ff18db8

Refactor MINFO bed quality resultsets and facets. flys-artifacts/trunk@5498 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Mon, 17 Sep 2012 14:38:47 +0000
parents 7fa38f8bcd8d
children 44e68dc1d87e
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/BedQualityCalculation.java	Mon Sep 17 13:58:37 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/BedQualityCalculation.java	Mon Sep 17 14:38:47 2012 +0000
@@ -99,55 +99,49 @@
                     to,
                     dr.getFrom(),
                     dr.getTo());
+            BedQualityResult result = new BedQualityResult();
             if (bedDiameter != null) {
+                result.add(calculateBedParameter(bedMeasurements, dr));
                 for (String bd : bedDiameter) {
-                    BedQualityResult bedResult =
+                    BedDiameterResult bedResult =
                         calculateBed(bedMeasurements, bd, dr);
 
                     // Avoid adding empty result sets.
                     if (!bedResult.isEmpty()) {
-                        results.add(bedResult);
+                        result.add(bedResult);
                     }
                 }
             }
             if (bedloadDiameter != null) {
                 for (String bld : bedloadDiameter) {
-                    BedQualityResult loadResult =
+                    BedloadDiameterResult loadResult =
                         calculateBedload(loadMeasurements, bld, dr);
-                    results.add(loadResult);
+                    result.add(loadResult);
                 }
             }
+            results.add(result);
         }
 
         return new CalculationResult(
             results.toArray(new BedQualityResult[results.size()]), this);
     }
 
-    protected BedQualityResult calculateBed(
+    private BedParametersResult calculateBedParameter(
         QualityMeasurements qm,
-        String diameter,
-        DateRange range
+        DateRange dr
     ) {
         List<Double> kms = qm.getKms();
+        QualityMeasurements capFiltered = filterCapMeasurements(qm);
+        QualityMeasurements subFiltered = filterSubMeasurements(qm);
         TDoubleArrayList location = new TDoubleArrayList();
-        TDoubleArrayList avDiameterCap = new TDoubleArrayList();
-        TDoubleArrayList avDiameterSub = new TDoubleArrayList();
         TDoubleArrayList porosityCap = new TDoubleArrayList();
         TDoubleArrayList porositySub = new TDoubleArrayList();
         TDoubleArrayList densityCap = new TDoubleArrayList();
         TDoubleArrayList densitySub = new TDoubleArrayList();
-        for (double km : kms) {
-            //Filter cap and sub measurements.
-            QualityMeasurements capFiltered = filterCapMeasurements(qm);
-            QualityMeasurements subFiltered = filterSubMeasurements(qm);
-
-            List<QualityMeasurement> cm = capFiltered.getMeasurements(km);
-            List<QualityMeasurement> sm = subFiltered.getMeasurements(km);
-
-            double avCap = calculateAverage(cm, diameter);
-            double avSub = calculateAverage(sm, diameter);
-            double[] pCap = calculatePorosity(capFiltered, km, diameter);
-            double[] pSub = calculatePorosity(subFiltered, km, diameter);
+ 
+        for(double km : kms) {
+            double[] pCap = calculatePorosity(capFiltered, km);
+            double[] pSub = calculatePorosity(subFiltered, km);
             double[] dCap = calculateDensity(capFiltered, pCap);
             double[] dSub = calculateDensity(subFiltered, pSub);
 
@@ -164,25 +158,51 @@
                 dSubRes += dSub[i];
             }
             location.add(km);
-            avDiameterCap.add(avCap);
-            avDiameterSub.add(avSub);
             porosityCap.add((pCapRes / pCap.length) * 100 );
             porositySub.add((pSubRes / pSub.length) * 100);
             densityCap.add((dCapRes / dCap.length) / 1000);
             densitySub.add((dSubRes / dSub.length) / 1000);
+ 
         }
-        return new BedBedQualityResult(
-            diameter,
-            avDiameterCap,
-            avDiameterSub,
+
+        return new BedParametersResult(
             location,
-            range,
             porosityCap,
             porositySub,
             densityCap,
             densitySub);
     }
 
+    protected BedDiameterResult calculateBed(
+        QualityMeasurements qm,
+        String diameter,
+        DateRange range
+    ) {
+        List<Double> kms = qm.getKms();
+        TDoubleArrayList location = new TDoubleArrayList();
+        TDoubleArrayList avDiameterCap = new TDoubleArrayList();
+        TDoubleArrayList avDiameterSub = new TDoubleArrayList();
+        for (double km : kms) {
+            //Filter cap and sub measurements.
+            QualityMeasurements capFiltered = filterCapMeasurements(qm);
+            QualityMeasurements subFiltered = filterSubMeasurements(qm);
+
+            List<QualityMeasurement> cm = capFiltered.getMeasurements(km);
+            List<QualityMeasurement> sm = subFiltered.getMeasurements(km);
+
+            double avCap = calculateAverage(cm, diameter);
+            double avSub = calculateAverage(sm, diameter);
+            location.add(km);
+            avDiameterCap.add(avCap);
+            avDiameterSub.add(avSub);
+        }
+        return new BedDiameterResult(
+            diameter,
+            avDiameterCap,
+            avDiameterSub,
+            location);
+    }
+
     private double[] calculateDensity(
         QualityMeasurements capFiltered,
         double[] porosity
@@ -196,8 +216,7 @@
 
     private double[] calculatePorosity(
         QualityMeasurements capFiltered,
-        double km,
-        String diameter
+        double km
     ) {
         List<QualityMeasurement> list = capFiltered.getMeasurements(km);
         double[] results = new double[list.size()];
@@ -213,7 +232,7 @@
         return results;
     }
 
-    protected BedQualityResult calculateBedload(
+    protected BedloadDiameterResult calculateBedload(
         QualityMeasurements qm,
         String diameter,
         DateRange range
@@ -227,7 +246,7 @@
             location.add(km);
             avDiameter.add(mid);
         }
-        return new BedLoadBedQualityResult(
+        return new BedloadDiameterResult(
             diameter,
             avDiameter,
             location,

http://dive4elements.wald.intevation.org