annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/DifferenceCurveFilterFacet.java @ 7791:8b95f9c4f341 minfo-opt

Added new facet for filtered winfo differences.
author Raimund Renkert <rrenkert@intevation.de>
date Thu, 06 Mar 2014 14:04:46 +0100
parents
children 92a2b9b691e1
rev   line source
7791
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
1 package org.dive4elements.river.artifacts.model;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
2
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
3 import org.apache.log4j.Logger;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
4 import org.dive4elements.artifactdatabase.state.Facet;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
5 import org.dive4elements.artifacts.Artifact;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
6 import org.dive4elements.artifacts.CallContext;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
7 import org.dive4elements.river.artifacts.D4EArtifact;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
8 import org.dive4elements.river.artifacts.WINFOArtifact;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
9 import org.dive4elements.river.artifacts.access.RiverAccess;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10 import org.dive4elements.river.artifacts.context.RiverContext;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import org.dive4elements.river.artifacts.math.MovingAverage;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15 public class DifferenceCurveFilterFacet
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
16 extends DifferenceCurveFacet
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
17 {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
18 private static Logger logger = Logger.getLogger(DifferenceCurveFacet.class);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21 public DifferenceCurveFilterFacet() {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22 }
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24 public DifferenceCurveFilterFacet(
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25 int index,
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26 String name,
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27 String description,
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28 ComputeType type,
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29 String stateID,
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30 String hash
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32 ) {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33 super(index, name, description, type, stateID, hash);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34 }
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36 /**
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37 * Get difference curve data.
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38 * @return a WKms at given index.
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
39 */
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 @Override
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41 public Object getData(Artifact artifact, CallContext context) {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42 WKms result = (WKms)super.getData(artifact, context);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44 Double start = (Double)context.getContextValue("startkm");
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45 Double end = (Double)context.getContextValue("endkm");
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46 if(start != null && end != null) {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 RiverContext fc = (RiverContext)context.globalContext();
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 // Adaptive smoothing, based on zoom factor/diagram extents.
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49 ZoomScale scales = (ZoomScale)fc.get("zoomscale");
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 RiverAccess access = new RiverAccess((D4EArtifact)artifact);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 String river = access.getRiverName();
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 double radius = scales.getRadius(river, start, end);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 double[][] oldData = new double[2][result.size()];
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 for (int i = 0; i < result.size(); i++) {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57 oldData[0][i] = result.getKm(i);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 oldData[1][i] = result.getW(i);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 }
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 double[][] diffs = MovingAverage.weighted(oldData, radius);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
62 WKmsImpl newData = new WKmsImpl();
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
63 for(int j = 0; j < diffs[0].length; j++) {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
64 newData.add(diffs[0][j], diffs[1][j]);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
65 }
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
66 return newData;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
67 }
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
68 return result;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
69 }
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
70
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
71
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
72 /** Copy deeply. */
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
73 @Override
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
74 public Facet deepCopy() {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
75 WaterlevelFacet copy = new DifferenceCurveFilterFacet();
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
76 copy.set(this);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
77 copy.type = type;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
78 copy.stateId = stateId;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
79 copy.hash = hash;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
80 return copy;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
81 }
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
82 }

http://dive4elements.wald.intevation.org