annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffHeightSubFilterFacet.java @ 8587:07c9ac22f611

(issue1755) Generalise BedQuality result handling The bedquality calculation now produces a result for each time period which has BedQualityResultValues for each specific result type. Formally this was split up in density, porosity and diameter classes with some bedload diameter classes mixed in for extra fun. The intent of this commit is to allow more shared code and generic access patterns to the BedQuality results.
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 18 Mar 2015 18:42:08 +0100
parents 6d8d7425a6b5
children afa2096a1f15
rev   line source
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
3 *
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
7 */
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
8
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
9 package org.dive4elements.river.artifacts.model.minfo;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import org.apache.log4j.Logger;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13 import org.dive4elements.artifactdatabase.state.Facet;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 import org.dive4elements.artifacts.Artifact;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15 import org.dive4elements.artifacts.CallContext;
8273
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
16
8559
6d8d7425a6b5 Bed heights are just bed heights since a while ('single' is obsolete).
"Tom Gottfried <tom@intevation.de>"
parents: 8332
diff changeset
17 import org.dive4elements.river.model.BedHeight;
8273
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
18
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19 import org.dive4elements.river.artifacts.D4EArtifact;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20 import org.dive4elements.river.artifacts.access.RiverAccess;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21 import org.dive4elements.river.artifacts.context.RiverContext;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22 import org.dive4elements.river.artifacts.model.CalculationResult;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23 import org.dive4elements.river.artifacts.model.DataFacet;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24 import org.dive4elements.river.artifacts.math.MovingAverage;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25 import org.dive4elements.river.artifacts.model.ZoomScale;
7997
9f42d161886b Add river elevation model to bed diff chart export.
Raimund Renkert <rrenkert@intevation.de>
parents: 7985
diff changeset
26 import org.dive4elements.river.artifacts.resources.Resources;
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30 public class BedDiffHeightSubFilterFacet
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31 extends DataFacet
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32 {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8007
diff changeset
33 private static Logger log = Logger.getLogger(BedDiffHeightSubFilterFacet.class);
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35 public BedDiffHeightSubFilterFacet() {
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38 public BedDiffHeightSubFilterFacet(int idx, String name, String description,
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
39 ComputeType type, String stateId, String hash) {
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 super(idx, name, description, type, hash, stateId);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41 this.metaData.put("X", "chart.longitudinal.section.xaxis.label");
8267
99912f51468d A bit less chaos in i18n for bed heights.
"Tom Gottfried <tom@intevation.de>"
parents: 8202
diff changeset
42 this.metaData.put("Y", "chart.bedheight_middle.section.yaxis.label");
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45 public Object getData(Artifact artifact, CallContext context) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8007
diff changeset
46 log.debug("Get data for bed density at index: " + index);
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 D4EArtifact flys = (D4EArtifact) artifact;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 CalculationResult res = (CalculationResult) flys.compute(context, hash,
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 stateId, type, false);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 BedDiffYearResult[] data =
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 (BedDiffYearResult[]) res.getData(); // TODO CAST TO SPECIFIC CLASS
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 Double start = (Double)context.getContextValue("startkm");
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 Double end = (Double)context.getContextValue("endkm");
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57 if(start != null && end != null) {
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 RiverContext fc = (RiverContext)context.globalContext();
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 // Adaptive smoothing, based on zoom factor/diagram extents.
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60 ZoomScale scales = (ZoomScale)fc.get("zoomscale");
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 RiverAccess access = new RiverAccess((D4EArtifact)artifact);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
62 String river = access.getRiverName();
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
63
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
64 double radius = scales.getRadius(river, start, end);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
65 BedDiffYearResult oldData = data[index];
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
66 double[][] heights = MovingAverage.weighted(oldData.getHeights2Data(), radius);
7997
9f42d161886b Add river elevation model to bed diff chart export.
Raimund Renkert <rrenkert@intevation.de>
parents: 7985
diff changeset
67 this.metaData.put(
9f42d161886b Add river elevation model to bed diff chart export.
Raimund Renkert <rrenkert@intevation.de>
parents: 7985
diff changeset
68 Resources.getMsg(context.getMeta(),
9f42d161886b Add river elevation model to bed diff chart export.
Raimund Renkert <rrenkert@intevation.de>
parents: 7985
diff changeset
69 "chart.subtitle.radius", new Object[] { radius }), "");
8273
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
70
8559
6d8d7425a6b5 Bed heights are just bed heights since a while ('single' is obsolete).
"Tom Gottfried <tom@intevation.de>"
parents: 8332
diff changeset
71 BedHeight second = BedHeight.getBedHeightById(
8273
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
72 oldData.getIdSecond());
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
73 this.addMetaData(Resources.getMsg(
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
74 context.getMeta(),
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
75 "meta.bedheight.cur.elevation"),
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
76 second.getCurElevationModel().getName());
8332
3baa6290cebf bed_height_single.old_elevation_model_id is not NOT NULL.
"Tom Gottfried <tom@intevation.de>"
parents: 8273
diff changeset
77 if (second.getOldElevationModel() != null) {
3baa6290cebf bed_height_single.old_elevation_model_id is not NOT NULL.
"Tom Gottfried <tom@intevation.de>"
parents: 8273
diff changeset
78 this.addMetaData(Resources.getMsg(
3baa6290cebf bed_height_single.old_elevation_model_id is not NOT NULL.
"Tom Gottfried <tom@intevation.de>"
parents: 8273
diff changeset
79 context.getMeta(),
3baa6290cebf bed_height_single.old_elevation_model_id is not NOT NULL.
"Tom Gottfried <tom@intevation.de>"
parents: 8273
diff changeset
80 "meta.bedheight.old.elevation"),
3baa6290cebf bed_height_single.old_elevation_model_id is not NOT NULL.
"Tom Gottfried <tom@intevation.de>"
parents: 8273
diff changeset
81 second.getOldElevationModel().getName());
3baa6290cebf bed_height_single.old_elevation_model_id is not NOT NULL.
"Tom Gottfried <tom@intevation.de>"
parents: 8273
diff changeset
82 }
8273
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
83 this.addMetaData(Resources.getMsg(
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
84 context.getMeta(),
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
85 "meta.bedheight.river.elevation"),
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
86 access.getRiver().getWstUnit().getName());
5c3b36b519d0 Add metadata to bedheight facets in bed height differences.
"Tom Gottfried <tom@intevation.de>"
parents: 8267
diff changeset
87
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
88 return heights;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
89 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
90 return null;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
91 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
92
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
93 /** Copy deeply. */
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
94 @Override
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
95 public Facet deepCopy() {
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
96 BedDiffHeightSubFilterFacet copy = new BedDiffHeightSubFilterFacet();
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
97 copy.set(this);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
98 copy.type = type;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
99 copy.hash = hash;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
100 copy.stateId = stateId;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
101 return copy;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
102 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
103 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
104 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org