Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java @ 2792:fe987587ebc9
Merged revisions 4539-4540,4543,4545-4546 via svnmerge from
file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-artifacts/trunk
........
r4539 | teichmann | 2012-05-27 20:02:13 +0200 (So, 27 Mai 2012) | 1 line
FixA: Added forgotten csv/report facets/generators to conf.
........
r4540 | teichmann | 2012-05-27 20:11:31 +0200 (So, 27 Mai 2012) | 1 line
FixA: Fixed class cast bug in report facet.
........
r4543 | teichmann | 2012-05-28 20:35:01 +0200 (Mo, 28 Mai 2012) | 1 line
FixA: Added facet to return delta w/t as CSV
........
r4545 | teichmann | 2012-05-28 22:59:27 +0200 (Mo, 28 Mai 2012) | 1 line
FixA: Made Delta W/t calculation finally work
........
r4546 | teichmann | 2012-05-28 23:34:24 +0200 (Mo, 28 Mai 2012) | 1 line
FixA: corrected fitting (Q->W instead W->Q).
........
flys-artifacts/tags/2.7@4547 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 29 May 2012 04:58:29 +0000 |
parents | 063b784b60b4 |
children | 3cda41b5eb23 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java Sun May 27 13:39:30 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java Tue May 29 04:58:29 2012 +0000 @@ -125,6 +125,8 @@ public CalculationResult calculate() { + boolean debug = log.isDebugEnabled(); + FixingsOverview overview = FixingsOverviewFactory.getOverview(river); @@ -173,7 +175,7 @@ return new CalculationResult(this); } - double [] kms = DoubleUtil.explode(from, to, step); + double [] kms = DoubleUtil.explode(from, to, step / 1000.0); double [] ws = new double[dataColumns.size()]; double [] qs = new double[ws.length]; @@ -185,6 +187,12 @@ boolean invalid = false; + if (debug) { + log.debug("number of kms: " + kms.length); + } + + int numFailed = 0; + for (int i = 0; i < kms.length; ++i) { double km = kms[i]; @@ -198,6 +206,7 @@ // TODO: Do preprocessing here! double [] parameters = fit(func, km, ws, qs); if (parameters == null) { // Problems are reported already. + ++numFailed; continue; } @@ -215,6 +224,11 @@ // TODO: Calculate statistics, too! } + if (debug) { + log.debug("success: " + (kms.length - numFailed)); + log.debug("failed: " + numFailed); + } + if (invalid) { // TODO: i18n addProblem("fix.invalid.values"); @@ -237,6 +251,8 @@ FixingsOverview overview, Parameters results ) { + boolean debug = log.isDebugEnabled(); + DeltaWTsKM deltaWTsKM = new DeltaWTsKM(results.size()); Column [][] analysisColumns = getAnalysisColumns(overview); @@ -249,8 +265,10 @@ double [] ow = new double[1]; + int kmIdx = results.columnIndex("km"); + for (int i = 0, N = results.size(); i < N; ++i) { - double km = results.get(i, "km"); + double km = results.get(i, kmIdx); results.get(i, parameterIndices, parameterValues); DeltaWTsKM.KM dwtkm = new DeltaWTsKM.KM(km); @@ -264,18 +282,24 @@ for (int j = 0; j < analysisColumns.length; ++j) { Column [] periodColumns = analysisColumns[j]; + int failedQ = 0; + int failedW = 0; + int failedC = 0; + for (int k = 0; k < periodColumns.length; ++k) { Column pc = periodColumns[k]; // Q from real data. double q = pc.data.getQ(km); if (Double.isNaN(q)) { + ++failedQ; continue; } // Calculate W from function. double nw = instance.value(q); if (Double.isNaN(nw)) { + ++failedC; continue; } @@ -283,10 +307,11 @@ pc.data.getW(km, ow); if (Double.isNaN(ow[0])) { + ++failedW; continue; } - double deltaW = ow[0] - nw; + double deltaW = (ow[0] - nw)*100.0; // in cm DeltaWT deltaWT = new DeltaWT( deltaW, @@ -295,6 +320,13 @@ dwtkm.add(deltaWT); } + if (debug) { + log.debug("failed W: " + failedW); + log.debug("failed Q: " + failedQ); + log.debug("failed C: " + failedC); + log.debug("input size: " + periodColumns.length); + log.debug("outpt size: " + dwtkm.size()); + } } } @@ -321,6 +353,11 @@ /** Fetch meta and data columns for analysis periods. */ protected Column [][] getAnalysisColumns(FixingsOverview overview) { + boolean debug = log.isDebugEnabled(); + if (debug) { + log.debug("number analysis periods: " + analysisPeriods.length); + } + Column columns [][] = new Column[analysisPeriods.length][]; Range range = new Range(from, to); @@ -346,6 +383,10 @@ List<Fixing.Column> metaCols = overview.filter(range, filter); + if (debug) { + log.debug("number of filtered columns: " + metaCols.size()); + } + ArrayList<Column> cols = new ArrayList<Column>(metaCols.size()); // Only use columns which have data. @@ -355,6 +396,10 @@ cols.add(new Column(meta, data)); } } + + if (debug) { + log.debug("failed loading: " + (metaCols.size()-cols.size())); + } columns[i] = cols.toArray(new Column[cols.size()]); } @@ -378,29 +423,9 @@ LevenbergMarquardtOptimizer lmo = new LevenbergMarquardtOptimizer(); CurveFitter cf = new CurveFitter(lmo); - boolean missingWs = false; - boolean missingQs = false; - for (int i = 0; i < ws.length; ++i) { - boolean ignore = false; - if (Double.isNaN(ws[i])) { - ignore = true; - if (!missingWs) { - missingWs = true; - // TODO: i18n - addProblem(km, "fix.missing.w"); - } - } - if (Double.isNaN(qs[i])) { - ignore = true; - if (!missingQs) { - missingQs = true; - // TODO: i18n - addProblem(km, "fix.missing.q"); - } - } - if (!ignore) { - cf.addObservedPoint(ws[i], qs[i]); + if (!Double.isNaN(ws[i]) && !Double.isNaN(qs[i])) { + cf.addObservedPoint(qs[i], ws[i]); } } @@ -408,6 +433,7 @@ return cf.fit(function, function.getInitialGuess()); } catch (MathException me) { + log.warn(me, me); addProblem(km, "fix.fitting.failed"); }