annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiameterDataFacet.java @ 8587:07c9ac22f611

(issue1755) Generalise BedQuality result handling The bedquality calculation now produces a result for each time period which has BedQualityResultValues for each specific result type. Formally this was split up in density, porosity and diameter classes with some bedload diameter classes mixed in for extra fun. The intent of this commit is to allow more shared code and generic access patterns to the BedQuality results.
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 18 Mar 2015 18:42:08 +0100
parents e4606eae8ea5
children 5e38e2924c07
rev   line source
6250
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
1 package org.dive4elements.river.artifacts.model.minfo;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
2
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
3 import gnu.trove.TDoubleArrayList;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
4
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
5 import org.apache.log4j.Logger;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
6 import org.dive4elements.artifactdatabase.state.Facet;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
7 import org.dive4elements.artifacts.Artifact;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
8 import org.dive4elements.artifacts.CallContext;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
9 import org.dive4elements.river.artifacts.D4EArtifact;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10 import org.dive4elements.river.artifacts.access.BedQualityAccess;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import org.dive4elements.river.artifacts.model.DataFacet;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 public class BedDiameterDataFacet
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15 extends DataFacet
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
16 {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7987
diff changeset
17 private static final Logger log = Logger.getLogger(BedDiameterDataFacet.class);
6250
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
18
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19 public BedDiameterDataFacet() {
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20 }
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22 public BedDiameterDataFacet(
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23 int ndx,
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24 String name,
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25 String description,
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26 ComputeType type,
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27 String stateId,
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28 String hash
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29 ) {
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30 super(ndx, name, description, type, hash, stateId);
7894
42076d94977e Added metadata to facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7261
diff changeset
31 this.metaData.put("X", "chart.longitudinal.section.xaxis.label");
42076d94977e Added metadata to facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7261
diff changeset
32 this.metaData.put("Y", "chart.bedquality.yaxis.label.diameter");
6250
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33 }
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35 public Object getData(Artifact artifact, CallContext context) {
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36 D4EArtifact d4e = (D4EArtifact) artifact;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37 BedQualityAccess access = new BedQualityAccess(d4e, context);
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38 int ndx = getIndex() & 7;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
39 int top = (getIndex() >> 3) & 1;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 int diam = (getIndex() >> 4);
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41 String diameter = "";
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42 switch (diam) {
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 case 1: diameter = "d10"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44 case 2: diameter = "d16"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45 case 3: diameter = "d20"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46 case 4: diameter = "d25"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 case 5: diameter = "d30"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 case 6: diameter = "d40"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49 case 7: diameter = "d50"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 case 8: diameter = "d60"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 case 9: diameter = "d70"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 case 10: diameter = "d75"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 case 11: diameter = "d80"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 case 12: diameter = "d84"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 case 13: diameter = "d90"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 case 14: diameter = "dmin"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57 case 15: diameter = "dmax"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 case 16: diameter = "dm"; break;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 default: return null;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60 }
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
62 QualityMeasurements measurements =
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
63 QualityMeasurementFactory.getBedMeasurements(
7261
a56fe3bc6700 Refactoring: Let RiverAccess.getRiver return an River.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6259
diff changeset
64 access.getRiverName(),
6250
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
65 access.getFrom(),
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
66 access.getTo(),
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
67 access.getDateRanges().get(ndx).getFrom(),
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
68 access.getDateRanges().get(ndx).getTo());
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
69 TDoubleArrayList kms = new TDoubleArrayList();
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
70 TDoubleArrayList data = new TDoubleArrayList();
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
71 for (QualityMeasurement m : measurements.getMeasurements()) {
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
72 if (top == 1 && m.getDepth1() == 0d && m.getDepth2() <= 0.3) {
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
73 kms.add(m.getKm());
6259
06ee8e2f8b0b Removed obsolete member and minor code style.
Raimund Renkert <rrenkert@intevation.de>
parents: 6250
diff changeset
74 data.add(m.getDiameter(diameter) * 1000);
6250
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
75 }
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
76 else if (top == 0 && m.getDepth1() > 0d && m.getDepth2() <= 0.5){
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
77 kms.add(m.getKm());
6259
06ee8e2f8b0b Removed obsolete member and minor code style.
Raimund Renkert <rrenkert@intevation.de>
parents: 6250
diff changeset
78 data.add(m.getDiameter(diameter) * 1000);
6250
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
79 }
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
80 }
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
81 BedDiameterData bdd = new BedDiameterData(diameter, kms, data);
7987
98ca61cb58fb Split bed quality facets and updated processors and state.
Raimund Renkert <rrenkert@intevation.de>
parents: 7894
diff changeset
82 return bdd.getDiameterData();
6250
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
83 }
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
84
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
85 /** Copy deeply. */
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
86 @Override
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
87 public Facet deepCopy() {
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
88 BedDiameterDataFacet copy = new BedDiameterDataFacet();
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
89 copy.set(this);
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
90 copy.type = type;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
91 copy.hash = hash;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
92 copy.stateId = stateId;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
93 return copy;
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
94 }
267119b38779 Added container and facet for bed diameter measurements.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
95 }

http://dive4elements.wald.intevation.org