Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java @ 9309:9a9f076d5716
Work on U-Info salix line calculation
author | mschaefer |
---|---|
date | Wed, 25 Jul 2018 19:29:25 +0200 |
parents | 385b52ccde23 |
children | 72b3270e1568 |
comparison
equal
deleted
inserted
replaced
9308:9055afc19ec6 | 9309:9a9f076d5716 |
---|---|
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the | 7 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
8 * documentation coming with Dive4Elements River for details. | 8 * documentation coming with Dive4Elements River for details. |
9 */ | 9 */ |
10 package org.dive4elements.river.artifacts.uinfo.salix; | 10 package org.dive4elements.river.artifacts.uinfo.salix; |
11 | 11 |
12 import java.util.ArrayList; | |
12 import java.util.Iterator; | 13 import java.util.Iterator; |
14 import java.util.List; | |
13 import java.util.Map; | 15 import java.util.Map; |
16 import java.util.NavigableMap; | |
17 import java.util.TreeMap; | |
14 | 18 |
15 import org.apache.commons.lang.math.DoubleRange; | 19 import org.apache.commons.lang.math.DoubleRange; |
16 import org.dive4elements.artifacts.CallContext; | 20 import org.dive4elements.artifacts.CallContext; |
21 import org.dive4elements.river.artifacts.access.RangeAccess; | |
17 import org.dive4elements.river.artifacts.model.Calculation; | 22 import org.dive4elements.river.artifacts.model.Calculation; |
18 import org.dive4elements.river.artifacts.model.CalculationResult; | 23 import org.dive4elements.river.artifacts.model.CalculationResult; |
19 import org.dive4elements.river.artifacts.resources.Resources; | 24 import org.dive4elements.river.artifacts.resources.Resources; |
20 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider; | 25 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider; |
21 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; | 26 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; |
22 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; | 27 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; |
23 import org.dive4elements.river.artifacts.uinfo.UINFOArtifact; | 28 import org.dive4elements.river.artifacts.uinfo.UINFOArtifact; |
29 import org.dive4elements.river.artifacts.uinfo.salix.SalixLineAccess.ScenarioType; | |
24 import org.dive4elements.river.model.River; | 30 import org.dive4elements.river.model.River; |
25 | 31 |
26 /** | 32 /** |
27 * @author Domenico Nardi Tironi | 33 * @author Domenico Nardi Tironi |
28 * | 34 * |
44 final SalixLineAccess accessSalix = new SalixLineAccess(uinfo); | 50 final SalixLineAccess accessSalix = new SalixLineAccess(uinfo); |
45 | 51 |
46 final River river = accessSalix.getRiver(); | 52 final River river = accessSalix.getRiver(); |
47 final RiverInfo riverInfo = new RiverInfo(river); | 53 final RiverInfo riverInfo = new RiverInfo(river); |
48 | 54 |
49 final DoubleRange range = accessSalix.getRange(); | 55 // final DoubleRange range = accessSalix.getRange(); |
50 final boolean useScenario = accessSalix.getUseScenario(); | 56 // final boolean useScenario = accessSalix.getUseScenario(); |
51 final String selectedScenario = accessSalix.getScenario(); | 57 // final String selectedScenario = accessSalix.getScenario(); |
52 final Double fromPart = accessSalix.getFromPart(); | 58 // final Double fromPart = accessSalix.getFromPart(); |
53 final Double toPart = accessSalix.getToPart(); | 59 // final Double toPart = accessSalix.getToPart(); |
54 | 60 // |
55 final boolean useSCenario = accessSalix.getUseScenario(); | 61 // final boolean useSCenario = accessSalix.getUseScenario(); |
56 final String scenario = accessSalix.getScenario(); | 62 // final String scenario = accessSalix.getScenario(); |
57 // calculation_mode | 63 // calculation_mode |
58 // ld_from , ld_to | 64 // ld_from , ld_to |
59 // use_scenario (boolean) | 65 // use_scenario (boolean) |
60 // ld_from_part; ld_to_part | 66 // ld_from_part; ld_to_part |
61 // scenario_selection (mögliche Werte:"scenarioType.option1" "scenarioType.option2" "scenarioType.option3" | 67 // scenario_selection (mögliche Werte:"scenarioType.option1" "scenarioType.option2" "scenarioType.option3" |
62 final RiverInfoProvider riverInfoProvider = RiverInfoProvider.forRange(this.context, river, range); | 68 final RiverInfoProvider riverInfoProvider = RiverInfoProvider.forRange(this.context, river, accessSalix.getRange()); |
63 | 69 |
64 // FIXME: real calculation | 70 // FIXME: real calculation |
65 | 71 |
66 final SalixLineCalculationResults results = new SalixLineCalculationResults(calcModeLabel, user, riverInfo, range); | 72 final SalixLineCalculationResults results = new SalixLineCalculationResults(calcModeLabel, user, riverInfo, accessSalix.getRange()); |
67 | 73 |
68 final SalixLineCalculator calculator = new SalixLineCalculator(this.context, riverInfoProvider); | 74 final SalixLineCalculator calculator = new SalixLineCalculator(this.context, riverInfoProvider); |
69 calculator.execute(problems, uinfo, results); | 75 final NavigableMap<Double, List<Double>> rangeScenarios = buildRangeScenarios(accessSalix); |
76 | |
77 calculator.execute(problems, uinfo, rangeScenarios, accessSalix.getScenario(), results); | |
70 | 78 |
71 // final Collection<ResultRow> rows = new ArrayList<>(); | 79 // final Collection<ResultRow> rows = new ArrayList<>(); |
72 // SalixLineCalculationNoScenarioResult result = null; // verzweigung etwas ungünstig. möglicherweise auch die | 80 // SalixLineCalculationNoScenarioResult result = null; // verzweigung etwas ungünstig. möglicherweise auch die |
73 // Abstraktion. ist erstmal nur ne idee | 81 // Abstraktion. ist erstmal nur ne idee |
74 // final ResultRow row1 = ResultRow.create(). // | 82 // final ResultRow row1 = ResultRow.create(). // |
141 // result = new SalixLineCalculationHistoricalResult("Ergebnis 1 historical test", null, rows); | 149 // result = new SalixLineCalculationHistoricalResult("Ergebnis 1 historical test", null, rows); |
142 // } | 150 // } |
143 // } | 151 // } |
144 // results.addResult(result, problems); | 152 // results.addResult(result, problems); |
145 return new CalculationResult(results, problems); | 153 return new CalculationResult(results, problems); |
154 } | |
155 | |
156 /** | |
157 * Build a map of delta-Ws by km-range for the selected scenario | |
158 */ | |
159 private NavigableMap<Double, List<Double>> buildRangeScenarios(final SalixLineAccess access) { | |
160 final NavigableMap<Double, List<Double>> rangeScenarios = new TreeMap<>(); | |
161 if (access.getScenario() == ScenarioType.REGIONAL) | |
162 fillRangeScenarios(rangeScenarios, access, access.getFromPart().doubleValue(), access.getToPart().doubleValue(), | |
163 access.getRegionalScenarioIntegers()); | |
164 else if (access.getScenario() == ScenarioType.SUPRAREGIONAL) | |
165 fillRangeScenarios(rangeScenarios, access.getSupraRegionalString()); | |
166 // TODO else if (access.getScenario().equals(ScenarioType.HISTORICAL.getKey())) | |
167 // historisches Szenario aus MSH etc. | |
168 else | |
169 fillRangeScenarios(rangeScenarios, access); | |
170 return rangeScenarios; | |
171 } | |
172 | |
173 /** | |
174 * Fill a map of delta-Ws with only one 0-delta for the whole calc range (no scenario) | |
175 */ | |
176 private void fillRangeScenarios(final NavigableMap<Double, List<Double>> rangeScenarios, final RangeAccess calcRange) { | |
177 final List<Double> nulls = new ArrayList<>(); | |
178 nulls.add(0.0); | |
179 rangeScenarios.put(Double.valueOf(calcRange.getLowerKm() - 0.0001), nulls); | |
180 } | |
181 | |
182 /** | |
183 * Fill a map of delta-Ws by km-range from the regional scenario input data | |
184 */ | |
185 private void fillRangeScenarios(final NavigableMap<Double, List<Double>> rangeScenarios, final RangeAccess calcRange, final double partFrom, | |
186 final double partTo, final int[] deltaWs) { | |
187 final List<Double> nulls = new ArrayList<>(); | |
188 final List<Double> dwsm = new ArrayList<>(); | |
189 for (int i = 0; i <= deltaWs.length - 1; i++) { | |
190 nulls.add(0.0); | |
191 dwsm.add(deltaWs[i] / 100.0); | |
192 } | |
193 rangeScenarios.put(Double.valueOf(calcRange.getLowerKm() - 0.0001), nulls); | |
194 rangeScenarios.put(Double.valueOf(partFrom - 0.0001), dwsm); | |
195 rangeScenarios.put(Double.valueOf(partTo + 0.0001), nulls); | |
196 } | |
197 | |
198 /** | |
199 * Fill a map of delta-Ws by km-range from the supraregional scenario input data | |
200 * (the zones input by the user cover the calc range completely) | |
201 */ | |
202 private void fillRangeScenarios(final NavigableMap<Double, List<Double>> rangeScenarios, final String zones) { | |
203 final List<SalixZone> parts = SalixZone.parse(zones); | |
204 for (final SalixZone part : parts) { | |
205 final List<Double> dwsm = new ArrayList<>(); | |
206 dwsm.add(part.getDwsplValue() / 100.0); | |
207 rangeScenarios.put(Double.valueOf(part.getFromKm().doubleValue() - 0.0001), dwsm); | |
208 } | |
146 } | 209 } |
147 | 210 |
148 private SalixScenario findScenarioByKm(final double km, final Map<DoubleRange, SalixScenario> rangeScenarioMap) { | 211 private SalixScenario findScenarioByKm(final double km, final Map<DoubleRange, SalixScenario> rangeScenarioMap) { |
149 final Iterator<DoubleRange> rangeIterator = rangeScenarioMap.keySet().iterator(); | 212 final Iterator<DoubleRange> rangeIterator = rangeScenarioMap.keySet().iterator(); |
150 while (rangeIterator.hasNext()) { | 213 while (rangeIterator.hasNext()) { |