Mercurial > dive4elements > river
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 |