diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/MeasurementFactory.java @ 4005:22abdc45869c

Calculate S(Q) fractions
author Sascha L. Teichmann <teichmann@intevation.de>
date Mon, 01 Oct 2012 18:32:27 +0200
parents 3b79e8afca7e
children d4e39cc5c10c
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/MeasurementFactory.java	Mon Oct 01 15:51:55 2012 +0200
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/MeasurementFactory.java	Mon Oct 01 18:32:27 2012 +0200
@@ -1,6 +1,8 @@
 package de.intevation.flys.artifacts.model.sq;
 
 import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.TreeMap;
@@ -269,7 +271,7 @@
             m.adjustSieves();
         }
 
-        return new Measurements(measuments, accumulated);
+        return new Measurements(measuments, separateByDate(accumulated));
     }
 
     protected static List<Measurement> separateByDate(List<Measurement> measurements) {
@@ -300,6 +302,7 @@
         return result;
     }
 
+
     protected static Measurement processSameDate(List<Measurement> measurements) {
         int N = measurements.size();
         if (N == 1) {
@@ -334,13 +337,48 @@
             }
         }
 
-        return null;
+        double sumSandF   = 0d;
+        double sumCoarseF = 0d;
+        double sumGravelF = 0d;
+        double sumNorm    = 0d;
+
+        for (Measurement m: measurements) {
+            SieveArray sa   = m.getSieveArray();
+            double sandF    = sa.sandNormFraction();
+            double coarseF  = sa.coarseNormFraction();
+            double gravelF  = sa.gravelNormFraction();
+            double effWidth = m.get("EFFWIDTH");
+            double gt       = m.get("GTRIEB");
+            double scale    = effWidth*gt;
+            sumSandF   += scale*sandF;
+            sumCoarseF += scale*coarseF;
+            sumGravelF += scale*gravelF;
+            sumNorm    += scale;
+        }
+
+        Map<String, Object> data =
+            new HashMap<String, Object>(measurements.get(0).getData());
+
+        Measurement m = new Measurement(data, Collections.<Sieve>emptyList());
+
+        sumNorm = 1d/sumNorm;
+
+        m.set("BL_S", sumNorm*sumSandF);
+        m.set("BL_G", sumNorm*sumGravelF);
+        m.set("BL_C", sumNorm*sumCoarseF);
+
+        return m;
     }
 
 
     private static final boolean equalDate(Date a, Date b) {
-        // TODO: compare only year, month and day.
-        return a.equals(b);
+        Calendar ca = Calendar.getInstance();
+        Calendar cb = Calendar.getInstance();
+        ca.setTime(a);
+        cb.setTime(b);
+        return ca.get(Calendar.YEAR) == cb.get(Calendar.YEAR)
+            && ca.get(Calendar.MONTH) == cb.get(Calendar.MONTH)
+            && ca.get(Calendar.DAY_OF_MONTH) == cb.get(Calendar.DAY_OF_MONTH);
     }
 
 

http://dive4elements.wald.intevation.org