# HG changeset patch # User Sascha L. Teichmann # Date 1338804800 0 # Node ID 05a3fe8800b33840debccf6c7cc4fda9fcfb9021 # Parent 4dda67a893da23397dc9e1d5c69828be24352e38 FixA: Store Chi^2 of fitting into result, too. flys-artifacts/trunk@4575 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 4dda67a893da -r 05a3fe8800b3 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Thu May 31 16:32:03 2012 +0000 +++ b/flys-artifacts/ChangeLog Mon Jun 04 10:13:20 2012 +0000 @@ -1,3 +1,11 @@ +2012-06-04 Sascha L. Teichmann + + * src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java: + Store Chi^2 of fitting into result, too. + + * src/main/java/de/intevation/flys/artifacts/model/Parameters.java: + Added indexed set method. + 2012-05-31 Sascha L. Teichmann * src/main/java/de/intevation/flys/artifacts/math/fitting/Function.java: diff -r 4dda67a893da -r 05a3fe8800b3 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Parameters.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Parameters.java Thu May 31 16:32:03 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Parameters.java Mon Jun 04 10:13:20 2012 +0000 @@ -49,8 +49,8 @@ return N; } - public double get(int i, int index) { - return columns[index].getQuick(i); + public double get(int row, int index) { + return columns[index].getQuick(row); } public double get(int i, String columnName) { @@ -60,6 +60,10 @@ : Double.NaN; } + public void set(int row, int index, double value) { + columns[index].setQuick(row, value); + } + public void set(int i, String columnName, double value) { int idx = columnIndex(columnName); if (idx >= 0) { diff -r 4dda67a893da -r 05a3fe8800b3 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java Thu May 31 16:32:03 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java Mon Jun 04 10:13:20 2012 +0000 @@ -25,6 +25,7 @@ import de.intevation.flys.utils.DateAverager; import de.intevation.flys.utils.DoubleUtil; +import de.intevation.flys.utils.Pair; import java.util.ArrayList; import java.util.Date; @@ -197,6 +198,9 @@ log.debug("number of kms: " + kms.length); } + int kmIndex = results.columnIndex("km"); + int chiSqrIndex = results.columnIndex("chi_sqr"); + int numFailed = 0; for (int i = 0; i < kms.length; ++i) { @@ -209,16 +213,20 @@ // TODO: mark as interpolated. } + Pair fitResult = fit(func, km, ws, qs); + // TODO: Do preprocessing here! - double [] parameters = fit(func, km, ws, qs); - if (parameters == null) { // Problems are reported already. + if (fitResult == null) { // Problems are reported already. ++numFailed; continue; } int row = results.newRow(); - results.set(row, "km", km); + results.set(row, kmIndex, km); + results.set(row, chiSqrIndex, fitResult.getB()); + + double [] parameters = fitResult.getA(); for (int j = 0; j < parameters.length; ++j) { if (Double.isNaN(parameters[j])) { invalid = true; @@ -227,7 +235,6 @@ results.set(row, parameterNames[j], parameters[j]); } } - // TODO: Calculate statistics, too! } if (debug) { @@ -574,14 +581,14 @@ } protected static String [] createColumnNames(String [] parameters) { - String [] result = new String[parameters.length + 1]; + String [] result = new String[parameters.length + 2]; result[0] = "km"; - // TODO: Add statistic columns, too. - System.arraycopy(parameters, 0, result, 1, parameters.length); + result[0] = "chi_sqr"; + System.arraycopy(parameters, 0, result, 2, parameters.length); return result; } - protected double [] fit( + protected Pair fit( Function function, double km, double [] ws, @@ -597,7 +604,11 @@ } try { - return cf.fit(function, function.getInitialGuess()); + double [] parameters = + cf.fit(function, function.getInitialGuess()); + double chiSqr = lmo.getChiSquare(); + + return new Pair(parameters, chiSqr); } catch (MathException me) { log.warn(me, me);