![]() |
Earth Observation Mission CFI Software DataHandling Software User Manual |
![]() |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.12 00003 //-------------------------------------------------------- 00004 00005 //-------------------------------------------------------------------- 00006 // CVS Info: $Id: DataHandlingData.h,v 1.35 2014-03-25 07:51:58 cavm Exp $ 00007 //-------------------------------------------------------------------- 00008 00010 // This file contais generic data that can be used as input/output in 00011 // the classes of EXPCFI DataHandling library 00013 00014 #ifndef __EECFI_DATAHANDLINGDATA__ 00015 #define __EECFI_DATAHANDLINGDATA__ 00016 00017 //--INCLUDE----------------------------------------------------------- 00018 #include <string> 00019 #include <vector> 00020 00021 #include "AttRec.h" 00022 #include "DataHandlingDllExport.h" 00023 #define MaxStationVertices 999 00024 00025 //--NAMESPACES-------------------------------------------------------- 00026 using namespace std; 00027 00028 00029 namespace EECFI 00030 { 00031 //------------------------------------------------------ 00032 // CONSTANT DATA 00033 //------------------------------------------------------ 00034 00035 //------------------------------------------------------ 00036 // DATA ENUMERATION 00037 //------------------------------------------------------ 00038 00040 typedef enum 00041 { 00042 XDCFI_ATT_QUATERNIONS = 0, 00043 XDCFI_ATT_ANGLES 00044 } AttitudeDataTypeEnum; 00045 00047 typedef enum 00048 { 00049 XDCFI_LINE_GEOM = 0, 00050 XDCFI_POINT_GEOM, 00051 XDCFI_LIMB_GEOM, 00052 XDCFI_DISTANCE_GEOM 00053 } GeomTypeEnum; 00054 00056 typedef enum 00057 { 00058 XDCFI_NO_ASAR = 0, 00059 XDCFI_NARROW_ASAR, 00060 XDCFI_WIDE_ASAR 00061 } AsarTypeEnum; 00062 00064 typedef enum 00065 { 00066 XDCFI_NO_REF = 0, 00067 XDCFI_STD_REF, 00068 XDCFI_USER_REF, 00069 XDCFI_PRED_REF, 00070 XDCFI_STD_REF_N = 10, 00071 XDCFI_USER_REF_N = 20, 00072 XDCFI_PRED_REF_N = 30, 00073 XDCFI_US76_REF = 300, 00074 XDCFI_TROPIC_REF, 00075 XDCFI_MID_SUM_REF, 00076 XDCFI_MID_WIN_REF, 00077 XDCFI_SUBAR_SUM_REF, 00078 XDCFI_SUBAR_WIN_REF, 00079 XDCFI_LUT_REF = 400, 00080 XDCFI_US76_REF_N = 3000, 00081 XDCFI_TROPIC_REF_N, 00082 XDCFI_MID_SUM_REF_N, 00083 XDCFI_MID_WIN_REF_N, 00084 XDCFI_SUBAR_SUM_REF_N, 00085 XDCFI_SUBAR_WIN_REF_N, 00086 XDCFI_LUT_REF_N = 4000 00087 } TargetRayEnum; 00088 00090 typedef enum 00091 { 00092 XDCFI_OPEN_SWATH, 00093 XDCFI_CLOSED_SWATH 00094 } SwathTypecEnum; 00095 00097 typedef enum 00098 { 00099 XDCFI_GEODETIC_SWATH_TYPE, 00100 XDCFI_INERTIAL_SWATH_TYPE 00101 } SwathPointTypeEnum; 00102 00104 typedef enum 00105 { 00106 XDCFI_SWATH_POINTING_GEOM = 0, /* Algorithms of calculation of Swaths */ 00107 XDCFI_SWATH_DISTANCE_GEOM, 00108 XDCFI_SWATH_LIMB_GEOM, 00109 XDCFI_SWATH_INERTIAL_GEOM, 00110 XDCFI_SWATH_SUBSATELLITE_GEOM, 00111 XDCFI_SWATH_ASAR_GEOM 00112 00113 } SwathGeomEnum; 00114 00116 typedef enum 00117 { 00118 XDCFI_NOT_DEFINED = -1, 00119 XDCFI_POINT = 0, 00120 XDCFI_CIRCLE = 1, 00121 XDCFI_SEGMENT = 2, 00122 XDCFI_POLYGON = 3 00123 } ZoneTypeEnum; 00124 00126 typedef enum 00127 { 00128 XDCFI_SAT_ORBITAL_REF = 0, 00129 XDCFI_SAT_NOMINAL_ATT, 00130 XDCFI_SAT_ATT, 00131 XDCFI_INSTR_ATT 00132 } AttitudeFrameEnum; 00133 00135 typedef enum 00136 { 00137 XDCFI_BAR_MEAN_2000 = 1, 00138 XDCFI_HEL_MEAN_2000, 00139 XDCFI_GEO_MEAN_2000, 00140 XDCFI_MEAN_DATE, 00141 XDCFI_TRUE_DATE, 00142 XDCFI_PSEUDO_EARTH_FIXED, 00143 XDCFI_EARTH_FIXED, 00144 XDCFI_BAR_MEAN_1950, 00145 XDCFI_GALACTIC, 00146 XDCFI_SAT_ACT_REF, 00147 XDCFI_QUASI_MEAN_DATE, 00148 XDCFI_PSE_TRUE_DATE, 00149 XDCFI_TOPOCENTRIC, 00150 XDCFI_SAT_REF, 00151 XDCFI_SAT_REL_REF 00152 } CoordinateSystemsEnum; // Updated for AN-509 00153 00155 typedef enum 00156 { 00157 XDCFI_3_ADJUST_NOMI = 1, 00158 XDCFI_4_ADJUST_DMAN, 00159 XDCFI_5_INTERP_DGAP, 00160 XDCFI_6_EXTRAP_LT1D, 00161 XDCFI_7_EXTRAP_1D2D, 00162 XDCFI_8_EXTRAP_GT2D, 00163 XDCFI_8_EXTRAP_AMAN, 00164 XDCFI_Q_INDEX_MAX_ENUM 00165 } QualityIndexEnum; 00166 00168 typedef enum 00169 { 00170 XDCFI_SCF_DRAW_SOLID, 00171 XDCFI_SCF_DRAW_DASHED, 00172 XDCFI_SCF_DRAW_DOTTED, 00173 XDCFI_SCF_DRAW_TIMELINE 00174 } SCFDrawModesEnum; 00175 00177 typedef enum 00178 { 00179 XDCFI_SCF_FILL_SOLID, 00180 XDCFI_SCF_FILL_HOLLOW 00181 } SCFFillModesEnum; 00182 00184 typedef enum 00185 { 00186 XDCFI_SEL_FILE = 0, 00187 XDCFI_SEL_TIME, 00188 XDCFI_SEL_ORBIT, 00189 XDCFI_SEL_DEFAULT, 00190 XDCFI_SEL_NONE 00191 } TimeInitModeEnum; 00192 00194 typedef enum 00195 { 00196 XDCFI_TIME_UNDEF = -1, 00197 XDCFI_TIME_TAI, 00198 XDCFI_TIME_UTC, 00199 XDCFI_TIME_UT1, 00200 XDCFI_TIME_GPS 00201 } TimeRefDataHandlingEnum; 00202 00204 typedef enum 00205 { 00206 XDCFI_EXTEND_NUM_OSV = 0, 00207 XDCFI_EXTEND_TIME 00208 } ExtendTypeEnum; 00209 00211 typedef enum 00212 { 00213 XDCFI_TIME_REF_OF_TAI = XDCFI_TIME_TAI, 00214 XDCFI_TIME_REF_OF_UTC = XDCFI_TIME_UTC, 00215 XDCFI_TIME_REF_OF_UT1 = XDCFI_TIME_UT1, 00216 XDCFI_TIME_REF_OF_GPS = XDCFI_TIME_GPS 00217 } TimeRefOfDataHandlingEnum; 00218 00220 typedef enum 00221 { 00222 XDCFI_READ_DB = 0, 00223 XDCFI_GNOMONIC = 1, 00224 XDCFI_RECTANGULAR = 2 00225 } ProjectionEnum; 00226 00228 typedef enum 00229 { 00230 XDCFI_ATT_NONE = 0, 00231 XDCFI_ATT_AOCS, 00232 XDCFI_ATT_PARAM, 00233 XDCFI_ATT_HARMONIC, 00234 XDCFI_ATT_FILE, 00235 XDCFI_ATT_ANGLE, 00236 XDCFI_ATT_MATRIX 00237 } AttModelEnum; 00238 00240 typedef enum 00241 { 00242 XDCFI_ORBIT_FILE, 00243 XDCFI_OSF_FILE, 00244 XDCFI_DORIS_FILE, 00245 XDCFI_IERS_BULLETIN_FILE, 00246 XDCFI_USER_OSV_LIST, 00247 XDCFI_SP3_FILE, // AN-550 00248 XDCFI_POF_FILE, 00249 XDCFI_ROF_FILE, 00250 XDCFI_SDF_FILE, 00251 XDCFI_STF_FILE, 00252 XDCFI_ATTITUDE_FILE, 00253 XDCFI_DEM_CONF_FILE, 00254 XDCFI_DEM_FILE, 00255 XDCFI_ZONE_FILE, 00256 XDCFI_STATION_FILE, 00257 XDCFI_STAR_FILE, 00258 XDCFI_ATT_STAR_TRACKER_CONF_FILE, 00259 XDCFI_ATT_STAR_TRACKER_FILE, 00260 XDCFI_TLE_FILE, 00261 XDCFI_ATTITUDE_DEFINITION_FILE, //AN-469 00262 XDCFI_OEM_FILE, //AN-578 00263 XDCFI_FOV_CONSTRAINTS_FILE //AN-628 00264 } FileEnum; // Updated for AN-527, to have it alligned with XD_data_file_type_enum 00265 00267 typedef enum 00268 { 00269 XDCFI_UNKNOWN_TYPE = -1, 00270 XDCFI_AUTO, 00271 XDCFI_ORBIT_CHANGE, 00272 XDCFI_STATE_VECTOR, 00273 XDCFI_OSF_TYPE, 00274 XDCFI_POF_TYPE, 00275 XDCFI_ROF_TYPE, 00276 XDCFI_DORIS_TYPE, 00277 XDCFI_POF_N_DORIS_TYPE, 00278 XDCFI_OEF_OSF_TYPE, 00279 XDCFI_OEF_POF_TYPE, 00280 XDCFI_IERS_B_TYPE, 00281 XDCFI_TLE_TYPE, 00282 XDCFI_STF_TYPE, 00283 XDCFI_DORISPREC_TYPE, 00284 XDCFI_DORISPREM_TYPE, 00285 XDCFI_ATT_TYPE, 00286 XDCFI_SCF_TYPE, 00287 XDCFI_PRECISE_PROPAG_TYPE, 00288 XDCFI_DEMCFG_TYPE, 00289 XDCFI_SATCFG_TYPE, 00290 XDCFI_GND_DB_TYPE, 00291 XDCFI_SW_DEF_TYPE, 00292 XDCFI_ZON_DB_TYPE, 00293 XDCFI_STR1ATT_TYPE, 00294 XDCFI_IERS_A_TYPE, 00295 XDCFI_IERS_B_AND_A_TYPE, 00296 XDCFI_ATT_DEF_TYPE, 00297 XDCFI_USER_OSV_LIST_TYPE, 00298 XDCFI_SP3_TYPE, /* AN-550 */ 00299 XDCFI_OSF_POF_MODE, // AN-527 00300 XDCFI_OSF_ROF_MODE, // AN-527 00301 XDCFI_OSF_DORIS_MODE, // AN-527 00302 XDCFI_OEM_TYPE, // AN-578 00303 XDCFI_OSF_OEM_MODE, // AN-578 00304 XDCFI_FILE_TYPE_MAX_VALUE 00305 } FileTypeEnum; 00306 00308 typedef enum 00309 { 00310 XDCFI_DEM_ACE_MODEL = 0, 00311 XDCFI_DEM_GETASSE30_V1, 00312 XDCFI_DEM_GETASSE30_V2, 00313 XDCFI_DEM_ACE2_9SEC, 00314 XDCFI_DEM_GETASSE30_V3, /*AN-503*/ 00315 XDCFI_DEM_GDEM_V2, /*AN-504*/ 00316 XDCFI_DEM_ACE2_30SEC, /*AN-615*/ 00317 XDCFI_DEM_ACE2_3SEC, // AN-619 00318 XDCFI_DEM_NUM_MODELS 00319 } DemModelEnum; 00320 00322 typedef enum 00323 { 00324 XDCFI_DEM_GETASSE30_SOURCE_ACE, /* land-ice/snow */ 00325 XDCFI_DEM_GETASSE30_SOURCE_MSS, /* sea */ 00326 XDCFI_DEM_GETASSE30_SOURCE_EGM96, /* sea-ice */ 00327 XDCFI_DEM_GETASSE30_SOURCE_SRTM30 /* land */ 00328 } DemGetasseDataSourceEnum; 00329 00330 /* DEM Data Source Types for ACE2: 9secs and 30secs */ 00331 typedef enum 00332 { 00333 XDCFI_DEM_ACE2_SOURCE_SRTM0, /* Pure SRTM (above 60�N pure GLOBE data, below 60S pure ACE [original] data) */ 00334 XDCFI_DEM_ACE2_SOURCE_SRTM1, /* SRTM voids filled by interpolation and/or altimeter data */ 00335 XDCFI_DEM_ACE2_SOURCE_SRTM2, /* SRTM data warped using the ERS-1 Geodetic Mission */ 00336 XDCFI_DEM_ACE2_SOURCE_SRTM3, /* SRTM data warped using EnviSat & ERS-2 data */ 00337 XDCFI_DEM_ACE2_SOURCE_SRTM_LAKE, /* Mean lake level data derived from Altimetry */ 00338 XDCFI_DEM_ACE2_SOURCE_SRTM_GLOBE, /* GLOBE/ACE data warped using combined altimetry (only above 60�N) */ 00339 XDCFI_DEM_ACE2_SOURCE_SRTM_ALT /* Pure altimetry data (derived from ERS-1 Geodetic Mission, 00340 ERS-2 and EnviSat data using Delaunay Triangulation and Bilinear interpolation) */ 00341 } DemAce2DataSourceEnum; 00342 00343 /* DEM Data Source Types for GDEM v2 */ 00344 typedef enum 00345 { 00346 XDCFI_DEM_GDEM_SOURCE_NO_SOURCE_FILE = -1, 00347 XDCFI_DEM_GDEM_SOURCE_SRTM3_V3 = 0, 00348 XDCFI_DEM_GDEM_SOURCE_SRTM3_V2, 00349 XDCFI_DEM_GDEM_SOURCE_NED, 00350 XDCFI_DEM_GDEM_SOURCE_CDED, 00351 XDCFI_DEM_GDEM_SOURCE_ALASKA_DEM 00352 } DemGdemV2DataSourceEnum; 00353 00355 typedef enum 00356 { 00357 XDCFI_CFI_READ_ATT_INIT_PARSER_ERR = 0, 00358 XDCFI_CFI_READ_ATT_READ_PARAM_ERR, 00359 XDCFI_CFI_READ_ATT_WRONG_FILE_TYPE_ERR, 00360 XDCFI_CFI_READ_XML_ATT_NAVIGATION_ERR, 00361 XDCFI_CFI_READ_ATT_WRONG_DATA_TYPE_ERR, 00362 XDCFI_CFI_READ_ATT_INCONSISTENT_DATA_TYPE_ERR, 00363 XDCFI_CFI_READ_ATT_XML_DATA_BLOCK_SIZE_ERR, 00364 XDCFI_CFI_READ_ATT_WRONG_REF_FRAME_ERR, 00365 XDCFI_CFI_READ_ATT_READ_LIST_ERR, 00366 XDCFI_CFI_READ_ATT_TIME_CONV_ERR, 00367 XDCFI_CFI_READ_ATT_MEMORY_ERR, 00368 XDCFI_CFI_READ_ATT_CLEANUP_PARSER_ERR, 00369 XDCFI_CFI_READ_ATT_WRONG_TIME_REF_ERR, 00370 XDCFI_CFI_READ_ATT_WRONG_QUATERNION_ERR, 00371 XDCFI_CFI_READ_ATT_WRONG_ANGLE_ERR, 00372 XDCFI_CFI_READ_ATT_MAX_GAP_ERR, 00373 XDCFI_CFI_READ_ATT_OBSOLETE_TAG_WARN //AN-516 00374 } ReadAttErrEnum; 00375 00377 typedef enum 00378 { 00379 XDCFI_DEFAULT_VALUES = 0, 00380 XDCFI_USER_VALUES = 1 00381 } PrecisePropagUserFlagEnum; 00382 00384 typedef enum 00385 { 00386 XDCFI_NOT_SELECT = 0, 00387 XDCFI_SELECT = 1 00388 } PrecisePropagSelectionFlagEnum; 00389 00391 typedef enum 00392 { 00393 XDCFI_SGA_USE_PARAMETERS = 0, 00394 XDCFI_SGA_READ_VALUES_FROM_FILE = 1 00395 } PrecisePropagSgaFlagEnum; 00396 00398 typedef enum 00399 { 00400 XDCFI_SAT_DEFAULT = 0, 00401 XDCFI_SAT_DEFAULT1 = 1, 00402 XDCFI_SAT_DEFAULT2 = 2, 00403 XDCFI_SAT_DEFAULT3 = 3, 00404 XDCFI_SAT_DEFAULT4 = 4, 00405 XDCFI_SAT_DEFAULT5 = 5, 00406 XDCFI_SAT_DEFAULT6 = 6, 00407 XDCFI_SAT_DEFAULT7 = 7, 00408 XDCFI_SAT_DEFAULT8 = 8, 00409 XDCFI_SAT_DEFAULT9 = 9, 00410 XDCFI_SAT_ERS1 = 11, 00411 XDCFI_SAT_ERS2 = 12, 00412 XDCFI_SAT_ENVISAT = 21, 00413 XDCFI_SAT_METOP1 = 31, 00414 XDCFI_SAT_METOP2 = 32, 00415 XDCFI_SAT_METOP3 = 33, 00416 XDCFI_SAT_CRYOSAT = 41, 00417 XDCFI_SAT_ADM = 51, 00418 XDCFI_SAT_GOCE = 61, 00419 XDCFI_SAT_SMOS = 71, 00420 XDCFI_SAT_TERRASAR = 81, 00421 XDCFI_SAT_EARTHCARE = 91, 00422 XDCFI_SAT_SWARM_A = 101, 00423 XDCFI_SAT_SWARM_B = 102, 00424 XDCFI_SAT_SWARM_C = 103, 00425 XDCFI_SAT_SENTINEL_1A = 110, 00426 XDCFI_SAT_SENTINEL_1B = 111, 00427 XDCFI_SAT_SENTINEL_2 = 112, 00428 XDCFI_SAT_SENTINEL_3 = 113, 00429 XDCFI_SAT_SEOSAT = 120, 00430 XDCFI_SAT_SENTINEL_1C = 125, 00431 XDCFI_SAT_SENTINEL_2A = 126, 00432 XDCFI_SAT_SENTINEL_2B = 127, 00433 XDCFI_SAT_SENTINEL_2C = 128, 00434 XDCFI_SAT_SENTINEL_3A = 129, 00435 XDCFI_SAT_SENTINEL_3B = 130, 00436 XDCFI_SAT_SENTINEL_3C = 131, 00437 XDCFI_SAT_JASON_CSA = 132, // AN-531 00438 XDCFI_SAT_JASON_CSB = 133, // AN-531 00439 XDCFI_SAT_METOP_SG_A1 = 134, // AN-530 00440 XDCFI_SAT_METOP_SG_A2 = 135, // AN-530 00441 XDCFI_SAT_METOP_SG_A3 = 136, // AN-530 00442 XDCFI_SAT_METOP_SG_B1 = 137, // AN-530 00443 XDCFI_SAT_METOP_SG_B2 = 138, // AN-530 00444 XDCFI_SAT_METOP_SG_B3 = 139, // AN-530 00445 XDCFI_SAT_SENTINEL_5P = 140, // AN-502 00446 XDCFI_SAT_BIOMASS = 141, // AN-601 00447 XDCFI_SAT_SENTINEL_5 = 142, // AN-639 00448 XDCFI_SAT_SAOCOM_CS = 143, // AN-640 00449 XDCFI_SAT_GENERIC = 200, 00450 XDCFI_SAT_GENERIC_GEO = 300, 00451 XDCFI_SAT_MTG = 301, 00452 XDCFI_SAT_GENERIC_MEO = 400 // AN-550 00453 } XDSatIdEnum; 00454 00456 typedef enum 00457 { 00458 XDCFI_BULLETIN_A = 0, 00459 XDCFI_BULLETIN_B 00460 } XDBulletinTypeEnum; 00461 00463 typedef enum 00464 { 00465 XDCFI_NO_CACHE = 0, 00466 XDCFI_PRELOAD_CACHE, 00467 XDCFI_FIFO_CACHE 00468 } DemCacheTypeEnum; // Added for AN-487 00469 00471 typedef enum 00472 { 00473 XDCFI_DEM_GEOID_COMPUTATION_DISABLED = 0, 00474 XDCFI_DEM_GEOID_COMPUTATION_ENABLED = 1 00475 } DemGeoidFlagEnum; // AN-466 00476 00478 typedef enum 00479 { 00480 XDCFI_ATT_NONE_MODEL = 0, 00481 XDCFI_ATT_AOCS_MODEL, 00482 XDCFI_ATT_PARAMETER_MODEL, 00483 XDCFI_ATT_HARMONIC_MODEL, 00484 XDCFI_ATT_FILE_MODEL, 00485 XDCFI_ATT_ANGLE_MODEL, 00486 XDCFI_ATT_MATRIX_MODEL, 00487 XDCFI_ATT_QUATERNION_ANGLE_MODEL, 00488 XDCFI_ATT_QUATERNION_MATRIX_MODEL 00489 } AttDefModelEnum; // AN-469 00490 00492 typedef enum 00493 { 00494 XDCFI_SAT_NOMINAL_ATT_DEF = 0, 00495 XDCFI_SAT_ATT_DEF, 00496 XDCFI_INSTR_ATT_DEF 00497 } XDAttDefFrameEnum; // AN-469 00498 00500 typedef enum 00501 { 00502 XDCFI_AOCS_GPM = 0, 00503 XDCFI_AOCS_LNP, 00504 XDCFI_AOCS_YSM, 00505 XDCFI_AOCS_ZDOPPLER 00506 } XDSatNominalAttAocsModeEnum; // AN-469 00507 00509 typedef enum 00510 { 00511 XDCFI_MODEL_GENERIC = 0, 00512 XDCFI_MODEL_ENVISAT, 00513 XDCFI_MODEL_CRYOSAT, 00514 XDCFI_MODEL_ADM, 00515 XDCFI_MODEL_SENTINEL1, 00516 XDCFI_MODEL_SENTINEL2, 00517 XDCFI_MODEL_GEO 00518 } XDSatNominalAttModelEnum; // AN-469 00519 00521 typedef enum 00522 { 00523 XDCFI_ANGLE_TYPE_TRUE_LAT_TOD = 0, 00524 XDCFI_ANGLE_TYPE_MEAN_LAT_TOD, 00525 XDCFI_ANGLE_TYPE_TRUE_LAT_EF /* AN-508 */ 00526 } XDAngleTypeEnum; // AN-469 00527 00529 typedef enum 00530 { 00531 XDCFI_FIT_TLE = 0, /*Used for POF, not valid for OSV LIST*/ 00532 XDCFI_FIT_TLE_LIST, 00533 XDCFI_ONE_TLE_PER_OSV 00534 } XDTLEFitmodeEnum; 00535 00537 typedef enum 00538 { 00539 XDCFI_SP3_POSITION_TYPE, 00540 XDCFI_SP3_POSITION_PLUS_VELOCITY_TYPE 00541 } XDCFISP3FileTypeEnum; // AN-550 00542 00544 typedef enum 00545 { 00546 XDCFI_SP3_GPS = 0, 00547 XDCFI_SP3_MIXED, 00548 XDCFI_SP3_GLONASS, 00549 XDCFI_SP3_LEO, 00550 XDCFI_SP3_GALILEO, 00551 XDCFI_SP3_COMPASS, 00552 XDCFI_SP3_QZSS 00553 } XDCFISP3FileDescriptorEnum; // AN-550 00554 00556 typedef enum 00557 { 00558 XDCFI_SP3_TIME_GPS = 0, 00559 XDCFI_SP3_TIME_GLONASS, 00560 XDCFI_SP3_TIME_GALILEO, 00561 XDCFI_SP3_TIME_TAI, 00562 XDCFI_SP3_TIME_UTC, 00563 XDCFI_SP3_TIME_QZSS 00564 } XDCFISP3TimeSystemEnum; 00565 00567 typedef enum 00568 { 00569 XDCFI_SAT_GPS = 0, 00570 XDCFI_SAT_GLONASS, 00571 XDCFI_SAT_LEO, 00572 XDCFI_SAT_GALILEO, 00573 XDCFI_SAT_COMPASS, 00574 XDCFI_SAT_QZSS 00575 } XDCFISATSP3SatDescriptorEnum; 00576 00578 typedef enum 00579 { 00580 XDCFI_DORIS_CRYOSAT_TYPE, 00581 XDCFI_DORIS_SENTINEL3_TYPE 00582 } XDDORISFileTypeEnum; //AN-524 00583 00585 typedef enum 00586 { 00587 XDCFI_FOV_CONSTRAINTS_SC_LINK, 00588 XDCFI_FOV_CONTRAINTS_MAX 00589 } XD_Fov_constraints_enum; // AN-628 00590 00592 typedef enum 00593 { 00594 XDCFI_FALSE = 0, 00595 XDCFI_TRUE = 1 00596 } XDCFI_Boolean; // AN-628 00597 00598 00599 /*ANR-638*/ 00600 typedef enum 00601 { 00602 XDCFI_FFS_DEFAULT = 0, 00603 XDCFI_FFS_V1, 00604 XDCFI_FFS_V2, 00605 XDCFI_FFS_V3, 00606 XDCFI_FFS_MAX 00607 } XDCFI_EOFFS_version; 00608 static const char file_format_standard_version[sizeof(XDCFI_EOFFS_version)+1][250] = {"DEFAULT", "1.0", "2.0", "3.0", "MAX"}; 00609 00610 //------------------------------------------------------ 00611 // DATA STRUCTURES 00612 //------------------------------------------------------ 00613 00617 class XD_DECL AngleModel 00618 { 00619 public: 00620 00621 //Attributes 00622 double angles[3]; 00623 double offsets[3]; 00624 00626 AngleModel(){}; 00627 00629 AngleModel( double *angle, double *offset) 00630 { 00631 for ( int i = 0 ; i < 3 ; ++i) 00632 { 00633 angles[i] = angle[i]; 00634 offsets[i] = offset[i]; 00635 }// end for i 00636 } 00637 }; 00638 00642 class XD_DECL Asar 00643 { 00644 public: 00645 //Attributes 00646 long asarType; 00647 double slantRangeLeft; 00648 double slantRangeRight; 00649 00651 Asar(){}; 00652 00657 Asar( const long asarTyp, double slantLeft, double slantRight) 00658 { 00659 asarType = asarTyp; 00660 slantRangeLeft = slantLeft; 00661 slantRangeRight = slantRight; 00662 } 00663 };//class Asar 00664 00665 00669 class XD_DECL BulbTable 00670 { 00671 public: 00672 double day; 00673 double ut1Utc; 00674 double ut1Tai; 00675 00677 BulbTable(){}; 00678 00680 BulbTable(double dayUtc, double diffUt1Utc, double diffUt1Tai) 00681 { 00682 day = dayUtc; 00683 ut1Utc = diffUt1Utc; 00684 ut1Tai = diffUt1Tai; 00685 } 00686 00687 }; 00688 00692 class XD_DECL DemPoint 00693 { 00694 public: 00695 00696 //Attributes 00697 double lon; 00698 double lat; 00699 double alt; 00700 00702 DemPoint(){}; 00703 00705 DemPoint( double longitude, double latitude, double altitude) 00706 { 00707 lon = longitude; 00708 lat = latitude; 00709 alt = altitude; 00710 } 00711 }; 00712 00716 class XD_DECL DorisHeader 00717 { 00718 public: 00719 //Atributtes 00720 string fileName; 00721 string sensingStart; // UTC 00722 string sensingStop; // UTC 00723 long relOrbit; 00724 long absOrbit; 00725 double deltaUt1; 00726 string leapUtc; 00727 int leapSign; 00728 int leapErr; 00729 long numDsd; 00730 long dsOffset; 00731 long numDsr; 00732 00733 // extra data: the following values are not read from the file. 00734 // but it must be provided for the writing function 00735 //MPH 00736 string procStageCode; 00737 string refDoc; 00738 string procTime; 00739 string softwareVersion; 00740 string phase; 00741 long cycle; 00742 string stateVectorTime; 00743 double xPosition; 00744 double yPosition; 00745 double zPosition; 00746 double xVelocity; 00747 double yVelocity; 00748 double zVelocity; 00749 string stateVectorSource; 00750 string productErr; 00751 long totSize; 00752 long numDataSets; 00753 00754 //SPH 00755 string sphDescriptor; 00756 string sensingStartTai; // TAI 00757 long absOrbitStart; 00758 double relTimeAscNodeStart; 00759 string sensingStopTai; // TAI 00760 long absOrbitStop; 00761 double relTimeAscNodeStop; 00762 string equatorCrossTime; 00763 long equatorCrossLong; 00764 string ascendingFlag; 00765 long startLat; 00766 long startLong; 00767 long stopLat; 00768 long stopLong; 00769 long numIsps; 00770 long numMissingIsps; 00771 long numErrorIsps; 00772 long numDiscardedIsps; 00773 long numRsIsps; 00774 long numRsCorrections; 00775 long dsrSize; 00776 00778 DorisHeader(); 00779 00781 DorisHeader(string fileNam, 00782 string senStart, 00783 string sensStop, 00784 long relOrbi, 00785 long absOrbi, 00786 double delta_Ut1, 00787 string leap_Utc, 00788 int leap_Sign, 00789 int leap_Err, 00790 long num_Dsd, 00791 long ds_Offset, 00792 long num_Dsr); 00793 00795 DorisHeader(string fileNam, 00796 string sensStart, 00797 string sensStop, 00798 long relOrbi, 00799 long absOrbi, 00800 double delta_Ut1, 00801 string leap_Utc, 00802 int leap_Sign, 00803 int leap_Err, 00804 long num_Dsd, 00805 long ds_Offset, 00806 long num_Dsr, 00807 string procStageCod, 00808 string ref_Doc, 00809 string procTim, 00810 string softVersion, 00811 string phaseIn, 00812 long cycleIn, 00813 string stateVectorTim, 00814 double xPos, 00815 double yPos, 00816 double zPos, 00817 double xVel, 00818 double yVel, 00819 double zVel, 00820 string stateVectSource, 00821 string prodErr, 00822 long tot_Size, 00823 long numDataSet, 00824 string sphDesc, 00825 string sensStartTai, 00826 long absOrbStart, 00827 double relTimAscNodeStart, 00828 string sensStopTai, 00829 long absOrbStop, 00830 double relTimAscNodeStop, 00831 string equator_CrossTime, 00832 long equator_CrossLong, 00833 string ascendFlag, 00834 long start_Lat, 00835 long start_Long, 00836 long stop_Lat, 00837 long stop_Long, 00838 long num_Isps, 00839 long numMissIsps, 00840 long numErrIsps, 00841 long numDiscardIsps, 00842 long num_RsIsps, 00843 long num_RsCorrections, 00844 long dsr_Size 00845 ); 00846 00847 }; 00848 00852 class XD_DECL FileModel 00853 { 00854 public: 00855 00856 //Attributes 00857 vector<string> files; 00858 string auxFile; 00859 long timeRef; 00860 double time0; 00861 double time1; 00862 00864 FileModel(){}; 00865 00867 FileModel( vector<string> &fileNames, 00868 const string auxiliaryFile, 00869 const long timeReference, 00870 const double timeZero, 00871 const double timeOne ) 00872 { 00873 files = fileNames; 00874 auxFile = auxiliaryFile; 00875 timeRef = timeReference; 00876 time0 = timeZero; 00877 time1 = timeOne; 00878 } 00879 00880 }; 00881 00885 class XD_DECL HarmonicData 00886 { 00887 public: 00888 00889 //Attributes 00890 vector<long> harmonicTypePitch; 00891 vector<long> harmonicTypeRoll; 00892 vector<long> harmonicTypeYaw; 00893 vector<double> harmonicCoeffPitch; 00894 vector<double> harmonicCoeffRoll; 00895 vector<double> harmonicCoeffYaw; 00896 00898 HarmonicData(){}; 00899 00901 HarmonicData( vector<long> &harmonicTypPitch, 00902 vector<long> &harmonicTypRoll, 00903 vector<long> &harmonicTypYaw, 00904 vector<double> &harmonicCoefPitch, 00905 vector<double> &harmonicCoefRoll, 00906 vector<double> &harmonicCoefYaw ) 00907 { 00908 harmonicTypePitch = harmonicTypPitch; 00909 harmonicTypeRoll = harmonicTypRoll; 00910 harmonicTypeYaw = harmonicTypYaw; 00911 harmonicCoeffPitch = harmonicCoefPitch; 00912 harmonicCoeffRoll = harmonicCoefRoll; 00913 harmonicCoeffYaw = harmonicCoefYaw; 00914 } 00915 00916 }; 00917 00921 class XD_DECL HarmonicModel 00922 { 00923 public: 00924 00925 //Attributes 00926 long angleType; 00927 HarmonicData harmonicData; 00928 double offsets[3]; 00929 00931 HarmonicModel(){}; 00932 00934 HarmonicModel( const long angleTyp, HarmonicData &harmonicDat, double *offset) 00935 { 00936 angleType = angleTyp; 00937 harmonicData = harmonicDat; 00938 00939 for ( int i = 0 ; i < 3 ; ++i ) 00940 { 00941 offsets[i] = offset[i]; 00942 } 00943 } 00944 }; 00945 00949 class XD_DECL MatrixModel 00950 { 00951 public: 00952 00953 //Attributes 00954 double attMatrix[3][3]; 00955 double offsets[3]; 00956 00958 MatrixModel(){}; 00959 00961 MatrixModel( double **matrix, double *offset ) 00962 { 00963 for ( int i = 0 ; i < 3 ; ++i) 00964 { 00965 for ( int j = 0 ; j < 3 ; ++j ) 00966 { 00967 attMatrix[i][j] = matrix[i][j]; 00968 }// end for j 00969 offsets[i] = offset[i]; 00970 }// end for i 00971 } 00972 }; 00973 00977 class XD_DECL MlstHarmonics 00978 { 00979 public: 00980 00981 //Attributes 00982 double refTime; 00983 double period; 00984 double sinAmplitude; 00985 double cosAmplitude; 00986 00988 MlstHarmonics() 00989 { 00990 refTime = 0.; 00991 period = 1.; 00992 sinAmplitude = 0.; 00993 cosAmplitude = 0.; 00994 }; 00995 00997 MlstHarmonics(double time_in, double period_in, 00998 double sinAmp_in, double cosAmp_in) 00999 { 01000 refTime = time_in; 01001 period = period_in; 01002 sinAmplitude = sinAmp_in; 01003 cosAmplitude = cosAmp_in; 01004 } 01005 }; 01006 01010 class XD_DECL MlstNonlinearDrift 01011 { 01012 public: 01013 01014 //Attributes 01015 long linearApproxValidity; 01016 double quadraticTerm; 01017 vector<MlstHarmonics> mlstHarmonics; 01018 01020 MlstNonlinearDrift() 01021 { 01022 long i; 01023 01024 linearApproxValidity = 99999; 01025 quadraticTerm = 0.; 01026 for (i = 0 ; i < 2 ; i ++ ) 01027 { 01028 mlstHarmonics.push_back(MlstHarmonics()); 01029 } 01030 }; 01031 01033 MlstNonlinearDrift(long linApprox, double quadratic, const vector<MlstHarmonics> &harmonics) 01034 { 01035 linearApproxValidity = linApprox; 01036 quadraticTerm = quadratic; 01037 mlstHarmonics = harmonics; 01038 } 01039 }; 01040 01044 class XD_DECL ParamModel 01045 { 01046 public: 01047 01048 //Attributes 01049 long model; 01050 vector<double> modelParam; 01051 01053 ParamModel(){}; 01054 01056 ParamModel( const long mod, vector<double> &modParam) 01057 { 01058 model = mod; 01059 modelParam = modParam; 01060 } 01061 }; 01062 01066 class XD_DECL SwathGeometry 01067 { 01068 public: 01069 01070 //Attributes 01071 long geometryType; 01072 double azimuth; 01073 double elevation; 01074 double altitude; 01075 double distance; 01076 01078 SwathGeometry(){}; 01079 01081 SwathGeometry( long geomType, double azim, double elevat, 01082 double alt, double dist) 01083 { 01084 geometryType = geomType; 01085 azimuth = azim; 01086 elevation = elevat; 01087 altitude = alt; 01088 distance = dist; 01089 } 01090 }; 01091 01095 class XD_DECL TrackerLimits 01096 { 01097 public: 01098 01099 //Attributes 01100 double maxPenalty; 01101 double normThr; 01102 double maxGap; 01103 01105 TrackerLimits(){}; 01106 01108 TrackerLimits( double maxPenal,double normThreshold, double maximumGap) 01109 { 01110 maxPenalty = maxPenal; 01111 normThr = normThreshold; 01112 maxGap = maximumGap; 01113 } 01114 }; 01115 01119 class XD_DECL StfPt 01120 { 01121 public: 01122 01123 //Attributes 01124 double lon; 01125 double lat; 01126 01128 StfPt(){}; 01129 01131 StfPt( double longitude, double latitude ) 01132 { 01133 lon = longitude; 01134 lat = latitude; 01135 } 01136 }; 01137 01141 class XD_DECL StfVhr 01142 { 01143 public: 01144 01145 //Attributes 01146 string stfName; 01147 string ReferenceOSF; 01148 string ReferenceSDF; 01149 long swathType; 01150 long swathPointType; 01151 01152 double timeStep; 01153 long refractionMode; 01154 double frequency; 01155 01156 long numPoints; 01157 vector<double> altitude; 01158 01159 bool geometryFlag; 01160 01161 long repCycle; 01162 long cycleLength; 01163 double mlstDrift; 01164 01165 long absOrbit; 01166 long orbitStart; 01167 long orbitStop; 01168 01169 double position[3]; 01170 double velocity[3]; 01171 01173 StfVhr(); 01174 01176 StfVhr( string stfNam, 01177 string refOSF, 01178 string refSDF, 01179 long swathTyp, 01180 long swathPointTyp, 01181 double timStep, 01182 long refrMode, 01183 double freq, 01184 long numP, 01185 const vector<double> &alt, 01186 bool geomFlag, 01187 long repCycl, 01188 long cyclLength, 01189 double meanlstDrift, 01190 long absOrb, 01191 long orbit0, 01192 long orbit1, 01193 double *pos, 01194 double *vel 01195 ); 01196 01198 StfVhr( const StfVhr &stfVhr ); 01199 01201 ~StfVhr(); 01202 01204 void operator=( const StfVhr &stfVhr ); 01205 01206 };//class StfVhr 01207 01211 class XD_DECL ZonePoint 01212 { 01213 public: 01214 01215 //Attributes 01216 double ptLong; 01217 double ptLat; 01218 01220 ZonePoint(){}; 01221 01223 ZonePoint( double ptLongitude, double ptLatitude) 01224 { 01225 ptLong = ptLongitude; 01226 ptLat = ptLatitude; 01227 } 01228 }; 01229 01233 class XD_DECL AttitudeModel 01234 { 01235 public: 01236 //Attributes 01237 long attitudeModel; 01238 long AOCS; 01239 ParamModel *paramModel; 01240 HarmonicModel *harmonicModel; 01241 FileModel *fileModel; 01242 AngleModel *angleModel; 01243 MatrixModel *matrixModel; 01244 01246 AttitudeModel(); 01247 01249 AttitudeModel( long attModel, 01250 long AOCSModel, 01251 ParamModel &parMod, 01252 HarmonicModel &harmMod, 01253 FileModel &fileMod, 01254 AngleModel &angleMod, 01255 MatrixModel &matrixMod 01256 ); 01257 01259 AttitudeModel( const AttitudeModel &attModel ); 01260 01262 ~AttitudeModel(); 01263 01265 void operator=( const AttitudeModel &attModel ); 01266 01267 protected: 01268 01269 private: 01271 void eraseAttitude(); 01272 }; 01273 01277 class XD_DECL PolarMotionParams 01278 { 01279 public: 01280 //Attributes 01281 double x; 01282 double y; 01283 01285 PolarMotionParams() 01286 { 01287 x = 0.; 01288 y = 0.; 01289 } 01290 01292 PolarMotionParams( double x1, double y1 ) 01293 { 01294 x = x1; 01295 y = y1; 01296 } 01297 01298 }; 01299 01303 class XD_DECL IersBulletinBrec 01304 { 01305 public: 01306 double day; 01307 double ut1Utc; 01308 double ut1Tai; 01309 PolarMotionParams polarMotionParams; 01310 01312 IersBulletinBrec() 01313 { 01314 day = 0.; 01315 ut1Utc = 0.; 01316 ut1Tai = 0.; 01317 } 01318 01320 IersBulletinBrec(double dayUtc, double diffUt1Utc, double diffUt1Tai, 01321 PolarMotionParams polarMotion) 01322 { 01323 day = dayUtc; 01324 ut1Utc = diffUt1Utc; 01325 ut1Tai = diffUt1Tai; 01326 polarMotionParams = polarMotion; 01327 } 01328 01329 }; 01330 01334 class XD_DECL IersBulletinArec 01335 { 01336 public: 01337 double day; 01338 double ut1Utc; 01339 double ut1Tai; 01340 PolarMotionParams polarMotionParams; 01341 01343 IersBulletinArec() 01344 { 01345 day = 0.; 01346 ut1Utc = 0.; 01347 ut1Tai = 0.; 01348 } 01349 01351 IersBulletinArec(double dayUtc, double diffUt1Utc, double diffUt1Tai, 01352 PolarMotionParams polarMotion) 01353 { 01354 day = dayUtc; 01355 ut1Utc = diffUt1Utc; 01356 ut1Tai = diffUt1Tai; 01357 polarMotionParams = polarMotion; 01358 } 01359 01360 }; 01361 01365 class XD_DECL PolarMotionFormula 01366 { 01367 public: 01368 01369 double ax; 01370 double bx; 01371 double cx; 01372 double dx; 01373 double ex; 01374 01375 double ay; 01376 double by; 01377 double cy; 01378 double dy; 01379 double ey; 01380 01381 double Aref; 01382 double Adiv; 01383 double Cref; 01384 double Cdiv; 01385 01387 PolarMotionFormula() 01388 { 01389 ax = 0.; 01390 bx = 0.; 01391 cx = 0.; 01392 dx = 0.; 01393 ex = 0.; 01394 01395 ay = 0.; 01396 by = 0.; 01397 cy = 0.; 01398 dy = 0.; 01399 ey = 0.; 01400 01401 Aref = 0.; 01402 Adiv = 0.; 01403 Cref = 0.; 01404 Cdiv = 0.; 01405 } 01406 01408 PolarMotionFormula(double a1, double b1, double c1, double d1, double e1, 01409 double a2, double b2, double c2, double d2, double e2, 01410 double Ar, double Ad, double Cr, double Cd) 01411 { 01412 ax = a1; 01413 bx = b1; 01414 cx = c1; 01415 dx = d1; 01416 ex = e1; 01417 01418 ay = a2; 01419 by = b2; 01420 cy = c2; 01421 dy = d2; 01422 ey = e2; 01423 01424 Aref = Ar; 01425 Adiv = Ad; 01426 Cref = Cr; 01427 Cdiv = Cd; 01428 } 01429 01430 }; 01431 01435 class XD_DECL TimeCorrelationFormula 01436 { 01437 public: 01438 01439 double a; 01440 double b; 01441 double bRef; 01442 01444 TimeCorrelationFormula() 01445 { 01446 a = 0.; 01447 b = 0.; 01448 bRef = 0.; 01449 } 01450 01452 TimeCorrelationFormula(double a1, double b1, double br) 01453 { 01454 a = a1; 01455 b = b1; 01456 bRef = br; 01457 } 01458 }; 01459 01463 class XD_DECL IersBulletinBFile 01464 { 01465 public: 01466 01467 string bulletinId; 01468 vector<IersBulletinBrec> finalTable; 01469 vector<IersBulletinBrec> preliminaryTable; 01470 01472 IersBulletinBFile() 01473 { 01474 bulletinId = ""; 01475 } 01476 01478 IersBulletinBFile(string bulId, 01479 vector<IersBulletinBrec> &vecFinal, 01480 vector<IersBulletinBrec> &vecPrel) 01481 { 01482 bulletinId = bulId; 01483 finalTable = vecFinal; 01484 preliminaryTable = vecPrel; 01485 } 01486 01487 };//class IersBulletinBFile 01488 01492 class XD_DECL IersBulletinAFile 01493 { 01494 public: 01495 01496 string bulletinId; 01497 vector<IersBulletinArec> predictionTable; 01498 PolarMotionFormula polarMotionFormula; 01499 TimeCorrelationFormula timeCorrelationFormula; 01500 01502 IersBulletinAFile() 01503 { 01504 bulletinId = ""; 01505 } 01506 01508 IersBulletinAFile(string bulId, 01509 vector<IersBulletinArec> &vecPred, 01510 PolarMotionFormula &polarFormula, 01511 TimeCorrelationFormula &timeFormula) 01512 { 01513 bulletinId = bulId; 01514 predictionTable = vecPred; 01515 polarMotionFormula = polarFormula; 01516 timeCorrelationFormula = timeFormula; 01517 } 01518 01519 };//class IersBulletinAFile 01520 01524 class XD_DECL DemMiniTiles 01525 { 01526 public: 01527 string fileName; 01528 double lonSize; 01529 double latSize; 01530 01532 DemMiniTiles() 01533 { 01534 fileName = ""; 01535 lonSize = 0.; 01536 latSize = 0.; 01537 } 01538 01540 DemMiniTiles(string fileN, double lon, double lat) 01541 { 01542 fileName = fileN; 01543 lonSize = lon; 01544 latSize = lat; 01545 } 01546 }; // AN-492 01547 01551 class XD_DECL QuaternionPlusAngle 01552 { 01553 public: 01554 01555 //Attributes 01556 string quatDefFile; 01557 01558 long inertialFrame; 01559 vector<AttRec> quat; 01560 AngleModel angleModel; 01561 01563 QuaternionPlusAngle(){}; 01564 01566 QuaternionPlusAngle( string file, AngleModel &angModel ) 01567 { 01568 quatDefFile = file; 01569 angleModel = angModel; 01570 } 01571 }; // AN-469 01572 01573 // 01576 class XD_DECL QuaternionPlusMatrix 01577 { 01578 public: 01579 01580 //Attributes 01581 string quatDefFile; 01582 MatrixModel matrixModel; 01583 01585 QuaternionPlusMatrix(){}; 01586 01588 QuaternionPlusMatrix( string file, MatrixModel &matModel ) 01589 { 01590 quatDefFile = file; 01591 matrixModel = matModel; 01592 } 01593 }; // AN-469 01594 01598 class XD_DECL AttitudeDefinitionModel 01599 { 01600 public: 01601 //Attributes 01602 long attitudeModel; 01603 long AOCS; 01604 ParamModel *paramModel; 01605 HarmonicModel *harmonicModel; 01606 FileModel *fileModel; 01607 AngleModel *angleModel; 01608 MatrixModel *matrixModel; 01609 QuaternionPlusAngle *quaternionAngleModel; 01610 QuaternionPlusMatrix * quaternionMatrixModel; 01611 01613 AttitudeDefinitionModel(); 01614 01616 AttitudeDefinitionModel( long attModel, 01617 long AOCSModel, 01618 ParamModel &parMod, 01619 HarmonicModel &harmMod, 01620 FileModel &fileMod, 01621 AngleModel &angleMod, 01622 MatrixModel &matrixMod, 01623 QuaternionPlusAngle &quatAngMod, 01624 QuaternionPlusMatrix &quatMatMod 01625 ); 01626 01628 AttitudeDefinitionModel( const AttitudeDefinitionModel &attModel ); 01629 01631 ~AttitudeDefinitionModel(); 01632 01634 void operator=( const AttitudeDefinitionModel &attModel ); 01635 01636 protected: 01637 01638 private: 01640 void eraseAttitude(); 01641 }; // AN-469 01642 01643 01645 class XD_DECL AzElMask 01646 { 01647 public: 01648 long numMaskPt; 01649 long status; 01650 01651 01652 01653 01654 01655 01656 01657 01658 01659 01660 01661 01662 double azimuth[MaxStationVertices]; 01663 double elevation[MaxStationVertices]; 01664 }; 01665 01667 class XD_DECL LinkMask 01668 { 01669 public: 01670 AzElMask inclMask; 01671 AzElMask exclMask; 01672 }; 01673 01675 class XD_DECL LinkData 01676 { 01677 public: 01678 LinkMask maskData; 01679 double minTgHeight; 01680 }; 01681 01683 union XD_DECL FovConstraintsUnion 01684 { 01685 public: 01686 LinkData SCLinkData; 01687 }; 01688 01689 }//end EECFI 01690 01691 #endif