view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WW.java @ 3785:a5f65e8983be

Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-artifacts/trunk ........ r5501 | felix | 2012-09-18 11:49:45 +0200 (Di, 18 Sep 2012) | 1 line fix issue865 - missing showarea theme prop. ........ r5502 | clins | 2012-09-18 12:18:30 +0200 (Di, 18 Sep 2012) | 1 line Add robustness checks to prevent NPEs ........ r5504 | felix | 2012-09-18 14:03:15 +0200 (Di, 18 Sep 2012) | 1 line i18n for area label (fix issue487). ........ r5505 | clins | 2012-09-18 16:19:59 +0200 (Di, 18 Sep 2012) | 1 line Update themes to show point descriptions ........ r5506 | rrenkert | 2012-09-18 17:00:30 +0200 (Di, 18 Sep 2012) | 3 lines Removed incorrect characteristic diameter. ........ r5507 | rrenkert | 2012-09-18 17:03:20 +0200 (Di, 18 Sep 2012) | 3 lines Fixed some stupid bugs in bed quality data factory and calculation. ........ r5508 | teichmann | 2012-09-18 17:45:49 +0200 (Di, 18 Sep 2012) | 1 line The usual whitespace and import cleanups. ........ r5511 | teichmann | 2012-09-18 18:24:51 +0200 (Di, 18 Sep 2012) | 1 line Use generics aware Collections.emptyList(). ........ r5512 | teichmann | 2012-09-18 20:36:52 +0200 (Di, 18 Sep 2012) | 1 line Some more little steps towards "Auslagerung extremer Wasserspiegellagen". ........ r5513 | clins | 2012-09-18 23:38:19 +0200 (Di, 18 Sep 2012) | 1 line A and B facets of fix analyis are now deactivated by default ........ r5516 | bricks | 2012-09-19 10:45:51 +0200 (Mi, 19 Sep 2012) | 2 lines Add the gauge station to the GaugeOverviewInfoService xml response ........ r5517 | rrenkert | 2012-09-19 10:50:23 +0200 (Mi, 19 Sep 2012) | 3 lines Added CSV export to bed quality calculation. ........ r5518 | bricks | 2012-09-19 11:04:04 +0200 (Mi, 19 Sep 2012) | 2 lines Fix date in changelog entry ........ r5519 | teichmann | 2012-09-19 11:17:14 +0200 (Mi, 19 Sep 2012) | 1 line Removed trailing whitespace. ........ flys-artifacts/tags/2.9.1@5531 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 19 Sep 2012 14:58:31 +0000
parents 5642a83420f2
children bcf25d8c183e
line wrap: on
line source
package de.intevation.flys.artifacts.model;

import de.intevation.flys.artifacts.math.Function;
import de.intevation.flys.artifacts.math.Identity;

import gnu.trove.TDoubleArrayList;

public class WW
extends      W
{
    public static class ApplyFunctionIterator
    {
        protected Function function1;
        protected Function function2;
        protected int      pos;
        protected WW       ww;

        public ApplyFunctionIterator(WW ww) {
            this(ww, Identity.IDENTITY, Identity.IDENTITY);
        }

        public ApplyFunctionIterator(
            WW       ww,
            Function function1,
            Function function2
        ) {
            this.ww        = ww;
            this.function1 = function1;
            this.function2 = function2;
        }

        public boolean hasNext() {
            return pos < ww.size();
        }

        public int size() {
            return ww.size();
        }

        public void reset() {
            pos = 0;
        }

        public WW getWW() {
            return ww;
        }

        public void get(int idx, double [] wwPair) {
            wwPair[0] = function1.value(ww.getW(idx));
            wwPair[1] = function2.value(ww.getW2(idx));
        }

        public void next(double [] wwPair) {
            get(pos++, wwPair);
        }
    } // class FunctionIterator

    protected TDoubleArrayList ws2;

    protected double startKm;
    protected double endKm;

    protected Double startDatum;
    protected Double endDatum;

    public WW() {
        this("");
    }

    public WW(String name) {
        super(name);
    }

    public WW(int capacity) {
        this(capacity, "");
    }

    public WW(int capacity, String name) {
        super(capacity, name);
        ws2 = new TDoubleArrayList(capacity);
    }

    public WW(
        String    name,
        double    startKm,
        Double    startDatum,
        double [] ws,
        double    endKm,
        Double    endDatum,
        double [] ws2
    ) {
        this.name       = name;
        this.ws         = new TDoubleArrayList(ws);
        this.ws2        = new TDoubleArrayList(ws2);
        this.startKm    = startKm;
        this.startDatum = startDatum;
        this.endKm      = endKm;
        this.endDatum   = endDatum;
    }

    public WW(String name, TDoubleArrayList ws, TDoubleArrayList ws2) {
        this.name = name;
        this.ws  = ws;
        this.ws2 = ws2;
    }

    public void add(double w1, double w2) {
        ws .add(w1);
        ws2.add(w2);
    }

    public double getW1(int idx) {
        return ws.getQuick(idx);
    }

    public double getW2(int idx) {
        return ws2.getQuick(idx);
    }

    public double [] getWs2() {
        return ws2.toNativeArray();
    }

    @Override
    public double [] get(int idx) {
        return get(idx, new double[2]);
    }

    @Override
    public double [] get(int idx, double [] dst) {
        dst[0] = ws .getQuick(idx);
        dst[1] = ws2.getQuick(idx);
        return dst;
    }

    public double getStartKm() {
        return startKm;
    }

    public void setStartKm(double startKm) {
        this.startKm = startKm;
    }

    public double getEndKm() {
        return endKm;
    }

    public void setEndKm(double endKm) {
        this.endKm = endKm;
    }

    public Double getStartDatum() {
        return startDatum;
    }

    public boolean startAtGauge() {
        return startDatum != null;
    }

    public boolean endAtGauge() {
        return endDatum != null;
    }

    public void setStartDatum(Double startDatum) {
        this.startDatum = startDatum;
    }

    public Double getEndDatum() {
        return endDatum;
    }

    public void setEndDatum(Double endDatum) {
        this.endDatum = endDatum;
    }

    @Override
    public void removeNaNs() {
        removeNaNs(new TDoubleArrayList [] { ws, ws2 });
    }

    public double minWs2() {
        return ws2.min();
    }

    // Note that we can also easily define a Function to do so.
    public double getRelHeight1Cm(int idx) {
        if (this.startAtGauge()) {
            return (ws.getQuick(idx) - getStartDatum())*100d;
        }
        else return ws.getQuick(idx)*100d;
    }

    public double getRelHeight2Cm(int idx) {
        if (this.endAtGauge()) {
            return (ws2.getQuick(idx) - getEndDatum())*100d;
        }
        else return ws2.getQuick(idx)*100d;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org