Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/exports/fixings/FixATWriter.java @ 6325:ee701de9c875
Add special case handling for Fixing AT export at a gauge
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Thu, 13 Jun 2013 11:43:02 +0200 |
parents | 1642e08d14d2 |
children | 65a5deaee769 |
comparison
equal
deleted
inserted
replaced
6324:3cf9e82b9c75 | 6325:ee701de9c875 |
---|---|
16 | 16 |
17 import org.dive4elements.river.artifacts.resources.Resources; | 17 import org.dive4elements.river.artifacts.resources.Resources; |
18 | 18 |
19 import org.dive4elements.river.exports.ATWriter; | 19 import org.dive4elements.river.exports.ATWriter; |
20 | 20 |
21 import org.dive4elements.river.model.Gauge; | |
22 import org.dive4elements.river.model.River; | |
23 | |
21 import java.io.IOException; | 24 import java.io.IOException; |
22 import java.io.PrintWriter; | 25 import java.io.PrintWriter; |
23 import java.io.Writer; | 26 import java.io.Writer; |
24 | 27 |
25 import java.util.Locale; | 28 import java.util.Locale; |
33 private static Logger log = Logger.getLogger(FixATWriter.class); | 36 private static Logger log = Logger.getLogger(FixATWriter.class); |
34 | 37 |
35 public static final String I18N_HEADER_KEY = | 38 public static final String I18N_HEADER_KEY = |
36 "fix.export.at.header"; | 39 "fix.export.at.header"; |
37 | 40 |
41 public static final String I18N_GAUGE_HEADER_KEY = | |
42 "fix.export.at.gauge.header"; | |
43 | |
38 public static final String I18N_HEADER_DEFAULT = | 44 public static final String I18N_HEADER_DEFAULT = |
39 "Exported fixings discharge curve for {0} {0}-km: {1}"; | 45 "Exported fixings discharge curve for {0} {0}-km: {1}"; |
46 | |
47 public static final String I18N_GAUGE_HEADER_DEFAULT = | |
48 "Exported fixings discharge curve for {0}, gauge: {1} datum[{3}] = {2}"; | |
40 | 49 |
41 public static final String [] Q_MAX_COLUMN = new String [] { "max_q" }; | 50 public static final String [] Q_MAX_COLUMN = new String [] { "max_q" }; |
42 | 51 |
43 private static final int MAX_ITERATIONS = 10000; | 52 private static final int MAX_ITERATIONS = 10000; |
44 private static final double EPSILON = 1e-8; | 53 private static final double EPSILON = 1e-8; |
56 } | 65 } |
57 | 66 |
58 public void write( | 67 public void write( |
59 Writer writer, | 68 Writer writer, |
60 CallMeta meta, | 69 CallMeta meta, |
61 String river, | 70 River river, |
62 double km | 71 double km |
63 ) | 72 ) |
64 throws IOException { | 73 throws IOException { |
65 PrintWriter out = new PrintWriter(writer); | 74 PrintWriter out = new PrintWriter(writer); |
66 printHeader(out, meta, river, km); | 75 |
76 int subtractPNP = 0; | |
77 // Special case handling for at's at gauges | |
78 Gauge gauge = river.determineGaugeByPosition(km); | |
79 if (Math.abs(km - gauge.getStation().doubleValue()) < 1e-4) { | |
80 printGaugeHeader(out, meta, river, gauge); | |
81 subtractPNP = (int)Math.round(gauge.getDatum().doubleValue() * 100); | |
82 } else { | |
83 printHeader(out, meta, river.getName(), km); | |
84 } | |
67 | 85 |
68 double [] coeffs = parameters.interpolate( | 86 double [] coeffs = parameters.interpolate( |
69 "km", km, function.getParameterNames()); | 87 "km", km, function.getParameterNames()); |
70 | 88 |
71 double [] qMax = parameters.interpolate( | 89 double [] qMax = parameters.interpolate( |
114 log.debug("wMinCM: " + wMinCM); | 132 log.debug("wMinCM: " + wMinCM); |
115 log.debug("wMaxCM: " + wMaxCM); | 133 log.debug("wMaxCM: " + wMaxCM); |
116 log.debug("wcm: " + wcm); | 134 log.debug("wcm: " + wcm); |
117 } | 135 } |
118 | 136 |
119 out.printf(Locale.US, "%8d", wRow); | 137 out.printf(Locale.US, "%8d", wRow - subtractPNP); |
120 | 138 |
121 for (int i = 0; i < wcm; i++) { | 139 for (int i = 0; i < wcm; i++) { |
122 out.print(ATWriter.EMPTY); | 140 out.print(ATWriter.EMPTY); |
123 } | 141 } |
124 | 142 |
138 } | 156 } |
139 out.println(); | 157 out.println(); |
140 if (w > wMax) { | 158 if (w > wMax) { |
141 break; | 159 break; |
142 } | 160 } |
143 out.printf(Locale.US, "%8d", wRow += 10); | 161 out.printf(Locale.US, "%8d", (wRow += 10) - subtractPNP); |
144 wcm = 0; | 162 wcm = 0; |
145 } | 163 } |
146 | 164 |
147 out.flush(); | 165 out.flush(); |
148 } | 166 } |
158 I18N_HEADER_KEY, | 176 I18N_HEADER_KEY, |
159 I18N_HEADER_DEFAULT, | 177 I18N_HEADER_DEFAULT, |
160 river, km)); | 178 river, km)); |
161 } | 179 } |
162 | 180 |
181 protected void printGaugeHeader( | |
182 PrintWriter out, | |
183 CallMeta meta, | |
184 River river, | |
185 Gauge gauge | |
186 ) { | |
187 out.println("*" + Resources.format( | |
188 meta, | |
189 I18N_GAUGE_HEADER_KEY, | |
190 I18N_GAUGE_HEADER_DEFAULT, | |
191 new Object[] { river.getName(), gauge.getName(), | |
192 gauge.getDatum(), river.getWstUnit().getName() })); | |
193 } | |
194 | |
163 private static double minW( | 195 private static double minW( |
164 org.dive4elements.river.artifacts.math.Function function, | 196 org.dive4elements.river.artifacts.math.Function function, |
165 double maxW, | 197 double maxW, |
166 double maxQ | 198 double maxQ |
167 ) { | 199 ) { |