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();

http://dive4elements.wald.intevation.org