comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/BedQualityCalculation.java @ 3784:9f9d5ada96ca

Merged revisions 5498-5499 via svnmerge from file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-artifacts/trunk ........ r5498 | rrenkert | 2012-09-17 16:38:47 +0200 (Mo, 17 Sep 2012) | 3 lines Refactor MINFO bed quality resultsets and facets. ........ r5499 | rrenkert | 2012-09-17 16:47:05 +0200 (Mo, 17 Sep 2012) | 2 lines Fixed date range in minfo bed quality result. ........ flys-artifacts/tags/2.9.1@5530 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 19 Sep 2012 14:56:13 +0000
parents 7fa38f8bcd8d
children a5f65e8983be
comparison
equal deleted inserted replaced
3783:4a973fa25125 3784:9f9d5ada96ca
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();
103 result.setDateRange(dr);
102 if (bedDiameter != null) { 104 if (bedDiameter != null) {
105 result.add(calculateBedParameter(bedMeasurements, dr));
103 for (String bd : bedDiameter) { 106 for (String bd : bedDiameter) {
104 BedQualityResult bedResult = 107 BedDiameterResult bedResult =
105 calculateBed(bedMeasurements, bd, dr); 108 calculateBed(bedMeasurements, bd, dr);
106 109
107 // Avoid adding empty result sets. 110 // Avoid adding empty result sets.
108 if (!bedResult.isEmpty()) { 111 if (!bedResult.isEmpty()) {
109 results.add(bedResult); 112 result.add(bedResult);
110 } 113 }
111 } 114 }
112 } 115 }
113 if (bedloadDiameter != null) { 116 if (bedloadDiameter != null) {
114 for (String bld : bedloadDiameter) { 117 for (String bld : bedloadDiameter) {
115 BedQualityResult loadResult = 118 BedloadDiameterResult loadResult =
116 calculateBedload(loadMeasurements, bld, dr); 119 calculateBedload(loadMeasurements, bld, dr);
117 results.add(loadResult); 120 result.add(loadResult);
118 } 121 }
119 } 122 }
123 results.add(result);
120 } 124 }
121 125
122 return new CalculationResult( 126 return new CalculationResult(
123 results.toArray(new BedQualityResult[results.size()]), this); 127 results.toArray(new BedQualityResult[results.size()]), this);
124 } 128 }
125 129
126 protected BedQualityResult calculateBed( 130 private BedParametersResult calculateBedParameter(
127 QualityMeasurements qm, 131 QualityMeasurements qm,
128 String diameter, 132 DateRange dr
129 DateRange range
130 ) { 133 ) {
131 List<Double> kms = qm.getKms(); 134 List<Double> kms = qm.getKms();
135 QualityMeasurements capFiltered = filterCapMeasurements(qm);
136 QualityMeasurements subFiltered = filterSubMeasurements(qm);
132 TDoubleArrayList location = new TDoubleArrayList(); 137 TDoubleArrayList location = new TDoubleArrayList();
133 TDoubleArrayList avDiameterCap = new TDoubleArrayList();
134 TDoubleArrayList avDiameterSub = new TDoubleArrayList();
135 TDoubleArrayList porosityCap = new TDoubleArrayList(); 138 TDoubleArrayList porosityCap = new TDoubleArrayList();
136 TDoubleArrayList porositySub = new TDoubleArrayList(); 139 TDoubleArrayList porositySub = new TDoubleArrayList();
137 TDoubleArrayList densityCap = new TDoubleArrayList(); 140 TDoubleArrayList densityCap = new TDoubleArrayList();
138 TDoubleArrayList densitySub = new TDoubleArrayList(); 141 TDoubleArrayList densitySub = new TDoubleArrayList();
139 for (double km : kms) { 142
140 //Filter cap and sub measurements. 143 for(double km : kms) {
141 QualityMeasurements capFiltered = filterCapMeasurements(qm); 144 double[] pCap = calculatePorosity(capFiltered, km);
142 QualityMeasurements subFiltered = filterSubMeasurements(qm); 145 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); 146 double[] dCap = calculateDensity(capFiltered, pCap);
152 double[] dSub = calculateDensity(subFiltered, pSub); 147 double[] dSub = calculateDensity(subFiltered, pSub);
153 148
154 double pCapRes = 0d; 149 double pCapRes = 0d;
155 double pSubRes = 0d; 150 double pSubRes = 0d;
162 for (int i = 0; i < pSub.length; i++) { 157 for (int i = 0; i < pSub.length; i++) {
163 pSubRes += pSub[i]; 158 pSubRes += pSub[i];
164 dSubRes += dSub[i]; 159 dSubRes += dSub[i];
165 } 160 }
166 location.add(km); 161 location.add(km);
167 avDiameterCap.add(avCap);
168 avDiameterSub.add(avSub);
169 porosityCap.add((pCapRes / pCap.length) * 100 ); 162 porosityCap.add((pCapRes / pCap.length) * 100 );
170 porositySub.add((pSubRes / pSub.length) * 100); 163 porositySub.add((pSubRes / pSub.length) * 100);
171 densityCap.add((dCapRes / dCap.length) / 1000); 164 densityCap.add((dCapRes / dCap.length) / 1000);
172 densitySub.add((dSubRes / dSub.length) / 1000); 165 densitySub.add((dSubRes / dSub.length) / 1000);
173 } 166
174 return new BedBedQualityResult( 167 }
175 diameter, 168
176 avDiameterCap, 169 return new BedParametersResult(
177 avDiameterSub,
178 location, 170 location,
179 range,
180 porosityCap, 171 porosityCap,
181 porositySub, 172 porositySub,
182 densityCap, 173 densityCap,
183 densitySub); 174 densitySub);
184 } 175 }
185 176
177 protected BedDiameterResult calculateBed(
178 QualityMeasurements qm,
179 String diameter,
180 DateRange range
181 ) {
182 List<Double> kms = qm.getKms();
183 TDoubleArrayList location = new TDoubleArrayList();
184 TDoubleArrayList avDiameterCap = new TDoubleArrayList();
185 TDoubleArrayList avDiameterSub = new TDoubleArrayList();
186 for (double km : kms) {
187 //Filter cap and sub measurements.
188 QualityMeasurements capFiltered = filterCapMeasurements(qm);
189 QualityMeasurements subFiltered = filterSubMeasurements(qm);
190
191 List<QualityMeasurement> cm = capFiltered.getMeasurements(km);
192 List<QualityMeasurement> sm = subFiltered.getMeasurements(km);
193
194 double avCap = calculateAverage(cm, diameter);
195 double avSub = calculateAverage(sm, diameter);
196 location.add(km);
197 avDiameterCap.add(avCap);
198 avDiameterSub.add(avSub);
199 }
200 return new BedDiameterResult(
201 diameter,
202 avDiameterCap,
203 avDiameterSub,
204 location);
205 }
206
186 private double[] calculateDensity( 207 private double[] calculateDensity(
187 QualityMeasurements capFiltered, 208 QualityMeasurements capFiltered,
188 double[] porosity 209 double[] porosity
189 ) { 210 ) {
190 double[] density = new double[porosity.length]; 211 double[] density = new double[porosity.length];
194 return density; 215 return density;
195 } 216 }
196 217
197 private double[] calculatePorosity( 218 private double[] calculatePorosity(
198 QualityMeasurements capFiltered, 219 QualityMeasurements capFiltered,
199 double km, 220 double km
200 String diameter
201 ) { 221 ) {
202 List<QualityMeasurement> list = capFiltered.getMeasurements(km); 222 List<QualityMeasurement> list = capFiltered.getMeasurements(km);
203 double[] results = new double[list.size()]; 223 double[] results = new double[list.size()];
204 int i = 0; 224 int i = 0;
205 for (QualityMeasurement qm : list) { 225 for (QualityMeasurement qm : list) {
211 } 231 }
212 232
213 return results; 233 return results;
214 } 234 }
215 235
216 protected BedQualityResult calculateBedload( 236 protected BedloadDiameterResult calculateBedload(
217 QualityMeasurements qm, 237 QualityMeasurements qm,
218 String diameter, 238 String diameter,
219 DateRange range 239 DateRange range
220 ) { 240 ) {
221 List<Double> kms = qm.getKms(); 241 List<Double> kms = qm.getKms();
225 List<QualityMeasurement> measurements = qm.getMeasurements(km); 245 List<QualityMeasurement> measurements = qm.getMeasurements(km);
226 double mid = calculateAverage(measurements, diameter); 246 double mid = calculateAverage(measurements, diameter);
227 location.add(km); 247 location.add(km);
228 avDiameter.add(mid); 248 avDiameter.add(mid);
229 } 249 }
230 return new BedLoadBedQualityResult( 250 return new BedloadDiameterResult(
231 diameter, 251 diameter,
232 avDiameter, 252 avDiameter,
233 location, 253 location,
234 range); 254 range);
235 } 255 }

http://dive4elements.wald.intevation.org