Coverage Report

Created: 2025-12-31 08:30

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