# HG changeset patch # User Sascha L. Teichmann # Date 1317820604 0 # Node ID 03fbf1b30e72a6a83905e5530379afe5e7c4214d # Parent dd9dfe1e48fa48d399a814920d64464097a5494d Removed code duplication of guessWaterIncreasing() flys-artifacts/trunk@2895 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r dd9dfe1e48fa -r 03fbf1b30e72 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Wed Oct 05 11:23:18 2011 +0000 +++ b/flys-artifacts/ChangeLog Wed Oct 05 13:16:44 2011 +0000 @@ -1,3 +1,21 @@ +2011-10-05 Sascha L. Teichmann + + Removed code duplication of guessWaterIncreasing() + + * src/main/java/de/intevation/flys/artifacts/model/WKms.java(allKms, allWs): + Added methods to fetch all kms and all ws. + + * src/main/java/de/intevation/flys/utils/DataUtil.java: Generalized to + get WKms as arguments. + + * src/main/java/de/intevation/flys/artifacts/model/WQKms.java, + src/main/java/de/intevation/flys/artifacts/model/WKmsImpl.java, + src/main/java/de/intevation/flys/artifacts/model/WQ.java: Implements + the extended WKms interface. + + * src/main/java/de/intevation/flys/exports/WDifferencesCurveGenerator.java: + Uses the generalized DataUtil.guessWaterIncreasing(). + 2011-10-05 Ingo Weinzierl flys/issue347 (W-INFO / Wasserspiegellagenberechnung, Längsschnittdiagramm) diff -r dd9dfe1e48fa -r 03fbf1b30e72 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WKms.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WKms.java Wed Oct 05 11:23:18 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WKms.java Wed Oct 05 13:16:44 2011 +0000 @@ -1,5 +1,7 @@ package de.intevation.flys.artifacts.model; +import gnu.trove.TDoubleArrayList; + public interface WKms extends NamedObject { @@ -8,5 +10,9 @@ double getKm(int index); double getW(int index); + + TDoubleArrayList allKms(); + + TDoubleArrayList allWs(); } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r dd9dfe1e48fa -r 03fbf1b30e72 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WKmsImpl.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WKmsImpl.java Wed Oct 05 11:23:18 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WKmsImpl.java Wed Oct 05 13:16:44 2011 +0000 @@ -45,18 +45,31 @@ } + @Override public double getW(int index) { return ws.getQuick(index); } + @Override public double getKm(int index) { return kms.getQuick(index); } + @Override public int size() { return kms.size(); } + + @Override + public TDoubleArrayList allKms() { + return kms; + } + + @Override + public TDoubleArrayList allWs() { + return ws; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r dd9dfe1e48fa -r 03fbf1b30e72 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WQ.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WQ.java Wed Oct 05 11:23:18 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WQ.java Wed Oct 05 13:16:44 2011 +0000 @@ -1,9 +1,9 @@ package de.intevation.flys.artifacts.model; +import de.intevation.flys.utils.DataUtil; + import gnu.trove.TDoubleArrayList; -import java.util.Random; - import org.apache.log4j.Logger; public class WQ @@ -117,26 +117,7 @@ } public boolean guessWaterIncreasing(float factor) { - - int N = w.size(); - if (N < 2) return false; - - int samples = (int)(factor*N) + 1; - - int up = 0; - - Random rand = new Random(); - - for (int i = 0; i < samples; ++i) { - int pos2 = rand.nextInt(N-1) + 1; - if (pos2 == 0) continue; - int pos1 = rand.nextInt(pos2); - double w1 = w.getQuick(pos1); - double w2 = w.getQuick(pos2); - if (w2 > w1) ++up; - } - - return up > samples/2; + return DataUtil.guessWaterIncreasing(w, factor); } public int [] longestIncreasingWRangeIndices() { diff -r dd9dfe1e48fa -r 03fbf1b30e72 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WQKms.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WQKms.java Wed Oct 05 11:23:18 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WQKms.java Wed Oct 05 13:16:44 2011 +0000 @@ -90,6 +90,16 @@ return kms.getQuick(idx); } + @Override + public TDoubleArrayList allKms() { + return kms; + } + + @Override + public TDoubleArrayList allWs() { + return w; + } + public double[] getKms() { return kms.toNativeArray(); } diff -r dd9dfe1e48fa -r 03fbf1b30e72 flys-artifacts/src/main/java/de/intevation/flys/exports/WDifferencesCurveGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/WDifferencesCurveGenerator.java Wed Oct 05 11:23:18 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/WDifferencesCurveGenerator.java Wed Oct 05 13:16:44 2011 +0000 @@ -177,7 +177,7 @@ } addFirstAxisSeries(series); - if (DataUtil.guessWaterIncreasing(wkms)) { + if (DataUtil.guessWaterIncreasing(wkms.allWs())) { setInverted(true); } } diff -r dd9dfe1e48fa -r 03fbf1b30e72 flys-artifacts/src/main/java/de/intevation/flys/utils/DataUtil.java --- a/flys-artifacts/src/main/java/de/intevation/flys/utils/DataUtil.java Wed Oct 05 11:23:18 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/utils/DataUtil.java Wed Oct 05 13:16:44 2011 +0000 @@ -2,18 +2,16 @@ import java.util.Random; -import de.intevation.flys.artifacts.model.WKms; +import gnu.trove.TDoubleArrayList; public class DataUtil { - // TODO: resolve duplicate in WQKms - public static boolean guessWaterIncreasing(WKms wkms) { - return guessWaterIncreasing(wkms, 0.05f); + public static boolean guessWaterIncreasing(TDoubleArrayList data) { + return guessWaterIncreasing(data, 0.05f); } - // TODO: resolve duplicate in WQKms - public static boolean guessWaterIncreasing(WKms wkms, float factor) { - int N = wkms.size(); + public static boolean guessWaterIncreasing(TDoubleArrayList data, float factor) { + int N = data.size(); if (N < 2) return false; int samples = (int)(factor*N) + 1; @@ -24,10 +22,9 @@ for (int i = 0; i < samples; ++i) { int pos2 = rand.nextInt(N-1) + 1; - if (pos2 == 0) continue; int pos1 = rand.nextInt(pos2); - double w1 = wkms.getW(pos1); - double w2 = wkms.getW(pos2); + double w1 = data.getQuick(pos1); + double w2 = data.getQuick(pos2); if (w2 > w1) ++up; }