comparison 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
comparison
equal deleted inserted replaced
4004:3b79e8afca7e 4005:22abdc45869c
1 package de.intevation.flys.artifacts.model.sq; 1 package de.intevation.flys.artifacts.model.sq;
2 2
3 import java.util.ArrayList; 3 import java.util.ArrayList;
4 import java.util.Calendar;
5 import java.util.Collections;
4 import java.util.Date; 6 import java.util.Date;
5 import java.util.List; 7 import java.util.List;
6 import java.util.TreeMap; 8 import java.util.TreeMap;
7 9
8 import de.intevation.flys.artifacts.model.DateRange; 10 import de.intevation.flys.artifacts.model.DateRange;
267 269
268 for (Measurement m: accumulated) { 270 for (Measurement m: accumulated) {
269 m.adjustSieves(); 271 m.adjustSieves();
270 } 272 }
271 273
272 return new Measurements(measuments, accumulated); 274 return new Measurements(measuments, separateByDate(accumulated));
273 } 275 }
274 276
275 protected static List<Measurement> separateByDate(List<Measurement> measurements) { 277 protected static List<Measurement> separateByDate(List<Measurement> measurements) {
276 278
277 List<Measurement> result = new ArrayList<Measurement>(); 279 List<Measurement> result = new ArrayList<Measurement>();
298 } 300 }
299 301
300 return result; 302 return result;
301 } 303 }
302 304
305
303 protected static Measurement processSameDate(List<Measurement> measurements) { 306 protected static Measurement processSameDate(List<Measurement> measurements) {
304 int N = measurements.size(); 307 int N = measurements.size();
305 if (N == 1) { 308 if (N == 1) {
306 Measurement current = measurements.get(0); 309 Measurement current = measurements.get(0);
307 double left = current.get("UFERABLINKS"); 310 double left = current.get("UFERABLINKS");
332 current.set("EFFWIDTH", 0.5*(distNext - distPrev)); 335 current.set("EFFWIDTH", 0.5*(distNext - distPrev));
333 } 336 }
334 } 337 }
335 } 338 }
336 339
337 return null; 340 double sumSandF = 0d;
341 double sumCoarseF = 0d;
342 double sumGravelF = 0d;
343 double sumNorm = 0d;
344
345 for (Measurement m: measurements) {
346 SieveArray sa = m.getSieveArray();
347 double sandF = sa.sandNormFraction();
348 double coarseF = sa.coarseNormFraction();
349 double gravelF = sa.gravelNormFraction();
350 double effWidth = m.get("EFFWIDTH");
351 double gt = m.get("GTRIEB");
352 double scale = effWidth*gt;
353 sumSandF += scale*sandF;
354 sumCoarseF += scale*coarseF;
355 sumGravelF += scale*gravelF;
356 sumNorm += scale;
357 }
358
359 Map<String, Object> data =
360 new HashMap<String, Object>(measurements.get(0).getData());
361
362 Measurement m = new Measurement(data, Collections.<Sieve>emptyList());
363
364 sumNorm = 1d/sumNorm;
365
366 m.set("BL_S", sumNorm*sumSandF);
367 m.set("BL_G", sumNorm*sumGravelF);
368 m.set("BL_C", sumNorm*sumCoarseF);
369
370 return m;
338 } 371 }
339 372
340 373
341 private static final boolean equalDate(Date a, Date b) { 374 private static final boolean equalDate(Date a, Date b) {
342 // TODO: compare only year, month and day. 375 Calendar ca = Calendar.getInstance();
343 return a.equals(b); 376 Calendar cb = Calendar.getInstance();
377 ca.setTime(a);
378 cb.setTime(b);
379 return ca.get(Calendar.YEAR) == cb.get(Calendar.YEAR)
380 && ca.get(Calendar.MONTH) == cb.get(Calendar.MONTH)
381 && ca.get(Calendar.DAY_OF_MONTH) == cb.get(Calendar.DAY_OF_MONTH);
344 } 382 }
345 383
346 384
347 protected static Measurement accumulate(List<Measurement> measuments) { 385 protected static Measurement accumulate(List<Measurement> measuments) {
348 386

http://dive4elements.wald.intevation.org