# HG changeset patch # User Ingo Weinzierl # Date 1328788045 0 # Node ID c0dfa36add965001e1348a3ff06253934d21cba5 # Parent f4ca234ba2143a7a595b1d49674a66f8c14ecc9b Some bugfixes and improvements in the calculation of historical discharge curves. flys-artifacts/trunk@3996 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r f4ca234ba214 -r c0dfa36add96 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Thu Feb 09 11:33:47 2012 +0000 +++ b/flys-artifacts/ChangeLog Thu Feb 09 11:47:25 2012 +0000 @@ -1,3 +1,11 @@ +2012-02-09 Ingo Weinzierl + + * src/main/java/de/intevation/flys/artifacts/model/Calculation6.java: Some + bugfixes and improvements: + 1) take only historical discharge tables into account for calculation + 2) use the correct values for computing differences + 3) moved timerange preparation into an own method + 2012-02-09 Felix Wolfsteller * src/main/java/de/intevation/flys/artifacts/states/EnterMultipleLocationsState.java: diff -r f4ca234ba214 -r c0dfa36add96 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation6.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation6.java Thu Feb 09 11:33:47 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation6.java Thu Feb 09 11:47:25 2012 +0000 @@ -108,6 +108,10 @@ protected boolean isDischargeTableRelevant(DischargeTable dt) { TimeInterval ti = dt.getTimeInterval(); + if (dt.getKind() == Gauge.MASTER_DISCHARGE_TABLE) { + return false; + } + Date start = ti.getStartTime(); long startTime = start.getTime(); @@ -146,8 +150,6 @@ List wqts = new ArrayList(values.length); - boolean debug = logger.isDebugEnabled(); - for (double value: values) { logger.debug("Prepare data for value: " + value); @@ -155,18 +157,8 @@ WQTimerange wqt = null; for (DischargeTable dt: dts) { - TimeInterval ti = dt.getTimeInterval(); - - Date start = ti.getStartTime(); - Date end = ti.getStopTime(); - - if (end == null) { - logger.warn("TimeInterval has no stop time set!"); - - end = new Date(); - } - - Timerange t = new Timerange(ti.getStartTime(),ti.getStopTime()); + Date[] ti = prepareTimeInterval(dt); + Timerange t = new Timerange(ti[0], ti[1]); double w; double q; @@ -176,7 +168,7 @@ if (Double.isNaN(q)) { logger.warn("Cannot find Q for W: " + w); - addProblem("cannot.find.hist.q.for.w", w, start, end); + addProblem("cannot.find.hist.q.for.w", w, ti[0], ti[1]); continue; } } @@ -185,9 +177,7 @@ w = findValueForQ(dt, q); } - if (debug) { - logger.debug("Q=" + q + " | W=" + w); - } + logger.debug("Q=" + q + " | W=" + w); if (wqt == null) { wqt = new WQTimerange(name); @@ -212,8 +202,6 @@ List wqts = new ArrayList(values.length); - boolean debug = logger.isDebugEnabled(); - for (double value: values) { logger.debug("Prepare data plus diff for value: " + value); @@ -221,6 +209,7 @@ HistoricalWQTimerange wqt = null; double ref; + double diff; if (refTable != null && mode == MODE_W) { ref = findValueForW(refTable, value); @@ -233,45 +222,37 @@ } for (DischargeTable dt: dts) { - TimeInterval ti = dt.getTimeInterval(); - - Date start = ti.getStartTime(); - Date end = ti.getStopTime(); + Date[] ti = prepareTimeInterval(dt); - if (end == null) { - logger.warn("TimeInterval has no stop time set!"); - - end = new Date(); - } - - Timerange t = new Timerange(ti.getStartTime(),ti.getStopTime()); + Timerange t = new Timerange(ti[0] ,ti[1]); double w; double q; if (mode == MODE_W) { - w = value; - q = findValueForW(dt, w); + w = value; + q = findValueForW(dt, w); if (Double.isNaN(q)) { logger.warn("Cannot find Q for W: " + w); - addProblem("cannot.find.hist.q.for.w", w, start, end); + addProblem("cannot.find.hist.q.for.w", w, ti[0], ti[1]); continue; } + + diff = ref-q; } else { - q = value; - w = findValueForQ(dt, q); + q = value; + w = findValueForQ(dt, q); + diff = ref-w; } - if (debug) { - logger.debug("Q=" + q + " | W=" + w); - } + logger.debug("Q=" + q + " | W=" + w + " | Ref = " + ref); if (wqt == null) { wqt = new HistoricalWQTimerange(name); } - wqt.add(w, q, ref-value, t); + wqt.add(w, q, diff, t); } if (wqt != null) { @@ -284,6 +265,22 @@ } + protected Date[] prepareTimeInterval(DischargeTable dt) { + TimeInterval ti = dt.getTimeInterval(); + + Date start = ti.getStartTime(); + Date end = ti.getStopTime(); + + if (end == null) { + logger.warn("TimeInterval has no stop time set!"); + + end = new Date(); + } + + return new Date[] { start, end }; + } + + protected double findValueForW(DischargeTable dt, double w) { double[][] vs = DischargeTables.loadDischargeTableValues(dt,SCALE,true); return DischargeTables.getQForW(vs, w);