Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiameterResult.java @ 8582:17a3030bbda2
Update SQL-statements to schema-changes in rev 6d8d7425a6b5.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Mon, 16 Mar 2015 16:59:37 +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 org.dive4elements.river.utils.DoubleUtil; import gnu.trove.TDoubleArrayList; import org.apache.commons.math.analysis.polynomials.PolynomialSplineFunction; import org.apache.commons.math.ArgumentOutsideDomainException; public class BedDiameterResult extends BedQualityDiameterResult { protected TDoubleArrayList diameterCap; protected TDoubleArrayList diameterSub; protected PolynomialSplineFunction interpolSub; protected PolynomialSplineFunction interpolCap; protected boolean nonInterpolSub; protected boolean nonInterpolCap; public BedDiameterResult ( String type, TDoubleArrayList diameterCap, TDoubleArrayList diameterSub, TDoubleArrayList km ) { super(type, km); this.diameterCap = diameterCap; this.diameterSub = diameterSub; interpolSub = null; nonInterpolSub = false; interpolCap = null; nonInterpolCap = false; } public double getDiameterCap(int ndx) { if (diameterCap != null) { return this.diameterCap.get(ndx); } return Double.NaN; } public double getDiameterSub(int ndx) { if (diameterSub != null) { return this.diameterSub.get(ndx); } return Double.NaN; } public double getDiameterCap(double km) { if (kms.indexOf(km) >= 0) { return diameterCap.get(kms.indexOf(km)); } return Double.NaN; } public double getDiameterCapInterpol(double km) { if (nonInterpolCap) { return Double.NaN; } if (interpolCap == null) { interpolCap = DoubleUtil.getLinearInterpolator(kms, diameterCap); if (interpolCap == null) { nonInterpolCap = true; return Double.NaN; } } try { return interpolCap.value(km); } catch (ArgumentOutsideDomainException e) { /* This is expected for many results. */ return Double.NaN; } } public double getDiameterSub(double km) { if (kms.indexOf(km) >= 0) { return diameterSub.get(kms.indexOf(km)); } return Double.NaN; } public double getDiameterSubInterpol(double km) { if (nonInterpolSub) { return Double.NaN; } if (interpolSub == null) { interpolSub = DoubleUtil.getLinearInterpolator(kms, diameterSub); if (interpolSub == null) { nonInterpolSub = true; return Double.NaN; } } try { return interpolSub.value(km); } catch (ArgumentOutsideDomainException e) { /* This is expected for many results. */ return Double.NaN; } } public double[][] getDiameterCapData() { return new double[][] { kms.toNativeArray(), diameterCap.toNativeArray() }; } public double[][] getDiameterSubData() { return new double[][] { kms.toNativeArray(), diameterSub.toNativeArray() }; } }