# HG changeset patch # User Sascha L. Teichmann # Date 1327668140 0 # Node ID ec2574eb2d32b7f99f116b4d3a03f90dc257c6df # Parent a9a8df1473fd78eb22ec069f6d061512e5a3bb96 Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact. flys-artifacts/trunk@3792 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r a9a8df1473fd -r ec2574eb2d32 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Fri Jan 27 11:58:35 2012 +0000 +++ b/flys-artifacts/ChangeLog Fri Jan 27 12:42:20 2012 +0000 @@ -1,3 +1,18 @@ +2012-01-27 Sascha L. Teichmann + + * src/main/java/de/intevation/flys/artifacts/model/Calculation5.java: + New. Calcutation to be created from WINFOArtifact + for the 'Bezugslinienverfahren'. + + * src/main/java/de/intevation/flys/artifacts/model/WstValueTable.java: + Added TODO about optimization of the 'Bezugslinienverfahren'. + Added number of default samples of the W~W relation. + + * src/main/java/de/intevation/flys/artifacts/model/WW.java: + Added convinience constructor to store the calculation results. + + * ChangeLog: Removed false TODO. + 2012-01-27 Raimund Renkert * src/main/java/de/intevation/flys/exports/WaterlevelExporter.java, @@ -56,13 +71,9 @@ \-- W +-- WW \-- WQ - +-- WQDay + +-- WQDay \-- WQKms - \-- WQCKms - - FIXME: WQDay should be removed from this tree because only - a Q/Day model is needed for the 'Dauerzahlen' calculation. - The Ws in WQDay are unused and only consume (cache) memory. + \-- WQCKms * src/main/java/de/intevation/flys/artifacts/model/W.java: New. Base class diff -r a9a8df1473fd -r ec2574eb2d32 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation5.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation5.java Fri Jan 27 12:42:20 2012 +0000 @@ -0,0 +1,56 @@ +package de.intevation.flys.artifacts.model; + +import java.util.ArrayList; + +import org.apache.log4j.Logger; + + +public class Calculation5 +extends Calculation +{ + private static Logger log = Logger.getLogger(Calculation5.class); + + protected double startKm; + protected double [] endKms; + + public Calculation5() { + } + + public Calculation5(double startKm, double [] endKms) { + this.startKm = startKm; + this.endKms = endKms; + } + + public CalculationResult calculate(WstValueTable wst) { + ArrayList results = new ArrayList(); + + int numProblems = numProblems(); + + for (double endKm: endKms) { + + double [][] wws = wst.relateWs(startKm, endKm, this); + int newNumProblems = numProblems(); + + if (wws.length == 2) { + WW ww = new WW(generateName(startKm, endKm), wws[0], wws[1]); + + if (newNumProblems > newNumProblems) { + ww.removeNaNs(); + } + + results.add(ww); + } + numProblems = newNumProblems; + } + + return new CalculationResult( + results.toArray(new WW[results.size()]), + this); + } + + protected static String generateName(double startKm, double endKm) { + // TODO: I18N + return "W(km " + startKm + ") ~ W(km " + endKm + ")"; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r a9a8df1473fd -r ec2574eb2d32 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WW.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WW.java Fri Jan 27 11:58:35 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WW.java Fri Jan 27 12:42:20 2012 +0000 @@ -23,6 +23,12 @@ ws2 = new TDoubleArrayList(capacity); } + public WW(String name, double [] ws, double [] ws2) { + this.name = name; + this.ws = new TDoubleArrayList(ws); + this.ws2 = new TDoubleArrayList(ws2); + } + public void add(double w1, double w2) { ws .add(w1); ws2.add(w2); diff -r a9a8df1473fd -r ec2574eb2d32 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WstValueTable.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WstValueTable.java Fri Jan 27 11:58:35 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WstValueTable.java Fri Jan 27 12:42:20 2012 +0000 @@ -32,6 +32,8 @@ public static final int DEFAULT_Q_STEPS = 500; + public static final int RELATE_WS_SAMPLES = 150; + /** * A Column in the table, typically representing one measurement session. */ @@ -892,6 +894,19 @@ public double [][] relateWs( double km1, double km2, + Calculation errors + ) { + return relateWs(km1, km2, RELATE_WS_SAMPLES, errors); + } + + /* TODO: Add optimized methods of relateWs to relate one + * start km to many end kms. The index generation/spline stuff for + * the start km is always the same. + */ + + public double [][] relateWs( + double km1, + double km2, int numSamples, Calculation errors ) {