Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadDataCalculation.java @ 8066:fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Wed, 30 Jul 2014 19:26:20 +0200 |
parents | 8489565ff563 |
children | 6d24ba2ac964 |
rev | line source |
---|---|
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
1 /* Copyright (C) 2014 by Bundesanstalt für Gewässerkunde |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
2 * Software engineering by Intevation GmbH |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
3 * |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
4 * This file is Free Software under the GNU AGPL (>=v3) |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
6 * documentation coming with Dive4Elements River for details. |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
7 */ |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
8 package org.dive4elements.river.artifacts.model.minfo; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
9 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
10 import java.util.List; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
11 import java.util.Set; |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
12 import java.util.TreeSet; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
13 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
14 import org.dive4elements.river.artifacts.access.SedimentLoadAccess; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
15 import org.dive4elements.river.artifacts.model.Calculation; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
16 import org.dive4elements.river.artifacts.model.CalculationResult; |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
17 import org.dive4elements.river.artifacts.model.RiverFactory; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
18 import org.apache.log4j.Logger; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
19 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
20 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData.Value; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
21 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData.Station; |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
22 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadDataValueFilter.And; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
23 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadDataValueFilter.IsEpoch; |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
24 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadDataValueFilter.IsOfficial; |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
25 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadDataValueFilter.Not; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
26 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadDataValueFilter.TimeRangeIntersects; |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
27 import org.dive4elements.river.model.River; |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
28 import org.dive4elements.river.utils.DoubleUtil; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
29 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
30 public class SedimentLoadDataCalculation |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
31 extends Calculation |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
32 { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
33 private static final Logger log = Logger |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
34 .getLogger(SedimentLoadDataCalculation.class); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
35 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
36 public static final int [] TOTAL_LOAD_FLYS = { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
37 SedimentLoadData.GF_COARSE, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
38 SedimentLoadData.GF_FINE_MIDDLE, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
39 SedimentLoadData.GF_SAND, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
40 SedimentLoadData.GF_SUSP_SEDIMENT |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
41 }; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
42 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
43 public static final int [] BED_LOAD_FLYS = { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
44 SedimentLoadData.GF_COARSE, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
45 SedimentLoadData.GF_FINE_MIDDLE, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
46 SedimentLoadData.GF_SAND |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
47 }; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
48 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
49 public static final int [] BED_LOAD_SUSP_SAND_FLYS = { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
50 SedimentLoadData.GF_COARSE, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
51 SedimentLoadData.GF_FINE_MIDDLE, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
52 SedimentLoadData.GF_SAND, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
53 SedimentLoadData.GF_SUSP_SAND |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
54 }; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
55 |
8050
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
56 public static final int [] TOTAL_LOAD_BFG = { |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
57 SedimentLoadData.GF_TOTAL |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
58 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
59 |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
60 public static final int [] BED_LOAD_BFG = { |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
61 SedimentLoadData.GF_BED_LOAD |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
62 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
63 |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
64 public static final int [] SUSPENDED_LOAD_BFG = { |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
65 SedimentLoadData.GF_SUSPENDED_LOAD |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
66 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
67 |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
68 public static final int [] COARSE_FLYS = { |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
69 SedimentLoadData.GF_COARSE |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
70 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
71 |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
72 public static final int [] FINE_MIDDLE_FLYS = { |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
73 SedimentLoadData.GF_FINE_MIDDLE |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
74 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
75 |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
76 public static final int [] SAND_FLYS = { |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
77 SedimentLoadData.GF_SAND |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
78 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
79 |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
80 public static final int [] SUSP_SAND_FLYS = { |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
81 SedimentLoadData.GF_SUSP_SAND |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
82 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
83 |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
84 public static final int [] SUSP_SAND_BED_FLYS = { |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
85 SedimentLoadData.GF_SUSP_SAND_BED |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
86 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
87 |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
88 public static final int [] SUSP_SEDIMENT_FLYS = { |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
89 SedimentLoadData.GF_SUSP_SEDIMENT |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
90 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
91 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
92 public static final class GrainFraction { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
93 private String description; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
94 private int [] grainFractions; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
95 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
96 public GrainFraction(String description, int [] grainFractions) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
97 this.description = description; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
98 this.grainFractions = grainFractions; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
99 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
100 public static final GrainFraction make(String description, int [] grainFractions) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
101 return new GrainFraction(description, grainFractions); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
102 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
103 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
104 public String getDescription() { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
105 return description; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
106 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
107 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
108 public int [] getGrainFractions() { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
109 return grainFractions; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
110 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
111 } // class GrainFraction |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
112 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
113 public static final GrainFraction [] GRAIN_FRACTIONS = { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
114 // TODO: i18n |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
115 GrainFraction.make("minfo.total.load.flys", TOTAL_LOAD_FLYS), |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
116 GrainFraction.make("minfo.bed.load.flys", BED_LOAD_FLYS), |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
117 GrainFraction.make("minfo.bed.load.susp.sand.flys", BED_LOAD_SUSP_SAND_FLYS), |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
118 GrainFraction.make("minfo.total.load.bfg", TOTAL_LOAD_BFG), |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
119 GrainFraction.make("minfo.bed.load.bfg", BED_LOAD_BFG), |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
120 GrainFraction.make("minfo.suspended.load.bfg", SUSPENDED_LOAD_BFG), |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
121 GrainFraction.make("minfo.coarse.flys", COARSE_FLYS), |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
122 GrainFraction.make("minfo.fine.middle.flys", FINE_MIDDLE_FLYS), |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
123 GrainFraction.make("minfo.sand.flys", SAND_FLYS) , |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
124 GrainFraction.make("minfo.susp.sand.flys", SUSP_SAND_FLYS), |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
125 GrainFraction.make("minfo.susp.sand.bed.flys", SUSP_SAND_BED_FLYS), |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
126 GrainFraction.make("minfo.susp.sediment.flys", SUSP_SEDIMENT_FLYS), |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
127 }; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
128 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
129 public static class Sum implements Value.Visitor { |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
130 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
131 protected int n; |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
132 protected double sum; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
133 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
134 public Sum() { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
135 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
136 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
137 public double getSum() { |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
138 return sum; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
139 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
140 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
141 public int getN() { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
142 return n; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
143 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
144 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
145 public void reset() { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
146 n = 0; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
147 sum = 0.0; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
148 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
149 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
150 @Override |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
151 public void visit(Value value) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
152 sum += value.getValue(); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
153 ++n; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
154 } |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
155 } // class Sum |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
156 |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
157 public static final class Avg extends Sum { |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
158 public Avg() { |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
159 } |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
160 |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
161 @Override |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
162 public double getSum() { |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
163 return n == 0 ? 0.0 : sum/(double)n; |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
164 } |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
165 } // class Sum |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
166 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
167 |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
168 private String river; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
169 private String yearEpoch; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
170 private String unit; |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
171 private int [][] epochs; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
172 private int [] years; |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
173 private double from; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
174 private double to; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
175 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
176 |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
177 public SedimentLoadDataCalculation() { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
178 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
179 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
180 public CalculationResult calculate(SedimentLoadAccess access) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
181 log.info("SedimentLoadDataCalculation.calculate"); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
182 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
183 String river = access.getRiverName(); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
184 String yearEpoch = access.getYearEpoch(); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
185 String unit = access.getUnit(); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
186 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
187 int [] years = null; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
188 int [][] epochs = null; |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
189 |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
190 double from = access.getLowerKM(); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
191 double to = access.getUpperKM(); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
192 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
193 if (yearEpoch.equals("year")) { |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
194 years = access.getPeriod(); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
195 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
196 else if (yearEpoch.equals("epoch") || yearEpoch.equals("off_epoch")) { |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
197 epochs = access.getEpochs(); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
198 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
199 else { |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
200 addProblem("minfo.missing.year_epoch"); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
201 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
202 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
203 if (river == null) { |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
204 // TODO: i18n |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
205 addProblem("minfo.missing.river"); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
206 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
207 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
208 if (years == null && epochs == null) { |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
209 addProblem("minfo.missing.time"); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
210 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
211 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
212 if (!hasProblems()) { |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
213 this.river = river; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
214 this.yearEpoch = yearEpoch; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
215 this.unit = unit; |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
216 this.years = years; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
217 this.epochs = epochs; |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
218 this.from = from; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
219 this.to = to; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
220 return internalCalculate(); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
221 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
222 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
223 return error(null); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
224 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
225 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
226 private CalculationResult error(String msg) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
227 if (msg != null) addProblem(msg); |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
228 return new CalculationResult(this); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
229 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
230 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
231 private CalculationResult internalCalculate() { |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
232 if ("year".equals(yearEpoch)) return calculateYears(); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
233 if ("epoch".equals(yearEpoch)) return calculateEpochs(); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
234 if ("off_epoch".equals(yearEpoch)) return calculateOffEpochs(); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
235 |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
236 // TODO: i18n |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
237 return error("minfo.sediment.load.unknown.calc.mode"); |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
238 } |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
239 |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
240 private CalculationResult calculateYears() { |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
241 SedimentLoadData sld = |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
242 SedimentLoadDataFactory.INSTANCE.getSedimentLoadData(river); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
243 if (sld == null) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
244 // TODO: i18n |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
245 return error("minfo.sediment.load.no.data"); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
246 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
247 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
248 SedimentLoadDataResult sldr = new SedimentLoadDataResult(); |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
249 |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
250 boolean isKmUp = isKmUp(); |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
251 Set<Integer> missingFractions = new TreeSet<Integer>(); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
252 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
253 Not notEpochs = new Not(IsEpoch.INSTANCE); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
254 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
255 Sum sum = new Sum(); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
256 |
8066
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
257 SedimentDensity sd = getSedimentDensity(); |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
258 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
259 for (int year: years) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
260 Value.Filter filter = new And() |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
261 .add(notEpochs) |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
262 .add(new TimeRangeIntersects(year)); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
263 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
264 for (GrainFraction gf: GRAIN_FRACTIONS) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
265 double [][] result = sum( |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
266 sld, gf.getGrainFractions(), filter, sum, isKmUp, |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
267 missingFractions); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
268 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
269 if (result[0].length == 0 || DoubleUtil.isNaN(result[1])) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
270 // TODO: resolve i18n |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
271 addProblem("minfo.sediment.load.no.fractions", |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
272 gf.getDescription()); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
273 continue; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
274 } |
8066
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
275 |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
276 transformT2M3(sd, year, result); |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
277 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
278 SedimentLoadDataResult.Fraction sldrf = |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
279 new SedimentLoadDataResult.Fraction(gf.getDescription(), result); |
8066
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
280 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
281 sldr.addFraction(sldrf); |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
282 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
283 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
284 // TODO: Generate messages for missing fractions. |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
285 return new CalculationResult(sldr, this); |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
286 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
287 |
8066
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
288 |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
289 private CalculationResult calculateEpochs() { |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
290 SedimentLoadData sld = |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
291 SedimentLoadDataFactory.INSTANCE.getSedimentLoadData(river); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
292 if (sld == null) { |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
293 // TODO: i18n |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
294 return error("minfo.sediment.load.no.data"); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
295 } |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
296 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
297 SedimentLoadDataResult sldr = new SedimentLoadDataResult(); |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
298 |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
299 boolean isKmUp = isKmUp(); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
300 Set<Integer> missingFractions = new TreeSet<Integer>(); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
301 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
302 // They are not epochs, they are single years! |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
303 Not notEpochs = new Not(IsEpoch.INSTANCE); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
304 |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
305 for (int [] epoch: epochs) { |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
306 Value.Filter filter = new And() |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
307 .add(notEpochs) |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
308 .add(new TimeRangeIntersects(epoch[0], epoch[1])); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
309 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
310 Avg avg = new Avg(); |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
311 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
312 for (GrainFraction gf: GRAIN_FRACTIONS) { |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
313 double [][] result = sum( |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
314 sld, gf.getGrainFractions(), filter, avg, isKmUp, |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
315 missingFractions); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
316 |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
317 if (result[0].length == 0 || DoubleUtil.isNaN(result[1])) { |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
318 // TODO: resolve i18n |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
319 addProblem("minfo.sediment.load.no.fractions", |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
320 gf.getDescription()); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
321 continue; |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
322 } |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
323 // TODO: Optionally transform units. |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
324 SedimentLoadDataResult.Fraction sldrf = |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
325 new SedimentLoadDataResult.Fraction(gf.getDescription(), result); |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
326 sldr.addFraction(sldrf); |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
327 } |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
328 } |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
329 // TODO: Generate messages for missing fractions. |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
330 return new CalculationResult(sldr, this); |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
331 } |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
332 |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
333 private CalculationResult calculateOffEpochs() { |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
334 SedimentLoadData sld = |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
335 SedimentLoadDataFactory.INSTANCE.getSedimentLoadData(river); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
336 if (sld == null) { |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
337 // TODO: i18n |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
338 return error("minfo.sediment.load.no.data"); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
339 } |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
340 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
341 SedimentLoadDataResult sldr = new SedimentLoadDataResult(); |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
342 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
343 boolean isKmUp = isKmUp(); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
344 Set<Integer> missingFractions = new TreeSet<Integer>(); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
345 |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
346 for (int [] epoch: epochs) { |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
347 Value.Filter filter = new And() |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
348 .add(IsOfficial.INSTANCE) |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
349 .add(new TimeRangeIntersects(epoch[0], epoch[1])); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
350 |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
351 Sum sum = new Sum(); |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
352 |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
353 for (GrainFraction gf: GRAIN_FRACTIONS) { |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
354 double [][] result = sum( |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
355 sld, gf.getGrainFractions(), filter, sum, isKmUp, |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
356 missingFractions); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
357 |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
358 if (result[0].length == 0 || DoubleUtil.isNaN(result[1])) { |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
359 // TODO: resolve i18n |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
360 addProblem("minfo.sediment.load.no.fractions", |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
361 gf.getDescription()); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
362 continue; |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
363 } |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
364 // TODO: Optionally transform units. |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
365 SedimentLoadDataResult.Fraction sldrf = |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
366 new SedimentLoadDataResult.Fraction(gf.getDescription(), result); |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
367 sldr.addFraction(sldrf); |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
368 } |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
369 } |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
370 // TODO: Generate messages for missing fractions. |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
371 return new CalculationResult(sldr, this); |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
372 } |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
373 |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
374 /** Figure out flow direction of river. */ |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
375 private boolean isKmUp() { |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
376 River r = RiverFactory.getRiver(river); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
377 if (r == null) { |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
378 addProblem("minfo.missing.river"); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
379 return true; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
380 } |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
381 return r.getKmUp(); |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
382 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
383 |
8066
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
384 private final boolean inM3() { |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
385 return unit.equals("m3_per_a"); |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
386 } |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
387 |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
388 private SedimentDensity getSedimentDensity() { |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
389 return inM3() |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
390 ? SedimentDensityFactory.getSedimentDensity(river, from, to) |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
391 : null; |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
392 } |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
393 |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
394 private static void transformT2M3(SedimentDensity sd, int year, double [][] data) { |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
395 if (sd == null) { |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
396 return; |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
397 } |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
398 double [] kms = data[0]; |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
399 double [] values = data[1]; |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
400 for (int i = 0; i < kms.length; ++i) { |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
401 if (Double.isNaN(kms[i]) || Double.isNaN(kms[i])) { |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
402 continue; |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
403 } |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
404 double density = sd.getDensity(kms[i], year); |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
405 values[i] /= density; |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
406 } |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
407 } |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
408 |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
409 public double[][] sum( |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
410 SedimentLoadData sld, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
411 int [] grainFractions, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
412 Value.Filter filter, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
413 Sum sum, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
414 boolean isKMUp, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
415 Set<Integer> missingFractions |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
416 ) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
417 List<Station> stations = sld.findStations(from, to); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
418 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
419 double [] values = new double[grainFractions.length]; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
420 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
421 double [][] result = new double[2][stations.size()]; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
422 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
423 for (int j = 0, S = stations.size(); j < S; ++j) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
424 Station station = stations.get(j); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
425 for (int i = 0; i < grainFractions.length; ++i) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
426 int gf = grainFractions[i]; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
427 sum.reset(); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
428 station.filterGrainFraction(gf, filter, sum); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
429 if (sum.getN() == 0) { // No values found |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
430 int msType = SedimentLoadData.measurementStationType(gf); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
431 // Station of right fraction type already? No: take previous. |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
432 if (!station.isType(msType)) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
433 Station prev = station.prevByType(msType, isKMUp); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
434 if (prev != null) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
435 prev.filterGrainFraction(gf, filter, sum); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
436 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
437 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
438 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
439 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
440 if (sum.getN() == 0) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
441 missingFractions.add(gf); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
442 values[i] = Double.NaN; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
443 } else { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
444 values[i] = sum.getSum(); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
445 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
446 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
447 result[0][j] = station.getStation(); |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
448 result[1][j] = DoubleUtil.sum(values); |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
449 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
450 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
451 // TODO: Handle 'virtual' measument stations 'from' and 'to'. |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
452 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
453 return result; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
454 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
455 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
456 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : |