diff artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/FixRealizingCalculation.java @ 9415:9744ce3c3853

Rework of fixanalysis computation and dWt and WQ facets. Got rid of strange remapping and bitshifting code by explicitely saving the column information and using it in the facets. The facets also put the valid station range into their xml-metadata
author gernotbelger
date Thu, 16 Aug 2018 16:27:53 +0200
parents ddcd52d239cd
children 2b83d3a96703
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/FixRealizingCalculation.java	Thu Aug 16 15:47:10 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/FixRealizingCalculation.java	Thu Aug 16 16:27:53 2018 +0200
@@ -8,41 +8,33 @@
 
 package org.dive4elements.river.artifacts.model.fixings;
 
+import java.util.List;
+
 import org.dive4elements.river.artifacts.access.FixRealizingAccess;
-
 import org.dive4elements.river.artifacts.math.fitting.Function;
-
 import org.dive4elements.river.artifacts.model.CalculationResult;
-import org.dive4elements.river.artifacts.model.FixingsOverview;
+import org.dive4elements.river.artifacts.model.Parameters;
 import org.dive4elements.river.artifacts.model.RiverFactory;
 import org.dive4elements.river.artifacts.model.Segment;
 import org.dive4elements.river.artifacts.model.WQKms;
-import org.dive4elements.river.artifacts.model.Parameters;
-
 import org.dive4elements.river.model.River;
 
-import java.util.List;
-
-import org.apache.log4j.Logger;
-
 /** Calculation for FixRealize (german: ausgel. WSPL). */
-public class FixRealizingCalculation
-extends      FixCalculation
-{
-    private static Logger log =
-        Logger.getLogger(FixRealizingCalculation.class);
+public class FixRealizingCalculation extends FixCalculation {
+    private static final long serialVersionUID = 1L;
 
-    protected boolean       isQ;
+    protected boolean isQ;
+
     protected List<Segment> segments;
 
     public FixRealizingCalculation() {
     }
 
-    public FixRealizingCalculation(FixRealizingAccess access) {
+    public FixRealizingCalculation(final FixRealizingAccess access) {
         super(access);
 
-        Boolean       isQ      = access.isQ();
-        List<Segment> segments = access.getSegments();
+        final Boolean isQ = access.isQ();
+        final List<Segment> segments = access.getSegments();
 
         if (isQ == null) {
             addProblem("fix.realize.missing.is.q");
@@ -52,14 +44,14 @@
             addProblem("fix.realize.missing.segments");
         }
 
-        River r = RiverFactory.getRiver(river);
+        final River r = RiverFactory.getRiver(this.river);
 
         if (r == null) {
             addProblem("fix.no.such.river");
         }
 
         if (!hasProblems()) {
-            this.isQ      = isQ;
+            this.isQ = isQ;
             this.segments = segments;
 
             // Convert from W to Q
@@ -68,39 +60,35 @@
     }
 
     @Override
-    protected CalculationResult innerCalculate(
-        FixingsOverview overview,
-        Function        func
-    ) {
-        ColumnCache cc = new ColumnCache();
-        FitResult fitResult = doFitting(overview, cc, func);
+    protected CalculationResult innerCalculate(final FixingsOverview overview, final Function func) {
+        final ColumnCache cc = new ColumnCache();
+        final FitResult fitResult = doFitting(overview, cc, func);
 
         if (fitResult == null) {
             return new CalculationResult(this);
         }
 
-        Segment segment = segments.get(0);
-        int numResults = segment.numValues();
+        Segment segment = this.segments.get(0);
+        final int numResults = segment.numValues();
 
-        WQKms [] results = new WQKms[numResults];
+        final WQKms[] results = new WQKms[numResults];
         for (int i = 0; i < results.length; ++i) {
             results[i] = new WQKms();
         }
 
-        Parameters parameters = fitResult.getParameters();
+        final Parameters parameters = fitResult.getParameters();
 
-        int kmIndex = parameters.columnIndex("km");
-        int [] parameterIndices =
-            parameters.columnIndices(func.getParameterNames());
+        final int kmIndex = parameters.columnIndex("km");
+        final int[] parameterIndices = parameters.columnIndices(func.getParameterNames());
 
-        double [] parameterValues = new double[parameterIndices.length];
+        final double[] parameterValues = new double[parameterIndices.length];
 
         for (int row = 0, R = parameters.size(); row < R; ++row) {
-            double km = parameters.get(row, kmIndex);
+            final double km = parameters.get(row, kmIndex);
 
             if (!segment.inside(km)) {
                 Segment nextSeg = null;
-                for (Segment seg: segments) {
+                for (final Segment seg : this.segments) {
                     if (seg.inside(km)) {
                         nextSeg = seg;
                         break;
@@ -115,18 +103,16 @@
 
             parameters.get(row, parameterIndices, parameterValues);
 
-            org.dive4elements.river.artifacts.math.Function instance =
-                func.instantiate(parameterValues);
+            final org.dive4elements.river.artifacts.math.Function instance = func.instantiate(parameterValues);
 
-            double [] values = segment.getValues();
+            final double[] values = segment.getValues();
             for (int i = 0; i < numResults; ++i) {
-                double q = values[i];
-                double w = instance.value(q);
+                final double q = values[i];
+                final double w = instance.value(q);
 
                 if (Double.isNaN(w)) {
                     addProblem(km, "fix.cannot.calculate.function", q);
-                }
-                else {
+                } else {
                     results[i].add(w, q, km);
                 }
             }
@@ -136,27 +122,26 @@
         for (int i = 0; i < results.length; ++i)
             results[i].setName(createName(i));
 
-        final FixRealizingResult frr = new FixRealizingResult( parameters, fitResult.getFixings(), results);
+        final FixRealizingResult frr = new FixRealizingResult(parameters, fitResult.getResultColumns(), results);
 
         return new CalculationResult(frr, this);
     }
 
     // TODO: issue1109/2
-    protected String createName(int index) {
+    protected String createName(final int index) {
         // TODO: i18n
-        StringBuilder sb = new StringBuilder(isQ ? "Q" : "W");
+        final StringBuilder sb = new StringBuilder(this.isQ ? "Q" : "W");
         sb.append(" benutzerdefiniert (");
-        for (int i = 0, N = segments.size(); i < N; ++i) {
+        for (int i = 0, N = this.segments.size(); i < N; ++i) {
             if (i > 0) {
                 sb.append("; ");
             }
-            Segment segment = segments.get(i);
-            double [] backup = segment.getBackup();
-            double [] values = segment.getValues();
+            final Segment segment = this.segments.get(i);
+            final double[] backup = segment.getBackup();
+            final double[] values = segment.getValues();
             sb.append((backup != null ? backup : values)[index]);
         }
         sb.append(')');
         return sb.toString();
     }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+}
\ No newline at end of file

http://dive4elements.wald.intevation.org