Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedQualityCalculation.java @ 7357:9d3e44ab25f2
Refactoring: Move functionality of BedHeightAccess into BedHeightFacet for now.
Idea is that Artifact and Access are lightweight. Access access the 'data'
('parameterization') attached to artifact, not the data delivered by means of
artifact and its parameterization.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 16 Oct 2013 10:42:45 +0200 |
parents | a56fe3bc6700 |
children | 03dc5cc22e26 |
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:
5863
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:
5863
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:
4806
diff
changeset
|
9 package org.dive4elements.river.artifacts.model.minfo; |
3760
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
10 |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
11 import gnu.trove.TDoubleArrayList; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
12 |
3760
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
13 import java.util.LinkedList; |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
14 import java.util.List; |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
15 import java.util.Map; |
3760
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
16 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
17 import org.apache.log4j.Logger; |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
18 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4806
diff
changeset
|
19 import org.dive4elements.river.artifacts.access.BedQualityAccess; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4806
diff
changeset
|
20 import org.dive4elements.river.artifacts.model.Calculation; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4806
diff
changeset
|
21 import org.dive4elements.river.artifacts.model.CalculationResult; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4806
diff
changeset
|
22 import org.dive4elements.river.artifacts.model.DateRange; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4806
diff
changeset
|
23 import org.dive4elements.river.backend.SedDBSessionHolder; |
3760
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
24 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
25 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
26 public class BedQualityCalculation extends Calculation { |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
27 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
28 private static final Logger logger = Logger |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
29 .getLogger(BedQualityCalculation.class); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
30 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
31 protected String river; |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
32 protected double from; |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
33 protected double to; |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
34 protected List<String> bedDiameter; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
35 protected List<String> bedloadDiameter; |
3760
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
36 protected List<DateRange> ranges; |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
37 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
38 public BedQualityCalculation() { |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
39 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
40 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
41 public CalculationResult calculate(BedQualityAccess access) { |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
42 logger.info("BedQualityCalculation.calculate"); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
43 |
7261
a56fe3bc6700
Refactoring: Let RiverAccess.getRiver return an River.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
6257
diff
changeset
|
44 String river = access.getRiverName(); |
3760
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
45 Double from = access.getFrom(); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
46 Double to = access.getTo(); |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
47 List<String> bedDiameter = access.getBedDiameter(); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
48 List<String> bedloadDiameter = access.getBedloadDiameter(); |
3760
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
49 List<DateRange> ranges = access.getDateRanges(); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
50 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
51 if (river == null) { |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
52 // TODO: i18n |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
53 addProblem("minfo.missing.river"); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
54 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
55 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
56 if (from == null) { |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
57 // TODO: i18n |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
58 addProblem("minfo.missing.from"); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
59 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
60 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
61 if (to == null) { |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
62 // TODO: i18n |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
63 addProblem("minfo.missing.to"); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
64 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
65 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
66 if (ranges == null) { |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
67 // TODO: i18n |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
68 addProblem("minfo.missing.periods"); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
69 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
70 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
71 if (!hasProblems()) { |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
72 this.river = river; |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
73 this.from = from; |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
74 this.to = to; |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
75 this.ranges = ranges; |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
76 this.bedDiameter = bedDiameter; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
77 this.bedloadDiameter = bedloadDiameter; |
3760
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
78 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
79 SedDBSessionHolder.acquire(); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
80 try { |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
81 return internalCalculate(); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
82 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
83 finally { |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
84 SedDBSessionHolder.release(); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
85 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
86 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
87 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
88 return new CalculationResult(); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
89 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
90 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
91 protected CalculationResult internalCalculate() { |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
92 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
93 List<BedQualityResult> results = new LinkedList<BedQualityResult>(); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
94 // Calculate for all time periods. |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
95 for (DateRange dr : ranges) { |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
96 QualityMeasurements loadMeasurements = |
3785
a5f65e8983be
Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3784
diff
changeset
|
97 QualityMeasurementFactory.getBedloadMeasurements( |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
98 river, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
99 from, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
100 to, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
101 dr.getFrom(), |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
102 dr.getTo()); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
103 QualityMeasurements bedMeasurements = |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
104 QualityMeasurementFactory.getBedMeasurements( |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
105 river, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
106 from, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
107 to, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
108 dr.getFrom(), |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
109 dr.getTo()); |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
110 BedQualityResult result = new BedQualityResult(); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
111 result.setDateRange(dr); |
3780
7fa38f8bcd8d
Avoid NPE if the user selects onlyone sort of characteristic diameter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3772
diff
changeset
|
112 if (bedDiameter != null) { |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
113 result.add(calculateBedParameter(bedMeasurements, dr)); |
3780
7fa38f8bcd8d
Avoid NPE if the user selects onlyone sort of characteristic diameter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3772
diff
changeset
|
114 for (String bd : bedDiameter) { |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
115 BedDiameterResult bedResult = |
3780
7fa38f8bcd8d
Avoid NPE if the user selects onlyone sort of characteristic diameter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3772
diff
changeset
|
116 calculateBed(bedMeasurements, bd, dr); |
3772
5a8f8fd5310c
The usual wipe after for ill configured Eclipses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3769
diff
changeset
|
117 |
3780
7fa38f8bcd8d
Avoid NPE if the user selects onlyone sort of characteristic diameter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3772
diff
changeset
|
118 // Avoid adding empty result sets. |
7fa38f8bcd8d
Avoid NPE if the user selects onlyone sort of characteristic diameter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3772
diff
changeset
|
119 if (!bedResult.isEmpty()) { |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
120 result.add(bedResult); |
3780
7fa38f8bcd8d
Avoid NPE if the user selects onlyone sort of characteristic diameter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3772
diff
changeset
|
121 } |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
122 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
123 } |
3780
7fa38f8bcd8d
Avoid NPE if the user selects onlyone sort of characteristic diameter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3772
diff
changeset
|
124 if (bedloadDiameter != null) { |
7fa38f8bcd8d
Avoid NPE if the user selects onlyone sort of characteristic diameter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3772
diff
changeset
|
125 for (String bld : bedloadDiameter) { |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
126 BedloadDiameterResult loadResult = |
3780
7fa38f8bcd8d
Avoid NPE if the user selects onlyone sort of characteristic diameter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3772
diff
changeset
|
127 calculateBedload(loadMeasurements, bld, dr); |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
128 result.add(loadResult); |
3780
7fa38f8bcd8d
Avoid NPE if the user selects onlyone sort of characteristic diameter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3772
diff
changeset
|
129 } |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
130 } |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
131 results.add(result); |
3760
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
132 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
133 |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
134 return new CalculationResult( |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
135 results.toArray(new BedQualityResult[results.size()]), this); |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
136 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
137 |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
138 private BedParametersResult calculateBedParameter( |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
139 QualityMeasurements qm, |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
140 DateRange dr |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
141 ) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
142 List<Double> kms = qm.getKms(); |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
143 QualityMeasurements capFiltered = filterCapMeasurements(qm); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
144 QualityMeasurements subFiltered = filterSubMeasurements(qm); |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
145 TDoubleArrayList location = new TDoubleArrayList(); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
146 TDoubleArrayList porosityCap = new TDoubleArrayList(); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
147 TDoubleArrayList porositySub = new TDoubleArrayList(); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
148 TDoubleArrayList densityCap = new TDoubleArrayList(); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
149 TDoubleArrayList densitySub = new TDoubleArrayList(); |
3785
a5f65e8983be
Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3784
diff
changeset
|
150 |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
151 for(double km : kms) { |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
152 double[] pCap = calculatePorosity(capFiltered, km); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
153 double[] pSub = calculatePorosity(subFiltered, km); |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
154 double[] dCap = calculateDensity(capFiltered, pCap); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
155 double[] dSub = calculateDensity(subFiltered, pSub); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
156 |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
157 double pCapRes = 0d; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
158 double pSubRes = 0d; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
159 double dCapRes = 0d; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
160 double dSubRes = 0d; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
161 for (int i = 0; i < pCap.length; i++) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
162 pCapRes += pCap[i]; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
163 dCapRes += dCap[i]; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
164 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
165 for (int i = 0; i < pSub.length; i++) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
166 pSubRes += pSub[i]; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
167 dSubRes += dSub[i]; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
168 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
169 location.add(km); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
170 porosityCap.add((pCapRes / pCap.length) * 100 ); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
171 porositySub.add((pSubRes / pSub.length) * 100); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
172 densityCap.add((dCapRes / dCap.length) / 1000); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
173 densitySub.add((dSubRes / dSub.length) / 1000); |
3785
a5f65e8983be
Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3784
diff
changeset
|
174 |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
175 } |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
176 |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
177 return new BedParametersResult( |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
178 location, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
179 porosityCap, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
180 porositySub, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
181 densityCap, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
182 densitySub); |
3760
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
183 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
184 |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
185 protected BedDiameterResult calculateBed( |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
186 QualityMeasurements qm, |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
187 String diameter, |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
188 DateRange range |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
189 ) { |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
190 List<Double> kms = qm.getKms(); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
191 TDoubleArrayList location = new TDoubleArrayList(); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
192 TDoubleArrayList avDiameterCap = new TDoubleArrayList(); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
193 TDoubleArrayList avDiameterSub = new TDoubleArrayList(); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
194 for (double km : kms) { |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
195 //Filter cap and sub measurements. |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
196 QualityMeasurements capFiltered = filterCapMeasurements(qm); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
197 QualityMeasurements subFiltered = filterSubMeasurements(qm); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
198 |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
199 List<QualityMeasurement> cm = capFiltered.getMeasurements(km); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
200 List<QualityMeasurement> sm = subFiltered.getMeasurements(km); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
201 |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
202 double avCap = calculateAverage(cm, diameter); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
203 double avSub = calculateAverage(sm, diameter); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
204 location.add(km); |
4642
ca18d8d06218
Multiplicate diameter with 1000 to have mm instead of m.
Raimund Renkert <rrenkert@intevation.de>
parents:
3974
diff
changeset
|
205 avDiameterCap.add(avCap * 1000);// bring to mm. |
ca18d8d06218
Multiplicate diameter with 1000 to have mm instead of m.
Raimund Renkert <rrenkert@intevation.de>
parents:
3974
diff
changeset
|
206 avDiameterSub.add(avSub * 1000); |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
207 } |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
208 return new BedDiameterResult( |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
209 diameter, |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
210 avDiameterCap, |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
211 avDiameterSub, |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
212 location); |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
213 } |
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
214 |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
215 private double[] calculateDensity( |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
216 QualityMeasurements capFiltered, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
217 double[] porosity |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
218 ) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
219 double[] density = new double[porosity.length]; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
220 for (int i = 0; i < porosity.length; i++) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
221 density[i] = (1 - porosity[i]) * 2650; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
222 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
223 return density; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
224 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
225 |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
226 private double[] calculatePorosity( |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
227 QualityMeasurements capFiltered, |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
228 double km |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
229 ) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
230 List<QualityMeasurement> list = capFiltered.getMeasurements(km); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
231 double[] results = new double[list.size()]; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
232 int i = 0; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
233 for (QualityMeasurement qm : list) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
234 double deviation = calculateDeviation(qm); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
235 double p = calculateP(qm); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
236 double porosity = 0.353 - 0.068 * deviation + 0.146 * p; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
237 results[i] = porosity; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
238 i++; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
239 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
240 |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
241 return results; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
242 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
243 |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
244 protected BedloadDiameterResult calculateBedload( |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
245 QualityMeasurements qm, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
246 String diameter, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
247 DateRange range |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
248 ) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
249 List<Double> kms = qm.getKms(); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
250 TDoubleArrayList location = new TDoubleArrayList(); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
251 TDoubleArrayList avDiameter = new TDoubleArrayList(); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
252 for (double km : kms) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
253 List<QualityMeasurement> measurements = qm.getMeasurements(km); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
254 double mid = calculateAverage(measurements, diameter); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
255 location.add(km); |
6257
165f60f420cf
Bring bedload average diameter to 'mm'.
Raimund Renkert <rrenkert@intevation.de>
parents:
6151
diff
changeset
|
256 avDiameter.add(mid * 1000); |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
257 } |
3784
9f9d5ada96ca
Merged revisions 5498-5499 via svnmerge from
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
3780
diff
changeset
|
258 return new BedloadDiameterResult( |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
259 diameter, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
260 avDiameter, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
261 location, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
262 range); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
263 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
264 |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
265 protected double calculateAverage( |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
266 List<QualityMeasurement> list, |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
267 String diameter |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
268 ) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
269 double av = 0; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
270 for (QualityMeasurement qm : list) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
271 av += qm.getDiameter(diameter); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
272 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
273 return av/list.size(); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
274 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
275 |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
276 protected QualityMeasurements filterCapMeasurements( |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
277 QualityMeasurements qms |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
278 ) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
279 List<QualityMeasurement> result = new LinkedList<QualityMeasurement>(); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
280 for (QualityMeasurement qm : qms.getMeasurements()) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
281 if (qm.getDepth1() == 0d && qm.getDepth2() <= 0.3) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
282 result.add(qm); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
283 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
284 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
285 return new QualityMeasurements(result); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
286 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
287 |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
288 protected QualityMeasurements filterSubMeasurements( |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
289 QualityMeasurements qms |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
290 ) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
291 List<QualityMeasurement> result = new LinkedList<QualityMeasurement>(); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
292 for (QualityMeasurement qm : qms.getMeasurements()) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
293 if (qm.getDepth1() > 0d && qm.getDepth2() <= 0.5) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
294 result.add(qm); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
295 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
296 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
297 return new QualityMeasurements(result); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
298 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
299 |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
300 public double calculateDeviation(QualityMeasurement qm) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
301 Map<String, Double> dm = qm.getAllDiameter(); |
6151
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
302 int size = dm.size(); |
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
303 |
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
304 double phiM = 0; |
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
305 double [] phis = new double[size]; |
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
306 double [] ps = new double[size]; |
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
307 double scale = -1d/Math.log(2d); |
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
308 |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
309 int i = 0; |
6151
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
310 for (Map.Entry<String, Double> entry: dm.entrySet()) { |
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
311 double phi = scale*Math.log(entry.getValue()); |
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
312 double p = calculateWeight(qm, entry.getKey()); |
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
313 phiM += phi * p; |
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
314 ps[i] = p; |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
315 phis[i] = phi; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
316 i++; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
317 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
318 |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
319 double sig = 0d; |
6151
63d1e2a9b311
Bed quality calculation: Replaced another iteration over the key set + directly fetching the values withan iteration over the entry set.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6150
diff
changeset
|
320 for (i = 0; i < size; i++) { |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
321 sig += ps[i] * Math.exp(phis[i] - phiM); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
322 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
323 double deviation = Math.sqrt(sig); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
324 return deviation; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
325 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
326 |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
327 protected double calculateP(QualityMeasurement qm) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
328 return calculateWeight(qm, "dmin"); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
329 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
330 |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
331 public double calculateWeight(QualityMeasurement qm, String diameter) { |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
332 Map<String, Double> dm = qm.getAllDiameter(); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
333 double value = qm.getDiameter(diameter); |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
334 |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
335 double sum = 0d; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
336 for (Double d : dm.values()) { |
6150
1f057463765b
Bed quality calculation: Fixed a calculation typo: s/sum =+ d/sum += d/
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5994
diff
changeset
|
337 sum += d.doubleValue(); |
3769
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
338 } |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
339 double weight = sum/100*value; |
728ecd2afa20
Implemented bed quality calculation in minfo module.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
3760
diff
changeset
|
340 return weight; |
3760
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
341 } |
312870fded7e
Added result objects for minfo bed quality calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
342 } |
4806
750d72a16f4e
BedQualityCalculation: Added vim-line.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
4642
diff
changeset
|
343 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |