Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/BedDiffEpochFilterFacet.java @ 4672:12e3da5724e6
Added new facets for filtered bed height diffs to have filtered and raw data.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Thu, 13 Dec 2012 17:18:53 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
4671:4ca05e5f3399 | 4672:12e3da5724e6 |
---|---|
1 package de.intevation.flys.artifacts.model.minfo; | |
2 | |
3 import org.apache.log4j.Logger; | |
4 | |
5 import de.intevation.artifactdatabase.state.Facet; | |
6 import de.intevation.artifacts.Artifact; | |
7 import de.intevation.artifacts.CallContext; | |
8 import de.intevation.flys.artifacts.FLYSArtifact; | |
9 import de.intevation.flys.artifacts.access.RiverAccess; | |
10 import de.intevation.flys.artifacts.context.FLYSContext; | |
11 import de.intevation.flys.artifacts.model.CalculationResult; | |
12 import de.intevation.flys.artifacts.model.DataFacet; | |
13 import de.intevation.flys.artifacts.math.MovingAverage; | |
14 import de.intevation.flys.artifacts.model.ZoomScale; | |
15 import de.intevation.flys.artifacts.states.DefaultState.ComputeType; | |
16 | |
17 | |
18 public class BedDiffEpochFilterFacet | |
19 extends DataFacet | |
20 { | |
21 private static Logger logger = Logger.getLogger(BedDensityFacet.class); | |
22 | |
23 public BedDiffEpochFilterFacet() { | |
24 } | |
25 | |
26 public BedDiffEpochFilterFacet(int idx, String name, String description, | |
27 ComputeType type, String stateId, String hash) { | |
28 super(idx, name, description, type, hash, stateId); | |
29 } | |
30 | |
31 public Object getData(Artifact artifact, CallContext context) { | |
32 logger.debug("Get data for bed density at index: " + index); | |
33 | |
34 FLYSArtifact flys = (FLYSArtifact) artifact; | |
35 | |
36 CalculationResult res = (CalculationResult) flys.compute(context, hash, | |
37 stateId, type, false); | |
38 | |
39 BedDiffEpochResult[] data = | |
40 (BedDiffEpochResult[]) res.getData(); // TODO CAST TO SPECIFIC CLASS | |
41 Double start = (Double)context.getContextValue("startkm"); | |
42 Double end = (Double)context.getContextValue("endkm"); | |
43 | |
44 if(start != null && end != null) { | |
45 FLYSContext fc = (FLYSContext)context.globalContext(); | |
46 ZoomScale scales = (ZoomScale)fc.get("zoomscale"); | |
47 RiverAccess access = new RiverAccess((FLYSArtifact)artifact); | |
48 String river = access.getRiver(); | |
49 | |
50 double radius = scales.getRadius(river, start, end); | |
51 BedDiffEpochResult oldData = data[index]; | |
52 BedDiffEpochResult newData = new BedDiffEpochResult(); | |
53 newData.setStart(oldData.getStart()); | |
54 newData.setEnd(oldData.getEnd()); | |
55 double[][] diffs = MovingAverage.weighted(oldData.getDifferencesData(), radius); | |
56 double[][] heights1 = MovingAverage.weighted(oldData.getHeights1Data(), radius); | |
57 double[][] heights2 = MovingAverage.weighted(oldData.getHeights2Data(), radius); | |
58 for(int j = 0; j < diffs[0].length; j++) { | |
59 newData.addKm(diffs[0][j]); | |
60 newData.addDifference(diffs[1][j]); | |
61 newData.addHeight1(heights1[1][j]); | |
62 newData.addHeight2(heights2[1][j]); | |
63 } | |
64 return newData; | |
65 } | |
66 return data != null && data.length > index ? data[index] : null; | |
67 } | |
68 | |
69 /** Copy deeply. */ | |
70 @Override | |
71 public Facet deepCopy() { | |
72 BedDiffEpochFilterFacet copy = new BedDiffEpochFilterFacet(); | |
73 copy.set(this); | |
74 copy.type = type; | |
75 copy.hash = hash; | |
76 copy.stateId = stateId; | |
77 return copy; | |
78 } | |
79 } | |
80 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |