Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedParametersResult.java @ 8584:ce325339e9ba
(issue1754) Add range to W / Bed difference export.
This also fixes the Title layout in waterlevel report and
removes the year/epoch field from the english beddifference report.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 16 Mar 2015 17:38:08 +0100 |
parents | 073ea4bcea58 |
children |
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.artifacts.model.minfo; import gnu.trove.TDoubleArrayList; import org.apache.commons.math.analysis.polynomials.PolynomialSplineFunction; import org.dive4elements.river.utils.DoubleUtil; import org.apache.commons.math.ArgumentOutsideDomainException; import java.io.Serializable; public class BedParametersResult implements Serializable { protected TDoubleArrayList porosityCap; protected TDoubleArrayList porositySub; protected TDoubleArrayList loadDensityCap; protected TDoubleArrayList loadDensitySub; protected TDoubleArrayList kms; protected PolynomialSplineFunction interpolPoroSub; protected PolynomialSplineFunction interpolPoroCap; protected PolynomialSplineFunction interpolDensSub; protected PolynomialSplineFunction interpolDensCap; protected boolean nonInterpolPoroSub; protected boolean nonInterpolPoroCap; protected boolean nonInterpolDensSub; protected boolean nonInterpolDensCap; public BedParametersResult() { } public BedParametersResult( TDoubleArrayList kms, TDoubleArrayList porosityCap, TDoubleArrayList porositySub, TDoubleArrayList densityCap, TDoubleArrayList densitySub ) { this.kms = kms; this.porosityCap = porosityCap; this.porositySub = porositySub; this.loadDensityCap = densityCap; this.loadDensitySub = densitySub; PolynomialSplineFunction interpolPoroSub = null; PolynomialSplineFunction interpolPoroCap = null; PolynomialSplineFunction interpolDensSub = null; PolynomialSplineFunction interpolDensCap = null; nonInterpolPoroSub = false; nonInterpolPoroCap = false; nonInterpolDensSub = false; nonInterpolDensCap = false; } public double getPorosityCap(int ndx) { return porosityCap.get(ndx); } public double getPorositySub(int ndx) { return porositySub.get(ndx); } public double getLoadDensityCap(int ndx) { return loadDensityCap.get(ndx); } public double getLoadDensitySub(int ndx) { return loadDensitySub.get(ndx); } public double getPorosityCap(double km) { if (kms.indexOf(km) >= 0) { return porosityCap.get(kms.indexOf(km)); } return Double.NaN; } public double getPorositySub(double km) { if (kms.indexOf(km) >= 0) { return porositySub.get(kms.indexOf(km)); } return Double.NaN; } public double getLoadDensityCap(double km) { if (kms.indexOf(km) >= 0) { return loadDensityCap.get(kms.indexOf(km)); } return Double.NaN; } public double getLoadDensitySub(double km) { if (kms.indexOf(km) >= 0) { return loadDensitySub.get(kms.indexOf(km)); } return Double.NaN; } public double[][] getPorosityCapData() { return new double[][] { kms.toNativeArray(), porosityCap.toNativeArray() }; } public double[][] getPorositySubData() { return new double[][] { kms.toNativeArray(), porositySub.toNativeArray() }; } public double[][] getDensityCapData() { return new double[][] { kms.toNativeArray(), loadDensityCap.toNativeArray() }; } public double[][] getDensitySubData() { return new double[][] { kms.toNativeArray(), loadDensitySub.toNativeArray() }; } public double getPorositySubInterpol(double km) { if (nonInterpolPoroSub) { return Double.NaN; } if (interpolPoroSub == null) { interpolPoroSub = DoubleUtil.getLinearInterpolator(kms, porositySub); if (interpolPoroSub == null) { nonInterpolPoroSub = true; return Double.NaN; } } try { return interpolPoroSub.value(km); } catch (ArgumentOutsideDomainException e) { /* This is expected for many results. */ return Double.NaN; } } public double getPorosityCapInterpol(double km) { if (nonInterpolPoroCap) { return Double.NaN; } if (interpolPoroCap == null) { interpolPoroCap = DoubleUtil.getLinearInterpolator(kms, porosityCap); if (interpolPoroCap == null) { nonInterpolPoroCap = true; return Double.NaN; } } try { return interpolPoroCap.value(km); } catch (ArgumentOutsideDomainException e) { /* This is expected for many results. */ return Double.NaN; } } public double getDensitySubInterpol(double km) { if (nonInterpolDensSub) { return Double.NaN; } if (interpolDensSub == null) { interpolDensSub = DoubleUtil.getLinearInterpolator(kms, loadDensitySub); if (interpolDensSub == null) { nonInterpolDensSub = true; return Double.NaN; } } try { return interpolDensSub.value(km); } catch (ArgumentOutsideDomainException e) { /* This is expected for many results. */ return Double.NaN; } } public double getDensityCapInterpol(double km) { if (nonInterpolDensCap) { return Double.NaN; } if (interpolDensCap == null) { interpolDensCap = DoubleUtil.getLinearInterpolator(kms, loadDensityCap); if (interpolDensCap == null) { nonInterpolDensCap = true; return Double.NaN; } } try { return interpolDensCap.value(km); } catch (ArgumentOutsideDomainException e) { /* This is expected for many results. */ return Double.NaN; } } }