Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Outlier.java @ 3188:1e46ced2bb57
SQ: Added fitting shell for SQ curves.
flys-artifacts/trunk@4803 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 26 Jun 2012 17:05:11 +0000 |
parents | 1e2733f749b5 |
children | 49fe2ed03c12 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Outlier.java Tue Jun 26 16:00:59 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Outlier.java Tue Jun 26 17:05:11 2012 +0000 @@ -1,8 +1,11 @@ package de.intevation.flys.artifacts.model.sq; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import org.apache.commons.math.MathException; + import org.apache.commons.math.stat.descriptive.moment.StandardDeviation; public class Outlier @@ -17,6 +20,10 @@ void outlier(SQ sq); + void standardDeviation(double stdDev); + + void reinitialize(Iterator<SQ> good) throws MathException; + void finished(); } // interface Callback @@ -34,7 +41,9 @@ Callback callback, List<SQ> sqs, double stdDevFactor - ) { + ) + throws MathException + { List<EvalSQ> data = new ArrayList<EvalSQ>(sqs.size()); for (SQ sq: sqs) { @@ -43,7 +52,7 @@ List<EvalSQ> good = new ArrayList<EvalSQ>(sqs.size()); - for (int i = 0; i < MAX_ITERATIONS && data.size() > 2; ++i) { + for (int i = 1; i <= MAX_ITERATIONS && data.size() > 2; ++i) { StandardDeviation stdDev = new StandardDeviation(); @@ -51,7 +60,11 @@ stdDev.increment(esq.value = callback.eval(esq.sq)); } - double accepted = stdDevFactor * stdDev.getResult(); + double sd = stdDev.getResult(); + + callback.standardDeviation(sd); + + double accepted = stdDevFactor * sd; callback.iteration(i); @@ -68,6 +81,8 @@ break; } + callback.reinitialize(asSQIterator(good)); + List<EvalSQ> tmp = good; good = data; data = tmp; @@ -84,5 +99,25 @@ return result; } + + protected static Iterator<SQ> asSQIterator(List<EvalSQ> esqs) { + final Iterator<EvalSQ> parent = esqs.iterator(); + return new Iterator<SQ>() { + @Override + public boolean hasNext() { + return parent.hasNext(); + } + + @Override + public SQ next() { + return parent.next().sq; + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + }; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :