Mercurial > dive4elements > river
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 } |