Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculation.java @ 8964:45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
author | gernotbelger |
---|---|
date | Thu, 29 Mar 2018 15:48:17 +0200 |
parents | 322b0e6298ea |
children | b5600453bb8f |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculation.java Wed Mar 28 17:04:20 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculation.java Thu Mar 29 15:48:17 2018 +0200 @@ -87,6 +87,9 @@ /* access real input data from database */ final String wstId = minMaxPair.getWstId(); + + // FIXME: bfg überzeugen dass man immer nur pärchen auswählen kann --> min/max id ist gleich! + final String minSoundingId = minMaxPair.getMinSoundingId(); final String maxSoundingId = minMaxPair.getMaxSoundingId(); @@ -96,7 +99,7 @@ return null; /* REMARK: fetch ALL wst kms, because we want to determine the original reference gauge */ - final WaterlevelData waterlevel = new WaterlevelFetcher().findWaterlevel(this.context, wstId, Double.NaN, Double.NaN, problems); + final WaterlevelData waterlevel = new WaterlevelFetcher().findWaterlevel(this.context, wstId, calcRange, problems); if (waterlevel == null) return null; @@ -106,9 +109,6 @@ final int soundingYear = checkSoundingYear(minBedHeight, maxBedHeight, problems); FlowDepthUtils.checkYearDifference(label, waterlevel.getYear(), soundingYear, problems); - // FIXME - // checkWaterlevelDiscretisation(wstKms, calcRange, problems); - // TODO: prüfen, ob sohlhöhen die calcRange abdecken/überschneiden /* re-determine the reference gauge, in the same way as the WaterlevelArtifact would do it */ final RiverInfoProvider riverInfoProvider = infoProvider.forWaterlevel(waterlevel); @@ -116,7 +116,7 @@ final int wspYear = waterlevel.getYear(); final WstInfo wstInfo = new WstInfo(waterlevel.getName(), wspYear, riverInfoProvider.getReferenceGauge()); - final WaterlevelValuesFinder waterlevelProvider = WaterlevelValuesFinder.fromKms(wstKms); + final WaterlevelValuesFinder waterlevelProvider = WaterlevelValuesFinder.fromKms(problems, wstKms); final DischargeValuesFinder dischargeProvider = DischargeValuesFinder.fromKms(wstKms); final String waterlevelLabel = waterlevel.getName(); @@ -125,9 +125,9 @@ /* real calculation loop */ final Collection<SInfoResultRow> rows = new ArrayList<>(); - // FIXME: determine what is the spatial discretisation that we will use... - final double[] allKms = wstKms.allKms().toNativeArray(); - for (final double station : allKms) { + // FIXME: we use the stations of one of the bed heights atm, because we probably will later use only data from one bed heights datasets! + final Collection<Double> stations = minBedHeight == null ? maxBedHeight.getStations() : minBedHeight.getStations(); + for (final double station : stations) { if (calcRange.containsDouble(station)) { final double wst = waterlevelProvider.getWaterlevel(station); @@ -140,6 +140,7 @@ final double maxFlowDepth = wst - maxBedHeightValue; // FIXME: unclear what is meant here... + // FIXME: this will simply the bed height of 'the' bed height if we reduce this to simply using one sounding dataset final double meanBedHeight = Double.NaN; // REMARK: access the location once only during calculation