teichmann@5831: package org.dive4elements.river.artifacts.model.minfo; raimund@3614: raimund@3614: import org.apache.log4j.Logger; raimund@3614: raimund@3614: import gnu.trove.TDoubleArrayList; teichmann@5831: import org.dive4elements.river.artifacts.model.NamedObjectImpl; raimund@3614: raimund@3614: public class BedHeight sascha@3633: extends NamedObjectImpl raimund@3614: { raimund@3614: private static Logger log = Logger.getLogger(BedHeight.class); raimund@3614: raimund@3614: protected TDoubleArrayList heights; raimund@3614: protected TDoubleArrayList station; raimund@3614: raimund@3614: public BedHeight() { raimund@3614: heights = new TDoubleArrayList(); raimund@3614: station = new TDoubleArrayList(); raimund@3614: } raimund@3614: raimund@3614: public BedHeight(String name) { raimund@3614: super(name); raimund@3614: heights = new TDoubleArrayList(); raimund@3614: station = new TDoubleArrayList(); raimund@3614: } raimund@3614: raimund@3614: public BedHeight(int capacity) { raimund@3614: this(capacity, ""); raimund@3614: } raimund@3614: raimund@3614: public BedHeight(int capacity, String name) { raimund@3614: super(name); raimund@3614: heights = new TDoubleArrayList(capacity); raimund@3614: station = new TDoubleArrayList(capacity); raimund@3614: } raimund@3614: raimund@3897: public void add(double value, double station) { raimund@3614: this.heights.add(value); raimund@3614: this.station.add(station); raimund@3614: } raimund@3614: raimund@3614: public int size() { raimund@3614: return heights.size(); raimund@3614: } raimund@3614: raimund@3614: public double getHeight(int idx) { raimund@3614: return heights.getQuick(idx); raimund@3614: } raimund@3614: raimund@3614: public double [] getHeights() { raimund@3614: return heights.toNativeArray(); raimund@3614: } raimund@3614: raimund@3614: public double [] get(int idx) { raimund@3614: return get(idx, new double [3]); raimund@3614: } raimund@3614: raimund@3614: public double [] get(int idx, double [] dst) { raimund@3614: dst[0] = heights.getQuick(idx); raimund@3614: dst[1] = station.getQuick(idx); raimund@3614: return dst; raimund@3614: } raimund@3614: raimund@3897: public double minHeights() { raimund@3614: return heights.min(); raimund@3614: } raimund@3614: raimund@3886: public TDoubleArrayList getStations() { raimund@3886: return this.station; raimund@3886: } raimund@3886: raimund@3886: public double getHeight(double station) { raimund@3886: if (this.station.indexOf(station) >= 0) { raimund@3886: return this.heights.get(this.station.indexOf(station)); raimund@3886: } raimund@3886: return Double.NaN; raimund@3886: } raimund@3886: raimund@3897: raimund@3614: public static void removeNaNs(TDoubleArrayList [] arrays) { raimund@3614: raimund@3614: int dest = 0; raimund@3614: raimund@3614: int A = arrays.length; raimund@3614: int N = arrays[0].size(); raimund@3614: raimund@3614: OUTER: for (int i = 0; i < N; ++i) { raimund@3614: for (int j = 0; j < A; ++j) { raimund@3614: TDoubleArrayList a = arrays[j]; raimund@3614: double v = a.getQuick(i); raimund@3614: if (Double.isNaN(v)) { raimund@3614: continue OUTER; raimund@3614: } raimund@3614: a.setQuick(dest, v); raimund@3614: } raimund@3614: ++dest; raimund@3614: } raimund@3614: raimund@3614: if (dest < N) { raimund@3614: for (int i = 0; i < A; ++i) { raimund@3614: arrays[i].remove(dest, N-dest); raimund@3614: } raimund@3614: } raimund@3614: } raimund@3614: raimund@3614: public void removeNaNs() { raimund@3614: removeNaNs(new TDoubleArrayList [] { heights }); raimund@3614: } raimund@3614: }