Mercurial > dive4elements > river
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(