Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/FlowVelocityFilterFacet.java @ 6152:0587819960c3
Waterlevel differences & bed height differences: Add new model LinearInterpolated intented to unify the two very similiar calculations. The focus of the current implementation is correctness and not speed! The fact that the data sets more mostly sorted by station is not exploited. Doing so would improve performance significantly.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Sun, 02 Jun 2013 17:52:53 +0200 |
parents | af13ceeba52a |
children | a56fe3bc6700 |
rev | line source |
---|---|
5863
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
2 * Software engineering by Intevation GmbH |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
3 * |
5994
af13ceeba52a
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5867
diff
changeset
|
4 * This file is Free Software under the GNU AGPL (>=v3) |
5863
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
5994
af13ceeba52a
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5867
diff
changeset
|
6 * documentation coming with Dive4Elements River for details. |
5863
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
7 */ |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
8 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4668
diff
changeset
|
9 package org.dive4elements.river.artifacts.model; |
4668
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
10 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4668
diff
changeset
|
11 import org.dive4elements.artifactdatabase.state.Facet; |
4668
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
12 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4668
diff
changeset
|
13 import org.dive4elements.artifacts.Artifact; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4668
diff
changeset
|
14 import org.dive4elements.artifacts.CallContext; |
4668
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
15 |
5867
59ff03ff48f1
River artifacts: Renamed FLYSArtifact(Collection) to D4EArtifact(Collection).
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5866
diff
changeset
|
16 import org.dive4elements.river.artifacts.D4EArtifact; |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4668
diff
changeset
|
17 |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4668
diff
changeset
|
18 import org.dive4elements.river.artifacts.access.RiverAccess; |
5866
9a6741ccf6d4
FLYS artifacts: Renamed FLYSContext(Factory) to RiverContext(Factory).
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5863
diff
changeset
|
19 import org.dive4elements.river.artifacts.context.RiverContext; |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4668
diff
changeset
|
20 |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4668
diff
changeset
|
21 import org.dive4elements.river.artifacts.math.MovingAverage; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4668
diff
changeset
|
22 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; |
4668
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
23 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
24 import org.apache.log4j.Logger; |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
25 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
26 /** |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
27 * Facet of a FlowVelocity curve. |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
28 */ |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
29 public class FlowVelocityFilterFacet extends DataFacet { |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
30 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
31 private static Logger logger = Logger.getLogger(FlowVelocityFilterFacet.class); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
32 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
33 public FlowVelocityFilterFacet() { |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
34 // required for clone operation deepCopy() |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
35 } |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
36 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
37 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
38 public FlowVelocityFilterFacet( |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
39 int idx, |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
40 String name, |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
41 String description, |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
42 ComputeType type, |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
43 String stateId, |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
44 String hash |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
45 ) { |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
46 super(idx, name, description, type, hash, stateId); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
47 } |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
48 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
49 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
50 public Object getData(Artifact artifact, CallContext context) { |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
51 logger.debug("Get data for flow velocity at index: " + index); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
52 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
53 Double start = (Double)context.getContextValue("startkm"); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
54 Double end = (Double)context.getContextValue("endkm"); |
5867
59ff03ff48f1
River artifacts: Renamed FLYSArtifact(Collection) to D4EArtifact(Collection).
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5866
diff
changeset
|
55 D4EArtifact flys = (D4EArtifact) artifact; |
4668
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
56 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
57 CalculationResult res = (CalculationResult) |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
58 flys.compute(context, hash, stateId, type, false); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
59 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
60 FlowVelocityData[] data = (FlowVelocityData[]) res.getData(); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
61 if(start != null && end != null) { |
5866
9a6741ccf6d4
FLYS artifacts: Renamed FLYSContext(Factory) to RiverContext(Factory).
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5863
diff
changeset
|
62 RiverContext fc = (RiverContext)context.globalContext(); |
4668
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
63 ZoomScale scales = (ZoomScale)fc.get("zoomscale"); |
5867
59ff03ff48f1
River artifacts: Renamed FLYSArtifact(Collection) to D4EArtifact(Collection).
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5866
diff
changeset
|
64 RiverAccess access = new RiverAccess((D4EArtifact)artifact); |
4668
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
65 String river = access.getRiver(); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
66 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
67 double radius = scales.getRadius(river, start, end); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
68 FlowVelocityData oldData = data[index]; |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
69 FlowVelocityData newData = new FlowVelocityData(); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
70 double[][] q = oldData.getQPoints(); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
71 double[][] totalV = MovingAverage.weighted(oldData.getTotalChannelPoints(), radius); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
72 double[][] mainV = MovingAverage.weighted(oldData.getMainChannelPoints(), radius); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
73 double[][] tau = MovingAverage.weighted(oldData.getTauPoints(), radius); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
74 for(int j = 0; j < q[0].length; j++) { |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
75 newData.addKM(q[0][j]); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
76 newData.addQ(q[1][j]); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
77 newData.addTauMain(tau[1][j]); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
78 newData.addVMain(mainV[1][j]); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
79 newData.addVTotal(totalV[1][j]); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
80 } |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
81 return newData; |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
82 } |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
83 return data[index]; |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
84 } |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
85 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
86 |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
87 /** Copy deeply. */ |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
88 @Override |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
89 public Facet deepCopy() { |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
90 FlowVelocityFilterFacet copy = new FlowVelocityFilterFacet(); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
91 copy.set(this); |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
92 copy.type = type; |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
93 copy.hash = hash; |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
94 copy.stateId = stateId; |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
95 return copy; |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
96 } |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
97 } |
87c938d082d6
Added facet for filtered flow velocity and removed filter from default facet.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
98 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |