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 ) {

http://dive4elements.wald.intevation.org