diff artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BedQualityCalculator.java @ 9450:7e1fb8d0cb0d

Bundu bzws calculation nearly completed, some corrections with csv output, started with linking the minfo density calculation
author mschaefer
date Wed, 22 Aug 2018 19:12:51 +0200
parents
children fd6621f47a72
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BedQualityCalculator.java	Wed Aug 22 19:12:51 2018 +0200
@@ -0,0 +1,68 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+
+package org.dive4elements.river.artifacts.bundu.bezugswst;
+
+import java.util.Date;
+
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.access.BedQualityAccess;
+import org.dive4elements.river.artifacts.bundu.BUNDUArtifact;
+import org.dive4elements.river.artifacts.model.Calculation;
+import org.dive4elements.river.artifacts.model.Calculation.Problem;
+import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.model.minfo.BedQualityCalculation;
+import org.dive4elements.river.artifacts.model.minfo.BedQualityResult;
+import org.dive4elements.river.artifacts.model.minfo.BedQualityResultValue;
+import org.dive4elements.river.model.River;
+
+/**
+ * Calculator for bed quality parameters in a km range and time period, wrapping the minfo BedQualityCalculation
+ *
+ * @author Matthias Schäfer
+ *
+ */
+public class BedQualityCalculator {
+
+    private final CallContext context;
+
+    private final BUNDUArtifact bundu;
+
+
+    public BedQualityCalculator(final CallContext context, final BUNDUArtifact bundu) {
+        this.context = context;
+        this.bundu = bundu;
+    }
+
+    /**
+     * Calculates the river bed sublayer densities for an array of kms and a time period of measurements
+     */
+    public double[][] execute(final Calculation problems, final River river, final double[] kms, final Date startDay, final Date endDay) {
+        final BedQualityCalculation bqCalc = new BedQualityCalculation();
+        final BedQualityAccess access = createBqAccess(kms[0], kms[kms.length - 1], startDay, endDay);
+        final CalculationResult bqCalcResult = bqCalc.calculate(access);
+        if (bqCalcResult.getReport().getProblems() != null) {
+            for (final Problem problem : bqCalcResult.getReport().getProblems())
+                problems.addProblem(problem);
+        }
+        final BedQualityResult[] results = (BedQualityResult[]) bqCalcResult.getData();
+        final BedQualityResult result = results[0];
+        final BedQualityResultValue bqResValue = result.getValue("density", "sublayer");
+        return bqResValue.getDataInterpolated(kms);
+    }
+
+    /**
+     * Creates an access object for the bed quality calculation
+     */
+    private BedQualityAccess createBqAccess(final double fromKm, final double toKm, final Date startDay, final Date endDay) {
+        final BunduMinfoArtifactWrapper minfo = new BunduMinfoArtifactWrapper(this.bundu, startDay, endDay);
+        return new BedQualityAccess(minfo, this.context);
+    }
+}
\ No newline at end of file

http://dive4elements.wald.intevation.org