annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCurveFacet.java @ 9266:465347d12990

Station specific calculation of flood duration curve and infrastructure annotations
author mschaefer
date Wed, 18 Jul 2018 12:20:01 +0200
parents e5367900dd6d
children ae9dee74e43e
rev   line source
9252
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
2 * Software engineering by Intevation GmbH
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
3 *
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
7 */
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
8
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
9 package org.dive4elements.river.artifacts.sinfo.flood_duration;
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
10
9265
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
11 import static org.dive4elements.river.exports.injector.InjectorConstants.CURRENT_KM;
9252
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
12
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
13 import org.apache.log4j.Logger;
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
14 import org.dive4elements.artifactdatabase.state.DefaultFacet;
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
15 import org.dive4elements.artifactdatabase.state.Facet;
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
16 import org.dive4elements.artifacts.Artifact;
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
17 import org.dive4elements.artifacts.CallContext;
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
18 import org.dive4elements.river.artifacts.D4EArtifact;
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
19 import org.dive4elements.river.artifacts.model.CalculationResult;
9266
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
20 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact;
9252
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
21 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
22
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
23
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
24 /**
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
25 * Data of a duration curve.
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
26 */
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
27 public class FloodDurationCurveFacet extends DefaultFacet {
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
28
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
29 private static Logger log = Logger.getLogger(FloodDurationCurveFacet.class);
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
30
9257
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
31 // /** Blackboard data provider key for durationcurve (wqday) data. */
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
32 // public static String BB_DURATIONCURVE = "durationcurve";
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
33 //
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
34 // /** Blackboard data provider key for km of durationcurve. */
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
35 // public static String BB_DURATIONCURVE_KM = "durationcurve.km";
9252
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
36
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
37 public FloodDurationCurveFacet() {
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
38 }
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
39
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
40 public FloodDurationCurveFacet(final String name, final String description) {
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
41 super(0, name, description);
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
42 }
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
43
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
44
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
45 /**
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
46 * Expose state computation from SINFOArtifact.
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
47 */
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
48 @Override
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
49 public Object getData(final Artifact artifact, final CallContext context) {
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
50
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
51 log.debug("Get data for flood duration curve data");
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
52
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
53 final D4EArtifact flys = (D4EArtifact) artifact;
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
54
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
55 final CalculationResult res = (CalculationResult) flys.compute(context, ComputeType.ADVANCE, false);
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
56
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
57 final FloodDurationCalculationResults data = (FloodDurationCalculationResults) res.getData();
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
58
9265
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
59 final double currentKm = getCurrentKm(context);
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
60 // TODO: entweder in data.getDurationCurve() reingeben, oder bei FloodDurationCalculationResults auswerten...
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
61 // TODO: was ist aus perfromanz/speicher-sicht besser?
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
62
9266
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
63 // return data.getDurationCurve();
465347d12990 Station specific calculation of flood duration curve and infrastructure annotations
mschaefer
parents: 9265
diff changeset
64 return new FloodDurationCalculation(context).calcStationCurve(currentKm, (SINFOArtifact) flys);
9265
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
65 }
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
66
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
67 /**
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
68 * Returns the current km from the context.
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
69 * If the context is null or doesn't contain a currentKm
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
70 * then a double value of -1 will be returned.
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
71 *
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
72 * @param context
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
73 * The CallContext instance
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
74 * @return the current km as double
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
75 */
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
76 // FIXME: copied from org.dive4elements.river.artifacts.model.fixings.FixingsFacet
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
77 private double getCurrentKm(final CallContext context) {
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
78 if (context == null)
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
79 return Double.NaN;
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
80
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
81 final Double dkm = (Double) context.getContextValue(CURRENT_KM);
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
82 if (dkm == null)
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
83 return Double.NaN;
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
84
e5367900dd6d Small cleanup concerning getPoints
gernotbelger
parents: 9257
diff changeset
85 return dkm.doubleValue();
9252
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
86 }
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
87
9257
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
88 // private WQDay getTestData() {
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
89 // final int[] days = new int[366];
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
90 // final double[] ws = new double[366];
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
91 // final double[] qs = new double[366];
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
92 // for (int i = 0; i <= 365; i++) {
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
93 // days[i] = i;
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
94 // final double x = (i - 182.5) / 182.5;
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
95 // ws[i] = 102.0 - (Math.pow(x, 5) + x);
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
96 // qs[i] = 1600.0 - 800 * (Math.pow(x, 9) + x);
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
97 // }
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
98 // return new WQDay(days, ws, qs);
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
99 // }
9252
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
100
9257
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
101 // @Override
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
102 // public List getStaticDataProviderKeys(final Artifact art) {
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
103 // final List list = new ArrayList();
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
104 // list.add(BB_DURATIONCURVE);
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
105 // list.add(BB_DURATIONCURVE_KM);
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
106 // return list;
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
107 // }
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
108
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
109
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
110 // /**
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
111 // * Can provide whatever getData returns and additionally the location.
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
112 // * @param key will respond on BB_DURATIONCURVE +KM
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
113 // * @param param ignored
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
114 // * @param context ignored
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
115 // * @return whatever getData delivers or location.
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
116 // */
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
117 // @Override
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
118 // public Object provideBlackboardData(final Artifact artifact,
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
119 // final Object key,
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
120 // final Object param,
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
121 // final CallContext context
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
122 // ) {
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
123 // if (key.equals(BB_DURATIONCURVE)) {
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
124 // return getData(artifact, context);
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
125 // }
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
126 // else if (key.equals(BB_DURATIONCURVE_KM)) {
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
127 // return ((D4EArtifact)artifact).getDataAsString("ld_locations");
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
128 // }
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
129 // else {
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
130 // return null;
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
131 // }
ef7b65576d4b Added W and Q main values to S-Info flood duration curve chart
mschaefer
parents: 9252
diff changeset
132 // }
9252
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
133
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
134
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
135 /** Create a deep copy. */
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
136 @Override
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
137 public Facet deepCopy() {
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
138 final FloodDurationCurveFacet copy = new FloodDurationCurveFacet();
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
139 copy.set(this);
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
140 return copy;
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
141 }
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
142 }
c2a0028bfa9f Work on S-Info flood duration curve chart
mschaefer
parents:
diff changeset
143 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org