Mercurial > dive4elements > river
annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/InfoldingColumns.java @ 5200:42bb6ff78d1b 2.9.11
Directly set the connectionInitSqls on the datasource
Somehow the factory fails to set the connectionInitSqls if
we add it to the dbcpProperties. So we now set it directly
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Fri, 08 Mar 2013 11:48:33 +0100 |
parents | 243f1eb02b95 |
children |
rev | line source |
---|---|
4800
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
1 package de.intevation.flys.artifacts.model; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
2 |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
3 /** A pretty naive pointwise algorithm to find out the columns |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
4 * of a WSTValueTable which imfold ("umhuellen") a set of WQKMs |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
5 * in terms of Q. |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
6 * A better implemention would exploit the fact that the |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
7 * Qs normally are constant for a while along km. This would |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
8 * reduce the runtime complexity to only a few Q spans instead |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
9 * of the pointwise evaluation. |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
10 */ |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
11 public class InfoldingColumns |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
12 { |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
13 private QRangeTree.QuickQFinder [] qFinders; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
14 |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
15 private boolean [] infoldingColumns; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
16 |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
17 public InfoldingColumns() { |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
18 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
19 |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
20 public InfoldingColumns(WstValueTable.Column [] columns) { |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
21 |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
22 qFinders = new QRangeTree.QuickQFinder[columns.length]; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
23 for (int i = 0; i < qFinders.length; ++i) { |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
24 qFinders[i] = columns[i].getQRangeTree().new QuickQFinder(); |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
25 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
26 |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
27 infoldingColumns = new boolean[columns.length]; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
28 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
29 |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
30 public boolean [] getInfoldingColumns() { |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
31 return infoldingColumns; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
32 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
33 |
4819
243f1eb02b95
Use QKMs in calculation of the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4800
diff
changeset
|
34 public void markInfoldingColumns(QKms [] qkms) { |
243f1eb02b95
Use QKMs in calculation of the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4800
diff
changeset
|
35 for (QKms qk: qkms) { |
243f1eb02b95
Use QKMs in calculation of the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4800
diff
changeset
|
36 markInfoldingColumns(qk); |
4800
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
37 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
38 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
39 |
4819
243f1eb02b95
Use QKMs in calculation of the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4800
diff
changeset
|
40 public void markInfoldingColumns(QKms qkms) { |
243f1eb02b95
Use QKMs in calculation of the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4800
diff
changeset
|
41 int N = qkms.size(); |
4800
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
42 int C = qFinders.length-1; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
43 for (int i = 0; i < N; ++i) { |
4819
243f1eb02b95
Use QKMs in calculation of the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4800
diff
changeset
|
44 double km = qkms.getKm(i); |
243f1eb02b95
Use QKMs in calculation of the 'Umhuellende'.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4800
diff
changeset
|
45 double q = qkms.getQ(i); |
4800
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
46 double above = Double.MAX_VALUE; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
47 double below = -Double.MAX_VALUE; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
48 int aboveIdx = -1; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
49 int belowIdx = -1; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
50 |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
51 for (int j = C; j >= 0; --j) { |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
52 double qc = qFinders[j].findQ(km); |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
53 if (Double.isNaN(qc)) { |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
54 continue; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
55 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
56 if (qc <= q) { |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
57 if (qc > below) { |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
58 below = qc; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
59 belowIdx = j; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
60 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
61 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
62 else if (qc < above) { // qc > q |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
63 above = qc; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
64 aboveIdx = j; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
65 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
66 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
67 |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
68 if (aboveIdx != -1) { |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
69 infoldingColumns[aboveIdx] = true; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
70 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
71 |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
72 if (belowIdx != -1) { |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
73 infoldingColumns[belowIdx] = true; |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
74 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
75 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
76 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
77 } |
c6814695c82c
Added missing InfoldingColumns.java
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
78 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |