comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixRealizingCalculation.java @ 3449:fc351f12b906

FixA: Vollmer. Calculated the Q -> Ws. TODO: Produce result. flys-artifacts/trunk@5112 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 23 Jul 2012 15:24:14 +0000
parents e111902834d3
children 22790758b132
comparison
equal deleted inserted replaced
3448:700d09ca5dc8 3449:fc351f12b906
4 4
5 import de.intevation.flys.artifacts.math.fitting.Function; 5 import de.intevation.flys.artifacts.math.fitting.Function;
6 6
7 import de.intevation.flys.artifacts.model.CalculationResult; 7 import de.intevation.flys.artifacts.model.CalculationResult;
8 import de.intevation.flys.artifacts.model.FixingsOverview; 8 import de.intevation.flys.artifacts.model.FixingsOverview;
9 import de.intevation.flys.artifacts.model.RiverFactory;
9 import de.intevation.flys.artifacts.model.Segment; 10 import de.intevation.flys.artifacts.model.Segment;
11 import de.intevation.flys.artifacts.model.WQKms;
12 import de.intevation.flys.artifacts.model.Parameters;
13
14 import de.intevation.flys.model.River;
10 15
11 import java.util.List; 16 import java.util.List;
12 17
13 import org.apache.log4j.Logger; 18 import org.apache.log4j.Logger;
14 19
38 if (segments == null || segments.isEmpty()) { 43 if (segments == null || segments.isEmpty()) {
39 // TODO: i18n 44 // TODO: i18n
40 addProblem("fix.realize.missing.segments"); 45 addProblem("fix.realize.missing.segments");
41 } 46 }
42 47
48 River r = RiverFactory.getRiver(river);
49
50 if (r == null) {
51 // TODO: i18n
52 addProblem("fix.no.such.river");
53 }
54
43 if (!hasProblems()) { 55 if (!hasProblems()) {
44 this.isQ = isQ; 56 this.isQ = isQ;
45 this.segments = segments; 57 this.segments = segments;
58
59 // Convert from W to Q
60 Segment.setReferencePointConvertQ(segments, r, isQ, this);
46 } 61 }
47 } 62 }
48 63
49 @Override 64 @Override
50 protected CalculationResult innerCalculate( 65 protected CalculationResult innerCalculate(
51 FixingsOverview overview, 66 FixingsOverview overview,
52 Function func 67 Function func
53 ) { 68 ) {
54 // TODO: Implement me! 69 FitResult fitResult = doFitting(overview, func);
70
71 if (fitResult == null) {
72 return new CalculationResult(this);
73 }
74
75 Segment segment = segments.get(0);
76 int numResults = segment.numValues();
77
78 WQKms [] results = new WQKms[numResults];
79 for (int i = 0; i < results.length; ++i) {
80 results[i] = new WQKms();
81 }
82
83 Parameters parameters = fitResult.getParameters();
84
85 int kmIndex = parameters.columnIndex("km");
86 int [] parameterIndices =
87 parameters.columnIndices(func.getParameterNames());
88
89 double [] parameterValues = new double[parameterIndices.length];
90
91 for (int row = 0, R = parameters.size(); row < R; ++row) {
92 double km = parameters.get(row, kmIndex);
93
94 if (!segment.inside(km)) {
95 Segment nextSeg = null;
96 for (Segment seg: segments) {
97 if (seg.inside(km)) {
98 nextSeg = seg;
99 break;
100 }
101 }
102 if (nextSeg == null) {
103 // TODO: i18n
104 addProblem(km, "fix.cannot.find.segment");
105 continue;
106 }
107 segment = nextSeg;
108 }
109
110 parameters.get(row, parameterIndices, parameterValues);
111
112 de.intevation.flys.artifacts.math.Function instance =
113 func.instantiate(parameterValues);
114
115 double [] values = segment.getValues();
116 for (int i = 0; i < numResults; ++i) {
117 double q = values[i];
118 double w = instance.value(q);
119
120 if (Double.isNaN(w)) {
121 // TODO: i18n
122 addProblem(km, "fix.cannot.calculate.function", q);
123 }
124 else {
125 results[i].add(w, q, km);
126 }
127 }
128 }
129
130 // name the curves
131 for (int i = 0; i < results.length; ++i) {
132 results[i].setName(createName(i));
133 }
134
55 return new CalculationResult(this); 135 return new CalculationResult(this);
136 }
137
138 protected String createName(int index) {
139 // TODO: i18n
140 StringBuilder sb = new StringBuilder(isQ ? "Q" : "W");
141 sb.append(" benutzerdefiniert (");
142 for (int i = 0, N = segments.size(); i < N; ++i) {
143 if (i > 0) {
144 sb.append("; ");
145 }
146 Segment segment = segments.get(i);
147 double [] backup = segment.getBackup();
148 double [] values = segment.getValues();
149 sb.append((backup != null ? backup : values)[index]);
150 }
151 sb.append(')');
152 return sb.toString();
56 } 153 }
57 } 154 }
58 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 155 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org