Mercurial > dive4elements > river
changeset 9597:5395c6d4ca50
Softwaretests...20181219 7.3: no interpolation of missing bed heights for Uinfo/Salix historical scenario and B&U/Bzws
author | mschaefer |
---|---|
date | Tue, 05 Feb 2019 15:47:58 +0100 |
parents | fbfd66e8fb81 |
children | 17414e70746e |
files | artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstDepthProcessor.java artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstHeightProcessor.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedHeightsFinder.java artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java artifacts/src/main/resources/messages.properties artifacts/src/main/resources/messages_de.properties |
diffstat | 6 files changed, 65 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstDepthProcessor.java Tue Feb 05 15:43:27 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstDepthProcessor.java Tue Feb 05 15:47:58 2019 +0100 @@ -90,7 +90,7 @@ return generateFieldDepthSeries(generator, bundle, theme, visible, fieldIndex); } - return buildSeriesForType(generator, bundle, theme, visible, doGetType(bundle.getFacetName()), null); + return buildSeriesForType(generator, bundle, theme, visible, doGetType(bundle.getFacetName()), GAP_DISTANCE); } protected AbstractResultType doGetType(final String facetName) { @@ -110,6 +110,6 @@ final BezugswstMainCalculationResult data = (BezugswstMainCalculationResult) getResult(generator, bundle); final double[][] points = data.getFieldValuePoints(fieldIndex, BunduResultType.depthFields); - return buildSeriesForPoints(points, generator, bundle, theme, visible, null); + return buildSeriesForPoints(points, generator, bundle, theme, visible, GAP_DISTANCE); } } \ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstHeightProcessor.java Tue Feb 05 15:43:27 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstHeightProcessor.java Tue Feb 05 15:47:58 2019 +0100 @@ -94,7 +94,7 @@ return generateFieldHeightSeries(generator, bundle, theme, visible, fieldIndex); } - return buildSeriesForType(generator, bundle, theme, visible, doGetType(bundle.getFacetName()), null); + return buildSeriesForType(generator, bundle, theme, visible, doGetType(bundle.getFacetName()), GAP_DISTANCE); } protected AbstractResultType doGetType(final String facetName) { @@ -114,6 +114,6 @@ final BezugswstMainCalculationResult data = (BezugswstMainCalculationResult) getResult(generator, bundle); final double[][] points = data.getFieldValuePoints(fieldIndex, BunduResultType.bedHeightFields); - return buildSeriesForPoints(points, generator, bundle, theme, visible, null); + return buildSeriesForPoints(points, generator, bundle, theme, visible, GAP_DISTANCE); } } \ No newline at end of file
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedHeightsFinder.java Tue Feb 05 15:43:27 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedHeightsFinder.java Tue Feb 05 15:47:58 2019 +0100 @@ -44,6 +44,8 @@ private final boolean isNull; + private final boolean doInterpolate; + /** * Create bed level finders from a collection of bed levels. */ @@ -52,7 +54,22 @@ final List<BedHeightsFinder> result = new ArrayList<>(bedHeights.size()); for (final BedHeight bedHeight : bedHeights) { - final BedHeightsFinder finder = createBedHeights(problems, bedHeight, range); + final BedHeightsFinder finder = createBedHeights(problems, bedHeight, range, true); + result.add(finder); + } + + return result; + } + + /** + * Create not-interpolated bed level finders from a collection of bed levels. + */ + public static Collection<BedHeightsFinder> createScenarioBedHeights(final Calculation problems, final DoubleRange range, + final Collection<BedHeight> bedHeights) { + final List<BedHeightsFinder> result = new ArrayList<>(bedHeights.size()); + + for (final BedHeight bedHeight : bedHeights) { + final BedHeightsFinder finder = createBedHeights(problems, bedHeight, range, false); result.add(finder); } @@ -110,7 +127,22 @@ if (bedHeight == null) return null; - return BedHeightsFinder.createBedHeights(problems, bedHeight, range); + return BedHeightsFinder.createBedHeights(problems, bedHeight, range, true); + } + + /** + * Creates a interpolated or not-interpolated {@link BedHeightsFinder} for a dataset from the database, specified by its + * id. + * + * @return <code>null</code> if no bed level with the given id exists. + */ + public static BedHeightsFinder forId(final Calculation problems, final int id, final DoubleRange range, final boolean doInterpolate) { + + final BedHeight bedHeight = BedHeight.getBedHeightById(id); + if (bedHeight == null) + return null; + + return BedHeightsFinder.createBedHeights(problems, bedHeight, range, doInterpolate); } /** @@ -118,14 +150,15 @@ */ public static BedHeightsFinder NullFinder() { final NavigableMap<Double, BedHeightValue> values = new TreeMap<>(); - return new BedHeightsFinder(null, null, values, true); + return new BedHeightsFinder(null, null, values, true, false); } /** * Create a finder for a given bed level. * */ - private static BedHeightsFinder createBedHeights(final Calculation problems, final BedHeight bedHeight, final DoubleRange range) { + private static BedHeightsFinder createBedHeights(final Calculation problems, final BedHeight bedHeight, final DoubleRange range, + final boolean doInterpolate) { // FIXME: sort by station, but in what direction? // FIXME: using river.getKmUp()? @@ -142,14 +175,16 @@ final BedHeightInfo info = BedHeightInfo.from(bedHeight); - return new BedHeightsFinder(problems, info, values, false); + return new BedHeightsFinder(problems, info, values, false, doInterpolate); } - private BedHeightsFinder(final Calculation problems, final BedHeightInfo info, final NavigableMap<Double, BedHeightValue> values, final boolean isNull) { + private BedHeightsFinder(final Calculation problems, final BedHeightInfo info, final NavigableMap<Double, BedHeightValue> values, final boolean isNull, + final boolean doInterpolate) { this.info = info; this.values = values; this.problems = problems; this.isNull = isNull; + this.doInterpolate = doInterpolate; } /** @@ -207,13 +242,23 @@ if (floorEntry == null || ceilingEntry == null) return Double.NaN; + // return NaN if value not found and no-interpolation mode, and report once + if (!this.doInterpolate && (floorEntry != ceilingEntry)) { + if (this.problems != null) { + this.problems.addProblem(km, "sinfo.bedheightsfinder.missing_bedheights"); + this.problems = null; + } + return Double.NaN; + } + final double floorKm = floorEntry.getKey().doubleValue(); final double ceilKm = ceilingEntry.getKey().doubleValue(); - /* report once if the interpolation distance exceeds 1000m */ - if (Math.abs(floorKm - ceilKm) > MAX_DISTANCE_KM && this.problems != null) { - this.problems.addProblem(km, "linearInterpolator.maxdistance", MAX_DISTANCE_KM * 1000); - this.problems = null; + if (Math.abs(floorKm - ceilKm) > MAX_DISTANCE_KM) { + if (this.problems != null) { + this.problems.addProblem(km, "linearInterpolator.maxdistance", MAX_DISTANCE_KM * 1000); + this.problems = null; + } return Double.NaN; }
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java Tue Feb 05 15:43:27 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculation.java Tue Feb 05 15:47:58 2019 +0100 @@ -156,11 +156,11 @@ if (defaultBedHeights.isEmpty()) return; final DoubleRange scenarioRange = new DoubleRange(partFrom, partTo); - final Collection<BedHeightsFinder> allFinders = BedHeightsFinder.createTkhBedHeights(this.problems, scenarioRange, defaultBedHeights); + final Collection<BedHeightsFinder> allFinders = BedHeightsFinder.createScenarioBedHeights(this.problems, scenarioRange, defaultBedHeights); final Collection<BedHeightsFinder> currentFinders = new ArrayList<>(allFinders); // Add historical bed-heights - final BedHeightsFinder historicalFinder = BedHeightsFinder.forId(this.problems, historicalBedHeightId, scenarioRange); + final BedHeightsFinder historicalFinder = BedHeightsFinder.forId(this.problems, historicalBedHeightId, scenarioRange, false); allFinders.add(historicalFinder); final Collection<Double> stations = BedHeightsUtils.extractStationCollection(allFinders, true); final List<Double> nulls = new ArrayList<>();
--- a/artifacts/src/main/resources/messages.properties Tue Feb 05 15:43:27 2019 +0100 +++ b/artifacts/src/main/resources/messages.properties Tue Feb 05 15:47:58 2019 +0100 @@ -806,6 +806,8 @@ sinfo.bedheightsfinder.configfile.loaderror = Failed to load config file ''{0}'': {1} sinfo.bedheightsfinder.notfound = Failed to access sounding with id ''{0}'' sinfo.bedheightsfinder.empty = The bed levels do not contain any values for the selected calculation stretch +sinfo.bedheightsfinder.missing_bedheights = Missing bed levels + sinfo.bedqualityd50config.configfile.loaderror = Failed to read config file ''{0}'' which contains period specs for D50 bed diameter calculation: {1} sinfo_calc_flow_depth_development=Flow Depth Development
--- a/artifacts/src/main/resources/messages_de.properties Tue Feb 05 15:43:27 2019 +0100 +++ b/artifacts/src/main/resources/messages_de.properties Tue Feb 05 15:47:58 2019 +0100 @@ -806,6 +806,8 @@ sinfo.bedheightsfinder.configfile.loaderror = Fehler beim Laden der Konfigurationsdatei ''{0}'': {1} sinfo.bedheightsfinder.notfound = Keine Sohlh\u00f6he mit id ''{0}'' vorhanden sinfo.bedheightsfinder.empty = Die Sohlh\u00f6hen enthalten keine Werte f\u00fcr die gew\u00e4hlte Berechnungsstrecke +sinfo.bedheightsfinder.missing_bedheights = Es fehlen Sohlh\u00f6hen + sinfo.bedqualityd50config.configfile.loaderror = Fehler beim Auslesen der Datei ''{0}'' zur Spezifikation der Zeitr\u00e4ume zur Berechnung der D50-Sohlkorndurchmesser: {1} sinfo_calc_flow_depth_development=Flie\u00dftiefenentwicklung