Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/InfoldingColumns.java @ 4837:9e25c7523485
Fixed calculation of effective width in MINFO SQ relation.
* Get all (including empty datasets) from db.
* Filter empty datasets when processing data of the same date.
* Added debug outputs.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Wed, 23 Jan 2013 11:14:41 +0100 |
parents | c6814695c82c |
children | 243f1eb02b95 |
line wrap: on
line source
package de.intevation.flys.artifacts.model; /** A pretty naive pointwise algorithm to find out the columns * of a WSTValueTable which imfold ("umhuellen") a set of WQKMs * in terms of Q. * A better implemention would exploit the fact that the * Qs normally are constant for a while along km. This would * reduce the runtime complexity to only a few Q spans instead * of the pointwise evaluation. */ public class InfoldingColumns { private QRangeTree.QuickQFinder [] qFinders; private boolean [] infoldingColumns; public InfoldingColumns() { } public InfoldingColumns(WstValueTable.Column [] columns) { qFinders = new QRangeTree.QuickQFinder[columns.length]; for (int i = 0; i < qFinders.length; ++i) { qFinders[i] = columns[i].getQRangeTree().new QuickQFinder(); } infoldingColumns = new boolean[columns.length]; } public boolean [] getInfoldingColumns() { return infoldingColumns; } public void markInfoldingColumns(WQKms [] wqkms) { for (WQKms wqk: wqkms) { markInfoldingColumns(wqk); } } public void markInfoldingColumns(WQKms wqkms) { int N = wqkms.size(); int C = qFinders.length-1; for (int i = 0; i < N; ++i) { double km = wqkms.getKm(i); double q = wqkms.getQ(i); double above = Double.MAX_VALUE; double below = -Double.MAX_VALUE; int aboveIdx = -1; int belowIdx = -1; for (int j = C; j >= 0; --j) { double qc = qFinders[j].findQ(km); if (Double.isNaN(qc)) { continue; } if (qc <= q) { if (qc > below) { below = qc; belowIdx = j; } } else if (qc < above) { // qc > q above = qc; aboveIdx = j; } } if (aboveIdx != -1) { infoldingColumns[aboveIdx] = true; } if (belowIdx != -1) { infoldingColumns[belowIdx] = true; } } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :