Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/org/dive4elements/river/artifacts/model/sq/Measurement.java @ 5831:bd047b71ab37
Repaired internal references
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 12:06:39 +0200 |
parents | flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/Measurement.java@9e25c7523485 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/org/dive4elements/river/artifacts/model/sq/Measurement.java Thu Apr 25 12:06:39 2013 +0200 @@ -0,0 +1,202 @@ +package org.dive4elements.river.artifacts.model.sq; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class Measurement +{ + private static final Log log = + LogFactory.getLog(Measurement.class); + + public static final double LOG_10_8 = Math.log(10) - Math.log(8); + public static final double SCALE_8 = Math.log(10) - Math.log(6.3); + + public static final double LOG_8_6 = Math.log(8) - Math.log(6.3); + public static final double SCALE_4 = Math.log(10) - Math.log(6.3); + + protected Map<String, Object> data; + + protected List<Sieve> sieves; + + protected SieveArray sieveArray; + + public Measurement() { + } + + public Measurement(Map<String, Object> data, List<Sieve> sieves) { + this.data = data; + this.sieves = sieves; + } + + protected double get(String name) { + Number value = (Number)data.get(name); + return value != null ? value.doubleValue() : Double.NaN; + } + + protected void set(String name, double value) { + data.put(name, Double.valueOf(value)); + } + + public Object getData(String name) { + return data.get(name); + } + + public Map<String, Object> getData() { + return data; + } + + protected void putData(String name, Object value) { + data.put(name, value); + } + + public double S_SS() { + return get("TSAND"); + } + + public double S_SF() { + return get("TSCHWEB") - get("TSAND"); + } + + public double Q() { + return get("Q_BPEGEL"); + } + + public double TOTAL_BL() { + return get("TGESCHIEBE"); + } + + public double BL_G() { + return get("BL_G"); + } + + public double BL_C() { + return get("BL_C"); + } + + public double BL_S() { + return get("BL_S"); + } + + public double S_BL_S() { + return TOTAL_BL() * BL_S(); + } + + public double S_BL_FG() { + return TOTAL_BL() * BL_G(); + } + + public double S_BL_CG() { + return TOTAL_BL() * BL_C(); + } + + public double S_BL_1() { + return S_BL_S() + S_BL_FG() + S_BL_CG(); + } + + public double S_BL_2() { + return S_SS() + S_BL_S() + S_BL_FG() + S_BL_CG(); + } + + @Override + public String toString() { + return "Measurement: " + data; + } + + /** + * Gets the sieves for this instance. + * + * @return The sieves. + */ + public List<Sieve> getSieves() { + return this.sieves; + } + + /** + * Gets the sieveArray for this instance. + * + * @return The sieveArray. + */ + public SieveArray getSieveArray() { + if (sieveArray == null) { + sieveArray = calculateSieveArray(); + } + adjustSieves(); + return sieveArray; + } + + protected Sieve findSieve(double diameter) { + for (Sieve s: sieves) { + if (s.matchesDiameter(diameter)) { + return s; + } + } + return null; + } + + protected void deleteSieve(double diameter) { + for (int i = sieves.size()-1; i >= 0; --i) { + if (sieves.get(i).matchesDiameter(diameter)) { + sieves.remove(i); + break; + } + } + } + + public void adjustSieves() { + + // If we already have an 8mm diameter sieve + // we dont need to 'invent' it. + if (findSieve(8d) != null) { + return; + } + + // create a new 8mm sieve. + // delete 6.3mm sieve. + // modify 4mm sieve. + + Sieve six = findSieve(6.3d); + Sieve ten = findSieve(10d); + Sieve four = findSieve(4d); + + if (six == null || ten == null || four == null) { + log.warn("missing diameter"); + return; + } + + double sixValue = six.getLoad(); + double tenValue = ten.getLoad(); + double fourValue = four.getLoad(); + + deleteSieve(6.3); + + double eightValue = ((LOG_10_8 / SCALE_8*sixValue) + tenValue); + double newFourValue = ((LOG_8_6 / SCALE_4*sixValue) + fourValue); + + deleteSieve(4.0); + sieves.add(new Sieve(8d, eightValue)); + sieves.add(new Sieve(4d, newFourValue)); + sieveArray.adjust( + eightValue/sieveArray.totalLoad(), + newFourValue/sieveArray.totalLoad()); + log.debug("Adjusted loads: " + Arrays.toString(sieveArray.getLoads())); + log.debug("Adjusted norm loads:" + Arrays.toString(sieveArray.getNormLoads())); + } + + protected SieveArray calculateSieveArray() { + + SieveArray sa = new SieveArray(); + + for (Sieve s: sieves) { + sa.doSieving(s); + } + + sa.calculateNormLoads(); + + return sa; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :