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 }

http://dive4elements.wald.intevation.org