comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculation.java @ 9176:1614cb14308f

Work on calculations for S-Info flood duration workflow
author mschaefer
date Mon, 25 Jun 2018 19:21:11 +0200
parents f9bb5d0a6ff3
children b4402594213b
comparison
equal deleted inserted replaced
9175:34dc0163ad2d 9176:1614cb14308f
21 import org.dive4elements.river.artifacts.model.Calculation; 21 import org.dive4elements.river.artifacts.model.Calculation;
22 import org.dive4elements.river.artifacts.model.CalculationResult; 22 import org.dive4elements.river.artifacts.model.CalculationResult;
23 import org.dive4elements.river.artifacts.model.DateRange; 23 import org.dive4elements.river.artifacts.model.DateRange;
24 import org.dive4elements.river.artifacts.resources.Resources; 24 import org.dive4elements.river.artifacts.resources.Resources;
25 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact; 25 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact;
26 import org.dive4elements.river.artifacts.sinfo.common.GaugeDischargeValuesFinder;
27 import org.dive4elements.river.artifacts.sinfo.common.GaugeMainValueNameFinder;
26 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider; 28 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
27 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; 29 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
28 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; 30 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
29 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; 31 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
30 import org.dive4elements.river.backend.utils.DateUtil; 32 import org.dive4elements.river.backend.utils.DateUtil;
31 import org.dive4elements.river.model.Gauge; 33 import org.dive4elements.river.model.Gauge;
34 import org.dive4elements.river.model.MainValueType.MainValueTypeKey;
32 import org.dive4elements.river.model.River; 35 import org.dive4elements.river.model.River;
33 import org.dive4elements.river.model.sinfo.CollisionAggregateValue; 36 import org.dive4elements.river.model.sinfo.CollisionAggregateValue;
34 import org.dive4elements.river.model.sinfo.CollisionValue; 37 import org.dive4elements.river.model.sinfo.CollisionValue;
35 38
36 class CollisionCalculation { 39 class CollisionCalculation {
75 results.addResult(overviewResult, problems); 78 results.addResult(overviewResult, problems);
76 79
77 // create q-for-w-finders for all gauges of the calculation km range 80 // create q-for-w-finders for all gauges of the calculation km range
78 final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange); 81 final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange);
79 final Map<Gauge, GaugeDischargeValuesFinder> qFinders = new HashMap<>(); 82 final Map<Gauge, GaugeDischargeValuesFinder> qFinders = new HashMap<>();
80 final Map<Gauge, GaugeDischargeZoneFinder> zoneFinders = new HashMap<>(); 83 final Map<Gauge, GaugeMainValueNameFinder> zoneFinders = new HashMap<>();
81 for (final Gauge gauge : river.determineGauges(calcRange.getMinimumDouble(), calcRange.getMaximumDouble())) { 84 for (final Gauge gauge : river.determineGauges(calcRange.getMinimumDouble(), calcRange.getMaximumDouble())) {
82 qFinders.put(gauge, GaugeDischargeValuesFinder.loadValues(gauge, problems)); 85 qFinders.put(gauge, GaugeDischargeValuesFinder.loadValues(gauge, problems));
83 zoneFinders.put(gauge, GaugeDischargeZoneFinder.loadValues(gauge, problems)); 86 zoneFinders.put(gauge, GaugeMainValueNameFinder.loadValues(MainValueTypeKey.Q, gauge, problems));
84 } 87 }
85 final Collection<ResultRow> detailsRows = new ArrayList<>(); 88 final Collection<ResultRow> detailsRows = new ArrayList<>();
86 89
87 // calculate secondary results for each year or epoch 90 // calculate secondary results for each year or epoch
88 if (access.getYears() != null) { 91 if (access.getYears() != null) {
116 * Calculates the collision details for a km range of a river and a year or year range (epoch), 119 * Calculates the collision details for a km range of a river and a year or year range (epoch),
117 * and adds them to a ResultRow collection 120 * and adds them to a ResultRow collection
118 */ 121 */
119 private void calculateDetails(final Collection<ResultRow> rows, final RiverInfoProvider riverInfo, final double fromKm, final double toKm, 122 private void calculateDetails(final Collection<ResultRow> rows, final RiverInfoProvider riverInfo, final double fromKm, final double toKm,
120 final int fromYear, final int toYear, final Map<Gauge, GaugeDischargeValuesFinder> qFinders, 123 final int fromYear, final int toYear, final Map<Gauge, GaugeDischargeValuesFinder> qFinders,
121 final Map<Gauge, GaugeDischargeZoneFinder> zoneFinders) { 124 final Map<Gauge, GaugeMainValueNameFinder> zoneFinders) {
122 for (final CollisionValue collision : CollisionValue.getValues(riverInfo.getRiver(), fromKm, toKm, DateUtil.getStartDateFromYear(fromYear), 125 for (final CollisionValue collision : CollisionValue.getValues(riverInfo.getRiver(), fromKm, toKm, DateUtil.getStartDateFromYear(fromYear),
123 DateUtil.getEndDateFromYear(toYear))) { 126 DateUtil.getEndDateFromYear(toYear))) {
124 final Gauge gauge = riverInfo.getGauge(collision.getStation(), true); 127 final Gauge gauge = riverInfo.getGauge(collision.getStation(), true);
125 final double q = qFinders.get(gauge).getDischarge(collision.getGaugeW()); 128 final double q = qFinders.get(gauge).getDischarge(collision.getGaugeW());
126 final double qOut = Double.isInfinite(q) ? Double.NaN : q; 129 final double qOut = Double.isInfinite(q) ? Double.NaN : q;
127 rows.add(ResultRow.create().putValue(GeneralResultType.station, collision.getStation()) 130 rows.add(ResultRow.create().putValue(GeneralResultType.station, collision.getStation())
128 .putValue(GeneralResultType.date, collision.getEventDate()) 131 .putValue(GeneralResultType.date, collision.getEventDate())
129 .putValue(SInfoResultType.collisionGaugeW, collision.getGaugeW()) 132 .putValue(SInfoResultType.collisionGaugeW, collision.getGaugeW())
130 .putValue(SInfoResultType.gaugeLabel, collision.getGaugeName()) 133 .putValue(SInfoResultType.gaugeLabel, collision.getGaugeName())
131 .putValue(SInfoResultType.discharge, qOut) 134 .putValue(SInfoResultType.discharge, qOut)
132 .putValue(SInfoResultType.dischargeZone, zoneFinders.get(gauge).getDischargeZone(q))); 135 .putValue(SInfoResultType.dischargeZone, zoneFinders.get(gauge).getZoneName(q)));
133 } 136 }
134 } 137 }
135 } 138 }

http://dive4elements.wald.intevation.org