sascha@2610: package de.intevation.flys.artifacts.model;
sascha@2610: 
sascha@2610: import de.intevation.flys.artifacts.math.Linear;
sascha@2610: 
sascha@2610: import java.util.Arrays;
sascha@2610: 
sascha@2610: import java.io.Serializable;
sascha@2610: 
sascha@2610: public class FixingsColumn
sascha@2610: implements   Serializable
sascha@2610: {
sascha@2610:     protected double [] kms;
sascha@2610:     protected double [] ws;
sascha@2610: 
sascha@2610:     protected QRangeTree qs;
sascha@2610: 
sascha@2610:     public FixingsColumn() {
sascha@2610:     }
sascha@2610: 
sascha@2610:     public FixingsColumn(
sascha@2619:         double []  kms,
sascha@2619:         double []  ws,
sascha@2619:         QRangeTree qs
sascha@2610:     ) {
sascha@2619:         this.kms = kms;
sascha@2619:         this.ws  = ws;
sascha@2619:         this.qs  = qs;
sascha@2610:     }
sascha@2610: 
sascha@2615:     public boolean getW(double km, double [] w) {
sascha@2729:         return getW(km, w, 0);
sascha@2729:     }
sascha@2729: 
sascha@2729:     public boolean getW(double km, double [] w, int index) {
sascha@2610: 
sascha@2619:         if (kms.length == 0 || km < kms[0] || km > kms[kms.length-1]) {
sascha@2729:             w[index] = Double.NaN;
sascha@2615:             return true;
sascha@2610:         }
sascha@2610: 
sascha@2610:         int idx = Arrays.binarySearch(kms, km);
sascha@2610: 
sascha@2615:         if (idx >= 0) {
sascha@2729:             w[index] = ws[idx];
sascha@2615:             return true;
sascha@2615:         }
sascha@2610: 
sascha@2610:         idx = -idx - 1;
sascha@2610: 
ingo@2792:         w[index] = Linear.linear(km, kms[idx-1], kms[idx], ws[idx-1], ws[idx]);
sascha@2615:         return false;
sascha@2610:     }
sascha@2610: 
sascha@2610:     public double getQ(double km) {
sascha@2610:         return qs.findQ(km);
sascha@2610:     }
ingo@2792: 
ingo@2792:     public QRangeTree getQRanges() {
ingo@2792:         return qs;
ingo@2792:     }
sascha@2610: }
sascha@2610: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :