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();
         }
     }
 }

http://dive4elements.wald.intevation.org