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()
        };
    }
}

http://dive4elements.wald.intevation.org