diff artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedQualityCalculation.java @ 8587:07c9ac22f611

(issue1755) Generalise BedQuality result handling The bedquality calculation now produces a result for each time period which has BedQualityResultValues for each specific result type. Formally this was split up in density, porosity and diameter classes with some bedload diameter classes mixed in for extra fun. The intent of this commit is to allow more shared code and generic access patterns to the BedQuality results.
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 18 Mar 2015 18:42:08 +0100
parents 59b4f6cf1cf4
children 36faef4f8acb
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedQualityCalculation.java	Tue Mar 17 18:52:00 2015 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedQualityCalculation.java	Wed Mar 18 18:42:08 2015 +0100
@@ -110,22 +110,14 @@
             BedQualityResult result = new BedQualityResult();
             result.setDateRange(dr);
             if (bedDiameter != null) {
-                result.add(calculateBedParameter(bedMeasurements, dr));
+                result.add(calculateBedParameter(bedMeasurements));
                 for (String bd : bedDiameter) {
-                    BedDiameterResult bedResult =
-                        calculateBed(bedMeasurements, bd, dr);
-
-                    // Avoid adding empty result sets.
-                    if (!bedResult.isEmpty()) {
-                        result.add(bedResult);
-                    }
+                    result.add (calculateBed(bedMeasurements, bd));
                 }
             }
             if (bedloadDiameter != null) {
                 for (String bld : bedloadDiameter) {
-                    BedloadDiameterResult loadResult =
-                        calculateBedload(loadMeasurements, bld, dr);
-                    result.add(loadResult);
+                    result.add(calculateBedload(loadMeasurements, bld));
                 }
             }
             results.add(result);
@@ -135,14 +127,13 @@
             results.toArray(new BedQualityResult[results.size()]), this);
     }
 
-    private BedParametersResult calculateBedParameter(
-        QualityMeasurements qm,
-        DateRange dr
+    private BedQualityResultValue[] calculateBedParameter(
+        QualityMeasurements qm
     ) {
         List<Double> kms = qm.getKms();
+        TDoubleArrayList location = new TDoubleArrayList();
         QualityMeasurements capFiltered = filterCapMeasurements(qm);
         QualityMeasurements subFiltered = filterSubMeasurements(qm);
-        TDoubleArrayList location = new TDoubleArrayList();
         TDoubleArrayList porosityCap = new TDoubleArrayList();
         TDoubleArrayList porositySub = new TDoubleArrayList();
         TDoubleArrayList densityCap = new TDoubleArrayList();
@@ -173,19 +164,24 @@
             densitySub.add((dSubRes / dSub.length) / 1000);
 
         }
-
-        return new BedParametersResult(
-            location,
-            porosityCap,
-            porositySub,
-            densityCap,
-            densitySub);
+        return new BedQualityResultValue[] {
+                new BedQualityResultValue("porosity",
+                        new double[][] {location.toNativeArray(), porositySub.toNativeArray()},
+                        "sublayer"),
+                new BedQualityResultValue("porosity",
+                        new double[][] {location.toNativeArray(), porosityCap.toNativeArray()},
+                        "toplayer"),
+                new BedQualityResultValue("density",
+                        new double[][] {location.toNativeArray(), densitySub.toNativeArray()},
+                        "sublayer"),
+                new BedQualityResultValue("density",
+                        new double[][] {location.toNativeArray(), densityCap.toNativeArray()},
+                        "toplayer")};
     }
 
-    protected BedDiameterResult calculateBed(
+    protected BedQualityResultValue[] calculateBed(
         QualityMeasurements qm,
-        String diameter,
-        DateRange range
+        String diameter
     ) {
         List<Double> kms = qm.getKms();
         TDoubleArrayList location = new TDoubleArrayList();
@@ -205,11 +201,13 @@
             avDiameterCap.add(avCap * 1000);// bring to mm.
             avDiameterSub.add(avSub * 1000);
         }
-        return new BedDiameterResult(
-            diameter,
-            avDiameterCap,
-            avDiameterSub,
-            location);
+        return new BedQualityResultValue[] {
+                new BedQualityResultValue(diameter,
+                        new double[][] {location.toNativeArray(), avDiameterSub.toNativeArray()},
+                        "sublayer"),
+                new BedQualityResultValue(diameter,
+                        new double[][] {location.toNativeArray(), avDiameterCap.toNativeArray()},
+                        "toplayer")};
     }
 
     private double[] calculateDensity(
@@ -241,10 +239,9 @@
         return results;
     }
 
-    protected BedloadDiameterResult calculateBedload(
+    protected BedQualityResultValue calculateBedload(
         QualityMeasurements qm,
-        String diameter,
-        DateRange range
+        String diameter
     ) {
         List<Double> kms = qm.getKms();
         TDoubleArrayList location = new TDoubleArrayList();
@@ -255,11 +252,9 @@
             location.add(km);
             avDiameter.add(mid * 1000);
         }
-        return new BedloadDiameterResult(
-            diameter,
-            avDiameter,
-            location,
-            range);
+        return new BedQualityResultValue(diameter,
+                new double[][] {location.toNativeArray(), avDiameter.toNativeArray()},
+                "bedload");
     }
 
     protected double calculateAverage(

http://dive4elements.wald.intevation.org