Mercurial > dive4elements > river
changeset 6524:641ec405c4ac
MainValuesArtifact: Added method to determine whether at gauge or not.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Tue, 02 Jul 2013 07:10:25 +0200 |
parents | 5afb1cda5885 |
children | ed81479cde10 |
files | artifacts/src/main/java/org/dive4elements/river/artifacts/MainValuesArtifact.java |
diffstat | 1 files changed, 62 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/MainValuesArtifact.java Tue Jul 02 07:09:19 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/MainValuesArtifact.java Tue Jul 02 07:10:25 2013 +0200 @@ -316,6 +316,21 @@ return spawnState(); } + /** + * Access the Gauge that the mainvalues are taken from. + * @return Gauge that main values are taken from or null in case of + * invalid parameterization. + */ + protected Gauge getGauge(double km) { + River river = RiverUtils.getRiver(this); + + if (river == null) { + logger.error("River is null"); + return null; + } + + return river.determineGaugeByPosition(km); + } /** * Access the Gauge that the mainvalues are taken from. @@ -389,12 +404,53 @@ } - /** - * Get a list of "W" main values. - * @param atGauge if true, do not interpolate - * @return list of W main values. - */ - public List<NamedDouble> getMainValuesW(boolean atGauge) { + /** Get main values of km. */ + public List<NamedDouble> getMainValuesW(double[] kms) { + List<NamedDouble> filteredList = new ArrayList<NamedDouble>(); + boolean atGauge = false; + double gaugeDatum = 0d; + Gauge gauge = getGauge(kms[0]); + if (gauge == null) { + return filteredList; + } + else if (Math.abs(kms[0] - gauge.getStation().doubleValue()) < 1e-4) { + atGauge = true; + gaugeDatum = gauge.getDatum().doubleValue(); + } + + WstValueTable interpolator = WstValueTableFactory.getTable(RiverUtils.getRiver(this)); + Calculation c = new Calculation(); + + double gaugeStation = gauge.getStation().doubleValue(); + double w_out[] = {0.0f}; + double q_out[] = {0.0f}; + if (gauge != null) { + List<MainValue> orig = gauge.getMainValues(); + for (MainValue mv : orig) { + if (atGauge) { + if (mv.getMainValue().getType().getName().equals("W")) { + filteredList.add(new NamedDouble(mv.getMainValue().getName(), + mv.getValue().doubleValue())); + } + } else + // We cannot interpolate the W values, so derive them + // from given Q values. + if (mv.getMainValue().getType().getName().equals("Q")) { + interpolator.interpolate(mv.getValue().doubleValue(), + gaugeStation, kms, w_out, q_out, c); + + filteredList.add(new NamedDouble( + "W(" + mv.getMainValue().getName() +")", + w_out[0] + )); + } + } + } + return filteredList; + } + + + public List<NamedDouble> getMainValuesW(boolean atGauge, double[] kms) { List<NamedDouble> filteredList = new ArrayList<NamedDouble>(); Gauge gauge = getGauge(); WstValueTable interpolator = WstValueTableFactory.getTable(RiverUtils.getRiver(this));