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

http://dive4elements.wald.intevation.org