changeset 5396:aaf810d4ec82

Use new state 'outlier mehtod selection' in SQ-relation. The outlier method is no more configurable in conf.xml. The user can now select the method in SQ-relation parameters.
author Raimund Renkert <rrenkert@intevation.de>
date Mon, 25 Mar 2013 12:40:26 +0100
parents 5a55c5372fe1
children 7eb6e1f16e9d
files flys-artifacts/doc/conf/artifacts/minfo.xml flys-artifacts/doc/conf/conf.xml flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/SQRelationAccess.java flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Fitting.java flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Outlier.java flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java
diffstat 6 files changed, 42 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/flys-artifacts/doc/conf/artifacts/minfo.xml	Mon Mar 25 12:35:08 2013 +0100
+++ b/flys-artifacts/doc/conf/artifacts/minfo.xml	Mon Mar 25 12:40:26 2013 +0100
@@ -127,7 +127,7 @@
 
         <transition transition="de.intevation.flys.artifacts.transitions.DefaultTransition">
             <from state="state.minfo.sq.period"/>
-            <to state="state.minfo.sq.outliers"/>
+            <to state="state.minfo.sq.outlier-method"/>
         </transition>
 
         <transition transition="de.intevation.flys.artifacts.transitions.DefaultTransition">
@@ -189,10 +189,6 @@
             </outputmodes>
         </state>
 
-        <state id="state.minfo.sq.outliers" description="state.minfo.sq.outliers" state="de.intevation.flys.artifacts.states.OutliersInput" helpText="help.state.minfo.sq.outliers">
-            <data name="outliers" type="Double"/>
-        </state>
-
         <state id="state.minfo.bed.differences" description="state.minfo.bed.differences" state="de.intevation.flys.artifacts.states.minfo.DifferencesState" helpText="help.state.minfo.bed.differences">
             <outputmodes>
                 <outputmode name="bed_difference_height_year" description="output.absolute_height" mime-type="image/png" type="chart">
@@ -252,16 +248,29 @@
             <data name="load_diameter" type="options"/>
         </state>
 
+        <state id="state.minfo.sq.outlier-method" description="state.minfo.sq.outlier-method" state="de.intevation.flys.artifacts.states.sq.OutlierMethod" helpText="help.state.minfo.sq.outliermethod">
+            <data name="outlier-method" type="String"/>
+        </state>
+
         <transition transition="de.intevation.flys.artifacts.transitions.DefaultTransition">
-            <from state="state.minfo.sq.outliers"/>
-            <to state="state.minfo.sq.relation"/>
+            <from state="state.minfo.sq.outlier-method"/>
+            <to state="state.minfo.sq.outliers"/>
         </transition>
 
+        <state id="state.minfo.sq.outliers" description="state.minfo.sq.outliers" state="de.intevation.flys.artifacts.states.OutliersInput" helpText="help.state.minfo.sq.outliers">
+            <data name="outliers" type="Double"/>
+        </state>
+
         <transition transition="de.intevation.flys.artifacts.transitions.DefaultTransition">
             <from state="state.minfo.bed.char_diameter"/>
             <to state="state.minfo.bed.bed_quality"/>
         </transition>
 
+        <transition transition="de.intevation.flys.artifacts.transitions.DefaultTransition">
+            <from state="state.minfo.sq.outliers"/>
+            <to state="state.minfo.sq.relation"/>
+        </transition>
+
         <state id="state.minfo.sq.relation" description="state.minfo.sq.relation" state="de.intevation.flys.artifacts.states.SQRelation">
             <outputmodes>
                 <outputmode name="sq_relation_a" description="output.sq_relation" type="chart">
--- a/flys-artifacts/doc/conf/conf.xml	Mon Mar 25 12:35:08 2013 +0100
+++ b/flys-artifacts/doc/conf/conf.xml	Mon Mar 25 12:40:26 2013 +0100
@@ -401,11 +401,6 @@
             <zoom-scale river="Elbe" range="500" radius="10" />
         </zoom-scales>
 
-        <minfo-sq>
-            <!-- valid names: grubbs or std-dev -->
-            <outlier-method name="grubbs"/>
-        </minfo-sq>
-
         <dgm-path>
           /path/to/rivers/
         </dgm-path>
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/SQRelationAccess.java	Mon Mar 25 12:35:08 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/SQRelationAccess.java	Mon Mar 25 12:40:26 2013 +0100
@@ -18,6 +18,8 @@
 
     protected Double    outliers;
 
+    private String      method;
+
     public SQRelationAccess() {
     }
 
@@ -60,5 +62,15 @@
         }
         return outliers;
     }
+
+    public String getOutlierMethod() {
+        if (method == null) {
+            method = getString("outlier-method");
+        }
+        if (log.isDebugEnabled()) {
+            log.debug("outlier-method: " + method);
+        }
+        return method;
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Fitting.java	Mon Mar 25 12:35:08 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Fitting.java	Mon Mar 25 12:40:26 2013 +0100
@@ -124,7 +124,7 @@
         return good;
     }
 
-    public boolean fit(List<SQ> sqs, Callback callback) {
+    public boolean fit(List<SQ> sqs, String method, Callback callback) {
 
         sqs = onlyValid(sqs);
 
@@ -136,7 +136,7 @@
         this.callback = callback;
 
         try {
-            Outlier.detectOutliers(this, sqs, stdDevFactor);
+            Outlier.detectOutliers(this, sqs, stdDevFactor, method);
         }
         catch (MathException me) {
             log.warn(me);
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Outlier.java	Mon Mar 25 12:35:08 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Outlier.java	Mon Mar 25 12:40:26 2013 +0100
@@ -19,7 +19,7 @@
     private static final String OUTLIER_METHOD =
         "/artifact-database/options/minfo-sq/outlier-method/@name";
 
-    private static final String GRUBBS = "grubbs";
+    private static final String GRUBBS = "outlier.method.grubbs";
 
     //private static final String STD_DEV = "std-dev";
 
@@ -39,14 +39,13 @@
     public static void detectOutliers(
         Callback callback,
         List<SQ> sqs,
-        double   stdDevFactor
+        double   stdDevFactor,
+        String   method
     )
     throws MathException
     {
         boolean debug = log.isDebugEnabled();
 
-        String method = Config.getStringXPath(OUTLIER_METHOD);
-
         if (method == null) {
             method = "std-dev";
         }
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java	Mon Mar 25 12:35:08 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java	Mon Mar 25 12:40:26 2013 +0100
@@ -28,6 +28,7 @@
     protected double    location;
     protected DateRange period;
     protected double    outliers;
+    private   String    method;
 
     public SQRelationCalculation() {
     }
@@ -38,6 +39,7 @@
         Double    location = access.getLocation();
         DateRange period   = access.getPeriod();
         Double    outliers = access.getOutliers();
+        String    method   = access.getOutlierMethod();
 
         //river = "Rhein";
 
@@ -61,11 +63,17 @@
             addProblem("sq.missing.outliers");
         }
 
+        if (method == null) {
+            //TODO: i18n
+            addProblem("sq.missing.method");
+        }
+
         if (!hasProblems()) {
             this.river    = river;
             this.location = location;
             this.period   = period;
             this.outliers = outliers;
+            this.method   = method;
         }
     }
 
@@ -140,6 +148,7 @@
 
         boolean success = new Fitting(function, outliers).fit(
             sqs,
+            method,
             new Fitting.Callback() {
                 @Override
                 public void afterIteration(

http://dive4elements.wald.intevation.org