comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculation.java @ 9202:b4402594213b

More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
author mschaefer
date Mon, 02 Jul 2018 07:33:53 +0200
parents 1614cb14308f
children 4f411c6ee3ae
comparison
equal deleted inserted replaced
9201:491e1a434457 9202:b4402594213b
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; 26 import org.dive4elements.river.artifacts.sinfo.common.GaugeDischargeValuesFinder;
27 import org.dive4elements.river.artifacts.sinfo.common.GaugeMainValueNameFinder; 27 import org.dive4elements.river.artifacts.sinfo.common.GaugeMainValueFinder;
28 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider; 28 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
29 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; 29 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
30 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; 30 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
31 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; 31 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
32 import org.dive4elements.river.backend.utils.DateUtil; 32 import org.dive4elements.river.backend.utils.DateUtil;
78 results.addResult(overviewResult, problems); 78 results.addResult(overviewResult, problems);
79 79
80 // 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
81 final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange); 81 final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange);
82 final Map<Gauge, GaugeDischargeValuesFinder> qFinders = new HashMap<>(); 82 final Map<Gauge, GaugeDischargeValuesFinder> qFinders = new HashMap<>();
83 final Map<Gauge, GaugeMainValueNameFinder> zoneFinders = new HashMap<>(); 83 final Map<Gauge, GaugeMainValueFinder> zoneFinders = new HashMap<>();
84 for (final Gauge gauge : river.determineGauges(calcRange.getMinimumDouble(), calcRange.getMaximumDouble())) { 84 for (final Gauge gauge : river.determineGauges(calcRange.getMinimumDouble(), calcRange.getMaximumDouble())) {
85 qFinders.put(gauge, GaugeDischargeValuesFinder.loadValues(gauge, problems)); 85 qFinders.put(gauge, GaugeDischargeValuesFinder.loadValues(gauge, problems));
86 zoneFinders.put(gauge, GaugeMainValueNameFinder.loadValues(MainValueTypeKey.Q, gauge, problems)); 86 zoneFinders.put(gauge, GaugeMainValueFinder.loadValues(MainValueTypeKey.Q, gauge, problems));
87 } 87 }
88 final Collection<ResultRow> detailsRows = new ArrayList<>(); 88 final Collection<ResultRow> detailsRows = new ArrayList<>();
89 89
90 // calculate secondary results for each year or epoch 90 // calculate secondary results for each year or epoch
91 if (access.getYears() != null) { 91 if (access.getYears() != null) {
119 * 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),
120 * and adds them to a ResultRow collection 120 * and adds them to a ResultRow collection
121 */ 121 */
122 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,
123 final int fromYear, final int toYear, final Map<Gauge, GaugeDischargeValuesFinder> qFinders, 123 final int fromYear, final int toYear, final Map<Gauge, GaugeDischargeValuesFinder> qFinders,
124 final Map<Gauge, GaugeMainValueNameFinder> zoneFinders) { 124 final Map<Gauge, GaugeMainValueFinder> zoneFinders) {
125 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),
126 DateUtil.getEndDateFromYear(toYear))) { 126 DateUtil.getEndDateFromYear(toYear))) {
127 final Gauge gauge = riverInfo.getGauge(collision.getStation(), true); 127 final Gauge gauge = riverInfo.getGauge(collision.getStation(), true);
128 final double q = qFinders.get(gauge).getDischarge(collision.getGaugeW()); 128 final double q = qFinders.get(gauge).getDischarge(collision.getGaugeW());
129 final double qOut = Double.isInfinite(q) ? Double.NaN : q; 129 final double qOut = Double.isInfinite(q) ? Double.NaN : q;
130 rows.add(ResultRow.create().putValue(GeneralResultType.station, collision.getStation()) 130 rows.add(ResultRow.create().putValue(GeneralResultType.station, collision.getStation())
131 .putValue(GeneralResultType.date, collision.getEventDate()) 131 .putValue(GeneralResultType.date, collision.getEventDate())
132 .putValue(SInfoResultType.collisionGaugeW, collision.getGaugeW()) 132 .putValue(SInfoResultType.collisionGaugeW, collision.getGaugeW())
133 .putValue(SInfoResultType.gaugeLabel, collision.getGaugeName()) 133 .putValue(SInfoResultType.gaugeLabel, collision.getGaugeName())
134 .putValue(SInfoResultType.discharge, qOut) 134 .putValue(SInfoResultType.discharge, qOut)
135 .putValue(SInfoResultType.dischargeZone, zoneFinders.get(gauge).getZoneName(q))); 135 .putValue(SInfoResultType.dischargeZone, zoneFinders.get(gauge).findZoneName(q)));
136 } 136 }
137 } 137 }
138 } 138 }

http://dive4elements.wald.intevation.org