diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java @ 3310:8af1111af180

SQ relation: More fixes. flys-artifacts/trunk@4999 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 13 Jul 2012 15:41:56 +0000
parents b24920235944
children 816ceb0418b9
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java	Fri Jul 13 15:04:36 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java	Fri Jul 13 15:41:56 2012 +0000
@@ -12,6 +12,7 @@
 
 import de.intevation.flys.backend.SedDBSessionHolder;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.log4j.Logger;
@@ -97,54 +98,58 @@
             addProblem("sq.missing.sq.function");
         }
 
-        // XXX: We can only produce one SQResult.
-        DateRange period = periods[0];
-
-        Measurements measurements =
-            MeasurementFactory.getMeasurements(river, location, period);
-
-        if (debug) {
-            log.debug(measurements.toString());
-        }
-
-        SQFractionResult [] fractionResults =
-            new SQFractionResult[SQResult.NUMBER_FRACTIONS];
 
         String [] parameterNames = function.getParameterNames();
 
-        Fitting fitting = new Fitting(function, outliers);
-        for (int i = 0; i < fractionResults.length; ++i) {
-            List<SQ> sqs = measurements.getSQs(i);
-
-            SQFractionResult fractionResult;
+        List<SQResult> results = new ArrayList<SQResult>(periods.length);
 
-            if (!fitting.fit(sqs)) {
-                // TODO: i18n
-                addProblem("sq.fitting.failed." + i);
-                fractionResult = new SQFractionResult();
-            }
-            else {
-                Parameters parameters = createParameters(parameterNames);
-                int row = parameters.newRow();
-                double [] coeffs = fitting.getParameters();
-                for (int j = 0; j < parameterNames.length; ++j) {
-                    parameters.set(row, parameterNames[j], coeffs[j]);
-                }
-                parameters.set(row, "chi_sqr", fitting.getChiSqr());
-                parameters.set(row, "std_dev", fitting.getStandardDeviation());
+        Fitting fitting = new Fitting(function, outliers);
 
-                fractionResult = new SQFractionResult(
-                    parameters,
-                    fitting.getRemaining(),
-                    fitting.getOutliers());
+        for (DateRange period: periods) {
+            Measurements measurements =
+                MeasurementFactory.getMeasurements(river, location, period);
+
+            if (debug) {
+                log.debug(measurements.toString());
             }
 
-            fractionResults[i] = fractionResult;
+            SQFractionResult [] fractionResults =
+                new SQFractionResult[SQResult.NUMBER_FRACTIONS];
 
-            fitting.reset();
+            for (int i = 0; i < fractionResults.length; ++i) {
+                List<SQ> sqs = measurements.getSQs(i);
+
+                SQFractionResult fractionResult;
+
+                if (!fitting.fit(sqs)) {
+                    // TODO: i18n
+                    addProblem("sq.fitting.failed." + i);
+                    fractionResult = new SQFractionResult();
+                }
+                else {
+                    Parameters parameters = createParameters(parameterNames);
+                    int row = parameters.newRow();
+                    double [] coeffs = fitting.getParameters();
+                    for (int j = 0; j < parameterNames.length; ++j) {
+                        parameters.set(row, parameterNames[j], coeffs[j]);
+                    }
+                    parameters.set(row, "chi_sqr", fitting.getChiSqr());
+                    parameters.set(row, "std_dev", fitting.getStandardDeviation());
+
+                    fractionResult = new SQFractionResult(
+                        parameters,
+                        fitting.getRemaining(),
+                        fitting.getOutliers());
+                }
+                fitting.reset();
+                fractionResults[i] = fractionResult;
+            }
+            results.add(new SQResult(fractionResults));
         }
 
-        return new CalculationResult(new SQResult(fractionResults), this);
+        return new CalculationResult(
+            results.toArray(new SQResult[results.size()]), 
+            this);
     }
 
     public static final Parameters createParameters(String [] names) {

http://dive4elements.wald.intevation.org