Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Outlier.java @ 4795:8ee270a3ef25
Small code cleanups in S/Q outlier tests.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Fri, 11 Jan 2013 22:16:22 +0100 |
parents | a7d080347ac3 |
children | 846b0441f905 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Outlier.java Fri Jan 11 13:57:38 2013 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Outlier.java Fri Jan 11 22:16:22 2013 +0100 @@ -1,20 +1,17 @@ package de.intevation.flys.artifacts.model.sq; +import de.intevation.artifacts.common.utils.Config; + +import de.intevation.flys.artifacts.math.GrubbsOutlier; +import de.intevation.flys.artifacts.math.StdDevOutlier; + import java.util.ArrayList; import java.util.List; import org.apache.commons.math.MathException; -import org.apache.commons.math.stat.descriptive.moment.StandardDeviation; - import org.apache.log4j.Logger; -import de.intevation.artifacts.GlobalContext; -import de.intevation.artifacts.common.utils.Config; -import de.intevation.flys.artifacts.context.FLYSContext; -import de.intevation.flys.artifacts.math.GrubbsOutlier; -import de.intevation.flys.artifacts.math.StdDevOutlier; - public class Outlier { private static Logger log = Logger.getLogger(Outlier.class); @@ -24,7 +21,7 @@ private static final String GRUBBS = "grubbs"; - private static final String STD_DEV = "std-dev"; + //private static final String STD_DEV = "std-dev"; public interface Callback { @@ -48,42 +45,54 @@ { boolean debug = log.isDebugEnabled(); - if (debug) { - log.debug("stdDevFactor: " + stdDevFactor); - } String method = Config.getStringXPath(OUTLIER_METHOD); - log.debug("method: " + method); + if (method == null) { method = "std-dev"; } + + if (debug) { + log.debug("stdDevFactor: " + stdDevFactor); + log.debug("method: " + method); + } + List<SQ> data = new ArrayList<SQ>(sqs); + double [] stdDev = new double[1]; + + boolean useGrubbs = method.equals(GRUBBS); + + if (useGrubbs) { + stdDevFactor = Math.max(0d, Math.min(stdDevFactor/100d, 1d)); + } + + List<Double> values = new ArrayList<Double>(data.size()); + while (data.size() > 2) { callback.initialize(data); - List<Double> values = new ArrayList<Double>(); for (SQ sq: data) { values.add(callback.eval(sq)); } - Integer ndx = null; - double[] stdDev = new double[1]; - if (method.equals(GRUBBS)) { - ndx = GrubbsOutlier.findOutlier(values, stdDevFactor/100, stdDev); - } - else { - ndx = StdDevOutlier.findOutlier(values, stdDevFactor, stdDev); - } + Integer ndx = useGrubbs + ? GrubbsOutlier.findOutlier(values, stdDevFactor, stdDev) + : StdDevOutlier.findOutlier(values, stdDevFactor, stdDev); + if (ndx == null) { callback.iterationFinished(stdDev[0], null, data); break; } - SQ outlier = data.remove((int)ndx); - log.debug("stdDev: " + stdDev[0]); - log.debug("removed " + ndx + "; S: " + outlier.getS() + " Q: " + outlier.getQ()); + SQ outlier = data.remove(ndx.intValue()); + if (debug) { + log.debug("stdDev: " + stdDev[0]); + log.debug("removed " + ndx + + "; S: " + outlier.getS() + " Q: " + outlier.getQ()); + } callback.iterationFinished(stdDev[0], outlier, data); + values.clear(); } } }