Mercurial > dive4elements > river
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); }