diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java @ 3020:ce796f1db30e

FixA: Store AnalysisPeriods into FixResult now. flys-artifacts/trunk@4587 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 05 Jun 2012 13:51:42 +0000
parents e341606faeb4
children 705d2058b682
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java	Tue Jun 05 13:34:50 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java	Tue Jun 05 13:51:42 2012 +0000
@@ -255,15 +255,13 @@
             results.removeNaNs();
         }
 
-        // Calculate Delta W/t
-        DeltaWTsKM deltaWTsKM = calculateDeltaWTs(
-            func,
-            overview,
-            results);
+        KMIndex<AnalysisPeriod []> analysisPeriods =
+            calculateAnalysisPeriods(func, results, overview);
 
         outliers.sort();
+        analysisPeriods.sort();
 
-        FixResult fr = new FixResult(results, deltaWTsKM, outliers);
+        FixResult fr = new FixResult(results, analysisPeriods, outliers);
 
         return new CalculationResult(fr, this);
     }
@@ -299,101 +297,11 @@
         return columns;
     }
 
-    public DeltaWTsKM calculateDeltaWTs(
-        Function        function,
-        FixingsOverview overview,
-        Parameters      results
-    ) {
-        boolean debug = log.isDebugEnabled();
-
-        DeltaWTsKM deltaWTsKM = new DeltaWTsKM(results.size());
-
-        Column [][] analysisColumns = getAnalysisColumns(overview);
-
-        int [] parameterIndices = 
-            results.columnIndices(function.getParameterNames());
-
-        double [] parameterValues =
-            new double[parameterIndices.length];
-
-        double [] ow = new double[1];
-
-        int kmIdx = results.columnIndex("km");
-
-        for (int i = 0, N = results.size(); i < N; ++i) {
-            double km = results.get(i, kmIdx);
-            results.get(i, parameterIndices, parameterValues);
-
-            DeltaWTsKM.KM dwtkm = new DeltaWTsKM.KM(km);
-            deltaWTsKM.add(dwtkm);
-
-            // This is the paraterized function for a given km.
-            de.intevation.flys.artifacts.math.Function instance =
-                function.instantiate(parameterValues);
-
-            // Evaluate all columns for all analysis periods.
-            for (int j = 0; j < analysisColumns.length; ++j) {
-                Column [] periodColumns = analysisColumns[j];
-
-                int failedQ = 0;
-                int failedW = 0;
-                int failedC = 0;
-
-                for (int k = 0; k < periodColumns.length; ++k) {
-                    Column pc = periodColumns[k];
-
-                    // Q from real data.
-                    double q = pc.data.getQ(km);
-                    if (Double.isNaN(q)) {
-                        ++failedQ;
-                        continue;
-                    }
-
-                    // Calculate W from function.
-                    double nw = instance.value(q);
-                    if (Double.isNaN(nw)) {
-                        ++failedC;
-                        continue;
-                    }
-
-                    // W from real data.
-                    pc.data.getW(km, ow);
-
-                    if (Double.isNaN(ow[0])) {
-                        ++failedW;
-                        continue;
-                    }
-
-                    double deltaW = (ow[0] - nw)*100.0; // in cm
-
-                    DeltaWT deltaWT = new DeltaWT(
-                        deltaW,
-                        pc.meta.getStartTime(),
-                        pc.meta.getDescription());
-
-                    dwtkm.add(deltaWT);
-                }
-                if (debug) {
-                    log.debug("failed W: " + failedW);
-                    log.debug("failed Q: " + failedQ);
-                    log.debug("failed C: " + failedC);
-                    log.debug("input size: " + periodColumns.length);
-                    log.debug("outpt size: " + dwtkm.size());
-                }
-            }
-        }
-
-        return deltaWTsKM;
-    }
-
-    protected List<AnalysisPeriodsKM> calculateAnalysisPeriods(
+    protected KMIndex<AnalysisPeriod []> calculateAnalysisPeriods(
         Function        function,
         Parameters      parameters,
         FixingsOverview overview
     ) {
-        ArrayList<AnalysisPeriodsKM> results
-            = new ArrayList<AnalysisPeriodsKM>(parameters.size());
-
         Range range = new Range(from, to);
 
         int kmIndex = parameters.columnIndex("km");
@@ -409,7 +317,10 @@
 
         DateAverager dateAverager = new DateAverager();
 
-        for (int row = 0, P = parameters.size(); row < P; ++row) {
+        KMIndex<AnalysisPeriod []> results =
+            new KMIndex<AnalysisPeriod []>(parameters.size());
+
+        for (int row = 0, R = parameters.size(); row < R; ++row) {
             double km = parameters.get(row, kmIndex);
             parameters.get(row, parameterIndices, parameterValues);
 
@@ -419,11 +330,17 @@
 
             KmFilter kmFilter = new KmFilter(km);
 
+            ArrayList<AnalysisPeriod> periodResults =
+                new ArrayList<AnalysisPeriod>(analysisPeriods.length);
+
             for (DateRange analysisPeriod: analysisPeriods) {
                 DateRangeFilter drf = new DateRangeFilter(
                     analysisPeriod.getFrom(),
                     analysisPeriod.getTo());
 
+                QWD [] qSectorAverages = new QWD[4];
+                ArrayList<QWD> allQWDs = new ArrayList<QWD>();
+
                 // for all Q sectors.
                 for (int qSector = qSectorStart; qSector < qSectorEnd; ++qSector) {
 
@@ -480,6 +397,7 @@
                     // Calulate average per Q sector.
                     int N = qwds.size();
                     if (N > 0) {
+                        allQWDs.addAll(qwds);
                         double avgW = sumW / N;
                         double avgQ = sumQ / N;
 
@@ -493,14 +411,20 @@
                             QWD avgQWD = new QWD(
                                 avgQ, avgW, avgDescription, avgDate, avgDw);
 
-                            // TODO: Store average value.
-                        }
-                        else {
-                            // TODO: Store
+                            qSectorAverages[qSector] = avgQWD;
                         }
                     }
                 } // for all Q sectors
+
+                QWD [] aqwds = allQWDs.toArray(new QWD[allQWDs.size()]);
+
+                AnalysisPeriod periodResult = new AnalysisPeriod(
+                    analysisPeriod, aqwds, qSectorAverages);
+                periodResults.add(periodResult);
             }
+
+            results.add(km, periodResults.toArray(
+                new AnalysisPeriod[periodResults.size()]));
         }
 
         return results;

http://dive4elements.wald.intevation.org