Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/BedQualityCalculation.java @ 3867:d8c99ff18db8
Refactor MINFO bed quality resultsets and facets.
flys-artifacts/trunk@5498 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Mon, 17 Sep 2012 14:38:47 +0000 |
parents | 7fa38f8bcd8d |
children | 44e68dc1d87e |
comparison
equal
deleted
inserted
replaced
3866:2e83ed94c513 | 3867:d8c99ff18db8 |
---|---|
97 river, | 97 river, |
98 from, | 98 from, |
99 to, | 99 to, |
100 dr.getFrom(), | 100 dr.getFrom(), |
101 dr.getTo()); | 101 dr.getTo()); |
102 BedQualityResult result = new BedQualityResult(); | |
102 if (bedDiameter != null) { | 103 if (bedDiameter != null) { |
104 result.add(calculateBedParameter(bedMeasurements, dr)); | |
103 for (String bd : bedDiameter) { | 105 for (String bd : bedDiameter) { |
104 BedQualityResult bedResult = | 106 BedDiameterResult bedResult = |
105 calculateBed(bedMeasurements, bd, dr); | 107 calculateBed(bedMeasurements, bd, dr); |
106 | 108 |
107 // Avoid adding empty result sets. | 109 // Avoid adding empty result sets. |
108 if (!bedResult.isEmpty()) { | 110 if (!bedResult.isEmpty()) { |
109 results.add(bedResult); | 111 result.add(bedResult); |
110 } | 112 } |
111 } | 113 } |
112 } | 114 } |
113 if (bedloadDiameter != null) { | 115 if (bedloadDiameter != null) { |
114 for (String bld : bedloadDiameter) { | 116 for (String bld : bedloadDiameter) { |
115 BedQualityResult loadResult = | 117 BedloadDiameterResult loadResult = |
116 calculateBedload(loadMeasurements, bld, dr); | 118 calculateBedload(loadMeasurements, bld, dr); |
117 results.add(loadResult); | 119 result.add(loadResult); |
118 } | 120 } |
119 } | 121 } |
122 results.add(result); | |
120 } | 123 } |
121 | 124 |
122 return new CalculationResult( | 125 return new CalculationResult( |
123 results.toArray(new BedQualityResult[results.size()]), this); | 126 results.toArray(new BedQualityResult[results.size()]), this); |
124 } | 127 } |
125 | 128 |
126 protected BedQualityResult calculateBed( | 129 private BedParametersResult calculateBedParameter( |
127 QualityMeasurements qm, | 130 QualityMeasurements qm, |
128 String diameter, | 131 DateRange dr |
129 DateRange range | |
130 ) { | 132 ) { |
131 List<Double> kms = qm.getKms(); | 133 List<Double> kms = qm.getKms(); |
134 QualityMeasurements capFiltered = filterCapMeasurements(qm); | |
135 QualityMeasurements subFiltered = filterSubMeasurements(qm); | |
132 TDoubleArrayList location = new TDoubleArrayList(); | 136 TDoubleArrayList location = new TDoubleArrayList(); |
133 TDoubleArrayList avDiameterCap = new TDoubleArrayList(); | |
134 TDoubleArrayList avDiameterSub = new TDoubleArrayList(); | |
135 TDoubleArrayList porosityCap = new TDoubleArrayList(); | 137 TDoubleArrayList porosityCap = new TDoubleArrayList(); |
136 TDoubleArrayList porositySub = new TDoubleArrayList(); | 138 TDoubleArrayList porositySub = new TDoubleArrayList(); |
137 TDoubleArrayList densityCap = new TDoubleArrayList(); | 139 TDoubleArrayList densityCap = new TDoubleArrayList(); |
138 TDoubleArrayList densitySub = new TDoubleArrayList(); | 140 TDoubleArrayList densitySub = new TDoubleArrayList(); |
139 for (double km : kms) { | 141 |
140 //Filter cap and sub measurements. | 142 for(double km : kms) { |
141 QualityMeasurements capFiltered = filterCapMeasurements(qm); | 143 double[] pCap = calculatePorosity(capFiltered, km); |
142 QualityMeasurements subFiltered = filterSubMeasurements(qm); | 144 double[] pSub = calculatePorosity(subFiltered, km); |
143 | |
144 List<QualityMeasurement> cm = capFiltered.getMeasurements(km); | |
145 List<QualityMeasurement> sm = subFiltered.getMeasurements(km); | |
146 | |
147 double avCap = calculateAverage(cm, diameter); | |
148 double avSub = calculateAverage(sm, diameter); | |
149 double[] pCap = calculatePorosity(capFiltered, km, diameter); | |
150 double[] pSub = calculatePorosity(subFiltered, km, diameter); | |
151 double[] dCap = calculateDensity(capFiltered, pCap); | 145 double[] dCap = calculateDensity(capFiltered, pCap); |
152 double[] dSub = calculateDensity(subFiltered, pSub); | 146 double[] dSub = calculateDensity(subFiltered, pSub); |
153 | 147 |
154 double pCapRes = 0d; | 148 double pCapRes = 0d; |
155 double pSubRes = 0d; | 149 double pSubRes = 0d; |
162 for (int i = 0; i < pSub.length; i++) { | 156 for (int i = 0; i < pSub.length; i++) { |
163 pSubRes += pSub[i]; | 157 pSubRes += pSub[i]; |
164 dSubRes += dSub[i]; | 158 dSubRes += dSub[i]; |
165 } | 159 } |
166 location.add(km); | 160 location.add(km); |
167 avDiameterCap.add(avCap); | |
168 avDiameterSub.add(avSub); | |
169 porosityCap.add((pCapRes / pCap.length) * 100 ); | 161 porosityCap.add((pCapRes / pCap.length) * 100 ); |
170 porositySub.add((pSubRes / pSub.length) * 100); | 162 porositySub.add((pSubRes / pSub.length) * 100); |
171 densityCap.add((dCapRes / dCap.length) / 1000); | 163 densityCap.add((dCapRes / dCap.length) / 1000); |
172 densitySub.add((dSubRes / dSub.length) / 1000); | 164 densitySub.add((dSubRes / dSub.length) / 1000); |
173 } | 165 |
174 return new BedBedQualityResult( | 166 } |
175 diameter, | 167 |
176 avDiameterCap, | 168 return new BedParametersResult( |
177 avDiameterSub, | |
178 location, | 169 location, |
179 range, | |
180 porosityCap, | 170 porosityCap, |
181 porositySub, | 171 porositySub, |
182 densityCap, | 172 densityCap, |
183 densitySub); | 173 densitySub); |
184 } | 174 } |
185 | 175 |
176 protected BedDiameterResult calculateBed( | |
177 QualityMeasurements qm, | |
178 String diameter, | |
179 DateRange range | |
180 ) { | |
181 List<Double> kms = qm.getKms(); | |
182 TDoubleArrayList location = new TDoubleArrayList(); | |
183 TDoubleArrayList avDiameterCap = new TDoubleArrayList(); | |
184 TDoubleArrayList avDiameterSub = new TDoubleArrayList(); | |
185 for (double km : kms) { | |
186 //Filter cap and sub measurements. | |
187 QualityMeasurements capFiltered = filterCapMeasurements(qm); | |
188 QualityMeasurements subFiltered = filterSubMeasurements(qm); | |
189 | |
190 List<QualityMeasurement> cm = capFiltered.getMeasurements(km); | |
191 List<QualityMeasurement> sm = subFiltered.getMeasurements(km); | |
192 | |
193 double avCap = calculateAverage(cm, diameter); | |
194 double avSub = calculateAverage(sm, diameter); | |
195 location.add(km); | |
196 avDiameterCap.add(avCap); | |
197 avDiameterSub.add(avSub); | |
198 } | |
199 return new BedDiameterResult( | |
200 diameter, | |
201 avDiameterCap, | |
202 avDiameterSub, | |
203 location); | |
204 } | |
205 | |
186 private double[] calculateDensity( | 206 private double[] calculateDensity( |
187 QualityMeasurements capFiltered, | 207 QualityMeasurements capFiltered, |
188 double[] porosity | 208 double[] porosity |
189 ) { | 209 ) { |
190 double[] density = new double[porosity.length]; | 210 double[] density = new double[porosity.length]; |
194 return density; | 214 return density; |
195 } | 215 } |
196 | 216 |
197 private double[] calculatePorosity( | 217 private double[] calculatePorosity( |
198 QualityMeasurements capFiltered, | 218 QualityMeasurements capFiltered, |
199 double km, | 219 double km |
200 String diameter | |
201 ) { | 220 ) { |
202 List<QualityMeasurement> list = capFiltered.getMeasurements(km); | 221 List<QualityMeasurement> list = capFiltered.getMeasurements(km); |
203 double[] results = new double[list.size()]; | 222 double[] results = new double[list.size()]; |
204 int i = 0; | 223 int i = 0; |
205 for (QualityMeasurement qm : list) { | 224 for (QualityMeasurement qm : list) { |
211 } | 230 } |
212 | 231 |
213 return results; | 232 return results; |
214 } | 233 } |
215 | 234 |
216 protected BedQualityResult calculateBedload( | 235 protected BedloadDiameterResult calculateBedload( |
217 QualityMeasurements qm, | 236 QualityMeasurements qm, |
218 String diameter, | 237 String diameter, |
219 DateRange range | 238 DateRange range |
220 ) { | 239 ) { |
221 List<Double> kms = qm.getKms(); | 240 List<Double> kms = qm.getKms(); |
225 List<QualityMeasurement> measurements = qm.getMeasurements(km); | 244 List<QualityMeasurement> measurements = qm.getMeasurements(km); |
226 double mid = calculateAverage(measurements, diameter); | 245 double mid = calculateAverage(measurements, diameter); |
227 location.add(km); | 246 location.add(km); |
228 avDiameter.add(mid); | 247 avDiameter.add(mid); |
229 } | 248 } |
230 return new BedLoadBedQualityResult( | 249 return new BedloadDiameterResult( |
231 diameter, | 250 diameter, |
232 avDiameter, | 251 avDiameter, |
233 location, | 252 location, |
234 range); | 253 range); |
235 } | 254 } |