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