view artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/FixingColumnData.java @ 9646:0380717105ba

Implemented alternative fitting strategy for Log-Linear function.
author Gernot Belger <g.belger@bjoernsen.de>
date Mon, 02 Dec 2019 17:56:15 +0100
parents 9744ce3c3853
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.fixings;

import java.io.Serializable;
import java.util.Arrays;

import org.dive4elements.river.artifacts.math.Linear;
import org.dive4elements.river.artifacts.model.QRangeTree;

public class FixingColumnData implements Serializable {
    private static final long serialVersionUID = 1L;

    private double[] kms;
    private double[] ws;

    private QRangeTree qs;

    public FixingColumnData() {
    }

    public FixingColumnData(final double[] kms, final double[] ws, final QRangeTree qs) {
        this.kms = kms;
        this.ws = ws;
        this.qs = qs;
    }

    public boolean getW(final double km, final double[] w) {
        return getW(km, w, 0);
    }

    public boolean getW(final double km, final double[] w, final int index) {

        if (this.kms.length == 0 || km < this.kms[0] || km > this.kms[this.kms.length - 1]) {
            w[index] = Double.NaN;
            return true;
        }

        int idx = Arrays.binarySearch(this.kms, km);

        if (idx >= 0) {
            w[index] = this.ws[idx];
            return true;
        }

        idx = -idx - 1;

        w[index] = Linear.linear(km, this.kms[idx - 1], this.kms[idx], this.ws[idx - 1], this.ws[idx]);
        return false;
    }

    public double getQ(final double km) {
        return this.qs.findQ(km);
    }

    public QRangeTree getQRanges() {
        return this.qs;
    }
}

http://dive4elements.wald.intevation.org