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;

http://dive4elements.wald.intevation.org