Mercurial > dive4elements > river
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 } |