Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation4.java @ 3441:bfbd478bd607
FixA: Moved Q -> W conversion code into segments to be reusable.
flys-artifacts/trunk@5104 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 23 Jul 2012 14:19:07 +0000 |
parents | cb11919cccf9 |
children | 22790758b132 |
comparison
equal
deleted
inserted
replaced
3440:fed6685692d2 | 3441:bfbd478bd607 |
---|---|
1 package de.intevation.flys.artifacts.model; | 1 package de.intevation.flys.artifacts.model; |
2 | 2 |
3 import de.intevation.flys.artifacts.math.BackJumpCorrector; | |
4 import de.intevation.flys.artifacts.math.Function; | |
5 import de.intevation.flys.artifacts.math.Identity; | |
6 import de.intevation.flys.artifacts.math.Linear; | |
7 | |
8 import de.intevation.flys.artifacts.model.WstValueTable.QPosition; | |
9 | |
10 import de.intevation.flys.model.River; | |
11 | |
12 import de.intevation.flys.utils.DoubleUtil; | |
13 | |
14 import java.util.Arrays; | |
3 import java.util.List; | 15 import java.util.List; |
4 import java.util.Arrays; | |
5 import java.util.Collections; | |
6 | |
7 import de.intevation.flys.utils.DoubleUtil; | |
8 | |
9 import de.intevation.flys.model.River; | |
10 import de.intevation.flys.model.Gauge; | |
11 import de.intevation.flys.model.DischargeTable; | |
12 | |
13 import de.intevation.flys.artifacts.model.WstValueTable.QPosition; | |
14 | |
15 import de.intevation.flys.artifacts.math.Function; | |
16 import de.intevation.flys.artifacts.math.Linear; | |
17 import de.intevation.flys.artifacts.math.Identity; | |
18 import de.intevation.flys.artifacts.math.BackJumpCorrector; | |
19 | 16 |
20 import org.apache.log4j.Logger; | 17 import org.apache.log4j.Logger; |
21 | 18 |
22 public class Calculation4 | 19 public class Calculation4 |
23 extends Calculation | 20 extends Calculation |
36 public Calculation4(List<Segment> segments, River river, boolean isQ) { | 33 public Calculation4(List<Segment> segments, River river, boolean isQ) { |
37 | 34 |
38 this.segments = segments; | 35 this.segments = segments; |
39 this.isQ = isQ; | 36 this.isQ = isQ; |
40 | 37 |
41 int numResults = -1; | 38 Segment.setReferencePointConvertQ(segments, river, isQ, this); |
42 | |
43 // assign reference points | |
44 for (Segment segment: segments) { | |
45 Gauge gauge = river.maxOverlap(segment.getFrom(), segment.getTo()); | |
46 | |
47 if (gauge == null) { | |
48 logger.warn("no gauge found. Defaults to mid point."); | |
49 segment.setReferencePoint( | |
50 0.5*(segment.getFrom()+segment.getTo())); | |
51 } | |
52 else { | |
53 double ref = gauge.getStation().doubleValue(); | |
54 logger.debug( | |
55 "reference gauge: " + gauge.getName() + | |
56 " (km " + ref + ")"); | |
57 segment.setReferencePoint(ref); | |
58 } | |
59 | |
60 double [] values = segment.values; | |
61 | |
62 if (numResults == -1) { | |
63 numResults = values.length; | |
64 } | |
65 else if (numResults != values.length) { | |
66 throw new IllegalArgumentException("wrong length of values"); | |
67 } | |
68 | |
69 // convert to Q if needed | |
70 if (!isQ && gauge != null) { | |
71 | |
72 DischargeTable dt = gauge.fetchMasterDischargeTable(); | |
73 | |
74 double [][] table = | |
75 DischargeTables.loadDischargeTableValues(dt, 1); | |
76 | |
77 // need the original values for naming | |
78 segment.backup(); | |
79 | |
80 for (int i = 0; i < values.length; ++i) { | |
81 double w = values[i] / 100.0; | |
82 double [] qs = DischargeTables.getQsForW(table, w); | |
83 if (qs.length == 0) { | |
84 logger.warn("No Qs found for W = " + values[i]); | |
85 addProblem("cannot.find.w.for.q", values[i]); | |
86 values[i] = Double.NaN; | |
87 } | |
88 else { | |
89 values[i] = qs[0]; | |
90 if (qs.length > 1) { | |
91 logger.warn( | |
92 "More than one Q found for W = " + values[i]); | |
93 } | |
94 } | |
95 } | |
96 } | |
97 } // for all segments | |
98 | |
99 Collections.sort(segments, Segment.REF_CMP); | |
100 } | 39 } |
101 | 40 |
102 public CalculationResult calculate( | 41 public CalculationResult calculate( |
103 WstValueTable table, | 42 WstValueTable table, |
104 double from, double to, double step | 43 double from, double to, double step |