1 /******************************************************************************
2 * $Id: records.c 3b0bbf7a8a012d69a783ee1f9cfeb5c52b370021 2017-06-27 20:57:02Z Even Rouault $
3 *
4 * Project: APP ENVISAT Support
5 * Purpose: Low Level Envisat file access (read/write) API.
6 * Author: Antonio Valentino <antonio.valentino@tiscali.it>
7 *
8 ******************************************************************************
9 * Copyright (c) 2011, Antonio Valentino
10 *
11 * Permission is hereby granted, free of charge, to any person obtaining a
12 * copy of this software and associated documentation files (the "Software"),
13 * to deal in the Software without restriction, including without limitation
14 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15 * and/or sell copies of the Software, and to permit persons to whom the
16 * Software is furnished to do so, subject to the following conditions:
17 *
18 * The above copyright notice and this permission notice shall be included
19 * in all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
24 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27 * DEALINGS IN THE SOFTWARE.
28 ****************************************************************************/
29
30 #include "cpl_string.h"
31 #include "records.h"
32
33 CPL_CVSID("$Id: records.c 3b0bbf7a8a012d69a783ee1f9cfeb5c52b370021 2017-06-27 20:57:02Z Even Rouault $")
34
35 /* --- ASAR record descriptors --------------------------------------------- */
36 static const EnvisatFieldDescr ASAR_ANTENNA_ELEV_PATT_ADSR[] = {
37 {"ZERO_DOPPLER_TIME", 0, EDT_MJD, 1},
38 {"ATTACH_FLAG", 12, EDT_UByte, 1},
39 {"BEAM_ID", 13, EDT_Char, 3},
40 {"ELEVATION_PATTERN.SLANT_RANGE_TIME", 16, EDT_Float32, 11},
41 {"ELEVATION_PATTERN.ELEVATION_ANGLES", 60, EDT_Float32, 11},
42 {"ELEVATION_PATTERN.ANTENNA_PATTERN", 104, EDT_Float32, 11},
43 /*{"SPARE_1", 148, EDT_UByte, 14},*/
44 {NULL, 0, EDT_Unknown, 0}
45 };
46
47 static const EnvisatFieldDescr ASAR_CHIRP_PARAMS_ADSR[] = {
48 {"ZERO_DOPPLER_TIME", 0, EDT_MJD, 1},
49 {"ATTACH_FLAG", 12, EDT_UByte, 1},
50 {"BEAM_ID", 13, EDT_Char, 3},
51 {"POLAR", 16, EDT_Char, 3},
52 {"CHIRP_WIDTH", 19, EDT_Float32, 1},
53 {"CHIRP_SIDELOBE", 23, EDT_Float32, 1},
54 {"CHIRP_ISLR", 27, EDT_Float32, 1},
55 {"CHIRP_PEAK_LOC", 31, EDT_Float32, 1},
56 {"CHIRP_POWER", 35, EDT_Float32, 1},
57 {"ELEV_CORR_FACTOR", 39, EDT_Float32, 1},
58 /*{"SPARE_1", 43, EDT_UByte, 16},*/
59 {"CAL_PULSE_INFO.1.MAX_CAL", 59, EDT_Float32, 3},
60 {"CAL_PULSE_INFO.1.AVG_CAL", 71, EDT_Float32, 3},
61 {"CAL_PULSE_INFO.1.AVG_VAL_1A", 83, EDT_Float32, 1},
62 {"CAL_PULSE_INFO.1.PHS_CAL", 87, EDT_Float32, 4},
63 {"CAL_PULSE_INFO.2.MAX_CAL", 103, EDT_Float32, 3},
64 {"CAL_PULSE_INFO.2.AVG_CAL", 115, EDT_Float32, 3},
65 {"CAL_PULSE_INFO.2.AVG_VAL_1A", 127, EDT_Float32, 1},
66 {"CAL_PULSE_INFO.2.PHS_CAL", 131, EDT_Float32, 4},
67 {"CAL_PULSE_INFO.3.MAX_CAL", 147, EDT_Float32, 3},
68 {"CAL_PULSE_INFO.3.AVG_CAL", 159, EDT_Float32, 3},
69 {"CAL_PULSE_INFO.3.AVG_VAL_1A", 171, EDT_Float32, 1},
70 {"CAL_PULSE_INFO.3.PHS_CAL", 175, EDT_Float32, 4},
71 {"CAL_PULSE_INFO.4.MAX_CAL", 191, EDT_Float32, 3},
72 {"CAL_PULSE_INFO.4.AVG_CAL", 203, EDT_Float32, 3},
73 {"CAL_PULSE_INFO.4.AVG_VAL_1A", 215, EDT_Float32, 1},
74 {"CAL_PULSE_INFO.4.PHS_CAL", 219, EDT_Float32, 4},
75 {"CAL_PULSE_INFO.5.MAX_CAL", 235, EDT_Float32, 3},
76 {"CAL_PULSE_INFO.5.AVG_CAL", 247, EDT_Float32, 3},
77 {"CAL_PULSE_INFO.5.AVG_VAL_1A", 259, EDT_Float32, 1},
78 {"CAL_PULSE_INFO.5.PHS_CAL", 263, EDT_Float32, 4},
79 {"CAL_PULSE_INFO.6.MAX_CAL", 279, EDT_Float32, 3},
80 {"CAL_PULSE_INFO.6.AVG_CAL", 291, EDT_Float32, 3},
81 {"CAL_PULSE_INFO.6.AVG_VAL_1A", 303, EDT_Float32, 1},
82 {"CAL_PULSE_INFO.6.PHS_CAL", 307, EDT_Float32, 4},
83 {"CAL_PULSE_INFO.7.MAX_CAL", 323, EDT_Float32, 3},
84 {"CAL_PULSE_INFO.7.AVG_CAL", 335, EDT_Float32, 3},
85 {"CAL_PULSE_INFO.7.AVG_VAL_1A", 347, EDT_Float32, 1},
86 {"CAL_PULSE_INFO.7.PHS_CAL", 351, EDT_Float32, 4},
87 {"CAL_PULSE_INFO.8.MAX_CAL", 367, EDT_Float32, 3},
88 {"CAL_PULSE_INFO.8.AVG_CAL", 379, EDT_Float32, 3},
89 {"CAL_PULSE_INFO.8.AVG_VAL_1A", 391, EDT_Float32, 1},
90 {"CAL_PULSE_INFO.8.PHS_CAL", 395, EDT_Float32, 4},
91 {"CAL_PULSE_INFO.9.MAX_CAL", 411, EDT_Float32, 3},
92 {"CAL_PULSE_INFO.9.AVG_CAL", 423, EDT_Float32, 3},
93 {"CAL_PULSE_INFO.9.AVG_VAL_1A", 435, EDT_Float32, 1},
94 {"CAL_PULSE_INFO.9.PHS_CAL", 439, EDT_Float32, 4},
95 {"CAL_PULSE_INFO.10.MAX_CAL", 455, EDT_Float32, 3},
96 {"CAL_PULSE_INFO.10.AVG_CAL", 467, EDT_Float32, 3},
97 {"CAL_PULSE_INFO.10.AVG_VAL_1A", 479, EDT_Float32, 1},
98 {"CAL_PULSE_INFO.10.PHS_CAL", 483, EDT_Float32, 4},
99 {"CAL_PULSE_INFO.11.MAX_CAL", 499, EDT_Float32, 3},
100 {"CAL_PULSE_INFO.11.AVG_CAL", 511, EDT_Float32, 3},
101 {"CAL_PULSE_INFO.11.AVG_VAL_1A", 523, EDT_Float32, 1},
102 {"CAL_PULSE_INFO.11.PHS_CAL", 527, EDT_Float32, 4},
103 {"CAL_PULSE_INFO.12.MAX_CAL", 543, EDT_Float32, 3},
104 {"CAL_PULSE_INFO.12.AVG_CAL", 555, EDT_Float32, 3},
105 {"CAL_PULSE_INFO.12.AVG_VAL_1A", 567, EDT_Float32, 1},
106 {"CAL_PULSE_INFO.12.PHS_CAL", 571, EDT_Float32, 4},
107 {"CAL_PULSE_INFO.13.MAX_CAL", 587, EDT_Float32, 3},
108 {"CAL_PULSE_INFO.13.AVG_CAL", 599, EDT_Float32, 3},
109 {"CAL_PULSE_INFO.13.AVG_VAL_1A", 611, EDT_Float32, 1},
110 {"CAL_PULSE_INFO.13.PHS_CAL", 615, EDT_Float32, 4},
111 {"CAL_PULSE_INFO.14.MAX_CAL", 631, EDT_Float32, 3},
112 {"CAL_PULSE_INFO.14.AVG_CAL", 643, EDT_Float32, 3},
113 {"CAL_PULSE_INFO.14.AVG_VAL_1A", 655, EDT_Float32, 1},
114 {"CAL_PULSE_INFO.14.PHS_CAL", 659, EDT_Float32, 4},
115 {"CAL_PULSE_INFO.15.MAX_CAL", 675, EDT_Float32, 3},
116 {"CAL_PULSE_INFO.15.AVG_CAL", 687, EDT_Float32, 3},
117 {"CAL_PULSE_INFO.15.AVG_VAL_1A", 699, EDT_Float32, 1},
118 {"CAL_PULSE_INFO.15.PHS_CAL", 703, EDT_Float32, 4},
119 {"CAL_PULSE_INFO.16.MAX_CAL", 719, EDT_Float32, 3},
120 {"CAL_PULSE_INFO.16.AVG_CAL", 731, EDT_Float32, 3},
121 {"CAL_PULSE_INFO.16.AVG_VAL_1A", 743, EDT_Float32, 1},
122 {"CAL_PULSE_INFO.16.PHS_CAL", 747, EDT_Float32, 4},
123 {"CAL_PULSE_INFO.17.MAX_CAL", 763, EDT_Float32, 3},
124 {"CAL_PULSE_INFO.17.AVG_CAL", 775, EDT_Float32, 3},
125 {"CAL_PULSE_INFO.17.AVG_VAL_1A", 787, EDT_Float32, 1},
126 {"CAL_PULSE_INFO.17.PHS_CAL", 791, EDT_Float32, 4},
127 {"CAL_PULSE_INFO.18.MAX_CAL", 807, EDT_Float32, 3},
128 {"CAL_PULSE_INFO.18.AVG_CAL", 819, EDT_Float32, 3},
129 {"CAL_PULSE_INFO.18.AVG_VAL_1A", 831, EDT_Float32, 1},
130 {"CAL_PULSE_INFO.18.PHS_CAL", 835, EDT_Float32, 4},
131 {"CAL_PULSE_INFO.19.MAX_CAL", 851, EDT_Float32, 3},
132 {"CAL_PULSE_INFO.19.AVG_CAL", 863, EDT_Float32, 3},
133 {"CAL_PULSE_INFO.19.AVG_VAL_1A", 875, EDT_Float32, 1},
134 {"CAL_PULSE_INFO.19.PHS_CAL", 879, EDT_Float32, 4},
135 {"CAL_PULSE_INFO.20.MAX_CAL", 895, EDT_Float32, 3},
136 {"CAL_PULSE_INFO.20.AVG_CAL", 907, EDT_Float32, 3},
137 {"CAL_PULSE_INFO.20.AVG_VAL_1A", 919, EDT_Float32, 1},
138 {"CAL_PULSE_INFO.20.PHS_CAL", 923, EDT_Float32, 4},
139 {"CAL_PULSE_INFO.21.MAX_CAL", 939, EDT_Float32, 3},
140 {"CAL_PULSE_INFO.21.AVG_CAL", 951, EDT_Float32, 3},
141 {"CAL_PULSE_INFO.21.AVG_VAL_1A", 963, EDT_Float32, 1},
142 {"CAL_PULSE_INFO.21.PHS_CAL", 967, EDT_Float32, 4},
143 {"CAL_PULSE_INFO.22.MAX_CAL", 983, EDT_Float32, 3},
144 {"CAL_PULSE_INFO.22.AVG_CAL", 995, EDT_Float32, 3},
145 {"CAL_PULSE_INFO.22.AVG_VAL_1A", 1007, EDT_Float32, 1},
146 {"CAL_PULSE_INFO.22.PHS_CAL", 1011, EDT_Float32, 4},
147 {"CAL_PULSE_INFO.23.MAX_CAL", 1027, EDT_Float32, 3},
148 {"CAL_PULSE_INFO.23.AVG_CAL", 1039, EDT_Float32, 3},
149 {"CAL_PULSE_INFO.23.AVG_VAL_1A", 1051, EDT_Float32, 1},
150 {"CAL_PULSE_INFO.23.PHS_CAL", 1055, EDT_Float32, 4},
151 {"CAL_PULSE_INFO.24.MAX_CAL", 1071, EDT_Float32, 3},
152 {"CAL_PULSE_INFO.24.AVG_CAL", 1083, EDT_Float32, 3},
153 {"CAL_PULSE_INFO.24.AVG_VAL_1A", 1095, EDT_Float32, 1},
154 {"CAL_PULSE_INFO.24.PHS_CAL", 1099, EDT_Float32, 4},
155 {"CAL_PULSE_INFO.25.MAX_CAL", 1115, EDT_Float32, 3},
156 {"CAL_PULSE_INFO.25.AVG_CAL", 1127, EDT_Float32, 3},
157 {"CAL_PULSE_INFO.25.AVG_VAL_1A", 1139, EDT_Float32, 1},
158 {"CAL_PULSE_INFO.25.PHS_CAL", 1143, EDT_Float32, 4},
159 {"CAL_PULSE_INFO.26.MAX_CAL", 1159, EDT_Float32, 3},
160 {"CAL_PULSE_INFO.26.AVG_CAL", 1171, EDT_Float32, 3},
161 {"CAL_PULSE_INFO.26.AVG_VAL_1A", 1183, EDT_Float32, 1},
162 {"CAL_PULSE_INFO.26.PHS_CAL", 1187, EDT_Float32, 4},
163 {"CAL_PULSE_INFO.27.MAX_CAL", 1203, EDT_Float32, 3},
164 {"CAL_PULSE_INFO.27.AVG_CAL", 1215, EDT_Float32, 3},
165 {"CAL_PULSE_INFO.27.AVG_VAL_1A", 1227, EDT_Float32, 1},
166 {"CAL_PULSE_INFO.27.PHS_CAL", 1231, EDT_Float32, 4},
167 {"CAL_PULSE_INFO.28.MAX_CAL", 1247, EDT_Float32, 3},
168 {"CAL_PULSE_INFO.28.AVG_CAL", 1259, EDT_Float32, 3},
169 {"CAL_PULSE_INFO.28.AVG_VAL_1A", 1271, EDT_Float32, 1},
170 {"CAL_PULSE_INFO.28.PHS_CAL", 1275, EDT_Float32, 4},
171 {"CAL_PULSE_INFO.29.MAX_CAL", 1291, EDT_Float32, 3},
172 {"CAL_PULSE_INFO.29.AVG_CAL", 1303, EDT_Float32, 3},
173 {"CAL_PULSE_INFO.29.AVG_VAL_1A", 1315, EDT_Float32, 1},
174 {"CAL_PULSE_INFO.29.PHS_CAL", 1319, EDT_Float32, 4},
175 {"CAL_PULSE_INFO.30.MAX_CAL", 1335, EDT_Float32, 3},
176 {"CAL_PULSE_INFO.30.AVG_CAL", 1347, EDT_Float32, 3},
177 {"CAL_PULSE_INFO.30.AVG_VAL_1A", 1359, EDT_Float32, 1},
178 {"CAL_PULSE_INFO.30.PHS_CAL", 1363, EDT_Float32, 4},
179 {"CAL_PULSE_INFO.31.MAX_CAL", 1379, EDT_Float32, 3},
180 {"CAL_PULSE_INFO.31.AVG_CAL", 1391, EDT_Float32, 3},
181 {"CAL_PULSE_INFO.31.AVG_VAL_1A", 1403, EDT_Float32, 1},
182 {"CAL_PULSE_INFO.31.PHS_CAL", 1407, EDT_Float32, 4},
183 {"CAL_PULSE_INFO.32.MAX_CAL", 1423, EDT_Float32, 3},
184 {"CAL_PULSE_INFO.32.AVG_CAL", 1435, EDT_Float32, 3},
185 {"CAL_PULSE_INFO.32.AVG_VAL_1A", 1447, EDT_Float32, 1},
186 {"CAL_PULSE_INFO.32.PHS_CAL", 1451, EDT_Float32, 4},
187 /*{"SPARE_2", 1467, EDT_UByte, 16},*/
188 {NULL, 0, EDT_Unknown, 0}
189 };
190
191 static const EnvisatFieldDescr ASAR_DOP_CENTROID_COEFFS_ADSR[] = {
192 {"ZERO_DOPPLER_TIME", 0, EDT_MJD, 1},
193 {"ATTACH_FLAG", 12, EDT_UByte, 1},
194 {"SLANT_RANGE_TIME", 13, EDT_Float32, 1},
195 {"DOP_COEF", 17, EDT_Float32, 5},
196 {"DOP_CONF", 37, EDT_Float32, 1},
197 {"DOP_CONF_BELOW_THRESH_FLAG", 41, EDT_UByte, 1},
198 {"DELTA_DOPP_COEFF", 42, EDT_Int16, 5},
199 /*{"SPARE_1", 52, EDT_UByte, 3},*/
200 {NULL, 0, EDT_Unknown, 0}
201 };
202
203 #if 0 /* Unused */
204 static const EnvisatFieldDescr ASAR_GEOLOCATION_GRID_ADSR[] = {
205 {"FIRST_ZERO_DOPPLER_TIME", 0, EDT_MJD, 1},
206 {"ATTACH_FLAG", 12, EDT_UByte, 1},
207 {"LINE_NUM", 13, EDT_UInt32, 1},
208 {"NUM_LINES", 17, EDT_UInt32, 1},
209 {"SUB_SAT_TRACK", 21, EDT_Float32, 1},
210 {"FIRST_LINE_TIE_POINTS.SAMP_NUMBERS", 25, EDT_UInt32, 11},
211 {"FIRST_LINE_TIE_POINTS.SLANT_RANGE_TIMES", 69, EDT_Float32, 11},
212 {"FIRST_LINE_TIE_POINTS.ANGLES", 113, EDT_Float32, 11},
213 {"FIRST_LINE_TIE_POINTS.LATS", 157, EDT_Int32, 11},
214 {"FIRST_LINE_TIE_POINTS.LONGS", 201, EDT_Int32, 11},
215 /*{"SPARE_1", 245, EDT_UByte, 22},*/
216 {"LAST_ZERO_DOPPLER_TIME", 267, EDT_MJD, 1},
217 {"LAST_LINE_TIE_POINTS.SAMP_NUMBERS", 279, EDT_UInt32, 11},
218 {"LAST_LINE_TIE_POINTS.SLANT_RANGE_TIMES", 323, EDT_Float32, 11},
219 {"LAST_LINE_TIE_POINTS.ANGLES", 367, EDT_Float32, 11},
220 {"LAST_LINE_TIE_POINTS.LATS", 411, EDT_Int32, 11},
221 {"LAST_LINE_TIE_POINTS.LONGS", 455, EDT_Int32, 11},
222 /*{"SPARE_2", 499, EDT_UByte, 22},*/
223 {NULL, 0, EDT_Unknown, 0}
224 };
225 #endif /* Unused */
226
227 static const EnvisatFieldDescr ASAR_MAIN_PROCESSING_PARAMS_ADSR[] = {
228 {"FIRST_ZERO_DOPPLER_TIME", 0, EDT_MJD, 1},
229 {"ATTACH_FLAG", 12, EDT_UByte, 1},
230 {"LAST_ZERO_DOPPLER_TIME", 13, EDT_MJD, 1},
231 {"WORK_ORDER_ID", 25, EDT_Char, 12},
232 {"TIME_DIFF", 37, EDT_Float32, 1},
233 {"SWATH_ID", 41, EDT_Char, 3},
234 {"RANGE_SPACING", 44, EDT_Float32, 1},
235 {"AZIMUTH_SPACING", 48, EDT_Float32, 1},
236 {"LINE_TIME_INTERVAL", 52, EDT_Float32, 1},
237 {"NUM_OUTPUT_LINES", 56, EDT_UInt32, 1},
238 {"NUM_SAMPLES_PER_LINE", 60, EDT_UInt32, 1},
239 {"DATA_TYPE", 64, EDT_Char, 5},
240 /*{"SPARE_1", 69, EDT_UByte, 51},*/
241 {"DATA_ANALYSIS_FLAG", 120, EDT_UByte, 1},
242 {"ANT_ELEV_CORR_FLAG", 121, EDT_UByte, 1},
243 {"CHIRP_EXTRACT_FLAG", 122, EDT_UByte, 1},
244 {"SRGR_FLAG", 123, EDT_UByte, 1},
245 {"DOP_CEN_FLAG", 124, EDT_UByte, 1},
246 {"DOP_AMB_FLAG", 125, EDT_UByte, 1},
247 {"RANGE_SPREAD_COMP_FLAG", 126, EDT_UByte, 1},
248 {"DETECTED_FLAG", 127, EDT_UByte, 1},
249 {"LOOK_SUM_FLAG", 128, EDT_UByte, 1},
250 {"RMS_EQUAL_FLAG", 129, EDT_UByte, 1},
251 {"ANT_SCAL_FLAG", 130, EDT_UByte, 1},
252 {"VGA_COM_ECHO_FLAG", 131, EDT_UByte, 1},
253 {"VGA_COM_PULSE_2_FLAG", 132, EDT_UByte, 1},
254 {"VGA_COM_PULSE_ZERO_FLAG", 133, EDT_UByte, 1},
255 {"INV_FILT_COMP_FLAG", 134, EDT_UByte, 1},
256 /*{"SPARE_2", 135, EDT_UByte, 6},*/
257 {"RAW_DATA_ANALYSIS.1.NUM_GAPS", 141, EDT_UInt32, 1},
258 {"RAW_DATA_ANALYSIS.1.NUM_MISSING_LINES", 145, EDT_UInt32, 1},
259 {"RAW_DATA_ANALYSIS.1.RANGE_SAMP_SKIP", 149, EDT_UInt32, 1},
260 {"RAW_DATA_ANALYSIS.1.RANGE_LINES_SKIP", 153, EDT_UInt32, 1},
261 {"RAW_DATA_ANALYSIS.1.CALC_I_BIAS", 157, EDT_Float32, 1},
262 {"RAW_DATA_ANALYSIS.1.CALC_Q_BIAS", 161, EDT_Float32, 1},
263 {"RAW_DATA_ANALYSIS.1.CALC_I_STD_DEV", 165, EDT_Float32, 1},
264 {"RAW_DATA_ANALYSIS.1.CALC_Q_STD_DEV", 169, EDT_Float32, 1},
265 {"RAW_DATA_ANALYSIS.1.CALC_GAIN", 173, EDT_Float32, 1},
266 {"RAW_DATA_ANALYSIS.1.CALC_QUAD", 177, EDT_Float32, 1},
267 {"RAW_DATA_ANALYSIS.1.I_BIAS_MAX", 181, EDT_Float32, 1},
268 {"RAW_DATA_ANALYSIS.1.I_BIAS_MIN", 185, EDT_Float32, 1},
269 {"RAW_DATA_ANALYSIS.1.Q_BIAS_MAX", 189, EDT_Float32, 1},
270 {"RAW_DATA_ANALYSIS.1.Q_BIAS_MIN", 193, EDT_Float32, 1},
271 {"RAW_DATA_ANALYSIS.1.GAIN_MIN", 197, EDT_Float32, 1},
272 {"RAW_DATA_ANALYSIS.1.GAIN_MAX", 201, EDT_Float32, 1},
273 {"RAW_DATA_ANALYSIS.1.QUAD_MIN", 205, EDT_Float32, 1},
274 {"RAW_DATA_ANALYSIS.1.QUAD_MAX", 209, EDT_Float32, 1},
275 {"RAW_DATA_ANALYSIS.1.I_BIAS_FLAG", 213, EDT_UByte, 1},
276 {"RAW_DATA_ANALYSIS.1.Q_BIAS_FLAG", 214, EDT_UByte, 1},
277 {"RAW_DATA_ANALYSIS.1.GAIN_FLAG", 215, EDT_UByte, 1},
278 {"RAW_DATA_ANALYSIS.1.QUAD_FLAG", 216, EDT_UByte, 1},
279 {"RAW_DATA_ANALYSIS.1.USED_I_BIAS", 217, EDT_Float32, 1},
280 {"RAW_DATA_ANALYSIS.1.USED_Q_BIAS", 221, EDT_Float32, 1},
281 {"RAW_DATA_ANALYSIS.1.USED_GAIN", 225, EDT_Float32, 1},
282 {"RAW_DATA_ANALYSIS.1.USED_QUAD", 229, EDT_Float32, 1},
283 {"RAW_DATA_ANALYSIS.2.NUM_GAPS", 233, EDT_UInt32, 1},
284 {"RAW_DATA_ANALYSIS.2.NUM_MISSING_LINES", 237, EDT_UInt32, 1},
285 {"RAW_DATA_ANALYSIS.2.RANGE_SAMP_SKIP", 241, EDT_UInt32, 1},
286 {"RAW_DATA_ANALYSIS.2.RANGE_LINES_SKIP", 245, EDT_UInt32, 1},
287 {"RAW_DATA_ANALYSIS.2.CALC_I_BIAS", 249, EDT_Float32, 1},
288 {"RAW_DATA_ANALYSIS.2.CALC_Q_BIAS", 253, EDT_Float32, 1},
289 {"RAW_DATA_ANALYSIS.2.CALC_I_STD_DEV", 257, EDT_Float32, 1},
290 {"RAW_DATA_ANALYSIS.2.CALC_Q_STD_DEV", 261, EDT_Float32, 1},
291 {"RAW_DATA_ANALYSIS.2.CALC_GAIN", 265, EDT_Float32, 1},
292 {"RAW_DATA_ANALYSIS.2.CALC_QUAD", 269, EDT_Float32, 1},
293 {"RAW_DATA_ANALYSIS.2.I_BIAS_MAX", 273, EDT_Float32, 1},
294 {"RAW_DATA_ANALYSIS.2.I_BIAS_MIN", 277, EDT_Float32, 1},
295 {"RAW_DATA_ANALYSIS.2.Q_BIAS_MAX", 281, EDT_Float32, 1},
296 {"RAW_DATA_ANALYSIS.2.Q_BIAS_MIN", 285, EDT_Float32, 1},
297 {"RAW_DATA_ANALYSIS.2.GAIN_MIN", 289, EDT_Float32, 1},
298 {"RAW_DATA_ANALYSIS.2.GAIN_MAX", 293, EDT_Float32, 1},
299 {"RAW_DATA_ANALYSIS.2.QUAD_MIN", 297, EDT_Float32, 1},
300 {"RAW_DATA_ANALYSIS.2.QUAD_MAX", 301, EDT_Float32, 1},
301 {"RAW_DATA_ANALYSIS.2.I_BIAS_FLAG", 305, EDT_UByte, 1},
302 {"RAW_DATA_ANALYSIS.2.Q_BIAS_FLAG", 306, EDT_UByte, 1},
303 {"RAW_DATA_ANALYSIS.2.GAIN_FLAG", 307, EDT_UByte, 1},
304 {"RAW_DATA_ANALYSIS.2.QUAD_FLAG", 308, EDT_UByte, 1},
305 {"RAW_DATA_ANALYSIS.2.USED_I_BIAS", 309, EDT_Float32, 1},
306 {"RAW_DATA_ANALYSIS.2.USED_Q_BIAS", 313, EDT_Float32, 1},
307 {"RAW_DATA_ANALYSIS.2.USED_GAIN", 317, EDT_Float32, 1},
308 {"RAW_DATA_ANALYSIS.2.USED_QUAD", 321, EDT_Float32, 1},
309 /*{"SPARE_3", 325, EDT_UByte, 32},*/
310 {"START_TIME.1.FIRST_OBT", 357, EDT_UInt32, 2},
311 {"START_TIME.1.FIRST_MJD", 365, EDT_MJD, 1},
312 {"START_TIME.2.FIRST_OBT", 377, EDT_UInt32, 2},
313 {"START_TIME.2.FIRST_MJD", 385, EDT_MJD, 1},
314 {"PARAMETER_CODES.FIRST_SWST_CODE", 397, EDT_UInt16, 5},
315 {"PARAMETER_CODES.LAST_SWST_CODE", 407, EDT_UInt16, 5},
316 {"PARAMETER_CODES.PRI_CODE", 417, EDT_UInt16, 5},
317 {"PARAMETER_CODES.TX_PULSE_LEN_CODE", 427, EDT_UInt16, 5},
318 {"PARAMETER_CODES.TX_BW_CODE", 437, EDT_UInt16, 5},
319 {"PARAMETER_CODES.ECHO_WIN_LEN_CODE", 447, EDT_UInt16, 5},
320 {"PARAMETER_CODES.UP_CODE", 457, EDT_UInt16, 5},
321 {"PARAMETER_CODES.DOWN_CODE", 467, EDT_UInt16, 5},
322 {"PARAMETER_CODES.RESAMP_CODE", 477, EDT_UInt16, 5},
323 {"PARAMETER_CODES.BEAM_ADJ_CODE", 487, EDT_UInt16, 5},
324 {"PARAMETER_CODES.BEAM_SET_NUM_CODE", 497, EDT_UInt16, 5},
325 {"PARAMETER_CODES.TX_MONITOR_CODE", 507, EDT_UInt16, 5},
326 /*{"SPARE_4", 517, EDT_UByte, 60},*/
327 {"ERROR_COUNTERS.NUM_ERR_SWST", 577, EDT_UInt32, 1},
328 {"ERROR_COUNTERS.NUM_ERR_PRI", 581, EDT_UInt32, 1},
329 {"ERROR_COUNTERS.NUM_ERR_TX_PULSE_LEN", 585, EDT_UInt32, 1},
330 {"ERROR_COUNTERS.NUM_ERR_TX_PULSE_BW", 589, EDT_UInt32, 1},
331 {"ERROR_COUNTERS.NUM_ERR_ECHO_WIN_LEN", 593, EDT_UInt32, 1},
332 {"ERROR_COUNTERS.NUM_ERR_UP", 597, EDT_UInt32, 1},
333 {"ERROR_COUNTERS.NUM_ERR_DOWN", 601, EDT_UInt32, 1},
334 {"ERROR_COUNTERS.NUM_ERR_RESAMP", 605, EDT_UInt32, 1},
335 {"ERROR_COUNTERS.NUM_ERR_BEAM_ADJ", 609, EDT_UInt32, 1},
336 {"ERROR_COUNTERS.NUM_ERR_BEAM_SET_NUM", 613, EDT_UInt32, 1},
337 /*{"SPARE_5", 617, EDT_UByte, 26},*/
338 {"IMAGE_PARAMETERS.FIRST_SWST_VALUE", 643, EDT_Float32, 5},
339 {"IMAGE_PARAMETERS.LAST_SWST_VALUE", 663, EDT_Float32, 5},
340 {"IMAGE_PARAMETERS.SWST_CHANGES", 683, EDT_UInt32, 5},
341 {"IMAGE_PARAMETERS.PRF_VALUE", 703, EDT_Float32, 5},
342 {"IMAGE_PARAMETERS.TX_PULSE_LEN_VALUE", 723, EDT_Float32, 5},
343 {"IMAGE_PARAMETERS.TX_PULSE_BW_VALUE", 743, EDT_Float32, 5},
344 {"IMAGE_PARAMETERS.ECHO_WIN_LEN_VALUE", 763, EDT_Float32, 5},
345 {"IMAGE_PARAMETERS.UP_VALUE", 783, EDT_Float32, 5},
346 {"IMAGE_PARAMETERS.DOWN_VALUE", 803, EDT_Float32, 5},
347 {"IMAGE_PARAMETERS.RESAMP_VALUE", 823, EDT_Float32, 5},
348 {"IMAGE_PARAMETERS.BEAM_ADJ_VALUE", 843, EDT_Float32, 5},
349 {"IMAGE_PARAMETERS.BEAM_SET_VALUE", 863, EDT_UInt16, 5},
350 {"IMAGE_PARAMETERS.TX_MONITOR_VALUE", 873, EDT_Float32, 5},
351 /*{"SPARE_6", 893, EDT_UByte, 82},*/
352 {"FIRST_PROC_RANGE_SAMP", 975, EDT_UInt32, 1},
353 {"RANGE_REF", 979, EDT_Float32, 1},
354 {"RANGE_SAMP_RATE", 983, EDT_Float32, 1},
355 {"RADAR_FREQ", 987, EDT_Float32, 1},
356 {"NUM_LOOKS_RANGE", 991, EDT_UInt16, 1},
357 {"FILTER_WINDOW", 993, EDT_Char, 7},
358 {"WINDOW_COEF_RANGE", 1000, EDT_Float32, 1},
359 {"BANDWIDTH.LOOK_BW_RANGE", 1004, EDT_Float32, 5},
360 {"BANDWIDTH.TOT_BW_RANGE", 1024, EDT_Float32, 5},
361 {"NOMINAL_CHIRP.1.NOM_CHIRP_AMP", 1044, EDT_Float32, 4},
362 {"NOMINAL_CHIRP.1.NOM_CHIRP_PHS", 1060, EDT_Float32, 4},
363 {"NOMINAL_CHIRP.2.NOM_CHIRP_AMP", 1076, EDT_Float32, 4},
364 {"NOMINAL_CHIRP.2.NOM_CHIRP_PHS", 1092, EDT_Float32, 4},
365 {"NOMINAL_CHIRP.3.NOM_CHIRP_AMP", 1108, EDT_Float32, 4},
366 {"NOMINAL_CHIRP.3.NOM_CHIRP_PHS", 1124, EDT_Float32, 4},
367 {"NOMINAL_CHIRP.4.NOM_CHIRP_AMP", 1140, EDT_Float32, 4},
368 {"NOMINAL_CHIRP.4.NOM_CHIRP_PHS", 1156, EDT_Float32, 4},
369 {"NOMINAL_CHIRP.5.NOM_CHIRP_AMP", 1172, EDT_Float32, 4},
370 {"NOMINAL_CHIRP.5.NOM_CHIRP_PHS", 1188, EDT_Float32, 4},
371 /*{"SPARE_7", 1204, EDT_UByte, 60},*/
372 {"NUM_LINES_PROC", 1264, EDT_UInt32, 1},
373 {"NUM_LOOK_AZ", 1268, EDT_UInt16, 1},
374 {"LOOK_BW_AZ", 1270, EDT_Float32, 1},
375 {"TO_BW_AZ", 1274, EDT_Float32, 1},
376 {"FILTER_AZ", 1278, EDT_Char, 7},
377 {"FILTER_COEF_AZ", 1285, EDT_Float32, 1},
378 {"AZ_FM_RATE", 1289, EDT_Float32, 3},
379 {"AX_FM_ORIGIN", 1301, EDT_Float32, 1},
380 {"DOP_AMB_CONF", 1305, EDT_Float32, 1},
381 /*{"SPARE_8", 1309, EDT_UByte, 68},*/
382 {"CALIBRATION_FACTORS.1.PROC_SCALING_FACT", 1377, EDT_Float32, 1},
383 {"CALIBRATION_FACTORS.1.EXT_CAL_FACT", 1381, EDT_Float32, 1},
384 {"CALIBRATION_FACTORS.2.PROC_SCALING_FACT", 1385, EDT_Float32, 1},
385 {"CALIBRATION_FACTORS.2.EXT_CAL_FACT", 1389, EDT_Float32, 1},
386 {"NOISE_ESTIMATION.NOISE_POWER_CORR", 1393, EDT_Float32, 5},
387 {"NOISE_ESTIMATION.NUM_NOISE_LINES", 1413, EDT_UInt32, 5},
388 /*{"SPARE_9", 1433, EDT_UByte, 76},*/
389 {"OUTPUT_STATISTICS.1.OUT_MEAN", 1509, EDT_Float32, 1},
390 {"OUTPUT_STATISTICS.1.OUT_IMAG_MEAN", 1513, EDT_Float32, 1},
391 {"OUTPUT_STATISTICS.1.OUT_STD_DEV", 1517, EDT_Float32, 1},
392 {"OUTPUT_STATISTICS.1.OUT_IMAG_STD_DEV", 1521, EDT_Float32, 1},
393 {"OUTPUT_STATISTICS.2.OUT_MEAN", 1525, EDT_Float32, 1},
394 {"OUTPUT_STATISTICS.2.OUT_IMAG_MEAN", 1529, EDT_Float32, 1},
395 {"OUTPUT_STATISTICS.2.OUT_STD_DEV", 1533, EDT_Float32, 1},
396 {"OUTPUT_STATISTICS.2.OUT_IMAG_STD_DEV", 1537, EDT_Float32, 1},
397 /*{"SPARE_10", 1541, EDT_UByte, 52},*/
398 {"ECHO_COMP", 1593, EDT_Char, 4},
399 {"ECHO_COMP_RATIO", 1597, EDT_Char, 3},
400 {"INIT_CAL_COMP", 1600, EDT_Char, 4},
401 {"INIT_CAL_RATIO", 1604, EDT_Char, 3},
402 {"PER_CAL_COMP", 1607, EDT_Char, 4},
403 {"PER_CAL_RATIO", 1611, EDT_Char, 3},
404 {"NOISE_COMP", 1614, EDT_Char, 4},
405 {"NOISE_COMP_RATIO", 1618, EDT_Char, 3},
406 /*{"SPARE_11", 1621, EDT_UByte, 64},*/
407 {"BEAM_MERGE_SL_RANGE", 1685, EDT_UInt32, 4},
408 {"BEAM_MERGE_ALG_PARAM", 1701, EDT_Float32, 4},
409 {"LINES_PER_BURST", 1717, EDT_UInt32, 5},
410 /*{"SPARE_12", 1737, EDT_UByte, 28},*/
411 {"ORBIT_STATE_VECTORS.1.STATE_VECT_TIME_1", 1765, EDT_MJD, 1},
412 {"ORBIT_STATE_VECTORS.1.X_POS_1", 1777, EDT_Int32, 1},
413 {"ORBIT_STATE_VECTORS.1.Y_POS_1", 1781, EDT_Int32, 1},
414 {"ORBIT_STATE_VECTORS.1.Z_POS_1", 1785, EDT_Int32, 1},
415 {"ORBIT_STATE_VECTORS.1.X_VEL_1", 1789, EDT_Int32, 1},
416 {"ORBIT_STATE_VECTORS.1.Y_VEL_1", 1793, EDT_Int32, 1},
417 {"ORBIT_STATE_VECTORS.1.Z_VEL_1", 1797, EDT_Int32, 1},
418 {"ORBIT_STATE_VECTORS.2.STATE_VECT_TIME_1", 1801, EDT_MJD, 1},
419 {"ORBIT_STATE_VECTORS.2.X_POS_1", 1813, EDT_Int32, 1},
420 {"ORBIT_STATE_VECTORS.2.Y_POS_1", 1817, EDT_Int32, 1},
421 {"ORBIT_STATE_VECTORS.2.Z_POS_1", 1821, EDT_Int32, 1},
422 {"ORBIT_STATE_VECTORS.2.X_VEL_1", 1825, EDT_Int32, 1},
423 {"ORBIT_STATE_VECTORS.2.Y_VEL_1", 1829, EDT_Int32, 1},
424 {"ORBIT_STATE_VECTORS.2.Z_VEL_1", 1833, EDT_Int32, 1},
425 {"ORBIT_STATE_VECTORS.3.STATE_VECT_TIME_1", 1837, EDT_MJD, 1},
426 {"ORBIT_STATE_VECTORS.3.X_POS_1", 1849, EDT_Int32, 1},
427 {"ORBIT_STATE_VECTORS.3.Y_POS_1", 1853, EDT_Int32, 1},
428 {"ORBIT_STATE_VECTORS.3.Z_POS_1", 1857, EDT_Int32, 1},
429 {"ORBIT_STATE_VECTORS.3.X_VEL_1", 1861, EDT_Int32, 1},
430 {"ORBIT_STATE_VECTORS.3.Y_VEL_1", 1865, EDT_Int32, 1},
431 {"ORBIT_STATE_VECTORS.3.Z_VEL_1", 1869, EDT_Int32, 1},
432 {"ORBIT_STATE_VECTORS.4.STATE_VECT_TIME_1", 1873, EDT_MJD, 1},
433 {"ORBIT_STATE_VECTORS.4.X_POS_1", 1885, EDT_Int32, 1},
434 {"ORBIT_STATE_VECTORS.4.Y_POS_1", 1889, EDT_Int32, 1},
435 {"ORBIT_STATE_VECTORS.4.Z_POS_1", 1893, EDT_Int32, 1},
436 {"ORBIT_STATE_VECTORS.4.X_VEL_1", 1897, EDT_Int32, 1},
437 {"ORBIT_STATE_VECTORS.4.Y_VEL_1", 1901, EDT_Int32, 1},
438 {"ORBIT_STATE_VECTORS.4.Z_VEL_1", 1905, EDT_Int32, 1},
439 {"ORBIT_STATE_VECTORS.5.STATE_VECT_TIME_1", 1909, EDT_MJD, 1},
440 {"ORBIT_STATE_VECTORS.5.X_POS_1", 1921, EDT_Int32, 1},
441 {"ORBIT_STATE_VECTORS.5.Y_POS_1", 1925, EDT_Int32, 1},
442 {"ORBIT_STATE_VECTORS.5.Z_POS_1", 1929, EDT_Int32, 1},
443 {"ORBIT_STATE_VECTORS.5.X_VEL_1", 1933, EDT_Int32, 1},
444 {"ORBIT_STATE_VECTORS.5.Y_VEL_1", 1937, EDT_Int32, 1},
445 {"ORBIT_STATE_VECTORS.5.Z_VEL_1", 1941, EDT_Int32, 1},
446 /*{"SPARE_13", 1945, EDT_UByte, 64},*/
447 {NULL, 0, EDT_Unknown, 0}
448 };
449
450 static const EnvisatFieldDescr ASAR_MAP_PROJECTION_GADS[] = {
451 {"MAP_DESCRIPTOR", 0, EDT_Char, 32},
452 {"SAMPLES", 32, EDT_UInt32, 1},
453 {"LINES", 36, EDT_UInt32, 1},
454 {"SAMPLE_SPACING", 40, EDT_Float32, 1},
455 {"LINE_SPACING", 44, EDT_Float32, 1},
456 {"ORIENTATION", 48, EDT_Float32, 1},
457 /*{"SPARE_1", 52, EDT_UByte, 40},*/
458 {"HEADING", 92, EDT_Float32, 1},
459 {"ELLIPSOID_NAME", 96, EDT_Char, 32},
460 {"SEMI_MAJOR", 128, EDT_Float32, 1},
461 {"SEMI_MINOR", 132, EDT_Float32, 1},
462 {"SHIFT_DX", 136, EDT_Float32, 1},
463 {"SHIFT_DY", 140, EDT_Float32, 1},
464 {"SHIFT_DZ", 144, EDT_Float32, 1},
465 {"AVG_HEIGHT", 148, EDT_Float32, 1},
466 /*{"SPARE_2", 152, EDT_UByte, 12},*/
467 {"PROJECTION_DESCRIPTION", 164, EDT_Char, 32},
468 {"UTM_DESCRIPTOR", 196, EDT_Char, 32},
469 {"UTM_ZONE", 228, EDT_Char, 4},
470 {"UTM_ORIGIN_EASTING", 232, EDT_Float32, 1},
471 {"UTM_ORIGIN_NORTHING", 236, EDT_Float32, 1},
472 {"UTM_CENTER_LONG", 240, EDT_Int32, 1},
473 {"UTM_CENTER_LAT", 244, EDT_Int32, 1},
474 {"UTM_PARA1", 248, EDT_Float32, 1},
475 {"UTM_PARA2", 252, EDT_Float32, 1},
476 {"UTM_SCALE", 256, EDT_Float32, 1},
477 {"UPS_DESCRIPTOR", 260, EDT_Char, 32},
478 {"UPS_CENTER_LONG", 292, EDT_Int32, 1},
479 {"UPS_CENTER_LAT", 296, EDT_Int32, 1},
480 {"UPS_SCALE", 300, EDT_Float32, 1},
481 {"NSP_DESCRIPTOR", 304, EDT_Char, 32},
482 {"ORIGIN_EASTING", 336, EDT_Float32, 1},
483 {"ORIGIN_NORTHING", 340, EDT_Float32, 1},
484 {"CENTER_LONG", 344, EDT_Int32, 1},
485 {"CENTER_LAT", 348, EDT_Int32, 1},
486 {"STANDARD_PARALLEL_PARAMETERS.PARA1", 352, EDT_Float32, 1},
487 {"STANDARD_PARALLEL_PARAMETERS.PARA2", 356, EDT_Float32, 1},
488 {"STANDARD_PARALLEL_PARAMETERS.PARA3", 360, EDT_Float32, 1},
489 {"STANDARD_PARALLEL_PARAMETERS.PARA4", 364, EDT_Float32, 1},
490 {"CENTRAL_MERIDIAN_PARAMETERS.CENTRAL_M1", 368, EDT_Float32, 1},
491 {"CENTRAL_MERIDIAN_PARAMETERS.CENTRAL_M2", 372, EDT_Float32, 1},
492 {"CENTRAL_MERIDIAN_PARAMETERS.CENTRAL_M3", 376, EDT_Float32, 1},
493 /*{"PROJECTION_PARAMETERS.SPARE_3", 380, EDT_UByte, 16},*/
494 {"POSITION_NORTHINGS_EASTINGS.TL_NORTHING", 396, EDT_Float32, 1},
495 {"POSITION_NORTHINGS_EASTINGS.TL_EASTING", 400, EDT_Float32, 1},
496 {"POSITION_NORTHINGS_EASTINGS.TR_NORTHING", 404, EDT_Float32, 1},
497 {"POSITION_NORTHINGS_EASTINGS.TR_EASTING", 408, EDT_Float32, 1},
498 {"POSITION_NORTHINGS_EASTINGS.BR_NORTHING", 412, EDT_Float32, 1},
499 {"POSITION_NORTHINGS_EASTINGS.BR_EASTING", 416, EDT_Float32, 1},
500 {"POSITION_NORTHINGS_EASTINGS.BL_NORTHING", 420, EDT_Float32, 1},
501 {"POSITION_NORTHINGS_EASTINGS.BL_EASTING", 424, EDT_Float32, 1},
502 {"POSITION_LAT_LONG.TL_LAT", 428, EDT_Int32, 1},
503 {"POSITION_LAT_LONG.TL_LONG", 432, EDT_Int32, 1},
504 {"POSITION_LAT_LONG.TR_LAT", 436, EDT_Int32, 1},
505 {"POSITION_LAT_LONG.TR_LONG", 440, EDT_Int32, 1},
506 {"POSITION_LAT_LONG.BR_LAT", 444, EDT_Int32, 1},
507 {"POSITION_LAT_LONG.BR_LONG", 448, EDT_Int32, 1},
508 {"POSITION_LAT_LONG.BL_LAT", 452, EDT_Int32, 1},
509 {"POSITION_LAT_LONG.BL_LONG", 456, EDT_Int32, 1},
510 /*{"SPARE_4", 460, EDT_UByte, 32},*/
511 {"IMAGE_TO_MAP_COEFS", 492, EDT_Float32, 8},
512 {"MAP_TO_IMAGE_COEFS", 524, EDT_Float32, 8},
513 /*{"SPARE_5", 556, EDT_UByte, 35},*/
514 {NULL, 0, EDT_Unknown, 0}
515 };
516
517 static const EnvisatFieldDescr ASAR_SQ_ADSR[] = {
518 {"ZERO_DOPPLER_TIME", 0, EDT_MJD, 1},
519 {"ATTACH_FLAG", 12, EDT_UByte, 1},
520 {"INPUT_MEAN_FLAG", 13, EDT_UByte, 1},
521 {"INPUT_STD_DEV_FLAG", 14, EDT_UByte, 1},
522 {"INPUT_GAPS_FLAG", 15, EDT_UByte, 1},
523 {"INPUT_MISSING_LINES_FLAG", 16, EDT_UByte, 1},
524 {"DOP_CEN_FLAG", 17, EDT_UByte, 1},
525 {"DOP_AMB_FLAG", 18, EDT_UByte, 1},
526 {"OUTPUT_MEAN_FLAG", 19, EDT_UByte, 1},
527 {"OUTPUT_STD_DEV_FLAG", 20, EDT_UByte, 1},
528 {"CHIRP_FLAG", 21, EDT_UByte, 1},
529 {"MISSING_DATA_SETS_FLAG", 22, EDT_UByte, 1},
530 {"INVALID_DOWNLINK_FLAG", 23, EDT_UByte, 1},
531 /*{"SPARE_1", 24, EDT_UByte, 7},*/
532 {"THRESH_CHIRP_BROADENING", 31, EDT_Float32, 1},
533 {"THRESH_CHIRP_SIDELOBE", 35, EDT_Float32, 1},
534 {"THRESH_CHIRP_ISLR", 39, EDT_Float32, 1},
535 {"THRESH_INPUT_MEAN", 43, EDT_Float32, 1},
536 {"EXP_INPUT_MEAN", 47, EDT_Float32, 1},
537 {"THRESH_INPUT_STD_DEV", 51, EDT_Float32, 1},
538 {"EXP_INPUT_STD_DEV", 55, EDT_Float32, 1},
539 {"THRESH_DOP_CEN", 59, EDT_Float32, 1},
540 {"THRESH_DOP_AMB", 63, EDT_Float32, 1},
541 {"THRESH_OUTPUT_MEAN", 67, EDT_Float32, 1},
542 {"EXP_OUTPUT_MEAN", 71, EDT_Float32, 1},
543 {"THRESH_OUTPUT_STD_DEV", 75, EDT_Float32, 1},
544 {"EXP_OUTPUT_STD_DEV", 79, EDT_Float32, 1},
545 {"THRESH_INPUT_MISSING_LINES", 83, EDT_Float32, 1},
546 {"THRESH_INPUT_GAPS", 87, EDT_Float32, 1},
547 {"LINES_PER_GAPS", 91, EDT_UInt32, 1},
548 /*{"SPARE_2", 95, EDT_UByte, 15},*/
549 {"INPUT_MEAN", 110, EDT_Float32, 2},
550 {"INPUT_STD_DEV", 118, EDT_Float32, 2},
551 {"NUM_GAPS", 126, EDT_Float32, 1},
552 {"NUM_MISSING_LINES", 130, EDT_Float32, 1},
553 {"OUTPUT_MEAN", 134, EDT_Float32, 2},
554 {"OUTPUT_STD_DEV", 142, EDT_Float32, 2},
555 {"TOT_ERRORS", 150, EDT_UInt32, 1},
556 /*{"SPARE_3", 154, EDT_UByte, 16},*/
557 {NULL, 0, EDT_Unknown, 0}
558 };
559
560 static const EnvisatFieldDescr ASAR_SR_GR_ADSR[] = {
561 {"ZERO_DOPPLER_TIME", 0, EDT_MJD, 1},
562 {"ATTACH_FLAG", 12, EDT_UByte, 1},
563 {"SLANT_RANGE_TIME", 13, EDT_Float32, 1},
564 {"GROUND_RANGE_ORIGIN", 17, EDT_Float32, 1},
565 {"SRGR_COEFF", 21, EDT_Float32, 5},
566 /*{"SPARE_1", 41, EDT_UByte, 14},*/
567 {NULL, 0, EDT_Unknown, 0}
568 };
569
570 #if 0 /* Unused */
571 static const EnvisatFieldDescr ASAR_GEOLOCATION_ADSR[] = {
572 {"ZERO_DOPPLER_TIME", 0, EDT_MJD, 1},
573 {"ATTACH_FLAG", 12, EDT_UByte, 1},
574 {"CENTER_LAT", 13, EDT_Int32, 1},
575 {"CENTER_LONG", 17, EDT_Int32, 1},
576 /*{"SPARE_1", 21, EDT_UByte, 4},*/
577 {NULL, 0, EDT_Unknown, 0}
578 };
579 #endif /* Unused */
580
581 static const EnvisatFieldDescr ASAR_PROCESSING_PARAMS_ADSR[] = {
582 {"FIRST_ZERO_DOPPLER_TIME", 0, EDT_MJD, 1},
583 {"ATTACH_FLAG", 12, EDT_UByte, 1},
584 {"LAST_ZERO_DOPPLER_TIME", 13, EDT_MJD, 1},
585 {"WORK_ORDER_ID", 25, EDT_Char, 12},
586 {"TIME_DIFF", 37, EDT_Float32, 1},
587 {"SWATH_ID", 41, EDT_Char, 3},
588 {"RANGE_SPACING", 44, EDT_Float32, 1},
589 {"AZIMUTH_SPACING", 48, EDT_Float32, 1},
590 {"LINE_TIME_INTERVAL", 52, EDT_Float32, 1},
591 {"NUM_OUTPUT_LINES", 56, EDT_UInt32, 1},
592 {"NUM_SAMPLES_PER_LINE", 60, EDT_UInt32, 1},
593 {"DATA_TYPE", 64, EDT_Char, 5},
594 /*{"SPARE_1", 69, EDT_UByte, 51},*/
595 {"DATA_ANALYSIS_FLAG", 120, EDT_UByte, 1},
596 {"ANT_ELEV_CORR_FLAG", 121, EDT_UByte, 1},
597 {"CHIRP_EXTRACT_FLAG", 122, EDT_UByte, 1},
598 {"SRGR_FLAG", 123, EDT_UByte, 1},
599 {"DOP_CEN_FLAG", 124, EDT_UByte, 1},
600 {"DOP_AMB_FLAG", 125, EDT_UByte, 1},
601 {"RANGE_SPREAD_COMP_FLAG", 126, EDT_UByte, 1},
602 {"DETECTED_FLAG", 127, EDT_UByte, 1},
603 {"LOOK_SUM_FLAG", 128, EDT_UByte, 1},
604 {"RMS_EQUAL_FLAG", 129, EDT_UByte, 1},
605 {"ANT_SCAL_FLAG", 130, EDT_UByte, 1},
606 /*{"SPARE_2", 131, EDT_UByte, 10},*/
607 {"RAW_DATA_ANALYSIS.1.NUM_GAPS", 141, EDT_UInt32, 1},
608 {"RAW_DATA_ANALYSIS.1.NUM_MISSING_LINES", 145, EDT_UInt32, 1},
609 {"RAW_DATA_ANALYSIS.1.RANGE_SAMP_SKIP", 149, EDT_UInt32, 1},
610 {"RAW_DATA_ANALYSIS.1.RANGE_LINES_SKIP", 153, EDT_UInt32, 1},
611 {"RAW_DATA_ANALYSIS.1.CALC_I_BIAS", 157, EDT_Float32, 1},
612 {"RAW_DATA_ANALYSIS.1.CALC_Q_BIAS", 161, EDT_Float32, 1},
613 {"RAW_DATA_ANALYSIS.1.CALC_I_STD_DEV", 165, EDT_Float32, 1},
614 {"RAW_DATA_ANALYSIS.1.CALC_Q_STD_DEV", 169, EDT_Float32, 1},
615 {"RAW_DATA_ANALYSIS.1.CALC_GAIN", 173, EDT_Float32, 1},
616 {"RAW_DATA_ANALYSIS.1.CALC_QUAD", 177, EDT_Float32, 1},
617 {"RAW_DATA_ANALYSIS.1.I_BIAS_MAX", 181, EDT_Float32, 1},
618 {"RAW_DATA_ANALYSIS.1.I_BIAS_MIN", 185, EDT_Float32, 1},
619 {"RAW_DATA_ANALYSIS.1.Q_BIAS_MAX", 189, EDT_Float32, 1},
620 {"RAW_DATA_ANALYSIS.1.Q_BIAS_MIN", 193, EDT_Float32, 1},
621 {"RAW_DATA_ANALYSIS.1.GAIN_MIN", 197, EDT_Float32, 1},
622 {"RAW_DATA_ANALYSIS.1.GAIN_MAX", 201, EDT_Float32, 1},
623 {"RAW_DATA_ANALYSIS.1.QUAD_MIN", 205, EDT_Float32, 1},
624 {"RAW_DATA_ANALYSIS.1.QUAD_MAX", 209, EDT_Float32, 1},
625 {"RAW_DATA_ANALYSIS.1.I_BIAS_FLAG", 213, EDT_UByte, 1},
626 {"RAW_DATA_ANALYSIS.1.Q_BIAS_FLAG", 214, EDT_UByte, 1},
627 {"RAW_DATA_ANALYSIS.1.GAIN_FLAG", 215, EDT_UByte, 1},
628 {"RAW_DATA_ANALYSIS.1.QUAD_FLAG", 216, EDT_UByte, 1},
629 {"RAW_DATA_ANALYSIS.1.USED_I_BIAS", 217, EDT_Float32, 1},
630 {"RAW_DATA_ANALYSIS.1.USED_Q_BIAS", 221, EDT_Float32, 1},
631 {"RAW_DATA_ANALYSIS.1.USED_GAIN", 225, EDT_Float32, 1},
632 {"RAW_DATA_ANALYSIS.1.USED_QUAD", 229, EDT_Float32, 1},
633 {"RAW_DATA_ANALYSIS.2.NUM_GAPS", 233, EDT_UInt32, 1},
634 {"RAW_DATA_ANALYSIS.2.NUM_MISSING_LINES", 237, EDT_UInt32, 1},
635 {"RAW_DATA_ANALYSIS.2.RANGE_SAMP_SKIP", 241, EDT_UInt32, 1},
636 {"RAW_DATA_ANALYSIS.2.RANGE_LINES_SKIP", 245, EDT_UInt32, 1},
637 {"RAW_DATA_ANALYSIS.2.CALC_I_BIAS", 249, EDT_Float32, 1},
638 {"RAW_DATA_ANALYSIS.2.CALC_Q_BIAS", 253, EDT_Float32, 1},
639 {"RAW_DATA_ANALYSIS.2.CALC_I_STD_DEV", 257, EDT_Float32, 1},
640 {"RAW_DATA_ANALYSIS.2.CALC_Q_STD_DEV", 261, EDT_Float32, 1},
641 {"RAW_DATA_ANALYSIS.2.CALC_GAIN", 265, EDT_Float32, 1},
642 {"RAW_DATA_ANALYSIS.2.CALC_QUAD", 269, EDT_Float32, 1},
643 {"RAW_DATA_ANALYSIS.2.I_BIAS_MAX", 273, EDT_Float32, 1},
644 {"RAW_DATA_ANALYSIS.2.I_BIAS_MIN", 277, EDT_Float32, 1},
645 {"RAW_DATA_ANALYSIS.2.Q_BIAS_MAX", 281, EDT_Float32, 1},
646 {"RAW_DATA_ANALYSIS.2.Q_BIAS_MIN", 285, EDT_Float32, 1},
647 {"RAW_DATA_ANALYSIS.2.GAIN_MIN", 289, EDT_Float32, 1},
648 {"RAW_DATA_ANALYSIS.2.GAIN_MAX", 293, EDT_Float32, 1},
649 {"RAW_DATA_ANALYSIS.2.QUAD_MIN", 297, EDT_Float32, 1},
650 {"RAW_DATA_ANALYSIS.2.QUAD_MAX", 301, EDT_Float32, 1},
651 {"RAW_DATA_ANALYSIS.2.I_BIAS_FLAG", 305, EDT_UByte, 1},
652 {"RAW_DATA_ANALYSIS.2.Q_BIAS_FLAG", 306, EDT_UByte, 1},
653 {"RAW_DATA_ANALYSIS.2.GAIN_FLAG", 307, EDT_UByte, 1},
654 {"RAW_DATA_ANALYSIS.2.QUAD_FLAG", 308, EDT_UByte, 1},
655 {"RAW_DATA_ANALYSIS.2.USED_I_BIAS", 309, EDT_Float32, 1},
656 {"RAW_DATA_ANALYSIS.2.USED_Q_BIAS", 313, EDT_Float32, 1},
657 {"RAW_DATA_ANALYSIS.2.USED_GAIN", 317, EDT_Float32, 1},
658 {"RAW_DATA_ANALYSIS.2.USED_QUAD", 321, EDT_Float32, 1},
659 /*{"SPARE_3", 325, EDT_UByte, 32},*/
660 {"START_TIME.1.FIRST_OBT", 357, EDT_UInt32, 2},
661 {"START_TIME.1.FIRST_MJD", 365, EDT_MJD, 1},
662 {"START_TIME.2.FIRST_OBT", 377, EDT_UInt32, 2},
663 {"START_TIME.2.FIRST_MJD", 385, EDT_MJD, 1},
664 {"PARAMETER_CODES.SWST_CODE", 397, EDT_UInt16, 5},
665 {"PARAMETER_CODES.LAST_SWST_CODE", 407, EDT_UInt16, 5},
666 {"PARAMETER_CODES.PRI_CODE", 417, EDT_UInt16, 5},
667 {"PARAMETER_CODES.TX_PULSE_LEN_CODE", 427, EDT_UInt16, 5},
668 {"PARAMETER_CODES.TX_BW_CODE", 437, EDT_UInt16, 5},
669 {"PARAMETER_CODES.ECHO_WIN_LEN_CODE", 447, EDT_UInt16, 5},
670 {"PARAMETER_CODES.UP_CODE", 457, EDT_UInt16, 5},
671 {"PARAMETER_CODES.DOWN_CODE", 467, EDT_UInt16, 5},
672 {"PARAMETER_CODES.RESAMP_CODE", 477, EDT_UInt16, 5},
673 {"PARAMETER_CODES.BEAM_ADJ_CODE", 487, EDT_UInt16, 5},
674 {"PARAMETER_CODES.BEAM_SET_NUM_CODE", 497, EDT_UInt16, 5},
675 {"PARAMETER_CODES.TX_MONITOR_CODE", 507, EDT_UInt16, 5},
676 /*{"SPARE_4", 517, EDT_UByte, 60},*/
677 {"ERROR_COUNTERS.NUM_ERR_SWST", 577, EDT_UInt32, 1},
678 {"ERROR_COUNTERS.NUM_ERR_PRI", 581, EDT_UInt32, 1},
679 {"ERROR_COUNTERS.NUM_ERR_TX_PULSE_LEN", 585, EDT_UInt32, 1},
680 {"ERROR_COUNTERS.NUM_ERR_TX_PULSE_BW", 589, EDT_UInt32, 1},
681 {"ERROR_COUNTERS.NUM_ERR_ECHO_WIN_LEN", 593, EDT_UInt32, 1},
682 {"ERROR_COUNTERS.NUM_ERR_UP", 597, EDT_UInt32, 1},
683 {"ERROR_COUNTERS.NUM_ERR_DOWN", 601, EDT_UInt32, 1},
684 {"ERROR_COUNTERS.NUM_ERR_RESAMP", 605, EDT_UInt32, 1},
685 {"ERROR_COUNTERS.NUM_ERR_BEAM_ADJ", 609, EDT_UInt32, 1},
686 {"ERROR_COUNTERS.NUM_ERR_BEAM_SET_NUM", 613, EDT_UInt32, 1},
687 /*{"SPARE_5", 617, EDT_UByte, 26},*/
688 {"IMAGE_PARAMETERS.SWST_VALUE", 643, EDT_Float32, 5},
689 {"IMAGE_PARAMETERS.LAST_SWST_VALUE", 663, EDT_Float32, 5},
690 {"IMAGE_PARAMETERS.SWST_CHANGES", 683, EDT_UInt32, 5},
691 {"IMAGE_PARAMETERS.PRF_VALUE", 703, EDT_Float32, 5},
692 {"IMAGE_PARAMETERS.TX_PULSE_LEN_VALUE", 723, EDT_Float32, 5},
693 {"IMAGE_PARAMETERS.TX_PULSE_BW_VALUE", 743, EDT_Float32, 5},
694 {"IMAGE_PARAMETERS.ECHO_WIN_LEN_VALUE", 763, EDT_Float32, 5},
695 {"IMAGE_PARAMETERS.UP_VALUE", 783, EDT_Float32, 5},
696 {"IMAGE_PARAMETERS.DOWN_VALUE", 803, EDT_Float32, 5},
697 {"IMAGE_PARAMETERS.RESAMP_VALUE", 823, EDT_Float32, 5},
698 {"IMAGE_PARAMETERS.BEAM_ADJ_VALUE", 843, EDT_Float32, 5},
699 {"IMAGE_PARAMETERS.BEAM_SET_VALUE", 863, EDT_UInt16, 5},
700 {"IMAGE_PARAMETERS.TX_MONITOR_VALUE", 873, EDT_Float32, 5},
701 /*{"SPARE_6", 893, EDT_UByte, 82},*/
702 {"FIRST_PROC_RANGE_SAMP", 975, EDT_UInt32, 1},
703 {"RANGE_REF", 979, EDT_Float32, 1},
704 {"RANGE_SAMP_RATE", 983, EDT_Float32, 1},
705 {"RADAR_FREQ", 987, EDT_Float32, 1},
706 {"NUM_LOOKS_RANGE", 991, EDT_UInt16, 1},
707 {"FILTER_RANGE", 993, EDT_Char, 7},
708 {"FILTER_COEF_RANGE", 1000, EDT_Float32, 1},
709 {"BANDWIDTH.LOOK_BW_RANGE", 1004, EDT_Float32, 5},
710 {"BANDWIDTH.TOT_BW_RANGE", 1024, EDT_Float32, 5},
711 {"NOMINAL_CHIRP.1.NOM_CHIRP_AMP", 1044, EDT_Float32, 4},
712 {"NOMINAL_CHIRP.1.NOM_CHIRP_PHS", 1060, EDT_Float32, 4},
713 {"NOMINAL_CHIRP.2.NOM_CHIRP_AMP", 1076, EDT_Float32, 4},
714 {"NOMINAL_CHIRP.2.NOM_CHIRP_PHS", 1092, EDT_Float32, 4},
715 {"NOMINAL_CHIRP.3.NOM_CHIRP_AMP", 1108, EDT_Float32, 4},
716 {"NOMINAL_CHIRP.3.NOM_CHIRP_PHS", 1124, EDT_Float32, 4},
717 {"NOMINAL_CHIRP.4.NOM_CHIRP_AMP", 1140, EDT_Float32, 4},
718 {"NOMINAL_CHIRP.4.NOM_CHIRP_PHS", 1156, EDT_Float32, 4},
719 {"NOMINAL_CHIRP.5.NOM_CHIRP_AMP", 1172, EDT_Float32, 4},
720 {"NOMINAL_CHIRP.5.NOM_CHIRP_PHS", 1188, EDT_Float32, 4},
721 /*{"SPARE_7", 1204, EDT_UByte, 60},*/
722 {"NUM_LINES_PROC", 1264, EDT_UInt32, 1},
723 {"NUM_LOOK_AZ", 1268, EDT_UInt16, 1},
724 {"LOOK_BW_AZ", 1270, EDT_Float32, 1},
725 {"TO_BW_AZ", 1274, EDT_Float32, 1},
726 {"FILTER_AZ", 1278, EDT_Char, 7},
727 {"FILTER_COEF_AZ", 1285, EDT_Float32, 1},
728 {"AZ_FM_RATE", 1289, EDT_Float32, 3},
729 {"AX_FM_ORIGIN", 1301, EDT_Float32, 1},
730 {"DOP_AMB_CONF", 1305, EDT_Float32, 1},
731 /*{"SPARE_8", 1309, EDT_UByte, 68},*/
732 {"CALIBRATION_FACTORS.1.PROC_SCALING_FACT", 1377, EDT_Float32, 1},
733 {"CALIBRATION_FACTORS.1.EXT_CAL_FACT", 1381, EDT_Float32, 1},
734 {"CALIBRATION_FACTORS.2.PROC_SCALING_FACT", 1385, EDT_Float32, 1},
735 {"CALIBRATION_FACTORS.2.EXT_CAL_FACT", 1389, EDT_Float32, 1},
736 {"NOISE_ESTIMATION.NOISE_POWER_CORR", 1393, EDT_Float32, 5},
737 {"NOISE_ESTIMATION.NUM_NOISE_LINES", 1413, EDT_UInt32, 5},
738 /*{"SPARE_9", 1433, EDT_UByte, 76},*/
739 {"OUTPUT_STATISTICS.1.OUT_MEAN", 1509, EDT_Float32, 1},
740 {"OUTPUT_STATISTICS.1.OUT_IMAG_MEAN", 1513, EDT_Float32, 1},
741 {"OUTPUT_STATISTICS.1.OUT_STD_DEV", 1517, EDT_Float32, 1},
742 {"OUTPUT_STATISTICS.1.OUT_IMAG_STD_DEV", 1521, EDT_Float32, 1},
743 {"OUTPUT_STATISTICS.2.OUT_MEAN", 1525, EDT_Float32, 1},
744 {"OUTPUT_STATISTICS.2.OUT_IMAG_MEAN", 1529, EDT_Float32, 1},
745 {"OUTPUT_STATISTICS.2.OUT_STD_DEV", 1533, EDT_Float32, 1},
746 {"OUTPUT_STATISTICS.2.OUT_IMAG_STD_DEV", 1537, EDT_Float32, 1},
747 /*{"SPARE_10", 1541, EDT_UByte, 52},*/
748 {"ECHO_COMP", 1593, EDT_Char, 4},
749 {"ECHO_COMP_RATIO", 1597, EDT_Char, 3},
750 {"INIT_CAL_COMP", 1600, EDT_Char, 4},
751 {"INIT_CAL_RATIO", 1604, EDT_Char, 3},
752 {"PER_CAL_COMP", 1607, EDT_Char, 4},
753 {"PER_CAL_RATIO", 1611, EDT_Char, 3},
754 {"NOISE_COMP", 1614, EDT_Char, 4},
755 {"NOISE_COMP_RATIO", 1618, EDT_Char, 3},
756 /*{"SPARE_11", 1621, EDT_UByte, 64},*/
757 {"BEAM_OVERLAP", 1685, EDT_UInt32, 4},
758 {"LINES_PER_BURST", 1701, EDT_UInt32, 5},
759 /*{"SPARE_12", 1721, EDT_UByte, 44},*/
760 {"ORBIT_STATE_VECTORS.1.STATE_VECT_TIME_1", 1765, EDT_MJD, 1},
761 {"ORBIT_STATE_VECTORS.1.X_POS_1", 1777, EDT_Int32, 1},
762 {"ORBIT_STATE_VECTORS.1.Y_POS_1", 1781, EDT_Int32, 1},
763 {"ORBIT_STATE_VECTORS.1.Z_POS_1", 1785, EDT_Int32, 1},
764 {"ORBIT_STATE_VECTORS.1.X_VEL_1", 1789, EDT_Int32, 1},
765 {"ORBIT_STATE_VECTORS.1.Y_VEL_1", 1793, EDT_Int32, 1},
766 {"ORBIT_STATE_VECTORS.1.Z_VEL_1", 1797, EDT_Int32, 1},
767 {"ORBIT_STATE_VECTORS.2.STATE_VECT_TIME_1", 1801, EDT_MJD, 1},
768 {"ORBIT_STATE_VECTORS.2.X_POS_1", 1813, EDT_Int32, 1},
769 {"ORBIT_STATE_VECTORS.2.Y_POS_1", 1817, EDT_Int32, 1},
770 {"ORBIT_STATE_VECTORS.2.Z_POS_1", 1821, EDT_Int32, 1},
771 {"ORBIT_STATE_VECTORS.2.X_VEL_1", 1825, EDT_Int32, 1},
772 {"ORBIT_STATE_VECTORS.2.Y_VEL_1", 1829, EDT_Int32, 1},
773 {"ORBIT_STATE_VECTORS.2.Z_VEL_1", 1833, EDT_Int32, 1},
774 {"ORBIT_STATE_VECTORS.3.STATE_VECT_TIME_1", 1837, EDT_MJD, 1},
775 {"ORBIT_STATE_VECTORS.3.X_POS_1", 1849, EDT_Int32, 1},
776 {"ORBIT_STATE_VECTORS.3.Y_POS_1", 1853, EDT_Int32, 1},
777 {"ORBIT_STATE_VECTORS.3.Z_POS_1", 1857, EDT_Int32, 1},
778 {"ORBIT_STATE_VECTORS.3.X_VEL_1", 1861, EDT_Int32, 1},
779 {"ORBIT_STATE_VECTORS.3.Y_VEL_1", 1865, EDT_Int32, 1},
780 {"ORBIT_STATE_VECTORS.3.Z_VEL_1", 1869, EDT_Int32, 1},
781 {"ORBIT_STATE_VECTORS.4.STATE_VECT_TIME_1", 1873, EDT_MJD, 1},
782 {"ORBIT_STATE_VECTORS.4.X_POS_1", 1885, EDT_Int32, 1},
783 {"ORBIT_STATE_VECTORS.4.Y_POS_1", 1889, EDT_Int32, 1},
784 {"ORBIT_STATE_VECTORS.4.Z_POS_1", 1893, EDT_Int32, 1},
785 {"ORBIT_STATE_VECTORS.4.X_VEL_1", 1897, EDT_Int32, 1},
786 {"ORBIT_STATE_VECTORS.4.Y_VEL_1", 1901, EDT_Int32, 1},
787 {"ORBIT_STATE_VECTORS.4.Z_VEL_1", 1905, EDT_Int32, 1},
788 {"ORBIT_STATE_VECTORS.5.STATE_VECT_TIME_1", 1909, EDT_MJD, 1},
789 {"ORBIT_STATE_VECTORS.5.X_POS_1", 1921, EDT_Int32, 1},
790 {"ORBIT_STATE_VECTORS.5.Y_POS_1", 1925, EDT_Int32, 1},
791 {"ORBIT_STATE_VECTORS.5.Z_POS_1", 1929, EDT_Int32, 1},
792 {"ORBIT_STATE_VECTORS.5.X_VEL_1", 1933, EDT_Int32, 1},
793 {"ORBIT_STATE_VECTORS.5.Y_VEL_1", 1937, EDT_Int32, 1},
794 {"ORBIT_STATE_VECTORS.5.Z_VEL_1", 1941, EDT_Int32, 1},
795 /*{"SPARE_13", 1945, EDT_UByte, 64},*/
796 {"SLANT_RANGE_TIME", 2009, EDT_Float32, 1},
797 {"DOP_COEF", 2013, EDT_Float32, 5},
798 {"DOP_CONF", 2033, EDT_Float32, 1},
799 /*{"SPARE_14", 2037, EDT_UByte, 14},*/
800 {"CHIRP_WIDTH", 2051, EDT_Float32, 1},
801 {"CHIRP_SIDELOBE", 2055, EDT_Float32, 1},
802 {"CHIRP_ISLR", 2059, EDT_Float32, 1},
803 {"CHIRP_PEAK_LOC", 2063, EDT_Float32, 1},
804 {"CHIRP_POWER", 2067, EDT_Float32, 1},
805 {"ELEV_CORR_FACTOR", 2071, EDT_Float32, 1},
806 /*{"SPARE_15", 2075, EDT_UByte, 16},*/
807 {"CAL_INFO.1.MAX_CAL", 2091, EDT_Float32, 3},
808 {"CAL_INFO.1.AVG_CAL", 2103, EDT_Float32, 3},
809 {"CAL_INFO.1.AVG_VAL_1A", 2115, EDT_Float32, 1},
810 {"CAL_INFO.1.PHS_CAL", 2119, EDT_Float32, 4},
811 {"CAL_INFO.2.MAX_CAL", 2135, EDT_Float32, 3},
812 {"CAL_INFO.2.AVG_CAL", 2147, EDT_Float32, 3},
813 {"CAL_INFO.2.AVG_VAL_1A", 2159, EDT_Float32, 1},
814 {"CAL_INFO.2.PHS_CAL", 2163, EDT_Float32, 4},
815 {"CAL_INFO.3.MAX_CAL", 2179, EDT_Float32, 3},
816 {"CAL_INFO.3.AVG_CAL", 2191, EDT_Float32, 3},
817 {"CAL_INFO.3.AVG_VAL_1A", 2203, EDT_Float32, 1},
818 {"CAL_INFO.3.PHS_CAL", 2207, EDT_Float32, 4},
819 {"CAL_INFO.4.MAX_CAL", 2223, EDT_Float32, 3},
820 {"CAL_INFO.4.AVG_CAL", 2235, EDT_Float32, 3},
821 {"CAL_INFO.4.AVG_VAL_1A", 2247, EDT_Float32, 1},
822 {"CAL_INFO.4.PHS_CAL", 2251, EDT_Float32, 4},
823 {"CAL_INFO.5.MAX_CAL", 2267, EDT_Float32, 3},
824 {"CAL_INFO.5.AVG_CAL", 2279, EDT_Float32, 3},
825 {"CAL_INFO.5.AVG_VAL_1A", 2291, EDT_Float32, 1},
826 {"CAL_INFO.5.PHS_CAL", 2295, EDT_Float32, 4},
827 {"CAL_INFO.6.MAX_CAL", 2311, EDT_Float32, 3},
828 {"CAL_INFO.6.AVG_CAL", 2323, EDT_Float32, 3},
829 {"CAL_INFO.6.AVG_VAL_1A", 2335, EDT_Float32, 1},
830 {"CAL_INFO.6.PHS_CAL", 2339, EDT_Float32, 4},
831 {"CAL_INFO.7.MAX_CAL", 2355, EDT_Float32, 3},
832 {"CAL_INFO.7.AVG_CAL", 2367, EDT_Float32, 3},
833 {"CAL_INFO.7.AVG_VAL_1A", 2379, EDT_Float32, 1},
834 {"CAL_INFO.7.PHS_CAL", 2383, EDT_Float32, 4},
835 {"CAL_INFO.8.MAX_CAL", 2399, EDT_Float32, 3},
836 {"CAL_INFO.8.AVG_CAL", 2411, EDT_Float32, 3},
837 {"CAL_INFO.8.AVG_VAL_1A", 2423, EDT_Float32, 1},
838 {"CAL_INFO.8.PHS_CAL", 2427, EDT_Float32, 4},
839 {"CAL_INFO.9.MAX_CAL", 2443, EDT_Float32, 3},
840 {"CAL_INFO.9.AVG_CAL", 2455, EDT_Float32, 3},
841 {"CAL_INFO.9.AVG_VAL_1A", 2467, EDT_Float32, 1},
842 {"CAL_INFO.9.PHS_CAL", 2471, EDT_Float32, 4},
843 {"CAL_INFO.10.MAX_CAL", 2487, EDT_Float32, 3},
844 {"CAL_INFO.10.AVG_CAL", 2499, EDT_Float32, 3},
845 {"CAL_INFO.10.AVG_VAL_1A", 2511, EDT_Float32, 1},
846 {"CAL_INFO.10.PHS_CAL", 2515, EDT_Float32, 4},
847 {"CAL_INFO.11.MAX_CAL", 2531, EDT_Float32, 3},
848 {"CAL_INFO.11.AVG_CAL", 2543, EDT_Float32, 3},
849 {"CAL_INFO.11.AVG_VAL_1A", 2555, EDT_Float32, 1},
850 {"CAL_INFO.11.PHS_CAL", 2559, EDT_Float32, 4},
851 {"CAL_INFO.12.MAX_CAL", 2575, EDT_Float32, 3},
852 {"CAL_INFO.12.AVG_CAL", 2587, EDT_Float32, 3},
853 {"CAL_INFO.12.AVG_VAL_1A", 2599, EDT_Float32, 1},
854 {"CAL_INFO.12.PHS_CAL", 2603, EDT_Float32, 4},
855 {"CAL_INFO.13.MAX_CAL", 2619, EDT_Float32, 3},
856 {"CAL_INFO.13.AVG_CAL", 2631, EDT_Float32, 3},
857 {"CAL_INFO.13.AVG_VAL_1A", 2643, EDT_Float32, 1},
858 {"CAL_INFO.13.PHS_CAL", 2647, EDT_Float32, 4},
859 {"CAL_INFO.14.MAX_CAL", 2663, EDT_Float32, 3},
860 {"CAL_INFO.14.AVG_CAL", 2675, EDT_Float32, 3},
861 {"CAL_INFO.14.AVG_VAL_1A", 2687, EDT_Float32, 1},
862 {"CAL_INFO.14.PHS_CAL", 2691, EDT_Float32, 4},
863 {"CAL_INFO.15.MAX_CAL", 2707, EDT_Float32, 3},
864 {"CAL_INFO.15.AVG_CAL", 2719, EDT_Float32, 3},
865 {"CAL_INFO.15.AVG_VAL_1A", 2731, EDT_Float32, 1},
866 {"CAL_INFO.15.PHS_CAL", 2735, EDT_Float32, 4},
867 {"CAL_INFO.16.MAX_CAL", 2751, EDT_Float32, 3},
868 {"CAL_INFO.16.AVG_CAL", 2763, EDT_Float32, 3},
869 {"CAL_INFO.16.AVG_VAL_1A", 2775, EDT_Float32, 1},
870 {"CAL_INFO.16.PHS_CAL", 2779, EDT_Float32, 4},
871 {"CAL_INFO.17.MAX_CAL", 2795, EDT_Float32, 3},
872 {"CAL_INFO.17.AVG_CAL", 2807, EDT_Float32, 3},
873 {"CAL_INFO.17.AVG_VAL_1A", 2819, EDT_Float32, 1},
874 {"CAL_INFO.17.PHS_CAL", 2823, EDT_Float32, 4},
875 {"CAL_INFO.18.MAX_CAL", 2839, EDT_Float32, 3},
876 {"CAL_INFO.18.AVG_CAL", 2851, EDT_Float32, 3},
877 {"CAL_INFO.18.AVG_VAL_1A", 2863, EDT_Float32, 1},
878 {"CAL_INFO.18.PHS_CAL", 2867, EDT_Float32, 4},
879 {"CAL_INFO.19.MAX_CAL", 2883, EDT_Float32, 3},
880 {"CAL_INFO.19.AVG_CAL", 2895, EDT_Float32, 3},
881 {"CAL_INFO.19.AVG_VAL_1A", 2907, EDT_Float32, 1},
882 {"CAL_INFO.19.PHS_CAL", 2911, EDT_Float32, 4},
883 {"CAL_INFO.20.MAX_CAL", 2927, EDT_Float32, 3},
884 {"CAL_INFO.20.AVG_CAL", 2939, EDT_Float32, 3},
885 {"CAL_INFO.20.AVG_VAL_1A", 2951, EDT_Float32, 1},
886 {"CAL_INFO.20.PHS_CAL", 2955, EDT_Float32, 4},
887 {"CAL_INFO.21.MAX_CAL", 2971, EDT_Float32, 3},
888 {"CAL_INFO.21.AVG_CAL", 2983, EDT_Float32, 3},
889 {"CAL_INFO.21.AVG_VAL_1A", 2995, EDT_Float32, 1},
890 {"CAL_INFO.21.PHS_CAL", 2999, EDT_Float32, 4},
891 {"CAL_INFO.22.MAX_CAL", 3015, EDT_Float32, 3},
892 {"CAL_INFO.22.AVG_CAL", 3027, EDT_Float32, 3},
893 {"CAL_INFO.22.AVG_VAL_1A", 3039, EDT_Float32, 1},
894 {"CAL_INFO.22.PHS_CAL", 3043, EDT_Float32, 4},
895 {"CAL_INFO.23.MAX_CAL", 3059, EDT_Float32, 3},
896 {"CAL_INFO.23.AVG_CAL", 3071, EDT_Float32, 3},
897 {"CAL_INFO.23.AVG_VAL_1A", 3083, EDT_Float32, 1},
898 {"CAL_INFO.23.PHS_CAL", 3087, EDT_Float32, 4},
899 {"CAL_INFO.24.MAX_CAL", 3103, EDT_Float32, 3},
900 {"CAL_INFO.24.AVG_CAL", 3115, EDT_Float32, 3},
901 {"CAL_INFO.24.AVG_VAL_1A", 3127, EDT_Float32, 1},
902 {"CAL_INFO.24.PHS_CAL", 3131, EDT_Float32, 4},
903 {"CAL_INFO.25.MAX_CAL", 3147, EDT_Float32, 3},
904 {"CAL_INFO.25.AVG_CAL", 3159, EDT_Float32, 3},
905 {"CAL_INFO.25.AVG_VAL_1A", 3171, EDT_Float32, 1},
906 {"CAL_INFO.25.PHS_CAL", 3175, EDT_Float32, 4},
907 {"CAL_INFO.26.MAX_CAL", 3191, EDT_Float32, 3},
908 {"CAL_INFO.26.AVG_CAL", 3203, EDT_Float32, 3},
909 {"CAL_INFO.26.AVG_VAL_1A", 3215, EDT_Float32, 1},
910 {"CAL_INFO.26.PHS_CAL", 3219, EDT_Float32, 4},
911 {"CAL_INFO.27.MAX_CAL", 3235, EDT_Float32, 3},
912 {"CAL_INFO.27.AVG_CAL", 3247, EDT_Float32, 3},
913 {"CAL_INFO.27.AVG_VAL_1A", 3259, EDT_Float32, 1},
914 {"CAL_INFO.27.PHS_CAL", 3263, EDT_Float32, 4},
915 {"CAL_INFO.28.MAX_CAL", 3279, EDT_Float32, 3},
916 {"CAL_INFO.28.AVG_CAL", 3291, EDT_Float32, 3},
917 {"CAL_INFO.28.AVG_VAL_1A", 3303, EDT_Float32, 1},
918 {"CAL_INFO.28.PHS_CAL", 3307, EDT_Float32, 4},
919 {"CAL_INFO.29.MAX_CAL", 3323, EDT_Float32, 3},
920 {"CAL_INFO.29.AVG_CAL", 3335, EDT_Float32, 3},
921 {"CAL_INFO.29.AVG_VAL_1A", 3347, EDT_Float32, 1},
922 {"CAL_INFO.29.PHS_CAL", 3351, EDT_Float32, 4},
923 {"CAL_INFO.30.MAX_CAL", 3367, EDT_Float32, 3},
924 {"CAL_INFO.30.AVG_CAL", 3379, EDT_Float32, 3},
925 {"CAL_INFO.30.AVG_VAL_1A", 3391, EDT_Float32, 1},
926 {"CAL_INFO.30.PHS_CAL", 3395, EDT_Float32, 4},
927 {"CAL_INFO.31.MAX_CAL", 3411, EDT_Float32, 3},
928 {"CAL_INFO.31.AVG_CAL", 3423, EDT_Float32, 3},
929 {"CAL_INFO.31.AVG_VAL_1A", 3435, EDT_Float32, 1},
930 {"CAL_INFO.31.PHS_CAL", 3439, EDT_Float32, 4},
931 {"CAL_INFO.32.MAX_CAL", 3455, EDT_Float32, 3},
932 {"CAL_INFO.32.AVG_CAL", 3467, EDT_Float32, 3},
933 {"CAL_INFO.32.AVG_VAL_1A", 3479, EDT_Float32, 1},
934 {"CAL_INFO.32.PHS_CAL", 3483, EDT_Float32, 4},
935 /*{"SPARE_16", 3499, EDT_UByte, 16},*/
936 {"FIRST_LINE_TIME", 3515, EDT_MJD, 1},
937 {"FIRST_LINE_TIE_POINTS.RANGE_SAMP_NUMS_FIRST", 3527, EDT_UInt32, 3},
938 {"FIRST_LINE_TIE_POINTS.SLANT_RANGE_TIMES_FIRST", 3539, EDT_Float32, 3},
939 {"FIRST_LINE_TIE_POINTS.INC_ANGLES_FIRST", 3551, EDT_Float32, 3},
940 {"FIRST_LINE_TIE_POINTS.LATS_FIRST", 3563, EDT_Int32, 3},
941 {"FIRST_LINE_TIE_POINTS.LONGS_FIRST", 3575, EDT_Int32, 3},
942 {"MID_LINE_TIME", 3587, EDT_MJD, 1},
943 {"MID_RANGE_LINE_NUMS", 3599, EDT_UInt32, 1},
944 {"MID_LINE_TIE_POINTS.RANGE_SAMP_NUMS_MID", 3603, EDT_UInt32, 3},
945 {"MID_LINE_TIE_POINTS.SLANT_RANGE_TIMES_MID", 3615, EDT_Float32, 3},
946 {"MID_LINE_TIE_POINTS.INC_ANGLES_MID", 3627, EDT_Float32, 3},
947 {"MID_LINE_TIE_POINTS.LATS_MID", 3639, EDT_Int32, 3},
948 {"MID_LINE_TIE_POINTS.LONGS_MID", 3651, EDT_Int32, 3},
949 {"LAST_LINE_TIME", 3663, EDT_MJD, 1},
950 {"LAST_LINE_NUM", 3675, EDT_UInt32, 1},
951 {"LAST_LINE_TIE_POINTS.RANGE_SAMP_NUMS_LAST", 3679, EDT_UInt32, 3},
952 {"LAST_LINE_TIE_POINTS.SLANT_RANGE_TIMES_LAST", 3691, EDT_Float32, 3},
953 {"LAST_LINE_TIE_POINTS.INC_ANGLES_LAST", 3703, EDT_Float32, 3},
954 {"LAST_LINE_TIE_POINTS.LATS_LAST", 3715, EDT_Int32, 3},
955 {"LAST_LINE_TIE_POINTS.LONGS_LAST", 3727, EDT_Int32, 3},
956 {"SWST_OFFSET", 3739, EDT_Float32, 1},
957 {"GROUND_RANGE_BIAS", 3743, EDT_Float32, 1},
958 {"ELEV_ANGLE_BIAS", 3747, EDT_Float32, 1},
959 {"IMAGETTE_RANGE_LEN", 3751, EDT_Float32, 1},
960 {"IMAGETTE_AZ_LEN", 3755, EDT_Float32, 1},
961 {"IMAGETTE_RANGE_RES", 3759, EDT_Float32, 1},
962 {"GROUND_RES", 3763, EDT_Float32, 1},
963 {"IMAGETTE_AZ_RES", 3767, EDT_Float32, 1},
964 {"PLATFORM_ALT", 3771, EDT_Float32, 1},
965 {"PLATFORM_VEL", 3775, EDT_Float32, 1},
966 {"SLANT_RANGE", 3779, EDT_Float32, 1},
967 {"CW_DRIFT", 3783, EDT_Float32, 1},
968 {"WAVE_SUBCYCLE", 3787, EDT_UInt16, 1},
969 {"EARTH_RADIUS", 3789, EDT_Float32, 1},
970 {"SAT_HEIGHT", 3793, EDT_Float32, 1},
971 {"FIRST_SAMPLE_SLANT_RANGE", 3797, EDT_Float32, 1},
972 /*{"SPARE_17", 3801, EDT_UByte, 12},*/
973 {"ELEVATION_PATTERN.SLANT_RANGE_TIME", 3813, EDT_Float32, 11},
974 {"ELEVATION_PATTERN.ELEVATION_ANGLES", 3857, EDT_Float32, 11},
975 {"ELEVATION_PATTERN.ANTENNA_PATTERN", 3901, EDT_Float32, 11},
976 /*{"SPARE_18", 3945, EDT_UByte, 14},*/
977 {NULL, 0, EDT_Unknown, 0}
978 };
979
980 static const EnvisatFieldDescr ASAR_WAVE_SQ_ADSR[] = {
981 {"ZERO_DOPPLER_TIME", 0, EDT_MJD, 1},
982 {"ATTACH_FLAG", 12, EDT_UByte, 1},
983 {"INPUT_MEAN_FLAG", 13, EDT_UByte, 1},
984 {"INPUT_STD_DEV_FLAG", 14, EDT_UByte, 1},
985 {"INPUT_GAPS_FLAG", 15, EDT_UByte, 1},
986 {"INPUT_MISSING_LINES_FLAG", 16, EDT_UByte, 1},
987 {"DOP_CEN_FLAG", 17, EDT_UByte, 1},
988 {"DOP_AMB_FLAG", 18, EDT_UByte, 1},
989 {"OUTPUT_MEAN_FLAG", 19, EDT_UByte, 1},
990 {"OUTPUT_STD_DEV_FLAG", 20, EDT_UByte, 1},
991 {"CHIRP_FLAG", 21, EDT_UByte, 1},
992 {"MISSING_DATA_SETS_FLAG", 22, EDT_UByte, 1},
993 {"INVALID_DOWNLINK_FLAG", 23, EDT_UByte, 1},
994 /*{"SPARE_1", 24, EDT_UByte, 7},*/
995 {"THRESH_CHIRP_BROADENING", 31, EDT_Float32, 1},
996 {"THRESH_CHIRP_SIDELOBE", 35, EDT_Float32, 1},
997 {"THRESH_CHIRP_ISLR", 39, EDT_Float32, 1},
998 {"THRESH_INPUT_MEAN", 43, EDT_Float32, 1},
999 {"EXP_INPUT_MEAN", 47, EDT_Float32, 1},
1000 {"THRESH_INPUT_STD_DEV", 51, EDT_Float32, 1},
1001 {"EXP_INPUT_STD_DEV", 55, EDT_Float32, 1},
1002 {"THRESH_DOP_CEN", 59, EDT_Float32, 1},
1003 {"THRESH_DOP_AMB", 63, EDT_Float32, 1},
1004 {"THRESH_OUTPUT_MEAN", 67, EDT_Float32, 1},
1005 {"EXP_OUTPUT_MEAN", 71, EDT_Float32, 1},
1006 {"THRESH_OUTPUT_STD_DEV", 75, EDT_Float32, 1},
1007 {"EXP_OUTPUT_STD_DEV", 79, EDT_Float32, 1},
1008 {"THRESH_INPUT_MISSING_LINES", 83, EDT_Float32, 1},
1009 {"THRESH_INPUT_GAPS", 87, EDT_Float32, 1},
1010 {"LINES_PER_GAPS", 91, EDT_UInt32, 1},
1011 /*{"SPARE_2", 95, EDT_UByte, 15},*/
1012 {"INPUT_MEAN", 110, EDT_Float32, 2},
1013 {"INPUT_STD_DEV", 118, EDT_Float32, 2},
1014 {"NUM_GAPS", 126, EDT_Float32, 1},
1015 {"NUM_MISSING_LINES", 130, EDT_Float32, 1},
1016 {"OUTPUT_MEAN", 134, EDT_Float32, 2},
1017 {"OUTPUT_STD_DEV", 142, EDT_Float32, 2},
1018 {"TOT_ERRORS", 150, EDT_UInt32, 1},
1019 /*{"SPARE_3", 154, EDT_UByte, 16},*/
1020 {"LAND_FLAG", 170, EDT_UByte, 1},
1021 {"LOOK_CONF_FLAG", 171, EDT_UByte, 1},
1022 {"INTER_LOOK_CONF_FLAG", 172, EDT_UByte, 1},
1023 {"AZ_CUTOFF_FLAG", 173, EDT_UByte, 1},
1024 {"AZ_CUTOFF_ITERATION_FLAG", 174, EDT_UByte, 1},
1025 {"PHASE_FLAG", 175, EDT_UByte, 1},
1026 /*{"SPARE_4", 176, EDT_UByte, 4},*/
1027 {"LOOK_CONF_THRESH", 180, EDT_Float32, 2},
1028 {"INTER_LOOK_CONF_THRESH", 188, EDT_Float32, 1},
1029 {"AZ_CUTOFF_THRESH", 192, EDT_Float32, 1},
1030 {"AZ_CUTOFF_ITERATIONS_THRESH", 196, EDT_UInt32, 1},
1031 {"PHASE_PEAK_THRESH", 200, EDT_Float32, 1},
1032 {"PHASE_CROSS_THRESH", 204, EDT_Float32, 1},
1033 /*{"SPARE_5", 208, EDT_UByte, 12},*/
1034 {"LOOK_CONF", 220, EDT_Float32, 1},
1035 {"INTER_LOOK_CONF", 224, EDT_Float32, 1},
1036 {"AZ_CUTOFF", 228, EDT_Float32, 1},
1037 {"PHASE_PEAK_CONF", 232, EDT_Float32, 1},
1038 {"PHASE_CROSS_CONF", 236, EDT_Float32, 1},
1039 /*{"SPARE_6", 240, EDT_UByte, 12},*/
1040 {NULL, 0, EDT_Unknown, 0}
1041 };
1042
1043 /* --- MERIS record descriptors -------------------------------------------- */
1044 static const EnvisatFieldDescr MERIS_1P_QUALITY_ADSR[] = {
1045 {"DSR_TIME", 0, EDT_MJD, 1},
1046 {"ATTACH_FLAG", 12, EDT_UByte, 1},
1047 {"RANGE_FLAG", 13, EDT_UInt16, 5},
1048 {"RANGE_BLIND_FLAG", 23, EDT_UInt16, 5},
1049 {NULL, 0, EDT_Unknown, 0}
1050 };
1051
1052 static const EnvisatFieldDescr MERIS_1P_SCALING_FACTOR_GADS[] = {
1053 {"SCALING_FACTOR_ALT", 0, EDT_Float32, 1},
1054 {"SCALING_FACTOR_ROUGH", 4, EDT_Float32, 1},
1055 {"SCALING_FACTOR_ZON_WIND", 8, EDT_Float32, 1},
1056 {"SCALING_FACTOR_MERR_WIND", 12, EDT_Float32, 1},
1057 {"SCALING_FACTOR_ATM_PRES", 16, EDT_Float32, 1},
1058 {"SCALING_FACTOR_OZONE", 20, EDT_Float32, 1},
1059 {"SCALING_FACTOR_REL_HUM", 24, EDT_Float32, 1},
1060 {"SCALING_FACTOR_RAD", 28, EDT_Float32, 15},
1061 {"GAIN_SETTINGS", 88, EDT_UByte, 80},
1062 {"SAMPLING_RATE", 168, EDT_UInt32, 1},
1063 {"SUN_SPECTRAL_FLUX", 172, EDT_Float32, 15},
1064 /*{"SPARE_1", 232, EDT_UByte, 60},*/
1065 {NULL, 0, EDT_Unknown, 0}
1066 };
1067
1068 static const EnvisatFieldDescr MERIS_2P_QUALITY_ADSR[] = {
1069 {"DSR_TIME", 0, EDT_MJD, 1},
1070 {"ATTACH_FLAG", 12, EDT_UByte, 1},
1071 {"PERC_WATER_ABS_AERO", 13, EDT_UByte, 1},
1072 {"PERC_WATER", 14, EDT_UByte, 1},
1073 {"PERC_DDV_LAND", 15, EDT_UByte, 1},
1074 {"PERC_LAND", 16, EDT_UByte, 1},
1075 {"PERC_CLOUD", 17, EDT_UByte, 1},
1076 {"PERC_LOW_POLY_PRESS", 18, EDT_UByte, 1},
1077 {"PERC_LOW_NEURAL_PRESS", 19, EDT_UByte, 1},
1078 {"PERC_OUT_RAN_INP_WVAPOUR", 20, EDT_UByte, 1},
1079 {"PER_OUT_RAN_OUTP_WVAPOUR", 21, EDT_UByte, 1},
1080 {"PERC_OUT_RANGE_INP_CL", 22, EDT_UByte, 1},
1081 {"PERC_OUT_RAN_OUTP_CL", 23, EDT_UByte, 1},
1082 {"PERC_IN_RAN_INP_LAND", 24, EDT_UByte, 1},
1083 {"PERC_OUT_RAN_OUTP_LAND", 25, EDT_UByte, 1},
1084 {"PERC_OUT_RAN_INP_OCEAN", 26, EDT_UByte, 1},
1085 {"PERC_OUT_RAN_OUTP_OCEAN", 27, EDT_UByte, 1},
1086 {"PERC_OUT_RAN_INP_CASE1", 28, EDT_UByte, 1},
1087 {"PERC_OUT_RAN_OUTP_CASE1", 29, EDT_UByte, 1},
1088 {"PERC_OUT_RAN_INP_CASE2", 30, EDT_UByte, 1},
1089 {"PERC_OUT_RAN_OUTP_CASE2", 31, EDT_UByte, 1},
1090 {NULL, 0, EDT_Unknown, 0}
1091 };
1092
1093 static const EnvisatFieldDescr MERIS_2P_SCALING_FACTOR_GADS[] = {
1094 {"SCALING_FACTOR_ALT", 0, EDT_Float32, 1},
1095 {"SCALING_FACTOR_ROUGH", 4, EDT_Float32, 1},
1096 {"SCALING_FACTOR_ZON_WIND", 8, EDT_Float32, 1},
1097 {"SCALING_FACTOR_MERR_WIND", 12, EDT_Float32, 1},
1098 {"SCALING_FACTOR_ATM_PRES", 16, EDT_Float32, 1},
1099 {"SCALING_FACTOR_OZONE", 20, EDT_Float32, 1},
1100 {"SCALING_FACTOR_REL_HUMID", 24, EDT_Float32, 1},
1101 {"SCALING_FACTOR_REFLEC", 28, EDT_Float32, 13},
1102 {"SCALING_FACTOR_ALGAL_PIG_IND", 80, EDT_Float32, 1},
1103 {"SCALING_FACTOR_YELLOW_SUBS", 84, EDT_Float32, 1},
1104 {"SCALING_FACTOR_SUSP_SED", 88, EDT_Float32, 1},
1105 {"SCALING_FACTOR_AERO_EPSILON", 92, EDT_Float32, 1},
1106 {"SCALING_FACTOR_AER_OPT_THICK", 96, EDT_Float32, 1},
1107 {"SCALING_FACTOR_CL_OPT_THICK", 100, EDT_Float32, 1},
1108 {"SCALING_FACTOR_SURF_PRES", 104, EDT_Float32, 1},
1109 {"SCALING_FACTOR_WVAPOUR", 108, EDT_Float32, 1},
1110 {"SCALING_FACTOR_PHOTOSYN_RAD", 112, EDT_Float32, 1},
1111 {"SCALING_FACTOR_TOA_VEG", 116, EDT_Float32, 1},
1112 {"SCALING_FACTOR_BOA_VEG", 120, EDT_Float32, 1},
1113 {"SCALING_FACTOR_CLOUD_ALBEDO", 124, EDT_Float32, 1},
1114 {"SCALING_FACTOR_CLOUD_TOP_PRESS", 128, EDT_Float32, 1},
1115 {"OFF_REFLEC", 132, EDT_Float32, 13},
1116 {"OFFSET_ALGAL", 184, EDT_Float32, 1},
1117 {"OFFSET_YELLOW_SUBS", 188, EDT_Float32, 1},
1118 {"OFFSET_TOTAL_SUSP", 192, EDT_Float32, 1},
1119 {"OFFSET_AERO_EPSILON", 196, EDT_Float32, 1},
1120 {"OFFSET_AER_OPT_THICK", 200, EDT_Float32, 1},
1121 {"OFFSET_CL_OPT_THICK", 204, EDT_Float32, 1},
1122 {"OFFSET_SURF_PRES", 208, EDT_Float32, 1},
1123 {"OFFSET_WVAPOUR", 212, EDT_Float32, 1},
1124 {"OFFSET_PHOTOSYN_RAD", 216, EDT_Float32, 1},
1125 {"OFFSET_TOA_VEG", 220, EDT_Float32, 1},
1126 {"OFFSET_BOA_VEG", 224, EDT_Float32, 1},
1127 {"OFFSET_CLOUD_ALBEDO", 228, EDT_Float32, 1},
1128 {"OFFSET_CLOUD_TOP_PRESS", 232, EDT_Float32, 1},
1129 {"GAIN_SETTINGS", 236, EDT_UByte, 80},
1130 {"SAMPLING_RATE", 316, EDT_UInt32, 1},
1131 {"SUN_SPECTRAL_FLUX", 320, EDT_Float32, 15},
1132 {"SCALING_FACTOR_RECT_REFL_NIR", 380, EDT_Float32, 1},
1133 {"OFFSET_RECT_REFL_NIR", 384, EDT_Float32, 1},
1134 {"SCALING_FACTOR_RECT_REFL_RED", 388, EDT_Float32, 1},
1135 {"OFFSET_RECT_REFL_RED", 392, EDT_Float32, 1},
1136 /*{"SPARE_1", 396, EDT_UByte, 44},*/
1137 {NULL, 0, EDT_Unknown, 0}
1138 };
1139
1140 static const EnvisatFieldDescr MERIS_2P_C_SCALING_FACTOR_GADS[] = {
1141 {"SCALING_FACTOR_CLOUD_OPT_THICK", 0, EDT_Float32, 1},
1142 {"SCALING_FACTOR_CLOUD_TOP_PRESS", 4, EDT_Float32, 1},
1143 {"SCALING_FACTOR_WVAPOUR", 8, EDT_Float32, 1},
1144 {"OFFSET_CL_OPT_THICK", 12, EDT_Float32, 1},
1145 {"OFFSET_CLOUD_TOP_PRESS", 16, EDT_Float32, 1},
1146 {"OFFSET_WVAPOUR", 20, EDT_Float32, 1},
1147 /*{"SPARE_1", 24, EDT_UByte, 52},*/
1148 {NULL, 0, EDT_Unknown, 0}
1149 };
1150
1151 static const EnvisatFieldDescr MERIS_2P_V_SCALING_FACTOR_GADS[] = {
1152 {"SCALING_FACTOR_TOA_VEGETATION_INDEX", 0, EDT_Float32, 1},
1153 {"SCALING_FACTOR_BOA_VEGETATION_INDEX", 4, EDT_Float32, 1},
1154 {"OFFSET_TOA_VEGETAYION_INDEX", 8, EDT_Float32, 1},
1155 {"OFFSET_BOA_VEGETAYION_INDEX", 12, EDT_Float32, 1},
1156 /*{"SPARE_1", 16, EDT_UByte, 60},*/
1157 {NULL, 0, EDT_Unknown, 0}
1158 };
1159
1160
1161 static const EnvisatRecordDescr aASAR_Records[] = {
1162 {"MDS1 ANTENNA ELEV PATT ADS", ASAR_ANTENNA_ELEV_PATT_ADSR},
1163 {"MDS2 ANTENNA ELEV PATT ADS", ASAR_ANTENNA_ELEV_PATT_ADSR},
1164 {"CHIRP PARAMS ADS", ASAR_CHIRP_PARAMS_ADSR},
1165 {"DOP CENTROID COEFFS ADS", ASAR_DOP_CENTROID_COEFFS_ADSR},
1166 /*{"GEOLOCATION GRID ADS", ASAR_GEOLOCATION_GRID_ADSR},*/
1167 {"MAIN PROCESSING PARAMS ADS", ASAR_MAIN_PROCESSING_PARAMS_ADSR},
1168 {"MAP PROJECTION GADS", ASAR_MAP_PROJECTION_GADS},
1169 {"MDS1 SQ ADS", ASAR_SQ_ADSR},
1170 {"MDS2 SQ ADS", ASAR_SQ_ADSR},
1171 {"SR GR ADS", ASAR_SR_GR_ADSR},
1172 /* WAVE */
1173 /*{"GEOLOCATION ADS", ASAR_GEOLOCATION_ADSR},*/
1174 {"PROCESSING PARAMS ADS", ASAR_PROCESSING_PARAMS_ADSR},
1175 {"SQ ADS", ASAR_WAVE_SQ_ADSR},
1176 {NULL, NULL}
1177 };
1178
1179 static const EnvisatRecordDescr aMERIS_1P_Records[] = {
1180 {"Quality ADS", MERIS_1P_QUALITY_ADSR},
1181 {"Scaling Factor GADS", MERIS_1P_SCALING_FACTOR_GADS},
1182 {NULL, NULL}
1183 };
1184
1185 static const EnvisatRecordDescr aMERIS_2P_Records[] = {
1186 {"Quality ADS", MERIS_2P_QUALITY_ADSR},
1187 {"Scaling Factor GADS", MERIS_2P_SCALING_FACTOR_GADS},
1188 {NULL, NULL}
1189 };
1190
1191 static const EnvisatRecordDescr aMERIS_2P_C_Records[] = {
1192 {"Quality ADS", MERIS_2P_QUALITY_ADSR},
1193 {"Scaling Factor GADS", MERIS_2P_C_SCALING_FACTOR_GADS},
1194 {NULL, NULL}
1195 };
1196
1197 static const EnvisatRecordDescr aMERIS_2P_V_Records[] = {
1198 {"Quality ADS", MERIS_2P_QUALITY_ADSR},
1199 {"Scaling Factor GADS", MERIS_2P_V_SCALING_FACTOR_GADS},
1200 {NULL, NULL}
1201 };
1202
EnvisatFile_GetRecordDescriptor(const char * pszProduct,const char * pszDataset)1203 const EnvisatRecordDescr* EnvisatFile_GetRecordDescriptor(
1204 const char* pszProduct, const char* pszDataset)
1205 {
1206 const EnvisatRecordDescr *paRecords = NULL;
1207 const EnvisatRecordDescr *pRecordDescr = NULL;
1208 int nLen;
1209
1210 if( STARTS_WITH_CI(pszProduct, "ASA") )
1211 paRecords = aASAR_Records;
1212 else if( STARTS_WITH_CI(pszProduct, "MER") )
1213 {
1214 if ( STARTS_WITH_CI(pszProduct + 6, "C_2P") )
1215 paRecords = aMERIS_2P_C_Records;
1216 else if ( STARTS_WITH_CI(pszProduct + 6, "V_2P") )
1217 paRecords = aMERIS_2P_V_Records;
1218 else if ( STARTS_WITH_CI(pszProduct + 8, "1P") )
1219 paRecords = aMERIS_1P_Records;
1220 else if ( STARTS_WITH_CI(pszProduct + 8, "2P") )
1221 paRecords = aMERIS_2P_Records;
1222 else
1223 return NULL;
1224 }
1225 else if( STARTS_WITH_CI(pszProduct, "SAR") )
1226 /* ERS products in ENVISAT format have the same records of ASAR ones */
1227 paRecords = aASAR_Records;
1228 else
1229 return NULL;
1230
1231 /* strip trailing spaces */
1232 for( nLen = (int)strlen(pszDataset); nLen && pszDataset[nLen-1] == ' '; --nLen );
1233
1234 pRecordDescr = paRecords;
1235 while ( pRecordDescr->szName != NULL )
1236 {
1237 if ( EQUALN(pRecordDescr->szName, pszDataset, nLen) )
1238 return pRecordDescr;
1239 else
1240 ++pRecordDescr;
1241 }
1242
1243 return NULL;
1244 }
1245
EnvisatFile_GetFieldAsString(const void * pRecord,int nRecLen,const EnvisatFieldDescr * pField,char * szBuf,size_t nBufLen)1246 CPLErr EnvisatFile_GetFieldAsString(const void *pRecord, int nRecLen,
1247 const EnvisatFieldDescr* pField, char *szBuf, size_t nBufLen)
1248 {
1249 int ret;
1250 int i, nOffset = 0;
1251 const GByte *pData;
1252
1253 if ( pField->nOffset >= nRecLen )
1254 {
1255 CPLDebug( "EnvisatDataset",
1256 "Field offset (%d) is greater than the record length (%d).",
1257 pField->nOffset, nRecLen );
1258
1259 return CE_Failure;
1260 }
1261
1262 pData = (const GByte*)pRecord + pField->nOffset;
1263
1264 szBuf[0] = '\0';
1265
1266 switch (pField->eType)
1267 {
1268 case EDT_Char:
1269 memcpy((void*)szBuf, pData, pField->nCount);
1270 szBuf[pField->nCount] = '\0';
1271 break;
1272 case EDT_UByte:
1273 case EDT_SByte:
1274 for (i = 0; i < pField->nCount; ++i)
1275 {
1276 if (i > 0)
1277 szBuf[nOffset++] = ' ';
1278 ret = snprintf(szBuf + nOffset, nBufLen -nOffset, "%d",
1279 ((const char*)pData)[i]);
1280 if( ret < 0 || ret >= (int)nBufLen - nOffset )
1281 return CE_Failure;
1282 nOffset += ret;
1283 }
1284 break;
1285 case EDT_Int16:
1286 for (i = 0; i < pField->nCount; ++i)
1287 {
1288 GInt16 nVal;
1289 if (i > 0)
1290 szBuf[nOffset++] = ' ';
1291 memcpy(&nVal, pData + i * sizeof(nVal), sizeof(nVal));
1292 ret = snprintf(szBuf + nOffset, nBufLen -nOffset, "%d",
1293 CPL_MSBWORD16(nVal));
1294 if( ret < 0 || ret >= (int)nBufLen -nOffset )
1295 return CE_Failure;
1296 nOffset += ret;
1297 }
1298 break;
1299 case EDT_UInt16:
1300 for (i = 0; i < pField->nCount; ++i)
1301 {
1302 GUInt16 nVal;
1303 if (i > 0)
1304 szBuf[nOffset++] = ' ';
1305 memcpy(&nVal, pData + i * sizeof(nVal), sizeof(nVal));
1306 ret = snprintf(szBuf + nOffset, nBufLen -nOffset,"%u",
1307 CPL_MSBWORD16(nVal));
1308 if( ret < 0 || ret >= (int)nBufLen -nOffset )
1309 return CE_Failure;
1310 nOffset += ret;
1311 }
1312 break;
1313 case EDT_Int32:
1314 for (i = 0; i < pField->nCount; ++i)
1315 {
1316 GInt32 nVal;
1317 if (i > 0)
1318 szBuf[nOffset++] = ' ';
1319 memcpy(&nVal, pData + i * sizeof(nVal), sizeof(nVal));
1320 ret = snprintf(szBuf + nOffset, nBufLen -nOffset,"%d",
1321 CPL_MSBWORD32(nVal));
1322 if( ret < 0 || ret >= (int)nBufLen -nOffset )
1323 return CE_Failure;
1324 nOffset += ret;
1325 }
1326 break;
1327 case EDT_UInt32:
1328 for (i = 0; i < pField->nCount; ++i)
1329 {
1330 GUInt32 nVal;
1331 if (i > 0)
1332 szBuf[nOffset++] = ' ';
1333 memcpy(&nVal, pData + i * sizeof(nVal), sizeof(nVal));
1334 ret = snprintf(szBuf + nOffset, nBufLen -nOffset,"%u",
1335 CPL_MSBWORD32(nVal));
1336 if( ret < 0 || ret >= (int)nBufLen -nOffset )
1337 return CE_Failure;
1338 nOffset += ret;
1339 }
1340 break;
1341 case EDT_Float32:
1342 for (i = 0; i < pField->nCount; ++i)
1343 {
1344 float fValue;
1345 memcpy(&fValue, pData + i * sizeof(fValue), sizeof(fValue));
1346 #ifdef CPL_LSB
1347 CPL_SWAP32PTR( &fValue );
1348 #endif
1349
1350 if (i > 0)
1351 szBuf[nOffset++] = ' ';
1352 ret = CPLsnprintf(szBuf + nOffset, nBufLen -nOffset,"%f", fValue);
1353 if( ret < 0 || ret >= (int)nBufLen -nOffset )
1354 return CE_Failure;
1355 nOffset += ret;
1356 }
1357 break;
1358 case EDT_Float64:
1359 for (i = 0; i < pField->nCount; ++i)
1360 {
1361 double dfValue;
1362 memcpy(&dfValue, pData + i * sizeof(dfValue), sizeof(dfValue));
1363 #ifdef CPL_LSB
1364 CPL_SWAPDOUBLE( &dfValue );
1365 #endif
1366 if (i > 0)
1367 szBuf[nOffset++] = ' ';
1368 ret = CPLsnprintf(szBuf + nOffset, nBufLen -nOffset,"%f", dfValue);
1369 if( ret < 0 || ret >= (int)nBufLen -nOffset )
1370 return CE_Failure;
1371 nOffset += ret;
1372 }
1373 break;
1374 /*
1375 case EDT_CInt16:
1376 for (i = 0; i < pField->nCount; ++i)
1377 {
1378 if (i > 0)
1379 szBuf[nOffset++] = ' ';
1380 nOffset += sprintf(szBuf + nOffset, "(%d, %d)",
1381 CPL_MSBWORD16(((const GInt16*)pData)[2 * i]),
1382 CPL_MSBWORD16(((const GInt16*)pData)[2 * i+1]));
1383 }
1384 break;
1385 case EDT_CInt32:
1386 for (i = 0; i < pField->nCount; ++i)
1387 {
1388 if (i > 0)
1389 szBuf[nOffset++] = ' ';
1390 nOffset += sprintf(szBuf + nOffset, "(%d, %d)",
1391 CPL_MSBWORD32(((const GInt32*)pData)[2 * i]),
1392 CPL_MSBWORD32(((const GInt32*)pData)[2 * i+1]));
1393 }
1394 break;
1395 case EDT_CFloat32:
1396 for (i = 0; i < pField->nCount; ++i)
1397 {
1398 float fReal = ((const float*)pData)[2 * i];
1399 float fImag = ((const float*)pData)[2 * i + 1];
1400 #ifdef CPL_LSB
1401 CPL_SWAP32PTR( &fReal );
1402 CPL_SWAP32PTR( &fImag );
1403 #endif
1404 if (i > 0)
1405 szBuf[nOffset++] = ' ';
1406 nOffset += CPLsprintf(szBuf + nOffset, "(%f, %f)", fReal, fImag);
1407 }
1408 break;
1409 case EDT_CFloat64:
1410 for (i = 0; i < pField->nCount; ++i)
1411 {
1412 double dfReal = ((const double*)pData)[2 * i];
1413 double dfImag = ((const double*)pData)[2 * i + 1];
1414 #ifdef CPL_LSB
1415 CPL_SWAPDOUBLE( &dfReal );
1416 CPL_SWAPDOUBLE( &dfImag );
1417 #endif
1418 if (i > 0)
1419 szBuf[nOffset++] = ' ';
1420 nOffset += CPLsprintf(szBuf + nOffset, "(%f, %f)", dfReal, dfImag);
1421 }
1422 break;
1423 */
1424 case EDT_MJD:
1425 CPLAssert(pField->nCount == 1);
1426 {
1427 GInt32 days;
1428 GUInt32 seconds, microseconds;
1429
1430 days = CPL_MSBWORD32(((const GInt32*)pData)[0]);
1431 seconds = CPL_MSBWORD32(((const GUInt32*)pData)[1]);
1432 microseconds = CPL_MSBWORD32(((const GUInt32*)pData)[2]);
1433
1434 ret = snprintf(szBuf, nBufLen, "%d, %u, %u", days, seconds, microseconds);
1435 if( ret < 0 || ret >= (int)nBufLen )
1436 return CE_Failure;
1437 }
1438 break;
1439 default:
1440 CPLDebug( "EnvisatDataset",
1441 "Unabe to convert '%s' field to string: "
1442 "unexpected data type '%d'.",
1443 pField->szName, pField->eType );
1444 return CE_Failure;
1445 }
1446
1447 return CE_None;
1448 }
1449