comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation6.java @ 4241:49cb65d5932d

Improved the historical discharge calculation. The calculation now creates new HistoricalWQKms (new subclass of WQKms). Those WQKms are used to create new facets from (new) type 'HistoricalDischargeCurveFacet'. The chart generator is improved to support those facets.
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 24 Oct 2012 14:34:35 +0200
parents b3aa91e45010
children 7b6c31390427
comparison
equal deleted inserted replaced
4240:4774902b0389 4241:49cb65d5932d
1 package de.intevation.flys.artifacts.model; 1 package de.intevation.flys.artifacts.model;
2 2
3 import java.util.ArrayList; 3 import java.util.ArrayList;
4 import java.util.Arrays;
4 import java.util.Date; 5 import java.util.Date;
5 import java.util.List; 6 import java.util.List;
6 7
7 import org.apache.log4j.Logger; 8 import org.apache.log4j.Logger;
8 9
53 54
54 if (numTables == 0) { 55 if (numTables == 0) {
55 addProblem("cannot.find.hist.q.tables"); 56 addProblem("cannot.find.hist.q.tables");
56 } 57 }
57 58
58 WQTimerange[] wqt = prepareCalculationData(refTable, dts); 59 WQTimerange[] wqt = prepareTimerangeData(refTable, dts);
60 WQKms[] wqs = prepareWQData(dts);
59 61
60 logger.debug("Number of calculation results: " + wqt.length); 62 logger.debug("Number of calculation results: " + wqt.length);
61 63
62 return new CalculationResult(wqt, this); 64 return new CalculationResult(new HistoricalDischargeData(wqt, wqs),
65 this);
63 } 66 }
64 67
65 protected boolean checkParameters() { 68 protected boolean checkParameters() {
66 if (!(mode == MODE_W || mode == MODE_Q)) { 69 if (!(mode == MODE_W || mode == MODE_Q)) {
67 logger.warn("Invalid mode '" + mode + "' for calculation."); 70 logger.warn("Invalid mode '" + mode + "' for calculation.");
122 logger.debug("DischargeTable not in range: " + start + " -> " + stop); 125 logger.debug("DischargeTable not in range: " + start + " -> " + stop);
123 126
124 return false; 127 return false;
125 } 128 }
126 129
127 protected WQTimerange[] prepareCalculationData(DischargeTable refTable, 130 protected WQTimerange[] prepareTimerangeData(DischargeTable refTable,
128 List<DischargeTable> dts) { 131 List<DischargeTable> dts) {
129 if (refTable == null) { 132 if (refTable == null) {
130 addProblem("cannot.find.hist.q.reftable"); 133 addProblem("cannot.find.hist.q.reftable");
131 return prepareSimpleData(dts); 134 return prepareSimpleData(dts);
132 } 135 }
133 else { 136 else {
134 return prepareData(refTable, dts); 137 return prepareData(refTable, dts);
135 } 138 }
139 }
140
141 protected WQKms[] prepareWQData(List<DischargeTable> dts) {
142 WQKms[] wqs = new WQKms[dts.size()];
143
144 int idx = 0;
145
146 for (DischargeTable dt : dts) {
147 double[][] values = null;
148
149 if (dt.getKind() == DischargeTables.MASTER) {
150 values = DischargeTables.loadDischargeTableValues(dt,
151 DischargeTables.MASTER_SCALE);
152
153 }
154 else {
155 values = DischargeTables.loadDischargeTableValues(dt,
156 DischargeTables.HISTORICAL_SCALE);
157
158 }
159
160 wqs[idx++] = prepareWQ(dt, values);
161 }
162
163 return wqs;
164 }
165
166 protected WQKms prepareWQ(DischargeTable dt, double[][] values) {
167 double km = dt.getGauge().getStation().doubleValue();
168
169 double[] kms = new double[values[0].length];
170 Arrays.fill(kms, km);
171
172 return new HistoricalWQKms(kms, values[1], values[0],
173 String.valueOf(km), dt.getTimeInterval());
136 } 174 }
137 175
138 protected WQTimerange[] prepareSimpleData(List<DischargeTable> dts) { 176 protected WQTimerange[] prepareSimpleData(List<DischargeTable> dts) {
139 List<WQTimerange> wqts = new ArrayList<WQTimerange>(values.length); 177 List<WQTimerange> wqts = new ArrayList<WQTimerange>(values.length);
140 178

http://dive4elements.wald.intevation.org