annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixAnalysisCalculation.java @ 3420:7f7ab030a4e3

FixA: Minor refactoring flys-artifacts/trunk@5074 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 19 Jul 2012 16:57:44 +0000
parents da7cf0e3ccaa
children 1a636be7612b
rev   line source
3411
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.artifacts.model.fixings;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
3420
7f7ab030a4e3 FixA: Minor refactoring
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3419
diff changeset
3 import de.intevation.artifacts.common.utils.StringUtils;
7f7ab030a4e3 FixA: Minor refactoring
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3419
diff changeset
4
3411
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 import de.intevation.flys.artifacts.access.FixAnalysisAccess;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 import de.intevation.flys.artifacts.math.fitting.Function;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 import de.intevation.flys.artifacts.math.fitting.FunctionFactory;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 import de.intevation.flys.artifacts.model.CalculationResult;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 import de.intevation.flys.artifacts.model.DateRange;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 import de.intevation.flys.artifacts.model.FixingsColumn;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 import de.intevation.flys.artifacts.model.FixingsColumnFactory;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 import de.intevation.flys.artifacts.model.FixingsOverview.AndFilter;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import de.intevation.flys.artifacts.model.FixingsOverview.DateRangeFilter;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 import de.intevation.flys.artifacts.model.FixingsOverview.Fixing.Filter;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 import de.intevation.flys.artifacts.model.FixingsOverview.Fixing;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 import de.intevation.flys.artifacts.model.FixingsOverview.IdsFilter;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 import de.intevation.flys.artifacts.model.FixingsOverview.KmFilter;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 import de.intevation.flys.artifacts.model.FixingsOverview.SectorFilter;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 import de.intevation.flys.artifacts.model.FixingsOverview.SectorRangeFilter;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 import de.intevation.flys.artifacts.model.FixingsOverview;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 import de.intevation.flys.artifacts.model.FixingsOverviewFactory;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 import de.intevation.flys.artifacts.model.Parameters;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 import de.intevation.flys.artifacts.model.Range;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 import de.intevation.flys.utils.DateAverager;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 import de.intevation.flys.utils.DoubleUtil;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 import de.intevation.flys.utils.KMIndex;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35 import java.util.ArrayList;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 import java.util.Date;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 import java.util.HashMap;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 import java.util.List;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 import java.util.Map;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 import org.apache.commons.math.stat.descriptive.moment.StandardDeviation;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 import org.apache.log4j.Logger;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 public class FixAnalysisCalculation
3419
da7cf0e3ccaa FixA: Created a common base class for the fixing related calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3415
diff changeset
46 extends FixCalculation
3411
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 private static Logger log = Logger.getLogger(FixAnalysisCalculation.class);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 public static final double EPSILON = 1e-4;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51
3420
7f7ab030a4e3 FixA: Minor refactoring
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3419
diff changeset
52 // TODO: Move to base class?
7f7ab030a4e3 FixA: Minor refactoring
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3419
diff changeset
53 public static final String [] STANDARD_COLUMNS = {
7f7ab030a4e3 FixA: Minor refactoring
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3419
diff changeset
54 "km", "chi_sqr", "max_q", "std-dev"
7f7ab030a4e3 FixA: Minor refactoring
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3419
diff changeset
55 };
7f7ab030a4e3 FixA: Minor refactoring
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3419
diff changeset
56
3411
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 protected DateRange referencePeriod;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 protected DateRange [] analysisPeriods;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 public FixAnalysisCalculation() {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 public FixAnalysisCalculation(FixAnalysisAccess access) {
3419
da7cf0e3ccaa FixA: Created a common base class for the fixing related calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3415
diff changeset
64 super(access);
3411
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 DateRange referencePeriod = access.getReferencePeriod();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 DateRange [] analysisPeriods = access.getAnalysisPeriods();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 if (referencePeriod == null) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 addProblem("fix.missing.reference.period");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 if (analysisPeriods == null || analysisPeriods.length < 1) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 addProblem("fix.missing.analysis.periods");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 if (!hasProblems()) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78 this.referencePeriod = referencePeriod;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 this.analysisPeriods = analysisPeriods;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 public CalculationResult calculate() {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 boolean debug = log.isDebugEnabled();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
87 FixingsOverview overview =
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
88 FixingsOverviewFactory.getOverview(river);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
89
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
90 if (overview == null) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91 addProblem("fix.no.overview.available");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
92 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
93
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
94 Function func = FunctionFactory.getInstance()
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95 .getFunction(function);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97 if (func == null) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 addProblem("fix.invalid.function.name");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101 if (hasProblems()) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 return new CalculationResult(this);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
104
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105 final List<Column> eventColumns = getEventColumns(overview);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
106
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
107 if (eventColumns.size() < 2) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
108 addProblem("fix.too.less.data.columns");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109 return new CalculationResult(this);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
111
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
112 double [] kms = DoubleUtil.explode(from, to, step / 1000.0);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
113
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
114 final double [] qs = new double[eventColumns.size()];
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
115 final double [] ws = new double[qs.length];
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
116 final boolean [] interpolated = new boolean[ws.length];
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
117
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118 Fitting.QWDFactory qwdFactory = new Fitting.QWDFactory() {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119 @Override
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
120 public QWD create(double q, double w) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
121 // Check all the event columns for close match
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
122 // and take the description and the date from meta.
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
123 for (int i = 0; i < qs.length; ++i) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124 if (Math.abs(qs[i]-q) < EPSILON
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
125 && Math.abs(ws[i]-w) < EPSILON) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
126 Column column = eventColumns.get(i);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
127 return new QWD(
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
128 qs[i], ws[i],
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129 column.getDescription(),
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130 column.getDate(),
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
131 interpolated[i],
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
132 0d);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
133 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
134 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135 log.warn("cannot find column for (" + q + ", " + w + ")");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
136 return new QWD(q, w);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138 };
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140 Fitting fitting = new Fitting(func, qwdFactory, preprocessing);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 String [] parameterNames = func.getParameterNames();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
143
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144 Parameters results =
3420
7f7ab030a4e3 FixA: Minor refactoring
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3419
diff changeset
145 new Parameters(
7f7ab030a4e3 FixA: Minor refactoring
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3419
diff changeset
146 StringUtils.join(STANDARD_COLUMNS, parameterNames));
3411
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
147
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148 boolean invalid = false;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
149
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
150 if (debug) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
151 log.debug("number of kms: " + kms.length);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
152 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
153
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
154 KMIndex<QW []> outliers = new KMIndex<QW []>();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
155 KMIndex<QWD []> referenced = new KMIndex<QWD []>(kms.length);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
156
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
157 int kmIndex = results.columnIndex("km");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
158 int chiSqrIndex = results.columnIndex("chi_sqr");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
159 int maxQIndex = results.columnIndex("max_q");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
160 int stdDevIndex = results.columnIndex("std-dev");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
161 int [] parameterIndices = results.columnIndices(parameterNames);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
162
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
163 int numFailed = 0;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
164
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
165 for (int i = 0; i < kms.length; ++i) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
166 double km = kms[i];
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
167
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
168 // Fill Qs and Ws from event columns.
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
169 for (int j = 0; j < ws.length; ++j) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
170 interpolated[j] = !eventColumns.get(j).getQW(km, qs, ws, j);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
171 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
172
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
173 fitting.reset();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
174
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
175 if (!fitting.fit(qs, ws)) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
176 ++numFailed;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
177 addProblem(km, "fix.fitting.failed");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
178 continue;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
179 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
180
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
181 referenced.add(km, fitting.referencedToArray());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
182
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
183 if (fitting.hasOutliers()) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
184 outliers.add(km, fitting.outliersToArray());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
185 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
186
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
187 int row = results.newRow();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
188 double [] values = fitting.getParameters();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
189
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
190 results.set(row, kmIndex, km);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
191 results.set(row, chiSqrIndex, fitting.getChiSquare());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
192 results.set(row, stdDevIndex, fitting.getStandardDeviation());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
193 results.set(row, maxQIndex, fitting.getMaxQ());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
194 invalid |= results.set(row, parameterIndices, values);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
195
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
196 if (debug) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
197 log.debug("km: "+km+" " + toString(parameterNames, values));
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
198 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
199 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
200
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
201 if (debug) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
202 log.debug("success: " + (kms.length - numFailed));
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
203 log.debug("failed: " + numFailed);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
204 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
205
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
206 if (invalid) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
207 addProblem("fix.invalid.values");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
208 results.removeNaNs();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
209 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
210
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
211 KMIndex<AnalysisPeriod []> analysisPeriods =
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
212 calculateAnalysisPeriods(func, results, overview);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
213
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
214 outliers.sort();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
215 referenced.sort();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
216 analysisPeriods.sort();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
217
3415
e3c7a3228bc2 FixA: Renamed FixResult to FixAnalysisResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3411
diff changeset
218 FixAnalysisResult fr = new FixAnalysisResult(
3411
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
219 results,
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
220 referenced, outliers,
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
221 analysisPeriods);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
222
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
223 return new CalculationResult(fr, this);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
224 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
225
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
226 protected String toString(String [] parameterNames, double [] values) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
227 StringBuilder sb = new StringBuilder();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
228 for (int i = 0; i < parameterNames.length; ++i) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
229 if (i > 0) sb.append(", ");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
230 sb.append(parameterNames[i]).append(": ").append(values[i]);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
231 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
232 return sb.toString();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
233 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
234
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
235 protected List<Column> getEventColumns(FixingsOverview overview) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
236
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
237 FixingsColumnFactory fcf = FixingsColumnFactory.getInstance();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
238
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
239 IdsFilter ids = new IdsFilter(events);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
240 DateRangeFilter rdf = new DateRangeFilter(
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
241 referencePeriod.getFrom(),
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
242 referencePeriod.getTo());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
243 Filter filter = new AndFilter().add(rdf).add(ids);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
244
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
245 List<Fixing.Column> metas = overview.filter(null, filter);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
246
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
247 List<Column> columns = new ArrayList<Column>(metas.size());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
248
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
249 for (Fixing.Column meta: metas) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
250
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
251 FixingsColumn data = fcf.getColumnData(meta);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
252 if (data == null) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
253 addProblem("fix.cannot.load.data");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
254 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
255 else {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
256 columns.add(new Column(meta, data));
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
257 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
258 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
259
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
260 return columns;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
261 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
262
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
263
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
264 protected KMIndex<AnalysisPeriod []> calculateAnalysisPeriods(
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
265 Function function,
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
266 Parameters parameters,
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
267 FixingsOverview overview
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
268 ) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
269 Range range = new Range(from, to);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
270
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
271 int kmIndex = parameters.columnIndex("km");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
272 int maxQIndex = parameters.columnIndex("max_q");
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
273
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
274 ColumnCache cc = new ColumnCache();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
275
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
276 double [] wq = new double[2];
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
277
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
278 int [] parameterIndices =
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
279 parameters.columnIndices(function.getParameterNames());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
280
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
281 double [] parameterValues = new double[parameterIndices.length];
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
282
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
283 DateAverager dateAverager = new DateAverager();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
284
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
285 KMIndex<AnalysisPeriod []> results =
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
286 new KMIndex<AnalysisPeriod []>(parameters.size());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
287
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
288 IdsFilter idsFilter = new IdsFilter(events);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
289
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
290 for (int row = 0, R = parameters.size(); row < R; ++row) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
291 double km = parameters.get(row, kmIndex);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
292 parameters.get(row, parameterIndices, parameterValues);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
293
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
294 // This is the paraterized function for a given km.
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
295 de.intevation.flys.artifacts.math.Function instance =
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
296 function.instantiate(parameterValues);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
297
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
298 KmFilter kmFilter = new KmFilter(km);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
299
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
300 ArrayList<AnalysisPeriod> periodResults =
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
301 new ArrayList<AnalysisPeriod>(analysisPeriods.length);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
302
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
303 for (DateRange analysisPeriod: analysisPeriods) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
304 DateRangeFilter drf = new DateRangeFilter(
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
305 analysisPeriod.getFrom(),
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
306 analysisPeriod.getTo());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
307
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
308 QWD [] qSectorAverages = new QWD[4];
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
309 double [] qSectorStdDevs = new double[4];
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
310
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
311 ArrayList<QWD> allQWDs = new ArrayList<QWD>();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
312
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
313 // for all Q sectors.
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
314 for (int qSector = qSectorStart; qSector < qSectorEnd; ++qSector) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
315
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
316 Filter filter = new AndFilter()
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
317 .add(kmFilter)
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
318 .add(new SectorFilter(qSector))
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
319 .add(drf)
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
320 .add(idsFilter);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
321
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
322 List<Fixing.Column> metas = overview.filter(range, filter);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
323
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
324 if (metas.isEmpty()) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
325 // No fixings for km and analysis period
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
326 continue;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
327 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
328
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
329 double sumQ = 0.0;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
330 double sumW = 0.0;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
331
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
332 StandardDeviation stdDev = new StandardDeviation();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
333
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
334 List<QWD> qwds = new ArrayList<QWD>(metas.size());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
335
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
336 dateAverager.clear();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
337
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
338 for (Fixing.Column meta: metas) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
339 if (meta.findQSector(km) != qSector) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
340 // Ignore not matching sectors.
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
341 continue;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
342 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
343
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
344 Column column = cc.getColumn(meta);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
345 if (column == null || !column.getQW(km, wq)) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
346 continue;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
347 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
348
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
349 double fw = instance.value(wq[1]);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
350 if (Double.isNaN(fw)) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
351 continue;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
352 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
353
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
354 double dw = (wq[0] - fw)*100.0;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
355
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
356 stdDev.increment(dw);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
357
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
358 Date date = column.getDate();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
359 String description = column.getDescription();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
360
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
361 QWD qwd = new QWD(
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
362 wq[1], wq[0], description, date, true, dw);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
363
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
364 qwds.add(qwd);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
365
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
366 sumW += wq[0];
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
367 sumQ += wq[1];
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
368
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
369 dateAverager.add(date);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
370 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
371
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
372 // Calulate average per Q sector.
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
373 int N = qwds.size();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
374 if (N > 0) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
375 allQWDs.addAll(qwds);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
376 double avgW = sumW / N;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
377 double avgQ = sumQ / N;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
378
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
379 double avgFw = instance.value(avgQ);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
380 if (!Double.isNaN(avgFw)) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
381 double avgDw = (avgW - avgFw)*100.0;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
382 Date avgDate = dateAverager.getAverage();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
383
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
384 String avgDescription = "avg.deltawt." + qSector;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
385
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
386 QWD avgQWD = new QWD(
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
387 avgQ, avgW, avgDescription, avgDate, true, avgDw);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
388
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
389 qSectorAverages[qSector] = avgQWD;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
390 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
391 qSectorStdDevs[qSector] = stdDev.getResult();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
392 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
393 else {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
394 qSectorStdDevs[qSector] = Double.NaN;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
395 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
396 } // for all Q sectors
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
397
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
398 QWD [] aqwds = allQWDs.toArray(new QWD[allQWDs.size()]);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
399
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
400 AnalysisPeriod periodResult = new AnalysisPeriod(
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
401 analysisPeriod,
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
402 aqwds,
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
403 qSectorAverages,
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
404 qSectorStdDevs);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
405 periodResults.add(periodResult);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
406 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
407
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
408 double maxQ = -Double.MAX_VALUE;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
409 for (AnalysisPeriod ap: periodResults) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
410 double q = ap.getMaxQ();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
411 if (q > maxQ) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
412 maxQ = q;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
413 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
414 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
415
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
416 double oldMaxQ = parameters.get(row, maxQIndex);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
417 if (oldMaxQ < maxQ) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
418 parameters.set(row, maxQIndex, maxQ);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
419 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
420
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
421 results.add(km, periodResults.toArray(
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
422 new AnalysisPeriod[periodResults.size()]));
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
423 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
424
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
425 return results;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
426 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
427
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
428 /** Helper class to bundle the meta information of a column
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
429 * and the real data.
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
430 */
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
431 protected static class Column {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
432
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
433 protected Fixing.Column meta;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
434 protected FixingsColumn data;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
435
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
436 public Column() {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
437 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
438
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
439 public Column(Fixing.Column meta, FixingsColumn data) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
440 this.meta = meta;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
441 this.data = data;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
442 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
443
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
444 public Date getDate() {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
445 return meta.getStartTime();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
446 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
447
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
448 public String getDescription() {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
449 return meta.getDescription();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
450 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
451
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
452 public boolean getQW(
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
453 double km,
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
454 double [] qs,
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
455 double [] ws,
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
456 int index
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
457 ) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
458 qs[index] = data.getQ(km);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
459 return data.getW(km, ws, index);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
460 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
461
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
462 public boolean getQW(double km, double [] wq) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
463 data.getW(km, wq, 0);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
464 if (Double.isNaN(wq[0])) return false;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
465 wq[1] = data.getQ(km);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
466 return !Double.isNaN(wq[1]);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
467 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
468 } // class Column
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
469
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
470
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
471 /**
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
472 * Helper class to find the data belonging to meta info more quickly.
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
473 */
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
474 public static class ColumnCache {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
475
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
476 protected Map<Integer, Column> columns;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
477
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
478 public ColumnCache() {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
479 columns = new HashMap<Integer, Column>();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
480 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
481
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
482 public Column getColumn(Fixing.Column meta) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
483 Integer key = meta.getId();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
484 Column column = columns.get(key);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
485 if (column == null) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
486 FixingsColumn data = FixingsColumnFactory
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
487 .getInstance()
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
488 .getColumnData(meta);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
489 if (data != null) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
490 column = new Column(meta, data);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
491 columns.put(key, column);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
492 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
493 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
494 return column;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
495 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
496 } // class ColumnCache
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
497
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
498 /** Fetch meta and data columns for analysis periods. */
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
499 protected Column [][] getAnalysisColumns(FixingsOverview overview) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
500
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
501 boolean debug = log.isDebugEnabled();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
502 if (debug) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
503 log.debug("number analysis periods: " + analysisPeriods.length);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
504 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
505
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
506 Column columns [][] = new Column[analysisPeriods.length][];
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
507
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
508 Range range = new Range(from, to);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
509 SectorRangeFilter sectorRangeFilter =
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
510 new SectorRangeFilter(qSectorStart, qSectorEnd);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
511
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
512 FixingsColumnFactory fcf = FixingsColumnFactory.getInstance();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
513
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
514 for (int i = 0; i < columns.length; ++i) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
515
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
516 // Construct filter for period.
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
517 DateRange period = analysisPeriods[i];
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
518
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
519 AndFilter filter = new AndFilter();
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
520
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
521 DateRangeFilter dateRangeFilter =
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
522 new DateRangeFilter(period.getFrom(), period.getTo());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
523
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
524 filter.add(dateRangeFilter);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
525 filter.add(sectorRangeFilter);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
526
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
527 List<Fixing.Column> metaCols = overview.filter(range, filter);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
528
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
529 if (debug) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
530 log.debug("number of filtered columns: " + metaCols.size());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
531 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
532
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
533 ArrayList<Column> cols = new ArrayList<Column>(metaCols.size());
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
534
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
535 // Only use columns which have data.
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
536 for (Fixing.Column meta: metaCols) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
537 FixingsColumn data = fcf.getColumnData(meta);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
538 if (data != null) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
539 cols.add(new Column(meta, data));
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
540 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
541 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
542
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
543 if (debug) {
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
544 log.debug("failed loading: " + (metaCols.size()-cols.size()));
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
545 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
546 columns[i] = cols.toArray(new Column[cols.size()]);
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
547 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
548
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
549 return columns;
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
550 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
551 }
0ef83077c93f FixA: Renamed FixCalculation to FixAnalysisCalculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
552 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org