Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/BedHeight.java @ 3614:68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
flys-artifacts/trunk@5276 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Tue, 28 Aug 2012 11:45:23 +0000 |
parents | |
children | ebfce31c7eec |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/BedHeight.java Tue Aug 28 11:45:23 2012 +0000 @@ -0,0 +1,103 @@ +package de.intevation.flys.artifacts.model.minfo; + +import org.apache.log4j.Logger; + +import gnu.trove.TDoubleArrayList; +import de.intevation.flys.artifacts.model.NamedObjectImpl; + +public class BedHeight +extends NamedObjectImpl +{ + private static Logger log = Logger.getLogger(BedHeight.class); + + protected TDoubleArrayList heights; + protected TDoubleArrayList station; + protected TDoubleArrayList data_gap; + + public BedHeight() { + heights = new TDoubleArrayList(); + station = new TDoubleArrayList(); + data_gap = new TDoubleArrayList(); + } + + public BedHeight(String name) { + super(name); + heights = new TDoubleArrayList(); + station = new TDoubleArrayList(); + data_gap = new TDoubleArrayList(); + } + + public BedHeight(int capacity) { + this(capacity, ""); + } + + public BedHeight(int capacity, String name) { + super(name); + heights = new TDoubleArrayList(capacity); + station = new TDoubleArrayList(capacity); + data_gap = new TDoubleArrayList(capacity); + } + + public void add(double value, double station, double gap) { + this.heights.add(value); + this.station.add(station); + this.data_gap.add(gap); + } + + public int size() { + return heights.size(); + } + + public double getHeight(int idx) { + return heights.getQuick(idx); + } + + public double [] getHeights() { + return heights.toNativeArray(); + } + + public double [] get(int idx) { + return get(idx, new double [3]); + } + + public double [] get(int idx, double [] dst) { + dst[0] = heights.getQuick(idx); + dst[1] = station.getQuick(idx); + dst[2] = data_gap.getQuick(idx); + return dst; + } + + public double minHeights() { + return heights.min(); + } + + public static void removeNaNs(TDoubleArrayList [] arrays) { + + int dest = 0; + + int A = arrays.length; + int N = arrays[0].size(); + + OUTER: for (int i = 0; i < N; ++i) { + for (int j = 0; j < A; ++j) { + TDoubleArrayList a = arrays[j]; + double v = a.getQuick(i); + if (Double.isNaN(v)) { + continue OUTER; + } + a.setQuick(dest, v); + } + ++dest; + } + + if (dest < N) { + for (int i = 0; i < A; ++i) { + arrays[i].remove(dest, N-dest); + } + } + } + + public void removeNaNs() { + removeNaNs(new TDoubleArrayList [] { heights }); + } +}