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