Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculation.java @ 9105:ae3565385e6a
Some finetuning an Tkh calculation, preparation for wsp calculation with bed height stations only
author | gernotbelger |
---|---|
date | Tue, 29 May 2018 11:36:42 +0200 |
parents | 5488166d32ee |
children | 0a19a79663dd |
comparison
equal
deleted
inserted
replaced
9104:07d51fd4864c | 9105:ae3565385e6a |
---|---|
16 import java.util.Map; | 16 import java.util.Map; |
17 import java.util.Map.Entry; | 17 import java.util.Map.Entry; |
18 import java.util.Set; | 18 import java.util.Set; |
19 import java.util.TreeSet; | 19 import java.util.TreeSet; |
20 | 20 |
21 import org.apache.commons.lang.ArrayUtils; | |
21 import org.apache.commons.lang.math.DoubleRange; | 22 import org.apache.commons.lang.math.DoubleRange; |
22 import org.apache.commons.lang.math.NumberRange; | 23 import org.apache.commons.lang.math.NumberRange; |
23 import org.dive4elements.artifacts.CallContext; | 24 import org.dive4elements.artifacts.CallContext; |
24 import org.dive4elements.river.artifacts.WINFOArtifact; | 25 import org.dive4elements.river.artifacts.WINFOArtifact; |
25 import org.dive4elements.river.artifacts.common.ResultRow; | 26 import org.dive4elements.river.artifacts.common.ResultRow; |
65 final Calculation problems = new Calculation(); | 66 final Calculation problems = new Calculation(); |
66 | 67 |
67 /* find relevant bed-heights */ | 68 /* find relevant bed-heights */ |
68 final List<BedHeight> defaultBedHeights = new DefaultBedHeights(river).getBedHeights(problems); | 69 final List<BedHeight> defaultBedHeights = new DefaultBedHeights(river).getBedHeights(problems); |
69 final Collection<BedHeightsFinder> bedHeights = BedHeightsFinder.createTkhBedHeights(problems, calcRange, defaultBedHeights); | 70 final Collection<BedHeightsFinder> bedHeights = BedHeightsFinder.createTkhBedHeights(problems, calcRange, defaultBedHeights); |
71 final double[] stations = extractStations(bedHeights); | |
70 | 72 |
71 /* misuse winfo-artifact to calculate waterlevels in the same way */ | 73 /* misuse winfo-artifact to calculate waterlevels in the same way */ |
72 final WINFOArtifact winfo = new WinfoArtifactWrapper(sinfo); | 74 final WINFOArtifact winfo = new WinfoArtifactWrapper(sinfo); |
73 | 75 |
74 /* calculate waterlevels */ | 76 /* calculate waterlevels */ |
75 final WQKms[] kms = calculateWaterlevels(winfo, problems); | 77 final WQKms[] kms = calculateWaterlevels(winfo, stations, problems); |
76 | 78 |
77 final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange); | 79 final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange); |
78 | 80 |
79 final String user = CalculationUtils.findArtifactUser(this.context, sinfo); | 81 final String user = CalculationUtils.findArtifactUser(this.context, sinfo); |
80 | 82 |
93 final TkhCalculationResult result = calculateResult(calcRange, allStations, infoProvider, wqKms, bedHeights, descBuilder, problems); | 95 final TkhCalculationResult result = calculateResult(calcRange, allStations, infoProvider, wqKms, bedHeights, descBuilder, problems); |
94 results.addResult(result, problems); | 96 results.addResult(result, problems); |
95 } | 97 } |
96 | 98 |
97 return new CalculationResult(results, problems); | 99 return new CalculationResult(results, problems); |
100 } | |
101 | |
102 private double[] extractStations(final Collection<BedHeightsFinder> bedHeights) { | |
103 | |
104 final Set<Double> allStations = new TreeSet<>(); | |
105 | |
106 for (final BedHeightsFinder bedHeight : bedHeights) | |
107 allStations.addAll(bedHeight.getStations()); | |
108 | |
109 return ArrayUtils.toPrimitive(allStations.toArray(new Double[allStations.size()])); | |
98 } | 110 } |
99 | 111 |
100 /** | 112 /** |
101 * Calculation steps are simply the union of all stations of all involved bed-height datasets | 113 * Calculation steps are simply the union of all stations of all involved bed-height datasets |
102 */ | 114 */ |
110 } | 122 } |
111 | 123 |
112 return allStations; | 124 return allStations; |
113 } | 125 } |
114 | 126 |
115 private WQKms[] calculateWaterlevels(final WINFOArtifact winfo, final Calculation problems) { | 127 private WQKms[] calculateWaterlevels(final WINFOArtifact winfo, final double[] stations, final Calculation problems) { |
128 | |
129 // FIXME: we take kms from step, but instead we would like to take kms from bedheights | |
130 // FIXME: this will definitely break the serialization of the winfo artifact | |
116 | 131 |
117 final CalculationResult waterlevelData = winfo.getWaterlevelData(this.context); | 132 final CalculationResult waterlevelData = winfo.getWaterlevelData(this.context); |
118 | 133 |
119 /* copy all problems */ | 134 /* copy all problems */ |
120 final Calculation winfoProblems = waterlevelData.getReport(); | 135 final Calculation winfoProblems = waterlevelData.getReport(); |