Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java @ 2993:70469e3d34b9
FixA: Made Delta W/t calculation finally work
flys-artifacts/trunk@4545 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 28 May 2012 20:59:27 +0000 |
parents | 0abdede5a0b8 |
children | a2b265b9b2f7 |
comparison
equal
deleted
inserted
replaced
2992:0abdede5a0b8 | 2993:70469e3d34b9 |
---|---|
249 public DeltaWTsKM calculateDeltaWTs( | 249 public DeltaWTsKM calculateDeltaWTs( |
250 Function function, | 250 Function function, |
251 FixingsOverview overview, | 251 FixingsOverview overview, |
252 Parameters results | 252 Parameters results |
253 ) { | 253 ) { |
254 boolean debug = log.isDebugEnabled(); | |
255 | |
254 DeltaWTsKM deltaWTsKM = new DeltaWTsKM(results.size()); | 256 DeltaWTsKM deltaWTsKM = new DeltaWTsKM(results.size()); |
255 | 257 |
256 Column [][] analysisColumns = getAnalysisColumns(overview); | 258 Column [][] analysisColumns = getAnalysisColumns(overview); |
257 | 259 |
258 int [] parameterIndices = | 260 int [] parameterIndices = |
261 double [] parameterValues = | 263 double [] parameterValues = |
262 new double[parameterIndices.length]; | 264 new double[parameterIndices.length]; |
263 | 265 |
264 double [] ow = new double[1]; | 266 double [] ow = new double[1]; |
265 | 267 |
268 int kmIdx = results.columnIndex("km"); | |
269 | |
266 for (int i = 0, N = results.size(); i < N; ++i) { | 270 for (int i = 0, N = results.size(); i < N; ++i) { |
267 double km = results.get(i, "km"); | 271 double km = results.get(i, kmIdx); |
268 results.get(i, parameterIndices, parameterValues); | 272 results.get(i, parameterIndices, parameterValues); |
269 | 273 |
270 DeltaWTsKM.KM dwtkm = new DeltaWTsKM.KM(km); | 274 DeltaWTsKM.KM dwtkm = new DeltaWTsKM.KM(km); |
271 deltaWTsKM.add(dwtkm); | 275 deltaWTsKM.add(dwtkm); |
272 | 276 |
276 | 280 |
277 // Evaluate all columns for all analysis periods. | 281 // Evaluate all columns for all analysis periods. |
278 for (int j = 0; j < analysisColumns.length; ++j) { | 282 for (int j = 0; j < analysisColumns.length; ++j) { |
279 Column [] periodColumns = analysisColumns[j]; | 283 Column [] periodColumns = analysisColumns[j]; |
280 | 284 |
285 int failedQ = 0; | |
286 int failedW = 0; | |
287 int failedC = 0; | |
288 | |
281 for (int k = 0; k < periodColumns.length; ++k) { | 289 for (int k = 0; k < periodColumns.length; ++k) { |
282 Column pc = periodColumns[k]; | 290 Column pc = periodColumns[k]; |
283 | 291 |
284 // Q from real data. | 292 // Q from real data. |
285 double q = pc.data.getQ(km); | 293 double q = pc.data.getQ(km); |
286 if (Double.isNaN(q)) { | 294 if (Double.isNaN(q)) { |
295 ++failedQ; | |
287 continue; | 296 continue; |
288 } | 297 } |
289 | 298 |
290 // Calculate W from function. | 299 // Calculate W from function. |
291 double nw = instance.value(q); | 300 double nw = instance.value(q); |
292 if (Double.isNaN(nw)) { | 301 if (Double.isNaN(nw)) { |
302 ++failedC; | |
293 continue; | 303 continue; |
294 } | 304 } |
295 | 305 |
296 // W from real data. | 306 // W from real data. |
297 pc.data.getW(km, ow); | 307 pc.data.getW(km, ow); |
298 | 308 |
299 if (Double.isNaN(ow[0])) { | 309 if (Double.isNaN(ow[0])) { |
310 ++failedW; | |
300 continue; | 311 continue; |
301 } | 312 } |
302 | 313 |
303 double deltaW = ow[0] - nw; | 314 double deltaW = ow[0] - nw; |
304 | 315 |
307 pc.meta.getStartTime(), | 318 pc.meta.getStartTime(), |
308 pc.meta.getDescription()); | 319 pc.meta.getDescription()); |
309 | 320 |
310 dwtkm.add(deltaWT); | 321 dwtkm.add(deltaWT); |
311 } | 322 } |
323 if (debug) { | |
324 log.debug("failed W: " + failedW); | |
325 log.debug("failed Q: " + failedQ); | |
326 log.debug("failed C: " + failedC); | |
327 log.debug("input size: " + periodColumns.length); | |
328 log.debug("outpt size: " + dwtkm.size()); | |
329 } | |
312 } | 330 } |
313 } | 331 } |
314 | 332 |
315 return deltaWTsKM; | 333 return deltaWTsKM; |
316 } | 334 } |
333 } // class Column | 351 } // class Column |
334 | 352 |
335 /** Fetch meta and data columns for analysis periods. */ | 353 /** Fetch meta and data columns for analysis periods. */ |
336 protected Column [][] getAnalysisColumns(FixingsOverview overview) { | 354 protected Column [][] getAnalysisColumns(FixingsOverview overview) { |
337 | 355 |
356 boolean debug = log.isDebugEnabled(); | |
357 if (debug) { | |
358 log.debug("number analysis periods: " + analysisPeriods.length); | |
359 } | |
360 | |
338 Column columns [][] = new Column[analysisPeriods.length][]; | 361 Column columns [][] = new Column[analysisPeriods.length][]; |
339 | 362 |
340 Range range = new Range(from, to); | 363 Range range = new Range(from, to); |
341 SectorRangeFilter sectorRangeFilter = | 364 SectorRangeFilter sectorRangeFilter = |
342 new SectorRangeFilter(qSectorStart, qSectorEnd); | 365 new SectorRangeFilter(qSectorStart, qSectorEnd); |
357 | 380 |
358 filter.add(dateRangeFilter); | 381 filter.add(dateRangeFilter); |
359 filter.add(sectorRangeFilter); | 382 filter.add(sectorRangeFilter); |
360 | 383 |
361 List<Fixing.Column> metaCols = overview.filter(range, filter); | 384 List<Fixing.Column> metaCols = overview.filter(range, filter); |
385 | |
386 if (debug) { | |
387 log.debug("number of filtered columns: " + metaCols.size()); | |
388 } | |
362 | 389 |
363 ArrayList<Column> cols = new ArrayList<Column>(metaCols.size()); | 390 ArrayList<Column> cols = new ArrayList<Column>(metaCols.size()); |
364 | 391 |
365 // Only use columns which have data. | 392 // Only use columns which have data. |
366 for (Fixing.Column meta: metaCols) { | 393 for (Fixing.Column meta: metaCols) { |
367 FixingsColumn data = fcf.getColumnData(meta); | 394 FixingsColumn data = fcf.getColumnData(meta); |
368 if (data != null) { | 395 if (data != null) { |
369 cols.add(new Column(meta, data)); | 396 cols.add(new Column(meta, data)); |
370 } | 397 } |
398 } | |
399 | |
400 if (debug) { | |
401 log.debug("failed loading: " + (metaCols.size()-cols.size())); | |
371 } | 402 } |
372 columns[i] = cols.toArray(new Column[cols.size()]); | 403 columns[i] = cols.toArray(new Column[cols.size()]); |
373 } | 404 } |
374 | 405 |
375 return columns; | 406 return columns; |