diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation4.java @ 3441:bfbd478bd607

FixA: Moved Q -> W conversion code into segments to be reusable. flys-artifacts/trunk@5104 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 23 Jul 2012 14:19:07 +0000
parents cb11919cccf9
children 22790758b132
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation4.java	Mon Jul 23 11:52:21 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation4.java	Mon Jul 23 14:19:07 2012 +0000
@@ -1,21 +1,18 @@
 package de.intevation.flys.artifacts.model;
 
-import java.util.List;
-import java.util.Arrays;
-import java.util.Collections;
+import de.intevation.flys.artifacts.math.BackJumpCorrector;
+import de.intevation.flys.artifacts.math.Function;
+import de.intevation.flys.artifacts.math.Identity;
+import de.intevation.flys.artifacts.math.Linear;
+
+import de.intevation.flys.artifacts.model.WstValueTable.QPosition;
+
+import de.intevation.flys.model.River;
 
 import de.intevation.flys.utils.DoubleUtil;
 
-import de.intevation.flys.model.River;
-import de.intevation.flys.model.Gauge;
-import de.intevation.flys.model.DischargeTable;
-
-import de.intevation.flys.artifacts.model.WstValueTable.QPosition;
-
-import de.intevation.flys.artifacts.math.Function;
-import de.intevation.flys.artifacts.math.Linear;
-import de.intevation.flys.artifacts.math.Identity;
-import de.intevation.flys.artifacts.math.BackJumpCorrector;
+import java.util.Arrays;
+import java.util.List;
 
 import org.apache.log4j.Logger;
 
@@ -38,65 +35,7 @@
         this.segments = segments;
         this.isQ      = isQ;
 
-        int numResults = -1;
-
-        // assign reference points
-        for (Segment segment: segments) {
-            Gauge gauge = river.maxOverlap(segment.getFrom(), segment.getTo());
-
-            if (gauge == null) {
-                logger.warn("no gauge found. Defaults to mid point.");
-                segment.setReferencePoint(
-                    0.5*(segment.getFrom()+segment.getTo()));
-            }
-            else {
-                double ref = gauge.getStation().doubleValue();
-                logger.debug(
-                    "reference gauge: " + gauge.getName() +
-                    " (km " + ref + ")");
-                segment.setReferencePoint(ref);
-            }
-
-            double [] values = segment.values;
-
-            if (numResults == -1) {
-                numResults = values.length;
-            }
-            else if (numResults != values.length) {
-                throw new IllegalArgumentException("wrong length of values");
-            }
-
-            // convert to Q if needed
-            if (!isQ && gauge != null) {
-
-                DischargeTable dt = gauge.fetchMasterDischargeTable();
-
-                double [][] table =
-                    DischargeTables.loadDischargeTableValues(dt, 1);
-
-                // need the original values for naming
-                segment.backup();
-
-                for (int i = 0; i < values.length; ++i) {
-                    double w = values[i] / 100.0;
-                    double [] qs = DischargeTables.getQsForW(table, w);
-                    if (qs.length == 0) {
-                        logger.warn("No Qs found for W = " + values[i]);
-                        addProblem("cannot.find.w.for.q", values[i]);
-                        values[i] = Double.NaN;
-                    }
-                    else {
-                        values[i] = qs[0];
-                        if (qs.length > 1) {
-                            logger.warn(
-                                "More than one Q found for W = " + values[i]);
-                        }
-                    }
-                }
-            }
-        } // for all segments
-
-        Collections.sort(segments, Segment.REF_CMP);
+        Segment.setReferencePointConvertQ(segments, river, isQ, this);
     }
 
     public CalculationResult calculate(

http://dive4elements.wald.intevation.org