Mercurial > dive4elements > river
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 } |