comparison 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
comparison
equal deleted inserted replaced
3309:fd3243d892a9 3310:8af1111af180
10 import de.intevation.flys.artifacts.model.DateRange; 10 import de.intevation.flys.artifacts.model.DateRange;
11 import de.intevation.flys.artifacts.model.Parameters; 11 import de.intevation.flys.artifacts.model.Parameters;
12 12
13 import de.intevation.flys.backend.SedDBSessionHolder; 13 import de.intevation.flys.backend.SedDBSessionHolder;
14 14
15 import java.util.ArrayList;
15 import java.util.List; 16 import java.util.List;
16 17
17 import org.apache.log4j.Logger; 18 import org.apache.log4j.Logger;
18 19
19 public class SQRelationCalculation extends Calculation { 20 public class SQRelationCalculation extends Calculation {
95 log.error("No '" + SQ_FUNCTION_NAME + "' function found."); 96 log.error("No '" + SQ_FUNCTION_NAME + "' function found.");
96 // TODO: i18n 97 // TODO: i18n
97 addProblem("sq.missing.sq.function"); 98 addProblem("sq.missing.sq.function");
98 } 99 }
99 100
100 // XXX: We can only produce one SQResult.
101 DateRange period = periods[0];
102
103 Measurements measurements =
104 MeasurementFactory.getMeasurements(river, location, period);
105
106 if (debug) {
107 log.debug(measurements.toString());
108 }
109
110 SQFractionResult [] fractionResults =
111 new SQFractionResult[SQResult.NUMBER_FRACTIONS];
112 101
113 String [] parameterNames = function.getParameterNames(); 102 String [] parameterNames = function.getParameterNames();
114 103
104 List<SQResult> results = new ArrayList<SQResult>(periods.length);
105
115 Fitting fitting = new Fitting(function, outliers); 106 Fitting fitting = new Fitting(function, outliers);
116 for (int i = 0; i < fractionResults.length; ++i) {
117 List<SQ> sqs = measurements.getSQs(i);
118 107
119 SQFractionResult fractionResult; 108 for (DateRange period: periods) {
109 Measurements measurements =
110 MeasurementFactory.getMeasurements(river, location, period);
120 111
121 if (!fitting.fit(sqs)) { 112 if (debug) {
122 // TODO: i18n 113 log.debug(measurements.toString());
123 addProblem("sq.fitting.failed." + i);
124 fractionResult = new SQFractionResult();
125 }
126 else {
127 Parameters parameters = createParameters(parameterNames);
128 int row = parameters.newRow();
129 double [] coeffs = fitting.getParameters();
130 for (int j = 0; j < parameterNames.length; ++j) {
131 parameters.set(row, parameterNames[j], coeffs[j]);
132 }
133 parameters.set(row, "chi_sqr", fitting.getChiSqr());
134 parameters.set(row, "std_dev", fitting.getStandardDeviation());
135
136 fractionResult = new SQFractionResult(
137 parameters,
138 fitting.getRemaining(),
139 fitting.getOutliers());
140 } 114 }
141 115
142 fractionResults[i] = fractionResult; 116 SQFractionResult [] fractionResults =
117 new SQFractionResult[SQResult.NUMBER_FRACTIONS];
143 118
144 fitting.reset(); 119 for (int i = 0; i < fractionResults.length; ++i) {
120 List<SQ> sqs = measurements.getSQs(i);
121
122 SQFractionResult fractionResult;
123
124 if (!fitting.fit(sqs)) {
125 // TODO: i18n
126 addProblem("sq.fitting.failed." + i);
127 fractionResult = new SQFractionResult();
128 }
129 else {
130 Parameters parameters = createParameters(parameterNames);
131 int row = parameters.newRow();
132 double [] coeffs = fitting.getParameters();
133 for (int j = 0; j < parameterNames.length; ++j) {
134 parameters.set(row, parameterNames[j], coeffs[j]);
135 }
136 parameters.set(row, "chi_sqr", fitting.getChiSqr());
137 parameters.set(row, "std_dev", fitting.getStandardDeviation());
138
139 fractionResult = new SQFractionResult(
140 parameters,
141 fitting.getRemaining(),
142 fitting.getOutliers());
143 }
144 fitting.reset();
145 fractionResults[i] = fractionResult;
146 }
147 results.add(new SQResult(fractionResults));
145 } 148 }
146 149
147 return new CalculationResult(new SQResult(fractionResults), this); 150 return new CalculationResult(
151 results.toArray(new SQResult[results.size()]),
152 this);
148 } 153 }
149 154
150 public static final Parameters createParameters(String [] names) { 155 public static final Parameters createParameters(String [] names) {
151 156
152 String [] columns = new String[names.length + 2]; 157 String [] columns = new String[names.length + 2];

http://dive4elements.wald.intevation.org