Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/WstValueTableFactory.java @ 6152:0587819960c3
Waterlevel differences & bed height differences: Add new model LinearInterpolated intented to unify the two very similiar calculations. The focus of the current implementation is correctness and not speed! The fact that the data sets more mostly sorted by station is not exploited. Doing so would improve performance significantly.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Sun, 02 Jun 2013 17:52:53 +0200 |
parents | af13ceeba52a |
children | 682a26e4158b |
rev | line source |
---|---|
5863
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
2 * Software engineering by Intevation GmbH |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
3 * |
5994
af13ceeba52a
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5863
diff
changeset
|
4 * This file is Free Software under the GNU AGPL (>=v3) |
5863
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
5994
af13ceeba52a
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5863
diff
changeset
|
6 * documentation coming with Dive4Elements River for details. |
5863
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
7 */ |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
8 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5423
diff
changeset
|
9 package org.dive4elements.river.artifacts.model; |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
11 import java.util.Arrays; |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
12 import java.util.List; |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 import java.util.ArrayList; |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
14 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
15 import net.sf.ehcache.Cache; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
16 import net.sf.ehcache.Element; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
17 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5423
diff
changeset
|
18 import org.dive4elements.river.artifacts.cache.CacheFactory; |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
19 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5423
diff
changeset
|
20 import org.dive4elements.river.backend.SessionHolder; |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
21 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
22 import org.apache.log4j.Logger; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
23 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5423
diff
changeset
|
24 import org.dive4elements.river.model.River; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5423
diff
changeset
|
25 import org.dive4elements.river.model.Wst; |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 import org.hibernate.Session; |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
28 import org.hibernate.Query; |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
29 import org.hibernate.SQLQuery; |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
30 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 import org.hibernate.type.StandardBasicTypes; |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
32 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
33 /** |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
34 * Creates WstValueTable s from database. |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
35 * WstValueTable s are used to interpolate given w/q/km values. |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
36 */ |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 public class WstValueTableFactory |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 { |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 private static Logger log = Logger.getLogger(WstValueTableFactory.class); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
40 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
41 public static final int DEFAULT_KIND = 0; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
42 |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
43 // TODO: put this into a property file |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
44 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
45 public static final String HQL_WST = |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
46 "from Wst where river=:river and kind=:kind"; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
47 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
48 public static final String SQL_SELECT_NAMES_POS = |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
49 "SELECT position, name FROM wst_columns " + |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
50 "WHERE wst_id = :wst_id ORDER BY position"; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
51 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
52 /** Select Qs for wst (view sorted by column). */ |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
53 public static final String SQL_SELECT_QS = |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
54 "SELECT column_pos, q, a, b FROM wst_q_values " + |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
55 "WHERE wst_id = :wst_id"; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
56 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
57 // (sorted by km) |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
58 public static final String SQL_SELECT_WS = |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
59 "SELECT km, w, column_pos FROM wst_w_values " + |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
60 "WHERE wst_id = :wst_id"; |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
61 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
62 /** Statement to query qranges of a single column. */ |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
63 public static final String SQL_SELECT_QS_AT_COL = |
2609
ed550e325248
Little optimization when fetching q ranges for single columns of wsts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1927
diff
changeset
|
64 "SELECT q, a, b FROM wst_q_values " + |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
65 "WHERE wst_id = :wst_id AND column_pos = :column_pos"; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
66 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
67 // (sorted by km) |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
68 public static final String SQL_SELECT_WS_AT_COL = |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
69 "SELECT km, w FROM wst_w_values " + |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
70 "WHERE wst_id = :wst_id AND column_pos = :column_pos"; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
71 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
72 |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
73 private WstValueTableFactory() { |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
74 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
75 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
76 |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
77 public static WstValueTable getTable(River river) { |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
78 return getTable(river, DEFAULT_KIND); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
79 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
80 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
81 |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
82 /** |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
83 * Get WstValueTable to interpolate values of a given Wst. |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
84 */ |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
85 public static WstValueTable getTable(int wst_id) { |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
86 |
1898
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
87 Cache cache = CacheFactory.getCache(WstValueTableCacheKey.CACHE_NAME); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
88 |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
89 WstValueTableCacheKey cacheKey; |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
90 |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
91 if (cache != null) { |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
92 // "-1" is the symbolic river-id for "no river, but wst_id". |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
93 cacheKey = new WstValueTableCacheKey(-1, wst_id); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
94 Element element = cache.get(cacheKey); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
95 if (element != null) { |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
96 log.debug("Got specific wst value table from cache"); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
97 return (WstValueTable) element.getValue(); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
98 } |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
99 } |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
100 else { |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
101 cacheKey = null; |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
102 } |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
103 |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
104 Session session = SessionHolder.HOLDER.get(); |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
105 |
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
106 // Fetch data for one column only. |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2610
diff
changeset
|
107 |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
108 WstValueTable.Column [] columns = loadColumns(session, wst_id); |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
109 int [] map = loadQRangesMap(session, columns, wst_id); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
110 List<WstValueTable.Row> rows = loadRows(session, wst_id, columns.length, map); |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
111 |
1927
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
112 WstValueTable valueTable = new WstValueTable(columns, rows); |
1898
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
113 |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
114 if (valueTable != null && cacheKey != null) { |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
115 log.debug("Store wst value table in cache"); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
116 Element element = new Element(cacheKey, valueTable); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
117 cache.put(element); |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
118 } |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
119 |
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
120 return valueTable; |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
121 } |
1898
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
122 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
123 /** |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
124 * Get Table for a specific column of a wst. |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
125 */ |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
126 public static WstValueTable getWstColumnTable(int wst_id, int col_pos) { |
1898
7053e3255ab4
Employ cache for WstValueTables that have been fetched by wst_id.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1894
diff
changeset
|
127 |
1927
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
128 Cache cache = CacheFactory.getCache(WstValueTableCacheKey.CACHE_NAME); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
129 |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
130 WstValueTableCacheKey cacheKey; |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
131 |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
132 if (cache != null) { |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
133 // A negaitve/negative number is the symbolic 'river-id' for |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
134 // "no river and kind but wst_id and colpos". |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
135 cacheKey = new WstValueTableCacheKey(-wst_id, -col_pos); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
136 Element element = cache.get(cacheKey); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
137 if (element != null) { |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
138 log.debug("Got specific wst value table from cache"); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
139 return (WstValueTable) element.getValue(); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
140 } |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
141 } |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
142 else { |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
143 cacheKey = null; |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
144 } |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
145 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
146 Session session = SessionHolder.HOLDER.get(); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
147 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
148 // Fetch data for one column only. |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2610
diff
changeset
|
149 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
150 WstValueTable.Column [] columns = loadColumn(session, wst_id, col_pos); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
151 loadQRanges(session, columns, wst_id, col_pos); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
152 List<WstValueTable.Row> rows = loadRowsOneColumn(session, wst_id, col_pos); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
153 |
1927
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
154 WstValueTable valueTable = new WstValueTable(columns, rows); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
155 |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
156 if (valueTable != null && cacheKey != null) { |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
157 log.debug("Store wst value table in cache (wst: " |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
158 + wst_id + "/ col: " + col_pos + ")"); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
159 Element element = new Element(cacheKey, valueTable); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
160 cache.put(element); |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
161 } |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
162 |
1f90fdd4fa04
Resolved TODO about caching certain WstValueTables.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1909
diff
changeset
|
163 return valueTable; |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
164 } |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
165 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
166 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
167 /** |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
168 * Get table for first wst of given kind at given river. |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
169 */ |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
170 public static WstValueTable getTable(River river, int kind) { |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
171 |
632
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
626
diff
changeset
|
172 Cache cache = CacheFactory.getCache(WstValueTableCacheKey.CACHE_NAME); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
173 |
626
e3ee131d5dd3
Moved WST value table cache key to a separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
458
diff
changeset
|
174 WstValueTableCacheKey cacheKey; |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
175 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
176 if (cache != null) { |
626
e3ee131d5dd3
Moved WST value table cache key to a separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
458
diff
changeset
|
177 cacheKey = new WstValueTableCacheKey(river.getId(), kind); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
178 Element element = cache.get(cacheKey); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
179 if (element != null) { |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
180 log.debug("got wst value table from cache"); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
181 return (WstValueTable)element.getValue(); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
182 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
183 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
184 else { |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
185 cacheKey = null; |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
186 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
187 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
188 WstValueTable valueTable = getTableUncached(river, kind); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
189 |
632
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
626
diff
changeset
|
190 if (valueTable != null && cacheKey != null) { |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
191 log.debug("store wst value table in cache"); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
192 Element element = new Element(cacheKey, valueTable); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
193 cache.put(element); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
194 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
195 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
196 return valueTable; |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
197 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
198 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
199 public static WstValueTable getTableUncached(River river) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
200 return getTableUncached(river, DEFAULT_KIND); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
201 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
202 |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
203 public static WstValueTable getTableUncached(River river, int kind) { |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
204 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
205 Session session = SessionHolder.HOLDER.get(); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
206 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
207 Wst wst = loadWst(session, river, kind); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
208 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
209 if (wst == null) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
210 return null; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
211 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
212 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
213 WstValueTable.Column [] columns = loadColumns(session, wst); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
214 |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
215 int map [] = loadQRangesMap(session, columns, wst); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
216 |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
217 List<WstValueTable.Row> rows = |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
218 loadRows(session, wst.getId(), columns.length, map); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
219 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
220 return new WstValueTable(columns, rows); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
221 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
222 |
1780
b503d92dd709
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
223 /** |
b503d92dd709
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
224 * @param kind Kind of wst. |
b503d92dd709
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
225 */ |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
226 protected static Wst loadWst(Session session, River river, int kind) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
227 Query query = session.createQuery(HQL_WST); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
228 query.setParameter("river", river); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
229 query.setInteger("kind", kind); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
230 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
231 List<Wst> wsts = query.list(); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
232 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
233 // TODO Multiple wsts can match, why return just the first one? |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
234 return wsts.isEmpty() ? null : wsts.get(0); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
235 } |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
236 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
237 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
238 /** |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
239 * Load rows with a single columns result. |
3269
b2ea89a665bc
Fix issues in 'documentation'.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
240 * |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
241 * @param session session to use for querying db. |
3269
b2ea89a665bc
Fix issues in 'documentation'.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
242 * @param wstId id of wst (in db). |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
243 * @param column_pos the column_pos (within the db) of the wst_value_table |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
244 * of which the values shall be fetched. |
3269
b2ea89a665bc
Fix issues in 'documentation'.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
245 * |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
246 * @return resultant rows. |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
247 */ |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
248 protected static List<WstValueTable.Row> loadRowsOneColumn( |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
249 Session session, |
2610
3c907758f0ab
Added cacheable model for fixing column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2609
diff
changeset
|
250 int wstId, |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
251 int column_pos |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
252 ) { |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
253 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_WS_AT_COL) |
2610
3c907758f0ab
Added cacheable model for fixing column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2609
diff
changeset
|
254 .addScalar("km", StandardBasicTypes.DOUBLE) |
3c907758f0ab
Added cacheable model for fixing column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2609
diff
changeset
|
255 .addScalar("w", StandardBasicTypes.DOUBLE); |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
256 |
2610
3c907758f0ab
Added cacheable model for fixing column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2609
diff
changeset
|
257 sqlQuery.setInteger("wst_id", wstId); |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
258 sqlQuery.setInteger("column_pos", column_pos); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
259 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
260 List<Object []> results = sqlQuery.list(); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
261 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
262 double [] ws = null; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
263 |
2610
3c907758f0ab
Added cacheable model for fixing column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2609
diff
changeset
|
264 List<WstValueTable.Row> rows = |
3c907758f0ab
Added cacheable model for fixing column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2609
diff
changeset
|
265 new ArrayList<WstValueTable.Row>(results.size()); |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
266 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
267 // Walk over rows. |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
268 for (Object [] result: results) { |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
269 ws = new double[1]; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
270 WstValueTable.Row row = |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
271 new WstValueTable.Row((Double) result[0], ws); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
272 rows.add(row); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
273 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
274 Double w = (Double) result[1]; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
275 ws[0] = w != null ? w : Double.NaN; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
276 } |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
277 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
278 return rows; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
279 } |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
280 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
281 protected static List<WstValueTable.Row> loadRows( |
742
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
282 Session session, |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
283 int wst_id, |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
284 int numColumns |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
285 ) { |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
286 return loadRows(session, wst_id, numColumns, null); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
287 } |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
288 |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
289 protected static List<WstValueTable.Row> loadRows( |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
290 Session session, |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
291 int wst_id, |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
292 int numColumns, |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
293 int [] map |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
294 ) { |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
295 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_WS) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
296 .addScalar("km", StandardBasicTypes.DOUBLE) |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
297 .addScalar("w", StandardBasicTypes.DOUBLE) |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
298 .addScalar("column_pos", StandardBasicTypes.INTEGER); |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
299 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
300 sqlQuery.setInteger("wst_id", wst_id); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
301 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
302 List<Object []> results = sqlQuery.list(); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
303 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
304 int lastColumn = Integer.MAX_VALUE; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
305 double [] ws = null; |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
306 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
307 ArrayList<WstValueTable.Row> rows = new ArrayList<WstValueTable.Row>(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
308 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
309 for (Object [] result: results) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
310 int column = (Integer)result[2]; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
311 if (column < lastColumn) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
312 ws = new double[numColumns]; |
1894
d5e51cc7da23
New method to get interpolator for given wst_ids, also prepopulate arrays with NaNs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1839
diff
changeset
|
313 Arrays.fill(ws, Double.NaN); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
314 WstValueTable.Row row = |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
315 new WstValueTable.Row((Double)result[0], ws); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
316 rows.add(row); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
317 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
318 Double w = (Double)result[1]; |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
319 int index = map != null ? map[column] : column; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
320 ws[index] = w != null ? w : Double.NaN; |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
321 lastColumn = column; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
322 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
323 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
324 rows.trimToSize(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
325 return rows; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
326 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
327 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
328 protected static List<WstValueTable.Row> loadRows( |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
329 Session session, |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
330 Wst wst, |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
331 int numColumns |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
332 ) { |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
333 return loadRows(session, wst.getId(), numColumns); |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
334 } |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
335 |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
336 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
337 protected static WstValueTable.Column [] loadColumn( |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
338 Session session, |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
339 int wst_id, |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
340 int col_pos |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
341 ) { |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
342 return new WstValueTable.Column [] { |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
343 new WstValueTable.Column(WKmsFactory.getWKmsName(col_pos, wst_id))}; |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
344 } |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
345 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
346 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
347 /** |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
348 * Get columns from wst-id. |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
349 */ |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
350 protected static WstValueTable.Column [] loadColumns( |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
351 Session session, |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
352 int wst_id |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
353 ) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
354 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_NAMES_POS) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
355 .addScalar("position", StandardBasicTypes.INTEGER) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
356 .addScalar("name", StandardBasicTypes.STRING); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
357 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
358 sqlQuery.setInteger("wst_id", wst_id); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
359 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
360 List<Object []> columnNames = sqlQuery.list(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
361 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
362 WstValueTable.Column [] columns = |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
363 new WstValueTable.Column[columnNames.size()]; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
364 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
365 for (int i = 0; i < columns.length; ++i) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
366 columns[i] = new WstValueTable.Column( |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
367 (String)columnNames.get(i)[1]); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
368 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
369 return columns; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
370 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
371 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
372 /** |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
373 * Get columns from Wst. |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
374 */ |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
375 protected static WstValueTable.Column [] loadColumns( |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
376 Session session, |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
377 Wst wst |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
378 ) { |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
379 return loadColumns(session, wst.getId()); |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
380 } |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
381 |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
382 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
383 /** |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
384 * Build a QRange-Tree. |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
385 */ |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
386 protected static void loadQRanges( |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
387 Session session, |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
388 WstValueTable.Column [] columns, |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
389 int wst_id, |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
390 int column_pos |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
391 ) { |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
392 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_QS_AT_COL) |
2609
ed550e325248
Little optimization when fetching q ranges for single columns of wsts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1927
diff
changeset
|
393 .addScalar("q", StandardBasicTypes.DOUBLE) |
ed550e325248
Little optimization when fetching q ranges for single columns of wsts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1927
diff
changeset
|
394 .addScalar("a", StandardBasicTypes.DOUBLE) |
ed550e325248
Little optimization when fetching q ranges for single columns of wsts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1927
diff
changeset
|
395 .addScalar("b", StandardBasicTypes.DOUBLE); |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
396 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
397 sqlQuery.setInteger("wst_id", wst_id); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
398 sqlQuery.setInteger("column_pos", column_pos); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
399 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
400 List<Object []> qRanges = sqlQuery.list(); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
401 |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
402 int qSize = qRanges.size(); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
403 |
2609
ed550e325248
Little optimization when fetching q ranges for single columns of wsts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1927
diff
changeset
|
404 QRangeTree qRangeTree = new QRangeTree( |
ed550e325248
Little optimization when fetching q ranges for single columns of wsts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1927
diff
changeset
|
405 qRanges, QRangeTree.WITHOUT_COLUMN, 0, qSize); |
1909
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
406 columns[0].setQRangeTree(qRangeTree); |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
407 } |
4b64692b2d1e
Added methods to create WstValueTables ('interpolators') for specific columns of wsts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1898
diff
changeset
|
408 |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
409 protected static int [] loadQRangesMap( |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
410 Session session, |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
411 WstValueTable.Column [] columns, |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
412 int wst_id |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
413 ) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
414 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_QS) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
415 .addScalar("column_pos", StandardBasicTypes.INTEGER) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
416 .addScalar("q", StandardBasicTypes.DOUBLE) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
417 .addScalar("a", StandardBasicTypes.DOUBLE) |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
418 .addScalar("b", StandardBasicTypes.DOUBLE); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
419 |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
420 sqlQuery.setInteger("wst_id", wst_id); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
421 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
422 List<Object []> qRanges = sqlQuery.list(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
423 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
424 int start = -1; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
425 int Q = qRanges.size(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
426 Integer lastColumn = null; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
427 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
428 for (int i = 0; i < Q; ++i) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
429 Object [] qRange = qRanges.get(i); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
430 Integer columnId = (Integer)qRange[0]; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
431 if (lastColumn == null) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
432 lastColumn = columnId; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
433 start = i; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
434 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
435 else if (!lastColumn.equals(columnId)) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
436 QRangeTree qRangeTree = new QRangeTree(qRanges, start, i); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
437 columns[lastColumn].setQRangeTree(qRangeTree); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
438 lastColumn = columnId; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
439 start = i; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
440 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
441 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
442 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
443 if (start != -1) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
444 QRangeTree qRangeTree = new QRangeTree(qRanges, start, Q); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
445 columns[lastColumn].setQRangeTree(qRangeTree); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
446 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
447 |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
448 return sortColumnsByAverageQ(columns); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
449 |
742
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
450 /* This is debug code to visualize the q ranges trees |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
451 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
452 java.io.PrintWriter out = null; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
453 try { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
454 out = new java.io.PrintWriter( |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
455 new java.io.FileWriter( |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
456 "/tmp/qranges" + System.currentTimeMillis() + ".dot")); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
457 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
458 out.println("graph \"Q ranges trees\" {"); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
459 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
460 for (int i = 0; i < columns.length; ++i) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
461 QRangeTree tree = columns[i].getQRangeTree(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
462 out.println(tree.toGraph()); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
463 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
464 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
465 out.println("}"); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
466 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
467 out.flush(); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
468 } |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
469 catch (java.io.IOException ioe) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
470 log.error(ioe); |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
471 } |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
472 finally { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
473 if (out != null) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
474 out.close(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
475 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
476 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
477 */ |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
478 } |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
479 |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
480 private static final class QIndex implements Comparable<QIndex> { |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
481 double q; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
482 int index; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
483 |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
484 QIndex(double q, int index) { |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
485 this.q = q; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
486 this.index = index; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
487 } |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
488 |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
489 @Override |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
490 public int compareTo(QIndex other) { |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
491 double diff = q - other.q; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
492 if (diff < 0d) return -1; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
493 if (diff > 0d) return +1; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
494 return 0; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
495 } |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
496 } // class QIndex |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
497 |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
498 /** Ensure that the q colums are sorted in ascending order. */ |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
499 protected static int [] sortColumnsByAverageQ(WstValueTable.Column [] columns) { |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
500 QIndex [] order = new QIndex[columns.length]; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
501 for (int i = 0; i < order.length; ++i) { |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
502 QRangeTree tree = columns[i].getQRangeTree(); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
503 double avg = tree.averageQ(); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
504 double max = tree.maxQ(); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
505 double q = (avg+max)*0.5d; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
506 order[i] = new QIndex(q, i); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
507 } |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
508 Arrays.sort(order); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
509 WstValueTable.Column [] copy = new WstValueTable.Column[order.length]; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
510 int [] map = new int[order.length]; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
511 for (int i = 0; i < copy.length; ++i) { |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
512 copy[i] = columns[order[i].index]; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
513 map[order[i].index] = i; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
514 } |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
515 System.arraycopy(copy, 0, columns, 0, order.length); |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
516 return map; |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
517 } |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
518 |
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
519 protected static int [] loadQRangesMap( |
1839
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
520 Session session, |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
521 WstValueTable.Column [] columns, |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
522 Wst wst |
c3b44da22a3a
Minor refactoring in preparation of generation of interpolators (WstValueTable) for static WQKms.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1780
diff
changeset
|
523 ) { |
5423
f4fd64a4d502
Fix Wstcalculation for non monotonous values.
Andre Heinecke <aheinecke@intevation.de>
parents:
3269
diff
changeset
|
524 return loadQRangesMap(session, columns, wst.getId()); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
525 } |
443
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
526 |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
527 } |
5d65fe4c08d5
Separated the WST table loading logic from the calculations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
528 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |