Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentDensity.java @ 6741:35f2d32b921d
issue1393: Survive when off-epochs no total data, but other.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Thu, 01 Aug 2013 12:08:46 +0200 |
parents | af13ceeba52a |
children | 67182bde34cd |
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:
5712
diff
changeset
|
9 package org.dive4elements.river.artifacts.model.minfo; |
4521
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
10 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
11 import java.util.ArrayList; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
12 import java.util.Collections; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
13 import java.util.HashMap; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
14 import java.util.List; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
15 import java.util.Map; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
16 import java.util.Set; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
17 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
18 import org.apache.log4j.Logger; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
19 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
20 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
21 public class SedimentDensity |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
22 { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
23 private static final Logger logger = Logger |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
24 .getLogger(SedimentDensity.class); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
25 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
26 private Map<Integer, List<SedimentDensityValue>> densities; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
27 private List<Integer> years; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
28 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
29 public SedimentDensity() { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
30 this.densities = new HashMap<Integer, List<SedimentDensityValue>>(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
31 this.years = new ArrayList<Integer>(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
32 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
33 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
34 public Map<Integer, List<SedimentDensityValue>> getDensities() { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
35 return densities; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
36 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
37 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
38 public void setDensities(Map<Integer, List<SedimentDensityValue>> densities) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
39 this.densities = densities; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
40 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
41 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
42 public void addDensity(double km, double density, int year) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
43 logger.debug("adding " + year); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
44 if (this.densities.containsKey(year)) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
45 List<SedimentDensityValue> list = this.densities.get(year); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
46 list.add(new SedimentDensityValue(km, density, year)); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
47 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
48 else { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
49 List<SedimentDensityValue> list = |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
50 new ArrayList<SedimentDensityValue>(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
51 list.add(new SedimentDensityValue(km, density, year)); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
52 densities.put(year, list); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
53 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
54 if (!this.years.contains(new Integer(year))) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
55 logger.debug("new year"); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
56 years.add(new Integer(year)); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
57 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
58 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
59 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
60 public List<Integer> getYears() { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
61 return years; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
62 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
63 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
64 public void setYears(List<Integer> years) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
65 this.years = years; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
66 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
67 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
68 public double getDensity(double km, int year) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
69 Collections.sort(this.years); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
70 if (this.years.size() == 1) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
71 return getDensityAtKm(densities.get(year), km); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
72 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
73 else { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
74 for (int i = 0; i < years.size() -1; i++) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
75 int y1 = years.get(i); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
76 int y2 = years.get(i + 1); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
77 int mid = Math.round((y1 + y2) / 2); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
78 if (year < mid) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
79 return getDensityAtKm(densities.get(y1), km); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
80 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
81 else if (i == years.size() -1) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
82 continue; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
83 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
84 else { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
85 return getDensityAtKm(densities.get(y2), km); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
86 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
87 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
88 } |
5712
84e02b3f7a4f
Avoid NPE in sediment density factory and return a valid density if no exists.
Raimund Renkert <rrenkert@intevation.de>
parents:
4551
diff
changeset
|
89 return 1.8d; |
4521
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
90 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
91 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
92 private double getDensityAtKm( |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
93 List<SedimentDensityValue> values, |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
94 double km |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
95 ) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
96 boolean found = true; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
97 SedimentDensityValue prev = null; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
98 SedimentDensityValue next = null; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
99 for (SedimentDensityValue sdv: values) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
100 logger.debug("year: " + sdv.getYear()); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
101 if (sdv.getKm() == km) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
102 prev = sdv; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
103 found = true; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
104 break; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
105 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
106 if (sdv.getKm() > km) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
107 next = sdv; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
108 break; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
109 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
110 prev = sdv; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
111 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
112 if (found) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
113 return prev.getDensity(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
114 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
115 else { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
116 return spline(prev, next, km); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
117 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
118 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
119 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
120 private double spline( |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
121 SedimentDensityValue prev, |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
122 SedimentDensityValue next, |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
123 double km |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
124 ) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
125 double lower = prev.getKm(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
126 double upper = next.getKm(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
127 double upperDensity = next.getDensity(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
128 double lowerDensity = prev.getDensity(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
129 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
130 double m =(upperDensity - lowerDensity)/(upper - lower) * km; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
131 double b = lowerDensity - |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
132 ((upperDensity - lowerDensity)/(upper - lower) * lower); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
133 return (m * km) + b; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
134 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
135 |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
136 public void cleanUp() { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
137 Set<Integer> keys = densities.keySet(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
138 for (Integer key : keys) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
139 List<SedimentDensityValue> list = densities.get(key); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
140 if (list.size() == 0) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
141 return; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
142 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
143 List<SedimentDensityValue> cleaned = |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
144 new ArrayList<SedimentDensityValue>(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
145 double prevkm = list.get(0).getKm(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
146 int counter = 0; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
147 double sum = 0d; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
148 for (SedimentDensityValue value : list) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
149 if (value.getKm() == prevkm) { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
150 sum += value.getDensity(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
151 counter++; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
152 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
153 else { |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
154 cleaned.add(new SedimentDensityValue( |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
155 prevkm, |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
156 sum / counter, |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
157 value.getYear())); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
158 sum = value.getDensity(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
159 counter = 1; |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
160 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
161 prevkm = value.getKm(); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
162 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
163 this.densities.put(key, cleaned); |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
164 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
165 } |
71e6fe870c1d
Added objects and factory for sediment densities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
166 } |