Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadDataCalculation.java @ 8175:d2673ca68e70
Precalculated sums from the database will come through recommendations.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Tue, 02 Sep 2014 17:10:22 +0200 |
parents | f2bbe09e516e |
children | 7b0b3b1a2ee8 |
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 |
8175
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
82 public static final int [] AVERAGE = { |
8130
bbad52b073a4
Use old names for SedimentloadDataFractions and add average fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8084
diff
changeset
|
83 SedimentLoadData.GF_AVERAGE |
bbad52b073a4
Use old names for SedimentloadDataFractions and add average fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8084
diff
changeset
|
84 }; |
bbad52b073a4
Use old names for SedimentloadDataFractions and add average fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8084
diff
changeset
|
85 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
86 public static final class GrainFraction { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
87 private String description; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
88 private int [] grainFractions; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
89 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
90 public GrainFraction(String description, int [] grainFractions) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
91 this.description = description; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
92 this.grainFractions = grainFractions; |
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 static final GrainFraction make(String description, int [] grainFractions) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
95 return new GrainFraction(description, grainFractions); |
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 String getDescription() { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
99 return description; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
100 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
101 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
102 public int [] getGrainFractions() { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
103 return grainFractions; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
104 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
105 } // class GrainFraction |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
106 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
107 public static final GrainFraction [] GRAIN_FRACTIONS = { |
8130
bbad52b073a4
Use old names for SedimentloadDataFractions and add average fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8084
diff
changeset
|
108 // TODO: i18n for bfg parts |
bbad52b073a4
Use old names for SedimentloadDataFractions and add average fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8084
diff
changeset
|
109 // Grain fraction names are alignt to the grain_fractions table |
8175
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
110 GrainFraction.make("total", TOTAL_LOAD), |
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
111 GrainFraction.make("bed_load", BED_LOAD), |
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
112 GrainFraction.make("bed_load_susp_sand", BED_LOAD_SUSP_SAND), |
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
113 GrainFraction.make("coarse", COARSE), |
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
114 GrainFraction.make("fine_middle", FINE_MIDDLE), |
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
115 GrainFraction.make("sand", SAND) , |
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
116 GrainFraction.make("susp_sand", SUSP_SAND), |
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
117 GrainFraction.make("susp_sand_bed", SUSP_SAND_BED), |
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
118 GrainFraction.make("suspended_sediment", SUSP_SEDIMENT), |
d2673ca68e70
Precalculated sums from the database will come through recommendations.
Tom Gottfried <tom@intevation.de>
parents:
8172
diff
changeset
|
119 GrainFraction.make("average", AVERAGE), |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
120 }; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
121 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
122 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
|
123 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
124 protected int n; |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
125 protected double 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 public Sum() { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
128 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
129 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
130 public double getSum() { |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
131 return sum; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
132 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
133 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
134 public int getN() { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
135 return n; |
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 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
138 public void reset() { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
139 n = 0; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
140 sum = 0.0; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
141 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
142 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
143 @Override |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
144 public void visit(Value value) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
145 sum += value.getValue(); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
146 ++n; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
147 } |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
148 } // class Sum |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
149 |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
150 private String river; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
151 private String yearEpoch; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
152 private String unit; |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
153 private int [][] epochs; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
154 private int [] years; |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
155 private double from; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
156 private double to; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
157 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
158 |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
159 public SedimentLoadDataCalculation() { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
160 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
161 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
162 public CalculationResult calculate(SedimentLoadAccess access) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
163 log.info("SedimentLoadDataCalculation.calculate"); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
164 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
165 String river = access.getRiverName(); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
166 String yearEpoch = access.getYearEpoch(); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
167 String unit = access.getUnit(); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
168 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
169 int [] years = null; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
170 int [][] epochs = null; |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
171 |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
172 double from = access.getLowerKM(); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
173 double to = access.getUpperKM(); |
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 if (yearEpoch.equals("year")) { |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
176 years = access.getPeriod(); |
8052
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 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
|
179 epochs = access.getEpochs(); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
180 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
181 else { |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
182 addProblem("minfo.missing.year_epoch"); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
183 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
184 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
185 if (river == null) { |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
186 // TODO: i18n |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
187 addProblem("minfo.missing.river"); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
188 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
189 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
190 if (years == null && epochs == null) { |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
191 addProblem("minfo.missing.time"); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
192 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
193 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
194 if (!hasProblems()) { |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
195 this.river = river; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
196 this.yearEpoch = yearEpoch; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
197 this.unit = unit; |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
198 this.years = years; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
199 this.epochs = epochs; |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
200 this.from = from; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
201 this.to = to; |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
202 return internalCalculate(); |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
203 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
204 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
205 return error(null); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
206 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
207 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
208 private CalculationResult error(String msg) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
209 if (msg != null) addProblem(msg); |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
210 return new CalculationResult(this); |
8052
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
211 } |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
212 |
1dae69eff79d
Sediment load: take arguments from sediment access.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8050
diff
changeset
|
213 private CalculationResult internalCalculate() { |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
214 if ("year".equals(yearEpoch)) return calculateYears(); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
215 if ("epoch".equals(yearEpoch)) return calculateEpochs(); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
216 if ("off_epoch".equals(yearEpoch)) return calculateOffEpochs(); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
217 |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
218 // TODO: i18n |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
219 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
|
220 } |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
221 |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
222 private CalculationResult calculateYears() { |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
223 SedimentLoadData sld = |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
224 SedimentLoadDataFactory.INSTANCE.getSedimentLoadData(river); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
225 if (sld == null) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
226 // TODO: i18n |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
227 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
|
228 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
229 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
230 SedimentLoadDataResult sldr = new SedimentLoadDataResult(); |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
231 |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
232 boolean isKmUp = isKmUp(); |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
233 Set<Integer> missingFractions = new TreeSet<Integer>(); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
234 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
235 Not notEpochs = new Not(IsEpoch.INSTANCE); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
236 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
237 Sum sum = new Sum(); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
238 |
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
|
239 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
|
240 |
8145
52504fc2cd58
Calculate all single years in given interval but only once.
Tom Gottfried <tom@intevation.de>
parents:
8131
diff
changeset
|
241 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
|
242 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
|
243 |
52504fc2cd58
Calculate all single years in given interval but only once.
Tom Gottfried <tom@intevation.de>
parents:
8131
diff
changeset
|
244 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
|
245 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
|
246 .add(new TimeRangeIntersects(year)); |
8131
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
247 String period = Integer.toString(year); |
8055
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 for (GrainFraction gf: GRAIN_FRACTIONS) { |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
250 double [][] result = sum( |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
251 sld, gf.getGrainFractions(), filter, sum, isKmUp, |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
252 missingFractions); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
253 |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
254 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
|
255 // TODO: resolve i18n |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
256 addProblem("minfo.sediment.load.no.fractions", |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
257 gf.getDescription()); |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
258 continue; |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
259 } |
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 |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
261 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
|
262 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
263 SedimentLoadDataResult.Fraction sldrf = |
8131
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
264 new SedimentLoadDataResult.Fraction(gf.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
|
265 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
266 sldr.addFraction(sldrf); |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
267 } |
8145
52504fc2cd58
Calculate all single years in given interval but only once.
Tom Gottfried <tom@intevation.de>
parents:
8131
diff
changeset
|
268 |
8055
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
269 } |
cd35b76f1ef8
Sediment load. More off year based calculations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8053
diff
changeset
|
270 // 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
|
271 return new CalculationResult(sldr, this); |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
272 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
273 |
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
|
274 |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
275 private CalculationResult calculateEpochs() { |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
276 SedimentLoadData sld = |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
277 SedimentLoadDataFactory.INSTANCE.getSedimentLoadData(river); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
278 if (sld == null) { |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
279 // TODO: i18n |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
280 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
|
281 } |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
282 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
283 SedimentLoadDataResult sldr = new SedimentLoadDataResult(); |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
284 |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
285 boolean isKmUp = isKmUp(); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
286 Set<Integer> missingFractions = new TreeSet<Integer>(); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
287 |
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
|
288 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
|
289 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
290 // 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
|
291 Not notEpochs = new Not(IsEpoch.INSTANCE); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
292 |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
293 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
|
294 List<double [][]> results = new ArrayList<double [][]>(); |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
295 |
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 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
|
297 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
|
298 |
8131
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
299 String period = Integer.toString(epoch[0]) + " - " + |
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
300 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
|
301 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
|
302 Value.Filter filter = new And(notEpochs) |
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
|
303 .add(new TimeRangeIntersects(year)); |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
304 |
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 Sum sum = new 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
|
306 |
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 for (GrainFraction gf: GRAIN_FRACTIONS) { |
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 double [][] result = 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
|
309 sld, gf.getGrainFractions(), filter, sum, isKmUp, |
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 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
|
311 |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
312 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
|
313 // 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
|
314 addProblem("minfo.sediment.load.no.fractions", |
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 gf.getDescription()); |
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 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
|
317 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
318 |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
319 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
|
320 results.add(result); |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
321 } |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
322 } |
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
|
323 |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
324 double [][] result = average(results); |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
325 // TODO: Optionally transform units. |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
326 SedimentLoadDataResult.Fraction sldrf = |
8131
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
327 new SedimentLoadDataResult.Fraction("TODO: nice description", result, period); |
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
|
328 sldr.addFraction(sldrf); |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
329 } |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
330 // 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
|
331 return new CalculationResult(sldr, this); |
8060
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 |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
334 private CalculationResult calculateOffEpochs() { |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
335 SedimentLoadData sld = |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
336 SedimentLoadDataFactory.INSTANCE.getSedimentLoadData(river); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
337 if (sld == null) { |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
338 // TODO: i18n |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
339 return error("minfo.sediment.load.no.data"); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
340 } |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
341 |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
342 SedimentLoadDataResult sldr = new SedimentLoadDataResult(); |
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
343 |
8068
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
344 SedimentDensity sd = getSedimentDensity(); |
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
345 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
346 boolean isKmUp = isKmUp(); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
347 Set<Integer> missingFractions = new TreeSet<Integer>(); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
348 |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
349 for (int [] epoch: epochs) { |
8068
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
350 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
|
351 .add(new TimeRangeIntersects(epoch[0], epoch[1])); |
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
352 |
8068
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
353 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
|
354 |
8131
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
355 String period = Integer.toString(epoch[0]) + " - " + |
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
356 Integer.toString(epoch[1]); |
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
357 |
8060
25feef564d09
Sediment load: More of official epochs.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8057
diff
changeset
|
358 Sum sum = new Sum(); |
8057
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
359 |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
360 for (GrainFraction gf: GRAIN_FRACTIONS) { |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
361 double [][] result = sum( |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
362 sld, gf.getGrainFractions(), filter, sum, isKmUp, |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
363 missingFractions); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
364 |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
365 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
|
366 // TODO: resolve i18n |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
367 addProblem("minfo.sediment.load.no.fractions", |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
368 gf.getDescription()); |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
369 continue; |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
370 } |
8068
9ecd6267323b
Sediment load: transform units for official epochs, too.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8067
diff
changeset
|
371 transformT2M3(sd, year, result); |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
372 SedimentLoadDataResult.Fraction sldrf = |
8131
fae48b3c09d1
Add period to sedimentloaddataresult fraction
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8130
diff
changeset
|
373 new SedimentLoadDataResult.Fraction(gf.getDescription(), result, period); |
8062
8489565ff563
Sedimen load: Added bundle for fraction results.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8060
diff
changeset
|
374 sldr.addFraction(sldrf); |
8057
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 } |
555dc5a9b282
Sediment load: More on calculating epoch loads.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8055
diff
changeset
|
377 // 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
|
378 return new CalculationResult(sldr, this); |
8053
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 |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
381 /** 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
|
382 private final boolean isKmUp() { |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
383 River r = RiverFactory.getRiver(river); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
384 if (r == null) { |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
385 addProblem("minfo.missing.river"); |
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
386 return true; |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
387 } |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
388 return r.getKmUp(); |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
389 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
390 |
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
|
391 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
|
392 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
|
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 |
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 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
|
396 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
|
397 ? 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
|
398 : 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
|
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 |
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 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
|
402 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
|
403 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
|
404 } |
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 [] 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
|
406 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
|
407 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
|
408 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
|
409 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
|
410 } |
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 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
|
412 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
|
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 } |
fe5ef780f8b1
Sediment load: fetch sediment density for transforming t/a to m^3/a.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8062
diff
changeset
|
415 |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
416 public double[][] sum( |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
417 SedimentLoadData sld, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
418 int [] grainFractions, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
419 Value.Filter filter, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
420 Sum sum, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
421 boolean isKMUp, |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
422 Set<Integer> missingFractions |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
423 ) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
424 List<Station> stations = sld.findStations(from, to); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
425 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
426 double [] values = new double[grainFractions.length]; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
427 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
428 double [][] result = new double[2][stations.size()]; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
429 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
430 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
|
431 Station station = stations.get(j); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
432 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
|
433 int gf = grainFractions[i]; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
434 sum.reset(); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
435 station.filterGrainFraction(gf, filter, sum); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
436 if (sum.getN() == 0) { // No values found |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
437 int msType = SedimentLoadData.measurementStationType(gf); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
438 // 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
|
439 if (!station.isType(msType)) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
440 Station prev = station.prevByType(msType, isKMUp); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
441 if (prev != null) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
442 prev.filterGrainFraction(gf, filter, sum); |
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 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
447 if (sum.getN() == 0) { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
448 missingFractions.add(gf); |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
449 values[i] = Double.NaN; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
450 } else { |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
451 values[i] = sum.getSum(); |
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 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
454 result[0][j] = station.getStation(); |
8053
72760ca2fc2b
Sediment load: dispatch calculation modes.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8052
diff
changeset
|
455 result[1][j] = DoubleUtil.sum(values); |
8049
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 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
458 // 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
|
459 |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
460 return result; |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
461 } |
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
|
462 |
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 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
|
464 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
|
465 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
|
466 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
|
467 } |
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 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
|
469 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
|
470 ++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
|
471 } |
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 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
|
473 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
|
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 |
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 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
|
478 |
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 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
|
480 |
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 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
|
482 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
|
483 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
|
484 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
|
485 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
|
486 double v = vs[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
|
487 if (Double.isNaN(km) || Double.isNaN(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
|
488 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
|
489 } |
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 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
|
491 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
|
492 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
|
493 } |
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 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
|
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 |
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 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
|
499 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
|
500 for (Map.Entry<Double, XSum> entry: map.entrySet()) { |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
501 result[i][0] = entry.getKey(); |
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 result[i][1] = entry.getValue().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
|
503 ++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
|
504 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
505 |
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 return 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
|
507 } |
6d24ba2ac964
Sediment load: refactored epoch calculation to not average over all but per year.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8066
diff
changeset
|
508 |
8049
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
509 } |
d49846f05108
Sediment load: (incomplete) new sediment load calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
510 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : |