sascha@3289: package de.intevation.flys.artifacts.model.sq; sascha@3289: teichmann@3992: import java.util.List; sascha@3289: import java.util.Map; sascha@3289: teichmann@3981: import org.apache.commons.logging.Log; teichmann@3981: import org.apache.commons.logging.LogFactory; teichmann@3981: sascha@3289: public class Measurement sascha@3289: { teichmann@3981: private static final Log log = teichmann@3981: LogFactory.getLog(Measurement.class); teichmann@3981: teichmann@3981: public static final double ADD_8 = Math.log(10) - Math.log(8)/Math.log(6.3); teichmann@3981: public static final double SCALE_8 = Math.log(6.3); teichmann@3981: teichmann@3981: public static final double ADD_4 = Math.log(8) - Math.log(6.3)/Math.log(10); teichmann@3981: public static final double SCALE_4 = Math.log(6.3); teichmann@3981: teichmann@3992: protected Map data; teichmann@3981: teichmann@3992: protected List sieves; teichmann@3992: teichmann@3992: protected SieveArray sieveArray; sascha@3289: sascha@3928: protected Measurement prev; sascha@3928: protected Measurement next; sascha@3928: sascha@3289: public Measurement() { sascha@3289: } sascha@3289: teichmann@3992: public Measurement(Map data, List sieves) { sascha@3289: this.data = data; teichmann@3992: this.sieves = sieves; teichmann@3992: adjustOriginalSieves(); teichmann@3992: this.sieveArray = calculateSieveArray(); sascha@3289: } sascha@3289: teichmann@3981: public Measurement head() { teichmann@3981: Measurement current = this; teichmann@3981: while (current.prev != null) { teichmann@3981: current = current.prev; teichmann@3981: } teichmann@3981: return current; teichmann@3981: } teichmann@3981: sascha@3290: protected double get(String name) { sascha@3290: Number value = (Number)data.get(name); sascha@3290: return value != null ? value.doubleValue() : Double.NaN; sascha@3290: } sascha@3290: teichmann@3981: protected void set(String name, double value) { teichmann@3981: data.put(name, Double.valueOf(value)); teichmann@3981: } teichmann@3981: teichmann@3981: protected Object getData(String name) { teichmann@3981: return data.get(name); teichmann@3981: } teichmann@3981: teichmann@3981: protected void putData(String name, Object value) { teichmann@3981: data.put(name, value); teichmann@3981: } teichmann@3981: sascha@3290: public double S_SS() { sascha@3290: return get("TSAND"); sascha@3290: } sascha@3290: sascha@3290: public double S_SF() { sascha@3290: return get("TSCHWEB") - get("TSAND"); sascha@3290: } sascha@3290: sascha@3290: public double Q() { sascha@3393: return get("Q_BPEGEL"); sascha@3290: } sascha@3290: sascha@3389: public double TOTAL_BL() { sascha@3922: return get("TGESCHIEBE"); sascha@3290: } sascha@3290: sascha@3922: public double BL_G() { sascha@3389: // TODO: Implement me! sascha@3389: return Double.NaN; sascha@3389: } sascha@3389: sascha@3922: public double BL_C() { sascha@3290: // TODO: Implement me! sascha@3290: return Double.NaN; sascha@3290: } sascha@3290: sascha@3922: public double BL_S() { sascha@3290: // TODO: Implement me! sascha@3290: return Double.NaN; sascha@3290: } sascha@3290: sascha@3922: public double S_BL_S() { sascha@3922: return TOTAL_BL() * BL_S(); sascha@3922: } sascha@3922: sascha@3922: public double S_BL_FG() { sascha@3922: return TOTAL_BL() * BL_G(); sascha@3922: } sascha@3922: sascha@3922: public double S_BL_CG() { sascha@3922: return TOTAL_BL() * BL_C(); sascha@3290: } sascha@3289: sascha@3389: public double S_BL_1() { sascha@3389: return S_BL_S() + S_BL_FG() + S_BL_CG(); sascha@3389: } sascha@3293: sascha@3389: public double S_BL_2() { sascha@3389: return S_SS() + S_BL_S() + S_BL_FG() + S_BL_CG(); sascha@3389: } sascha@3293: sascha@3289: @Override sascha@3289: public String toString() { sascha@3289: return "Measurement: " + data; sascha@3289: } sascha@3928: sascha@3928: /** teichmann@3992: * Gets the sieves for this instance. teichmann@3992: * teichmann@3992: * @return The sieves. teichmann@3992: */ teichmann@3992: public List getSieves() { teichmann@3992: return this.sieves; teichmann@3992: } teichmann@3992: teichmann@3992: /** teichmann@3992: * Gets the sieveArray for this instance. teichmann@3992: * teichmann@3992: * @return The sieveArray. teichmann@3992: */ teichmann@3992: public SieveArray getSieveArray() { teichmann@3992: return this.sieveArray; teichmann@3992: } teichmann@3992: teichmann@3992: /** sascha@3928: * Gets the prev for this instance. sascha@3928: * sascha@3928: * @return The prev. sascha@3928: */ sascha@3928: public Measurement getPrev() { sascha@3928: return this.prev; sascha@3928: } sascha@3928: sascha@3928: /** sascha@3928: * Sets the prev for this instance. sascha@3928: * sascha@3928: * @param prev The prev. sascha@3928: */ sascha@3928: public void setPrev(Measurement prev) { sascha@3928: this.prev = prev; sascha@3928: } sascha@3928: sascha@3928: /** sascha@3928: * Gets the next for this instance. sascha@3928: * sascha@3928: * @return The next. sascha@3928: */ sascha@3928: public Measurement getNext() { sascha@3928: return this.next; sascha@3928: } sascha@3928: sascha@3928: /** sascha@3928: * Sets the next for this instance. sascha@3928: * sascha@3928: * @param next The next. sascha@3928: */ sascha@3928: public void setNext(Measurement next) { sascha@3928: this.next = next; sascha@3928: } teichmann@3981: teichmann@3992: protected Sieve findSieve(double diameter) { teichmann@3992: for (Sieve s: sieves) { teichmann@3992: if (s.matchesDiameter(diameter)) { teichmann@3992: return s; teichmann@3981: } teichmann@3981: } teichmann@3992: return null; teichmann@3981: } teichmann@3981: teichmann@3992: protected void deleteSieve(double diameter) { teichmann@3992: for (int i = sieves.size()-1; i >= 0; --i) { teichmann@3992: if (sieves.get(i).matchesDiameter(diameter)) { teichmann@3992: sieves.remove(i); teichmann@3992: break; teichmann@3992: } teichmann@3992: } teichmann@3981: } teichmann@3981: teichmann@3992: protected void adjustOriginalSieves() { teichmann@3981: teichmann@3981: // If we already have an 8mm diameter sieve teichmann@3981: // we dont need to 'invent' it. teichmann@3992: if (findSieve(8d) != null) { teichmann@3981: return; teichmann@3981: } teichmann@3981: teichmann@3981: // create a new 8mm sieve. teichmann@3981: // delete 6.3mm sieve. teichmann@3981: // modify 4mm sieve. teichmann@3981: teichmann@3992: Sieve six = findSieve(6.3d); teichmann@3992: Sieve ten = findSieve(10d); teichmann@3992: Sieve four = findSieve(4d); teichmann@3992: teichmann@3992: if (six == null || ten == null || four == null) { teichmann@3981: log.warn("missind diameter"); teichmann@3981: return; teichmann@3981: } teichmann@3981: teichmann@3992: double sixValue = six.getLoad(); teichmann@3992: double tenValue = ten.getLoad(); teichmann@3992: double fourValue = four.getLoad(); teichmann@3981: teichmann@3992: deleteSieve(6.3); teichmann@3981: teichmann@3981: double eightValue = ADD_8 - SCALE_8*sixValue + tenValue; teichmann@3981: double newFourValue = ADD_4 - SCALE_4*sixValue + fourValue; teichmann@3981: teichmann@3992: sieves.add(new Sieve(8d, eightValue)); teichmann@3992: sieves.add(new Sieve(4d, newFourValue)); teichmann@3981: } teichmann@3981: teichmann@3981: teichmann@3992: public SieveArray calculateSieveArray() { teichmann@3981: teichmann@3992: SieveArray sa = new SieveArray(); teichmann@3981: teichmann@3992: for (Sieve s: sieves) { teichmann@3992: sa.doSieving(s); teichmann@3981: } teichmann@3981: teichmann@3992: sa.calculateNormLoads(); teichmann@3981: teichmann@3992: return sa; teichmann@3981: } sascha@3289: } sascha@3289: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :