Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java @ 3145:be612065993e
FixA: Calculate the standard deviation of the Q sector delta Ws, too.
flys-artifacts/trunk@4753 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 22 Jun 2012 09:59:12 +0000 |
parents | 9c147bbffc36 |
children | 368d1837ce5d |
comparison
equal
deleted
inserted
replaced
3144:05a7298c4f20 | 3145:be612065993e |
---|---|
12 | 12 |
13 import de.intevation.flys.artifacts.model.FixingsOverview.AndFilter; | 13 import de.intevation.flys.artifacts.model.FixingsOverview.AndFilter; |
14 import de.intevation.flys.artifacts.model.FixingsOverview.DateRangeFilter; | 14 import de.intevation.flys.artifacts.model.FixingsOverview.DateRangeFilter; |
15 | 15 |
16 import de.intevation.flys.artifacts.model.FixingsOverview.Fixing.Filter; | 16 import de.intevation.flys.artifacts.model.FixingsOverview.Fixing.Filter; |
17 | |
18 import de.intevation.flys.artifacts.model.Range; | |
19 | 17 |
20 import de.intevation.flys.artifacts.model.FixingsOverview.Fixing; | 18 import de.intevation.flys.artifacts.model.FixingsOverview.Fixing; |
21 import de.intevation.flys.artifacts.model.FixingsOverview.IdsFilter; | 19 import de.intevation.flys.artifacts.model.FixingsOverview.IdsFilter; |
22 import de.intevation.flys.artifacts.model.FixingsOverview.KmFilter; | 20 import de.intevation.flys.artifacts.model.FixingsOverview.KmFilter; |
23 import de.intevation.flys.artifacts.model.FixingsOverview.SectorFilter; | 21 import de.intevation.flys.artifacts.model.FixingsOverview.SectorFilter; |
24 import de.intevation.flys.artifacts.model.FixingsOverview.SectorRangeFilter; | 22 import de.intevation.flys.artifacts.model.FixingsOverview.SectorRangeFilter; |
25 | 23 |
26 import de.intevation.flys.artifacts.model.FixingsOverview; | 24 import de.intevation.flys.artifacts.model.FixingsOverview; |
27 import de.intevation.flys.artifacts.model.FixingsOverviewFactory; | 25 import de.intevation.flys.artifacts.model.FixingsOverviewFactory; |
28 import de.intevation.flys.artifacts.model.Parameters; | 26 import de.intevation.flys.artifacts.model.Parameters; |
27 import de.intevation.flys.artifacts.model.Range; | |
29 | 28 |
30 import de.intevation.flys.utils.DateAverager; | 29 import de.intevation.flys.utils.DateAverager; |
31 import de.intevation.flys.utils.DoubleUtil; | 30 import de.intevation.flys.utils.DoubleUtil; |
32 import de.intevation.flys.utils.KMIndex; | 31 import de.intevation.flys.utils.KMIndex; |
33 | 32 |
34 import java.util.ArrayList; | 33 import java.util.ArrayList; |
35 import java.util.Date; | 34 import java.util.Date; |
36 import java.util.HashMap; | 35 import java.util.HashMap; |
37 import java.util.List; | 36 import java.util.List; |
38 import java.util.Map; | 37 import java.util.Map; |
38 | |
39 import org.apache.commons.math.stat.descriptive.moment.StandardDeviation; | |
39 | 40 |
40 import org.apache.log4j.Logger; | 41 import org.apache.log4j.Logger; |
41 | 42 |
42 public class FixCalculation | 43 public class FixCalculation |
43 extends Calculation | 44 extends Calculation |
360 for (DateRange analysisPeriod: analysisPeriods) { | 361 for (DateRange analysisPeriod: analysisPeriods) { |
361 DateRangeFilter drf = new DateRangeFilter( | 362 DateRangeFilter drf = new DateRangeFilter( |
362 analysisPeriod.getFrom(), | 363 analysisPeriod.getFrom(), |
363 analysisPeriod.getTo()); | 364 analysisPeriod.getTo()); |
364 | 365 |
365 QWD [] qSectorAverages = new QWD[4]; | 366 QWD [] qSectorAverages = new QWD[4]; |
367 double [] qSectorStdDevs = new double[4]; | |
368 | |
366 ArrayList<QWD> allQWDs = new ArrayList<QWD>(); | 369 ArrayList<QWD> allQWDs = new ArrayList<QWD>(); |
367 | 370 |
368 // for all Q sectors. | 371 // for all Q sectors. |
369 for (int qSector = qSectorStart; qSector < qSectorEnd; ++qSector) { | 372 for (int qSector = qSectorStart; qSector < qSectorEnd; ++qSector) { |
370 | 373 |
382 } | 385 } |
383 | 386 |
384 double sumQ = 0.0; | 387 double sumQ = 0.0; |
385 double sumW = 0.0; | 388 double sumW = 0.0; |
386 | 389 |
390 StandardDeviation stdDev = new StandardDeviation(); | |
391 | |
387 List<QWD> qwds = new ArrayList<QWD>(metas.size()); | 392 List<QWD> qwds = new ArrayList<QWD>(metas.size()); |
388 | 393 |
389 dateAverager.clear(); | 394 dateAverager.clear(); |
390 | 395 |
391 for (Fixing.Column meta: metas) { | 396 for (Fixing.Column meta: metas) { |
403 if (Double.isNaN(fw)) { | 408 if (Double.isNaN(fw)) { |
404 continue; | 409 continue; |
405 } | 410 } |
406 | 411 |
407 double dw = (wq[0] - fw)*100.0; | 412 double dw = (wq[0] - fw)*100.0; |
413 | |
414 stdDev.increment(dw); | |
408 | 415 |
409 Date date = column.getDate(); | 416 Date date = column.getDate(); |
410 String description = column.getDescription(); | 417 String description = column.getDescription(); |
411 | 418 |
412 QWD qwd = new QWD( | 419 QWD qwd = new QWD( |
437 QWD avgQWD = new QWD( | 444 QWD avgQWD = new QWD( |
438 avgQ, avgW, avgDescription, avgDate, true, avgDw); | 445 avgQ, avgW, avgDescription, avgDate, true, avgDw); |
439 | 446 |
440 qSectorAverages[qSector] = avgQWD; | 447 qSectorAverages[qSector] = avgQWD; |
441 } | 448 } |
449 qSectorStdDevs[qSector] = stdDev.getResult(); | |
450 } | |
451 else { | |
452 qSectorStdDevs[qSector] = Double.NaN; | |
442 } | 453 } |
443 } // for all Q sectors | 454 } // for all Q sectors |
444 | 455 |
445 QWD [] aqwds = allQWDs.toArray(new QWD[allQWDs.size()]); | 456 QWD [] aqwds = allQWDs.toArray(new QWD[allQWDs.size()]); |
446 | 457 |
447 AnalysisPeriod periodResult = new AnalysisPeriod( | 458 AnalysisPeriod periodResult = new AnalysisPeriod( |
448 analysisPeriod, aqwds, qSectorAverages); | 459 analysisPeriod, |
460 aqwds, | |
461 qSectorAverages, | |
462 qSectorStdDevs); | |
449 periodResults.add(periodResult); | 463 periodResults.add(periodResult); |
450 } | 464 } |
451 | 465 |
452 double maxQ = -Double.MAX_VALUE; | 466 double maxQ = -Double.MAX_VALUE; |
453 for (AnalysisPeriod ap: periodResults) { | 467 for (AnalysisPeriod ap: periodResults) { |