Mercurial > dive4elements > river
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]; |