Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentDensity.java @ 7460:2733b4aae74b
flys/issue1625: Changed default sediment density factor from 1.8 to 1.9 . The value can be changed by adusting conf.xml (/artifact-databae/options/sediment-density-factor/text()).
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Tue, 29 Oct 2013 19:46:41 +0100 |
parents | 2facd4066a28 |
children | 52c364813cb1 |
comparison
equal
deleted
inserted
replaced
7459:9434437a1ef5 | 7460:2733b4aae74b |
---|---|
6 * documentation coming with Dive4Elements River for details. | 6 * documentation coming with Dive4Elements River for details. |
7 */ | 7 */ |
8 | 8 |
9 package org.dive4elements.river.artifacts.model.minfo; | 9 package org.dive4elements.river.artifacts.model.minfo; |
10 | 10 |
11 import java.io.Serializable; | |
12 | |
11 import java.util.ArrayList; | 13 import java.util.ArrayList; |
12 import java.util.Collections; | 14 import java.util.Collections; |
13 import java.util.HashMap; | 15 import java.util.HashMap; |
14 import java.util.List; | 16 import java.util.List; |
15 import java.util.Map; | 17 import java.util.Map; |
16 import java.util.Set; | 18 import java.util.Set; |
17 import java.util.TreeMap; | 19 import java.util.TreeMap; |
18 | 20 |
19 import java.io.Serializable; | |
20 | |
21 import org.apache.log4j.Logger; | 21 import org.apache.log4j.Logger; |
22 | |
23 import org.dive4elements.artifacts.common.utils.Config; | |
22 | 24 |
23 | 25 |
24 /** Sediment Densities for multiple years. */ | 26 /** Sediment Densities for multiple years. */ |
25 public class SedimentDensity implements Serializable | 27 public class SedimentDensity implements Serializable |
26 { | 28 { |
27 private static final Logger logger = Logger | 29 private static final Logger logger = Logger |
28 .getLogger(SedimentDensity.class); | 30 .getLogger(SedimentDensity.class); |
29 | 31 |
32 public static final double DEFAULT_SEDIMNET_DENSITY_FACTOR = 1.9; | |
33 | |
34 public static String SEDIMENT_DENSITY_FACTOR_XPATH = | |
35 "/artifact-database/options/sediment-density-factor/text()"; | |
36 | |
37 public static final double SEDIMNET_DENSITY_FACTOR = | |
38 getSedimentDensityFactor(); | |
39 | |
30 private Map<Integer, List<SedimentDensityValue>> densities; | 40 private Map<Integer, List<SedimentDensityValue>> densities; |
31 private List<Integer> years; | 41 private List<Integer> years; |
42 | |
43 | |
44 /** Figures out the sediment density factor from global config. */ | |
45 private static final double getSedimentDensityFactor() { | |
46 | |
47 double factor = DEFAULT_SEDIMNET_DENSITY_FACTOR; | |
48 | |
49 String factorString = | |
50 Config.getStringXPath(SEDIMENT_DENSITY_FACTOR_XPATH); | |
51 | |
52 if (factorString != null) { | |
53 try { | |
54 factor = Double.parseDouble(factorString.trim()); | |
55 } | |
56 catch (NumberFormatException nfe) { | |
57 logger.error(nfe); | |
58 } | |
59 } | |
60 | |
61 logger.info("Sedmiment density factor: " + factor); | |
62 | |
63 return factor; | |
64 } | |
32 | 65 |
33 public SedimentDensity() { | 66 public SedimentDensity() { |
34 this.densities = new HashMap<Integer, List<SedimentDensityValue>>(); | 67 this.densities = new HashMap<Integer, List<SedimentDensityValue>>(); |
35 this.years = new ArrayList<Integer>(); | 68 this.years = new ArrayList<Integer>(); |
36 } | 69 } |
78 Collections.sort(this.years); | 111 Collections.sort(this.years); |
79 if (this.years.size() == 1 && years.get(0) <= year) { | 112 if (this.years.size() == 1 && years.get(0) <= year) { |
80 logger.debug("get density from year " + year + " at km " + km); | 113 logger.debug("get density from year " + year + " at km " + km); |
81 return getDensityAtKm(densities.get(years.get(0)), km); | 114 return getDensityAtKm(densities.get(years.get(0)), km); |
82 } | 115 } |
83 else if (this.years.size() > 1) { | 116 if (this.years.size() > 1) { |
84 for (int i = 0, I = years.size()-1; i < I; i++) { | 117 for (int i = 0, I = years.size()-1; i < I; i++) { |
85 int y1 = years.get(i); | 118 int y1 = years.get(i); |
86 int y2 = years.get(i + 1); | 119 int y2 = years.get(i + 1); |
87 if (year >= y1 && year < y2) { | 120 if (year >= y1 && year < y2) { |
88 return getDensityAtKm(densities.get(y1), km); | 121 return getDensityAtKm(densities.get(y1), km); |
90 else if (year >= y2 && i == years.size() -1) { | 123 else if (year >= y2 && i == years.size() -1) { |
91 return getDensityAtKm(densities.get(y2), km); | 124 return getDensityAtKm(densities.get(y2), km); |
92 } | 125 } |
93 } | 126 } |
94 } | 127 } |
95 return 1.8d; | 128 return SEDIMNET_DENSITY_FACTOR; |
96 } | 129 } |
97 | 130 |
98 /** Get (sorted) map of km to density of all years. */ | 131 /** Get (sorted) map of km to density of all years. */ |
99 public double[][] getAllDensities() | 132 public double[][] getAllDensities() |
100 { | 133 { |