teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5863: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5863: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.model; ingo@361: teichmann@5831: import org.dive4elements.river.utils.DoubleUtil; teichmann@4821: ingo@365: import gnu.trove.TDoubleArrayList; ingo@361: ingo@402: import org.apache.log4j.Logger; ingo@402: ingo@361: ingo@361: /** ingo@361: * This class represents a pool of data triples that consists of 'W', 'Q' and ingo@361: * 'KM' data. ingo@361: * ingo@361: * @author Ingo Weinzierl ingo@361: */ sascha@742: public class WQKms sascha@726: extends WQ teichmann@4817: implements WKms, QKms sascha@726: { ingo@402: private static Logger logger = Logger.getLogger(WQKms.class); ingo@402: felix@1029: /** The array that contains the 'KMs' values. */ ingo@365: protected TDoubleArrayList kms; ingo@361: ingo@361: ingo@361: public WQKms() { ingo@447: this(""); ingo@447: } ingo@447: ingo@447: ingo@447: public WQKms(String name) { ingo@447: super(name); ingo@365: this.kms = new TDoubleArrayList(); ingo@361: } ingo@361: ingo@447: sascha@380: public WQKms(int capacity) { ingo@447: this(capacity, ""); ingo@447: } ingo@447: ingo@447: ingo@447: public WQKms(int capacity, String name) { sascha@2182: super(capacity, name); sascha@380: this.kms = new TDoubleArrayList(capacity); sascha@380: } sascha@380: sascha@726: public WQKms(double [] kms, double [] qs, double [] ws) { ingo@447: this(kms, qs, ws, ""); ingo@447: } ingo@447: ingo@447: sascha@726: public WQKms(double [] kms, double [] qs, double [] ws, String name) { sascha@726: super(qs, ws, name); ingo@402: this.kms = new TDoubleArrayList(kms); ingo@402: } ingo@402: sascha@726: @Override sascha@726: public void removeNaNs() { teichmann@4821: DoubleUtil.removeNaNs(new TDoubleArrayList [] { ws, qs, kms }); sascha@726: } ingo@402: ingo@361: /** ingo@361: * Adds a new row to this data pool. ingo@361: * ingo@361: * @param w a W. ingo@361: * @param q a Q. felix@3269: * @param km a kms. ingo@361: */ sascha@726: public void add(double w, double q, double km) { sascha@726: super.add(w, q); sascha@726: kms.add(km); sascha@366: } sascha@366: sascha@2182: @Override sascha@2182: public double [] get(int idx) { sascha@2182: return get(idx, new double [3]); sascha@2182: } sascha@2182: sascha@366: /** sascha@366: * This method returns a triple of W, Q and Kms in a single 3dim array. sascha@366: * sascha@366: * @param idx The position of the triple. sascha@366: * @param dst destination array sascha@366: * sascha@366: * @return a triple of [W, Q, Kms] in dst. sascha@366: */ sascha@726: @Override sascha@2182: public double [] get(int idx, double [] dst) { sascha@2182: dst[0] = ws .getQuick(idx); sascha@2182: dst[1] = qs .getQuick(idx); ingo@686: dst[2] = kms.getQuick(idx); sascha@366: return dst; ingo@361: } ingo@367: sascha@925: @Override sascha@925: public double getKm(int idx) { ingo@686: return kms.getQuick(idx); ingo@367: } ingo@402: sascha@1678: @Override sascha@1678: public TDoubleArrayList allKms() { sascha@1678: return kms; sascha@1678: } sascha@1678: sascha@1678: @Override sascha@1678: public TDoubleArrayList allWs() { sascha@2182: return ws; sascha@1678: } sascha@1678: teichmann@4817: @Override teichmann@4817: public TDoubleArrayList allQs() { teichmann@4817: return qs; teichmann@4817: } teichmann@4817: ingo@402: public double[] getKms() { ingo@402: return kms.toNativeArray(); ingo@402: } ingo@402: ingo@402: /** ingo@402: * Returns a string that consist of the first and last kilometer. ingo@402: * ingo@402: * @return a string that consist of the first and last kilometer. ingo@402: */ ingo@402: public String toString() { sascha@925: double from = getKm(0); sascha@925: double to = getKm(size()-1); ingo@686: return from + " - " + to; ingo@402: } ingo@361: } ingo@361: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :