Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java @ 3310:8af1111af180
SQ relation: More fixes.
flys-artifacts/trunk@4999 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 13 Jul 2012 15:41:56 +0000 |
parents | b24920235944 |
children | 816ceb0418b9 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java Fri Jul 13 15:04:36 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java Fri Jul 13 15:41:56 2012 +0000 @@ -12,6 +12,7 @@ import de.intevation.flys.backend.SedDBSessionHolder; +import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; @@ -97,54 +98,58 @@ addProblem("sq.missing.sq.function"); } - // XXX: We can only produce one SQResult. - DateRange period = periods[0]; - - Measurements measurements = - MeasurementFactory.getMeasurements(river, location, period); - - if (debug) { - log.debug(measurements.toString()); - } - - SQFractionResult [] fractionResults = - new SQFractionResult[SQResult.NUMBER_FRACTIONS]; String [] parameterNames = function.getParameterNames(); - Fitting fitting = new Fitting(function, outliers); - for (int i = 0; i < fractionResults.length; ++i) { - List<SQ> sqs = measurements.getSQs(i); - - SQFractionResult fractionResult; + List<SQResult> results = new ArrayList<SQResult>(periods.length); - if (!fitting.fit(sqs)) { - // TODO: i18n - addProblem("sq.fitting.failed." + i); - fractionResult = new SQFractionResult(); - } - else { - Parameters parameters = createParameters(parameterNames); - int row = parameters.newRow(); - double [] coeffs = fitting.getParameters(); - for (int j = 0; j < parameterNames.length; ++j) { - parameters.set(row, parameterNames[j], coeffs[j]); - } - parameters.set(row, "chi_sqr", fitting.getChiSqr()); - parameters.set(row, "std_dev", fitting.getStandardDeviation()); + Fitting fitting = new Fitting(function, outliers); - fractionResult = new SQFractionResult( - parameters, - fitting.getRemaining(), - fitting.getOutliers()); + for (DateRange period: periods) { + Measurements measurements = + MeasurementFactory.getMeasurements(river, location, period); + + if (debug) { + log.debug(measurements.toString()); } - fractionResults[i] = fractionResult; + SQFractionResult [] fractionResults = + new SQFractionResult[SQResult.NUMBER_FRACTIONS]; - fitting.reset(); + for (int i = 0; i < fractionResults.length; ++i) { + List<SQ> sqs = measurements.getSQs(i); + + SQFractionResult fractionResult; + + if (!fitting.fit(sqs)) { + // TODO: i18n + addProblem("sq.fitting.failed." + i); + fractionResult = new SQFractionResult(); + } + else { + Parameters parameters = createParameters(parameterNames); + int row = parameters.newRow(); + double [] coeffs = fitting.getParameters(); + for (int j = 0; j < parameterNames.length; ++j) { + parameters.set(row, parameterNames[j], coeffs[j]); + } + parameters.set(row, "chi_sqr", fitting.getChiSqr()); + parameters.set(row, "std_dev", fitting.getStandardDeviation()); + + fractionResult = new SQFractionResult( + parameters, + fitting.getRemaining(), + fitting.getOutliers()); + } + fitting.reset(); + fractionResults[i] = fractionResult; + } + results.add(new SQResult(fractionResults)); } - return new CalculationResult(new SQResult(fractionResults), this); + return new CalculationResult( + results.toArray(new SQResult[results.size()]), + this); } public static final Parameters createParameters(String [] names) {