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 :

http://dive4elements.wald.intevation.org