view artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedloadDiameterResult.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.artifacts.model.DateRange;
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 BedloadDiameterResult
extends BedQualityDiameterResult
{
    protected TDoubleArrayList diameter;
    protected PolynomialSplineFunction interpol;

    /** Set to true if this result can't be interpolated.*/
    protected boolean nonInterpolResult;

    public BedloadDiameterResult(
        String type,
        TDoubleArrayList diameter,
        TDoubleArrayList km,
        DateRange range
    ) {
        super (type, km);
        this.diameter = diameter;
        interpol = null;
        nonInterpolResult = false;
    }

    public double getDiameter(int ndx) {
        if (diameter != null) {
            return this.diameter.get(ndx);
        }
        return Double.NaN;
    }

    public double getDiameter(double km) {
        if (kms.indexOf(km) >= 0) {
            return diameter.get(kms.indexOf(km));
        }
        return Double.NaN;
    }

    public double getDiameterInterpol(double km) {
        if (nonInterpolResult) {
            return Double.NaN;
        }
        if (interpol == null) {
            interpol = DoubleUtil.getLinearInterpolator(kms, diameter);
            if (interpol == null) {
                nonInterpolResult = true;
                return Double.NaN;
            }
        }
        try {
            return interpol.value(km);
        } catch (ArgumentOutsideDomainException e) {
            /* This is expected for many results. */
            return Double.NaN;
        }
    }

    public double[][] getDiameterData() {
        return new double[][] {
            kms.toNativeArray(),
            diameter.toNativeArray()
        };
    }
}

http://dive4elements.wald.intevation.org