annotate artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResult.java @ 9425:3f49835a00c3

Extended CrossSectionFacet so it may fetch different data from within the artifact result. Also allows to have acces to the potentially already computed artifact result via its normal computation cache.
author gernotbelger
date Fri, 17 Aug 2018 15:31:02 +0200
parents e5367900dd6d
children aa6ee96071b7
rev   line source
8999
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
2 * Software engineering by
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
5 *
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
9 */
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.common;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
11
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
12 import java.io.Serializable;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
13 import java.util.ArrayList;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
14 import java.util.Collection;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
15 import java.util.Collections;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
16 import java.util.List;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
17
9265
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
18 import org.apache.commons.collections.Predicate;
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
19 import org.apache.commons.collections.functors.TruePredicate;
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
20
8999
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
21 import gnu.trove.TDoubleArrayList;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
22
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
23 /**
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
24 * @author Gernot Belger
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
25 */
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
26 public abstract class AbstractCalculationResult implements Serializable {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
27
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
28 private static final long serialVersionUID = 1L;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
29
9265
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
30 private final Collection<ResultRow> rows;
8999
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
31
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
32 private final String label;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
33
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 8999
diff changeset
34 public AbstractCalculationResult(final String label, final Collection<ResultRow> rows) {
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 8999
diff changeset
35 this.label = label;
8999
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
36 this.rows = new ArrayList<>(rows);
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
37 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
38
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
39 public final String getLabel() {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
40 return this.label;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
41 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
42
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
43 public boolean isEmpty() {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
44 return this.rows.isEmpty();
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
45 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
46
9202
b4402594213b More work on calculations and output for S-Info flood duration workflow (chart types 1 and 2)
mschaefer
parents: 9150
diff changeset
47 public Collection<ResultRow> getRows() {
8999
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
48 return Collections.unmodifiableCollection(this.rows);
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
49 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
50
9265
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
51 public final double[][] getStationPoints(final IResultType yType) {
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
52 return getPoints(GeneralResultType.station, yType, TruePredicate.INSTANCE);
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
53 }
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
54
9425
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
55 /**
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
56 * Return the row with the given station (within the given tolerance) by linear search.
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
57 * Returns <code>null</code>, if no such station was found.
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
58 */
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
59 protected final ResultRow getRowForStation(final double searchStation, final double stationTolerance) {
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
60
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
61 for (final ResultRow row : this.rows) {
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
62 final double station = row.getDoubleValue(GeneralResultType.station);
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
63 if (Math.abs(station - searchStation) < stationTolerance)
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
64 return row;
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
65 }
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
66
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
67 return null;
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
68 }
3f49835a00c3 Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents: 9265
diff changeset
69
9265
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
70 public final double[][] getPoints(final IResultType typeX, final IResultType typeY, final Predicate rowFilter) {
8999
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
71
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
72 final TDoubleArrayList xPoints = new TDoubleArrayList(this.rows.size());
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
73 final TDoubleArrayList yPoints = new TDoubleArrayList(this.rows.size());
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
74
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
75 for (final ResultRow row : this.rows) {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
76
9265
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
77 if (rowFilter.evaluate(row)) {
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
78 final double station = row.getDoubleValue(typeX);
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
79 final double value = row.getDoubleValue(typeY);
8999
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
80
9265
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
81 xPoints.add(station);
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
82 yPoints.add(value);
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9205
diff changeset
83 }
8999
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
84 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
85
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
86 return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() };
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
87 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
88
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
89 protected final <TYPE> List<TYPE> getValues(final IResultType type) {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
90
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
91 final List<TYPE> values = new ArrayList<>();
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
92
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
93 for (final ResultRow row : this.rows) {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
94 @SuppressWarnings("unchecked")
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
95 final TYPE value = (TYPE) row.getValue(type);
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
96 values.add(value);
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
97 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
98
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
99 return values;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
100 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
101 }

http://dive4elements.wald.intevation.org