Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadDataCalculation.java @ 8185:76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Thu, 04 Sep 2014 12:03:02 +0200 |
parents | 7b0b3b1a2ee8 |
children | 8d447516b7dd |
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 |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
10 import java.util.ArrayList; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
11 import java.util.List; |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
12 import java.util.Map; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
13 import java.util.Set; |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
14 import java.util.TreeMap; |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
15 import java.util.TreeSet; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
16 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
17 import org.dive4elements.river.artifacts.access.SedimentLoadAccess; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
18 import org.dive4elements.river.artifacts.model.Calculation; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
19 import org.dive4elements.river.artifacts.model.CalculationResult; |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
20 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
|
21 import org.apache.log4j.Logger; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
22 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
|
23 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
|
24 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
|
25 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
|
26 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
|
27 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
|
28 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
|
29 import org.dive4elements.river.model.River; |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
30 import org.dive4elements.river.utils.DoubleUtil; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
31 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
32 public class SedimentLoadDataCalculation |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
33 extends Calculation |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
34 { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
35 private static final Logger log = Logger |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
36 .getLogger(SedimentLoadDataCalculation.class); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
37 |
8175
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
38 public static final int [] TOTAL_LOAD = { |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
39 SedimentLoadData.GF_COARSE, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
40 SedimentLoadData.GF_FINE_MIDDLE, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
41 SedimentLoadData.GF_SAND, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
42 SedimentLoadData.GF_SUSP_SEDIMENT |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
43 }; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
44 |
8175
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
45 public static final int [] BED_LOAD = { |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
46 SedimentLoadData.GF_COARSE, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
47 SedimentLoadData.GF_FINE_MIDDLE, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
48 SedimentLoadData.GF_SAND |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
49 }; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
50 |
8175
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
51 public static final int [] BED_LOAD_SUSP_SAND = { |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
52 SedimentLoadData.GF_COARSE, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
53 SedimentLoadData.GF_FINE_MIDDLE, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
54 SedimentLoadData.GF_SAND, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
55 SedimentLoadData.GF_SUSP_SAND |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
56 }; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
57 |
8175
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
58 public static final int [] COARSE = { |
8050
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
59 SedimentLoadData.GF_COARSE |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
60 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
61 |
8175
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
62 public static final int [] FINE_MIDDLE = { |
8050
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
63 SedimentLoadData.GF_FINE_MIDDLE |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
64 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
65 |
8175
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
66 public static final int [] SAND = { |
8050
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
67 SedimentLoadData.GF_SAND |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
68 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
69 |
8175
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
70 public static final int [] SUSP_SAND = { |
8050
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
71 SedimentLoadData.GF_SUSP_SAND |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
72 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
73 |
8175
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
74 public static final int [] SUSP_SAND_BED = { |
8050
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
75 SedimentLoadData.GF_SUSP_SAND_BED |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
76 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
77 |
8175
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
78 public static final int [] SUSP_SEDIMENT = { |
8050
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
79 SedimentLoadData.GF_SUSP_SEDIMENT |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
80 }; |
9e79e384aa8b
Sediment load: Added more 'sums' to be calculated.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8049
diff
changeset
|
81 |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
82 public static final class LoadSum { |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
83 private String description; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
84 private int [] grainFractions; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
85 |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
86 public LoadSum(String description, int [] grainFractions) { |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
87 this.description = description; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
88 this.grainFractions = grainFractions; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
89 } |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
90 public static final LoadSum make(String description, int [] grainFractions) { |
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
91 return new LoadSum(description, grainFractions); |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
92 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
93 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
94 public String getDescription() { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
95 return description; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
96 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
97 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
98 public int [] getGrainFractions() { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
99 return grainFractions; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
100 } |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
101 } // class LoadSum |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
102 |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
103 public static final LoadSum [] LOAD_SUMS = { |
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
104 // Names are alignt to the grain_fractions table |
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
105 LoadSum.make("total", TOTAL_LOAD), |
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
106 LoadSum.make("bed_load", BED_LOAD), |
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
107 LoadSum.make("bed_load_susp_sand", BED_LOAD_SUSP_SAND), |
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
108 LoadSum.make("coarse", COARSE), |
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
109 LoadSum.make("fine_middle", FINE_MIDDLE), |
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
110 LoadSum.make("sand", SAND) , |
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
111 LoadSum.make("susp_sand", SUSP_SAND), |
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
112 LoadSum.make("susp_sand_bed", SUSP_SAND_BED), |
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
113 LoadSum.make("suspended_sediment", SUSP_SEDIMENT), |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
114 }; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
115 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
116 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
|
117 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
118 protected int n; |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
119 protected double sum; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
120 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
121 public Sum() { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
122 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
123 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
124 public double getSum() { |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
125 return sum; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
126 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
127 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
128 public int getN() { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
129 return n; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
130 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
131 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
132 public void reset() { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
133 n = 0; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
134 sum = 0.0; |
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 @Override |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
138 public void visit(Value value) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
139 sum += value.getValue(); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
140 ++n; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
141 } |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
142 } // class Sum |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
143 |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
144 private String river; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
145 private String yearEpoch; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
146 private String unit; |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
147 private int [][] epochs; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
148 private int [] years; |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
149 private double from; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
150 private double to; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
151 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
152 |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
153 public SedimentLoadDataCalculation() { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
154 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
155 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
156 public CalculationResult calculate(SedimentLoadAccess access) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
157 log.info("SedimentLoadDataCalculation.calculate"); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
158 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
159 String river = access.getRiverName(); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
160 String yearEpoch = access.getYearEpoch(); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
161 String unit = access.getUnit(); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
162 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
163 int [] years = null; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
164 int [][] epochs = null; |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
165 |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
166 double from = access.getLowerKM(); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
167 double to = access.getUpperKM(); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
168 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
169 if (yearEpoch.equals("year")) { |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
170 years = access.getPeriod(); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
171 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
172 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
|
173 epochs = access.getEpochs(); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
174 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
175 else { |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
176 addProblem("minfo.missing.year_epoch"); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
177 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
178 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
179 if (river == null) { |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
180 // TODO: i18n |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
181 addProblem("minfo.missing.river"); |
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 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
184 if (years == null && epochs == null) { |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
185 addProblem("minfo.missing.time"); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
186 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
187 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
188 if (!hasProblems()) { |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
189 this.river = river; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
190 this.yearEpoch = yearEpoch; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
191 this.unit = unit; |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
192 this.years = years; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
193 this.epochs = epochs; |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
194 this.from = from; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
195 this.to = to; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
196 return internalCalculate(); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
197 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
198 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
199 return error(null); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
200 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
201 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
202 private CalculationResult error(String msg) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
203 if (msg != null) addProblem(msg); |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
204 return new CalculationResult(this); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
205 } |
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 private CalculationResult internalCalculate() { |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
208 if ("year".equals(yearEpoch)) return calculateYears(); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
209 if ("epoch".equals(yearEpoch)) return calculateEpochs(); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
210 if ("off_epoch".equals(yearEpoch)) return calculateOffEpochs(); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
211 |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
212 // TODO: i18n |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
213 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
|
214 } |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
215 |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
216 private CalculationResult calculateYears() { |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
217 SedimentLoadData sld = |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
218 SedimentLoadDataFactory.INSTANCE.getSedimentLoadData(river); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
219 if (sld == null) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
220 // TODO: i18n |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
221 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
|
222 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
223 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
224 SedimentLoadDataResult sldr = new SedimentLoadDataResult(); |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
225 |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
226 boolean isKmUp = isKmUp(); |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
227 Set<Integer> missingFractions = new TreeSet<Integer>(); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
228 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
229 Not notEpochs = new Not(IsEpoch.INSTANCE); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
230 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
231 Sum sum = new Sum(); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
232 |
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
|
233 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
|
234 |
8145
52504fc2cd58
Calculate all single years in given interval but only once.
Tom Gottfried <tom@intevation.de>
parents:
8131
diff
changeset
|
235 int min = Math.min(years[0], years[1]); |
52504fc2cd58
Calculate all single years in given interval but only once.
Tom Gottfried <tom@intevation.de>
parents:
8131
diff
changeset
|
236 int max = Math.max(years[0], years[1]); |
52504fc2cd58
Calculate all single years in given interval but only once.
Tom Gottfried <tom@intevation.de>
parents:
8131
diff
changeset
|
237 |
52504fc2cd58
Calculate all single years in given interval but only once.
Tom Gottfried <tom@intevation.de>
parents:
8131
diff
changeset
|
238 for (int year = min; year <= max; ++year) { |
8068
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
239 Value.Filter filter = new And(notEpochs) |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
240 .add(new TimeRangeIntersects(year)); |
8131
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
241 String period = Integer.toString(year); |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
242 |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
243 for (LoadSum ls: LOAD_SUMS) { |
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
244 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
245 double [][] result = sum( |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
246 sld, ls.getGrainFractions(), filter, sum, isKmUp, |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
247 missingFractions); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
248 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
249 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
|
250 // TODO: resolve i18n |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
251 addProblem("minfo.sediment.load.no.fractions", |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
252 ls.getDescription()); |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
253 continue; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
254 } |
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
|
255 |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
256 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
|
257 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
258 SedimentLoadDataResult.Fraction sldrf = |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
259 new SedimentLoadDataResult.Fraction(ls.getDescription(), result, period); |
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
|
260 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
261 sldr.addFraction(sldrf); |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
262 } |
8145
52504fc2cd58
Calculate all single years in given interval but only once.
Tom Gottfried <tom@intevation.de>
parents:
8131
diff
changeset
|
263 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
264 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
265 // 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
|
266 return new CalculationResult(sldr, this); |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
267 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
268 |
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
|
269 |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
270 private CalculationResult calculateEpochs() { |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
271 SedimentLoadData sld = |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
272 SedimentLoadDataFactory.INSTANCE.getSedimentLoadData(river); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
273 if (sld == null) { |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
274 // TODO: i18n |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
275 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
|
276 } |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
277 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
278 SedimentLoadDataResult sldr = new SedimentLoadDataResult(); |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
279 |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
280 boolean isKmUp = isKmUp(); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
281 Set<Integer> missingFractions = new TreeSet<Integer>(); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
282 |
8176
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
283 Sum sum = new Sum(); |
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
284 |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
285 SedimentDensity sd = getSedimentDensity(); |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
286 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
287 // 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
|
288 Not notEpochs = new Not(IsEpoch.INSTANCE); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
289 |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
290 for (int [] epoch: epochs) { |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
291 int min = Math.min(epoch[0], epoch[1]); |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
292 int max = Math.max(epoch[0], epoch[1]); |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
293 |
8131
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
294 String period = Integer.toString(epoch[0]) + " - " + |
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
295 Integer.toString(epoch[1]); |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
296 |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
297 for (LoadSum ls: LOAD_SUMS) { |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
298 |
8176
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
299 List<double [][]> results = new ArrayList<double [][]>(); |
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
300 |
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
301 for (int year = min; year <= max; ++year) { |
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
302 Value.Filter filter = new And(notEpochs) |
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
303 .add(new TimeRangeIntersects(year)); |
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
304 |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
305 double [][] result = sum( |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
306 sld, ls.getGrainFractions(), filter, sum, isKmUp, |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
307 missingFractions); |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
308 |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
309 if (result[0].length == 0 || DoubleUtil.isNaN(result[1])) { |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
310 // TODO: resolve i18n |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
311 addProblem("minfo.sediment.load.no.fractions", |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
312 ls.getDescription()); |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
313 continue; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
314 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
315 |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
316 transformT2M3(sd, year, result); |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
317 results.add(result); |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
318 } |
8176
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
319 |
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
320 double [][] result = average(results); |
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
321 |
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
322 SedimentLoadDataResult.Fraction sldrf = |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
323 new SedimentLoadDataResult.Fraction(ls.getDescription(), |
8176
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
324 result, period); |
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
325 sldr.addFraction(sldrf); |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
326 } |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
327 |
8060
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 |
8068
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
343 SedimentDensity sd = getSedimentDensity(); |
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
344 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
345 boolean isKmUp = isKmUp(); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
346 Set<Integer> missingFractions = new TreeSet<Integer>(); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
347 |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
348 for (int [] epoch: epochs) { |
8068
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
349 Value.Filter filter = new And(IsOfficial.INSTANCE) |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
350 .add(new TimeRangeIntersects(epoch[0], epoch[1])); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
351 |
8068
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
352 int year = Math.min(epoch[0], epoch[1]); |
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
353 |
8131
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
354 String period = Integer.toString(epoch[0]) + " - " + |
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
355 Integer.toString(epoch[1]); |
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
356 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
357 Sum sum = new Sum(); |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
358 |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
359 for (LoadSum ls: LOAD_SUMS) { |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
360 double [][] result = sum( |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
361 sld, ls.getGrainFractions(), filter, sum, isKmUp, |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
362 missingFractions); |
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 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
|
365 // TODO: resolve i18n |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
366 addProblem("minfo.sediment.load.no.fractions", |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
367 ls.getDescription()); |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
368 continue; |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
369 } |
8068
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
370 transformT2M3(sd, year, result); |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
371 SedimentLoadDataResult.Fraction sldrf = |
8185
76e1e9d81ce2
Removed obsolete average and renamed some symbols to make the difference between single fractions and sums of them clearer in the calculation.
Tom Gottfried <tom@intevation.de>
parents:
8176
diff
changeset
|
372 new SedimentLoadDataResult.Fraction(ls.getDescription(), result, period); |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
373 sldr.addFraction(sldrf); |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
374 } |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
375 } |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
376 // 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
|
377 return new CalculationResult(sldr, this); |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
378 } |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
379 |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
380 /** Figure out flow direction of river. */ |
8068
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
381 private final boolean isKmUp() { |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
382 River r = RiverFactory.getRiver(river); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
383 if (r == null) { |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
384 addProblem("minfo.missing.river"); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
385 return true; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
386 } |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
387 return r.getKmUp(); |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
388 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
389 |
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
|
390 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
|
391 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
|
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 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
|
395 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
|
396 ? 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
|
397 : 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
|
398 } |
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 |
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 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
|
401 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
|
402 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
|
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 [] 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
|
405 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
|
406 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
|
407 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
|
408 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
|
409 } |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
410 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
|
411 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
|
412 } |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
413 } |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
414 |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
415 public double[][] sum( |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
416 SedimentLoadData sld, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
417 int [] grainFractions, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
418 Value.Filter filter, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
419 Sum sum, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
420 boolean isKMUp, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
421 Set<Integer> missingFractions |
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 List<Station> stations = sld.findStations(from, to); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
424 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
425 double [] values = new double[grainFractions.length]; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
426 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
427 double [][] result = new double[2][stations.size()]; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
428 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
429 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
|
430 Station station = stations.get(j); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
431 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
|
432 int gf = grainFractions[i]; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
433 sum.reset(); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
434 station.filterGrainFraction(gf, filter, sum); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
435 if (sum.getN() == 0) { // No values found |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
436 int msType = SedimentLoadData.measurementStationType(gf); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
437 // 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
|
438 if (!station.isType(msType)) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
439 Station prev = station.prevByType(msType, isKMUp); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
440 if (prev != null) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
441 prev.filterGrainFraction(gf, filter, sum); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
442 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
443 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
444 } |
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 if (sum.getN() == 0) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
447 missingFractions.add(gf); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
448 values[i] = Double.NaN; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
449 } else { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
450 values[i] = sum.getSum(); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
451 } |
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 result[0][j] = station.getStation(); |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
454 result[1][j] = DoubleUtil.sum(values); |
8049
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 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
457 // 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
|
458 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
459 return result; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
460 } |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
461 |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
462 private static final class XSum { |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
463 private double sum; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
464 private int n; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
465 public XSum() { |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
466 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
467 public void add(double v) { |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
468 sum += v; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
469 ++n; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
470 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
471 public double avg() { |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
472 return sum/n; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
473 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
474 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
475 |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
476 private static double [][] average(List<double [][]> data) { |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
477 |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
478 TreeMap<Double, XSum> map = new TreeMap<Double, XSum>(); |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
479 |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
480 for (double [][] pair: data) { |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
481 double [] kms = pair[0]; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
482 double [] vs = pair[1]; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
483 for (int i = 0; i < kms.length; ++i) { |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
484 double km = kms[i]; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
485 double v = vs[i]; |
8176
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
486 if (Double.isNaN(km)) { |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
487 continue; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
488 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
489 XSum xsum = map.get(km); |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
490 if (xsum == null) { |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
491 map.put(km, xsum = new XSum()); |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
492 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
493 xsum.add(v); |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
494 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
495 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
496 |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
497 double [][] result = new double[2][map.size()]; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
498 int i = 0; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
499 for (Map.Entry<Double, XSum> entry: map.entrySet()) { |
8176
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
500 result[0][i] = entry.getKey(); |
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
501 result[1][i] = entry.getValue().avg(); |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
502 ++i; |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
503 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
504 |
8176
7b0b3b1a2ee8
Let epochs be averages over their years.
Tom Gottfried <tom@intevation.de>
parents:
8175
diff
changeset
|
505 return result; |
8067
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
506 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
507 |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
508 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
509 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : |