![]() |
Earth Observation Mission CFI Software DataHandling Software User Manual |
![]() |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.9 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_TIME_UNDEF = -1, 00183 XDCFI_TIME_TAI, 00184 XDCFI_TIME_UTC, 00185 XDCFI_TIME_UT1, 00186 XDCFI_TIME_GPS 00187 } TimeRefDataHandlingEnum; 00188 00190 typedef enum 00191 { 00192 XDCFI_TIME_REF_OF_TAI = XDCFI_TIME_TAI, 00193 XDCFI_TIME_REF_OF_UTC = XDCFI_TIME_UTC, 00194 XDCFI_TIME_REF_OF_UT1 = XDCFI_TIME_UT1, 00195 XDCFI_TIME_REF_OF_GPS = XDCFI_TIME_GPS 00196 } TimeRefOfDataHandlingEnum; 00197 00199 typedef enum 00200 { 00201 XDCFI_READ_DB = 0, 00202 XDCFI_GNOMONIC = 1, 00203 XDCFI_RECTANGULAR = 2 00204 } ProjectionEnum; 00205 00207 typedef enum 00208 { 00209 XDCFI_ATT_NONE = 0, 00210 XDCFI_ATT_AOCS, 00211 XDCFI_ATT_PARAM, 00212 XDCFI_ATT_HARMONIC, 00213 XDCFI_ATT_FILE, 00214 XDCFI_ATT_ANGLE, 00215 XDCFI_ATT_MATRIX 00216 } AttModelEnum; 00217 00219 typedef enum 00220 { 00221 XDCFI_ORBIT_FILE, 00222 XDCFI_OSF_FILE, 00223 XDCFI_DORIS_FILE, 00224 XDCFI_IERS_BULLETIN_FILE, 00225 XDCFI_USER_OSV_LIST, 00226 XDCFI_SP3_FILE, // AN-550 00227 XDCFI_POF_FILE, 00228 XDCFI_ROF_FILE, 00229 XDCFI_SDF_FILE, 00230 XDCFI_STF_FILE, 00231 XDCFI_ATTITUDE_FILE, 00232 XDCFI_DEM_CONF_FILE, 00233 XDCFI_DEM_FILE, 00234 XDCFI_ZONE_FILE, 00235 XDCFI_STATION_FILE, 00236 XDCFI_STAR_FILE, 00237 XDCFI_ATT_STAR_TRACKER_CONF_FILE, 00238 XDCFI_ATT_STAR_TRACKER_FILE, 00239 XDCFI_TLE_FILE, 00240 XDCFI_ATTITUDE_DEFINITION_FILE, // AN-469 00241 XDCFI_OEM_FILE //AN-578 00242 } FileEnum; // Updated for AN-527, to have it alligned with XD_data_file_type_enum 00243 00245 typedef enum 00246 { 00247 XDCFI_UNKNOWN_TYPE = -1, 00248 XDCFI_AUTO, 00249 XDCFI_ORBIT_CHANGE, 00250 XDCFI_STATE_VECTOR, 00251 XDCFI_OSF_TYPE, 00252 XDCFI_POF_TYPE, 00253 XDCFI_ROF_TYPE, 00254 XDCFI_DORIS_TYPE, 00255 XDCFI_POF_N_DORIS_TYPE, 00256 XDCFI_OEF_OSF_TYPE, 00257 XDCFI_OEF_POF_TYPE, 00258 XDCFI_IERS_B_TYPE, 00259 XDCFI_TLE_TYPE, 00260 XDCFI_STF_TYPE, 00261 XDCFI_DORISPREC_TYPE, 00262 XDCFI_DORISPREM_TYPE, 00263 XDCFI_ATT_TYPE, 00264 XDCFI_SCF_TYPE, 00265 XDCFI_PRECISE_PROPAG_TYPE, 00266 XDCFI_DEMCFG_TYPE, 00267 XDCFI_SATCFG_TYPE, 00268 XDCFI_GND_DB_TYPE, 00269 XDCFI_SW_DEF_TYPE, 00270 XDCFI_ZON_DB_TYPE, 00271 XDCFI_STR1ATT_TYPE, 00272 XDCFI_IERS_A_TYPE, 00273 XDCFI_IERS_B_AND_A_TYPE, 00274 XDCFI_ATT_DEF_TYPE, 00275 XDCFI_USER_OSV_LIST_TYPE, 00276 XDCFI_SP3_TYPE, /* AN-550 */ 00277 XDCFI_OSF_POF_MODE, // AN-527 00278 XDCFI_OSF_ROF_MODE, // AN-527 00279 XDCFI_OSF_DORIS_MODE, // AN-527 00280 XDCFI_OEM_TYPE, // AN-578 00281 XDCFI_OSF_OEM_MODE, // AN-578 00282 XDCFI_FILE_TYPE_MAX_VALUE 00283 } FileTypeEnum; 00284 00286 typedef enum 00287 { 00288 XDCFI_DEM_ACE_MODEL = 0, 00289 XDCFI_DEM_GETASSE30_V1, 00290 XDCFI_DEM_GETASSE30_V2, 00291 XDCFI_DEM_ACE2_9SEC, 00292 XDCFI_DEM_GETASSE30_V3, /*AN-503*/ 00293 XDCFI_DEM_GDEM_V2, /*AN-504*/ 00294 XDCFI_DEM_NUM_MODELS 00295 } DemModelEnum; 00296 00298 typedef enum 00299 { 00300 XDCFI_DEM_GETASSE30_SOURCE_ACE, /* land-ice/snow */ 00301 XDCFI_DEM_GETASSE30_SOURCE_MSS, /* sea */ 00302 XDCFI_DEM_GETASSE30_SOURCE_EGM96, /* sea-ice */ 00303 XDCFI_DEM_GETASSE30_SOURCE_SRTM30 /* land */ 00304 } DemGetasseDataSourceEnum; 00305 00306 /* DEM Data Source Types for ACE2 9secs */ 00307 typedef enum 00308 { 00309 XDCFI_DEM_ACE2_SOURCE_SRTM0, /* Pure SRTM (above 60�N pure GLOBE data, below 60S pure ACE [original] data) */ 00310 XDCFI_DEM_ACE2_SOURCE_SRTM1, /* SRTM voids filled by interpolation and/or altimeter data */ 00311 XDCFI_DEM_ACE2_SOURCE_SRTM2, /* SRTM data warped using the ERS-1 Geodetic Mission */ 00312 XDCFI_DEM_ACE2_SOURCE_SRTM3, /* SRTM data warped using EnviSat & ERS-2 data */ 00313 XDCFI_DEM_ACE2_SOURCE_SRTM_LAKE, /* Mean lake level data derived from Altimetry */ 00314 XDCFI_DEM_ACE2_SOURCE_SRTM_GLOBE, /* GLOBE/ACE data warped using combined altimetry (only above 60�N) */ 00315 XDCFI_DEM_ACE2_SOURCE_SRTM_ALT /* Pure altimetry data (derived from ERS-1 Geodetic Mission, 00316 ERS-2 and EnviSat data using Delaunay Triangulation and Bilinear interpolation) */ 00317 } DemAce2DataSourceEnum; 00318 00319 /* DEM Data Source Types for GDEM v2 */ 00320 typedef enum 00321 { 00322 XDCFI_DEM_GDEM_SOURCE_NO_SOURCE_FILE = -1, 00323 XDCFI_DEM_GDEM_SOURCE_SRTM3_V3 = 0, 00324 XDCFI_DEM_GDEM_SOURCE_SRTM3_V2, 00325 XDCFI_DEM_GDEM_SOURCE_NED, 00326 XDCFI_DEM_GDEM_SOURCE_CDED, 00327 XDCFI_DEM_GDEM_SOURCE_ALASKA_DEM 00328 } DemGdemV2DataSourceEnum; 00329 00331 typedef enum 00332 { 00333 XDCFI_CFI_READ_ATT_INIT_PARSER_ERR = 0, 00334 XDCFI_CFI_READ_ATT_READ_PARAM_ERR, 00335 XDCFI_CFI_READ_ATT_WRONG_FILE_TYPE_ERR, 00336 XDCFI_CFI_READ_XML_ATT_NAVIGATION_ERR, 00337 XDCFI_CFI_READ_ATT_WRONG_DATA_TYPE_ERR, 00338 XDCFI_CFI_READ_ATT_INCONSISTENT_DATA_TYPE_ERR, 00339 XDCFI_CFI_READ_ATT_XML_DATA_BLOCK_SIZE_ERR, 00340 XDCFI_CFI_READ_ATT_WRONG_REF_FRAME_ERR, 00341 XDCFI_CFI_READ_ATT_READ_LIST_ERR, 00342 XDCFI_CFI_READ_ATT_TIME_CONV_ERR, 00343 XDCFI_CFI_READ_ATT_MEMORY_ERR, 00344 XDCFI_CFI_READ_ATT_CLEANUP_PARSER_ERR, 00345 XDCFI_CFI_READ_ATT_WRONG_TIME_REF_ERR, 00346 XDCFI_CFI_READ_ATT_WRONG_QUATERNION_ERR, 00347 XDCFI_CFI_READ_ATT_WRONG_ANGLE_ERR, 00348 XDCFI_CFI_READ_ATT_MAX_GAP_ERR, 00349 XDCFI_CFI_READ_ATT_OBSOLETE_TAG_WARN //AN-516 00350 } ReadAttErrEnum; 00351 00353 typedef enum 00354 { 00355 XDCFI_DEFAULT_VALUES = 0, 00356 XDCFI_USER_VALUES = 1 00357 } PrecisePropagUserFlagEnum; 00358 00360 typedef enum 00361 { 00362 XDCFI_NOT_SELECT = 0, 00363 XDCFI_SELECT = 1 00364 } PrecisePropagSelectionFlagEnum; 00365 00367 typedef enum 00368 { 00369 XDCFI_SGA_USE_PARAMETERS = 0, 00370 XDCFI_SGA_READ_VALUES_FROM_FILE = 1 00371 } PrecisePropagSgaFlagEnum; 00372 00374 typedef enum 00375 { 00376 XDCFI_SAT_DEFAULT = 0, 00377 XDCFI_SAT_DEFAULT1 = 1, 00378 XDCFI_SAT_DEFAULT2 = 2, 00379 XDCFI_SAT_DEFAULT3 = 3, 00380 XDCFI_SAT_DEFAULT4 = 4, 00381 XDCFI_SAT_DEFAULT5 = 5, 00382 XDCFI_SAT_DEFAULT6 = 6, 00383 XDCFI_SAT_DEFAULT7 = 7, 00384 XDCFI_SAT_DEFAULT8 = 8, 00385 XDCFI_SAT_DEFAULT9 = 9, 00386 XDCFI_SAT_ERS1 = 11, 00387 XDCFI_SAT_ERS2 = 12, 00388 XDCFI_SAT_ENVISAT = 21, 00389 XDCFI_SAT_METOP1 = 31, 00390 XDCFI_SAT_METOP2 = 32, 00391 XDCFI_SAT_METOP3 = 33, 00392 XDCFI_SAT_CRYOSAT = 41, 00393 XDCFI_SAT_ADM = 51, 00394 XDCFI_SAT_GOCE = 61, 00395 XDCFI_SAT_SMOS = 71, 00396 XDCFI_SAT_TERRASAR = 81, 00397 XDCFI_SAT_EARTHCARE = 91, 00398 XDCFI_SAT_SWARM_A = 101, 00399 XDCFI_SAT_SWARM_B = 102, 00400 XDCFI_SAT_SWARM_C = 103, 00401 XDCFI_SAT_SENTINEL_1A = 110, 00402 XDCFI_SAT_SENTINEL_1B = 111, 00403 XDCFI_SAT_SENTINEL_2 = 112, 00404 XDCFI_SAT_SENTINEL_3 = 113, 00405 XDCFI_SAT_SEOSAT = 120, 00406 XDCFI_SAT_SENTINEL_1C = 125, 00407 XDCFI_SAT_SENTINEL_2A = 126, 00408 XDCFI_SAT_SENTINEL_2B = 127, 00409 XDCFI_SAT_SENTINEL_2C = 128, 00410 XDCFI_SAT_SENTINEL_3A = 129, 00411 XDCFI_SAT_SENTINEL_3B = 130, 00412 XDCFI_SAT_SENTINEL_3C = 131, 00413 XDCFI_SAT_JASON_CSA = 132, // AN-531 00414 XDCFI_SAT_JASON_CSB = 133, // AN-531 00415 XDCFI_SAT_METOP_SG_A1 = 134, // AN-530 00416 XDCFI_SAT_METOP_SG_A2 = 135, // AN-530 00417 XDCFI_SAT_METOP_SG_A3 = 136, // AN-530 00418 XDCFI_SAT_METOP_SG_B1 = 137, // AN-530 00419 XDCFI_SAT_METOP_SG_B2 = 138, // AN-530 00420 XDCFI_SAT_METOP_SG_B3 = 139, // AN-530 00421 XDCFI_SAT_SENTINEL_5P = 140, // AN-502 00422 XDCFI_SAT_GENERIC = 200, 00423 XDCFI_SAT_GENERIC_GEO = 300, 00424 XDCFI_SAT_MTG = 301, 00425 XDCFI_SAT_GENERIC_MEO = 400 // AN-550 00426 } XDSatIdEnum; 00427 00429 typedef enum 00430 { 00431 XDCFI_BULLETIN_A = 0, 00432 XDCFI_BULLETIN_B 00433 } XDBulletinTypeEnum; 00434 00436 typedef enum 00437 { 00438 XDCFI_NO_CACHE = 0, 00439 XDCFI_PRELOAD_CACHE, 00440 XDCFI_FIFO_CACHE 00441 } DemCacheTypeEnum; // Added for AN-487 00442 00444 typedef enum 00445 { 00446 XDCFI_DEM_GEOID_COMPUTATION_DISABLED = 0, 00447 XDCFI_DEM_GEOID_COMPUTATION_ENABLED = 1 00448 } DemGeoidFlagEnum; // AN-466 00449 00451 typedef enum 00452 { 00453 XDCFI_ATT_NONE_MODEL = 0, 00454 XDCFI_ATT_AOCS_MODEL, 00455 XDCFI_ATT_PARAMETER_MODEL, 00456 XDCFI_ATT_HARMONIC_MODEL, 00457 XDCFI_ATT_FILE_MODEL, 00458 XDCFI_ATT_ANGLE_MODEL, 00459 XDCFI_ATT_MATRIX_MODEL, 00460 XDCFI_ATT_QUATERNION_ANGLE_MODEL, 00461 XDCFI_ATT_QUATERNION_MATRIX_MODEL 00462 } AttDefModelEnum; // AN-469 00463 00465 typedef enum 00466 { 00467 XDCFI_SAT_NOMINAL_ATT_DEF = 0, 00468 XDCFI_SAT_ATT_DEF, 00469 XDCFI_INSTR_ATT_DEF 00470 } XDAttDefFrameEnum; // AN-469 00471 00473 typedef enum 00474 { 00475 XDCFI_AOCS_GPM = 0, 00476 XDCFI_AOCS_LNP, 00477 XDCFI_AOCS_YSM, 00478 XDCFI_AOCS_ZDOPPLER 00479 } XDSatNominalAttAocsModeEnum; // AN-469 00480 00482 typedef enum 00483 { 00484 XDCFI_MODEL_GENERIC = 0, 00485 XDCFI_MODEL_ENVISAT, 00486 XDCFI_MODEL_CRYOSAT, 00487 XDCFI_MODEL_ADM, 00488 XDCFI_MODEL_SENTINEL1, 00489 XDCFI_MODEL_SENTINEL2, 00490 XDCFI_MODEL_GEO 00491 } XDSatNominalAttModelEnum; // AN-469 00492 00494 typedef enum 00495 { 00496 XDCFI_ANGLE_TYPE_TRUE_LAT_TOD = 0, 00497 XDCFI_ANGLE_TYPE_MEAN_LAT_TOD, 00498 XDCFI_ANGLE_TYPE_TRUE_LAT_EF /* AN-508 */ 00499 } XDAngleTypeEnum; // AN-469 00500 00502 typedef enum 00503 { 00504 XDCFI_FIT_TLE = 0, /*Used for POF, not valid for OSV LIST*/ 00505 XDCFI_FIT_TLE_LIST, 00506 XDCFI_ONE_TLE_PER_OSV 00507 } XDTLEFitmodeEnum; 00508 00510 typedef enum 00511 { 00512 XDCFI_SP3_POSITION_TYPE, 00513 XDCFI_SP3_POSITION_PLUS_VELOCITY_TYPE 00514 } XDCFISP3FileTypeEnum; // AN-550 00515 00517 typedef enum 00518 { 00519 XDCFI_SP3_GPS = 0, 00520 XDCFI_SP3_MIXED, 00521 XDCFI_SP3_GLONASS, 00522 XDCFI_SP3_LEO, 00523 XDCFI_SP3_GALILEO, 00524 XDCFI_SP3_COMPASS, 00525 XDCFI_SP3_QZSS 00526 } XDCFISP3FileDescriptorEnum; // AN-550 00527 00529 typedef enum 00530 { 00531 XDCFI_SP3_TIME_GPS = 0, 00532 XDCFI_SP3_TIME_GLONASS, 00533 XDCFI_SP3_TIME_GALILEO, 00534 XDCFI_SP3_TIME_TAI, 00535 XDCFI_SP3_TIME_UTC, 00536 XDCFI_SP3_TIME_QZSS 00537 } XDCFISP3TimeSystemEnum; 00538 00540 typedef enum 00541 { 00542 XDCFI_SAT_GPS = 0, 00543 XDCFI_SAT_GLONASS, 00544 XDCFI_SAT_LEO, 00545 XDCFI_SAT_GALILEO, 00546 XDCFI_SAT_COMPASS, 00547 XDCFI_SAT_QZSS 00548 } XDCFISATSP3SatDescriptorEnum; 00549 00551 typedef enum 00552 { 00553 XDCFI_DORIS_CRYOSAT_TYPE, 00554 XDCFI_DORIS_SENTINEL3_TYPE 00555 } XDDORISFileTypeEnum; 00556 00557 //------------------------------------------------------ 00558 // DATA STRUCTURES 00559 //------------------------------------------------------ 00560 00564 class AngleModel 00565 { 00566 public: 00567 00568 //Attributes 00569 double angles[3]; 00570 double offsets[3]; 00571 00573 AngleModel(){}; 00574 00576 AngleModel( double *angle, double *offset) 00577 { 00578 for ( int i = 0 ; i < 3 ; ++i) 00579 { 00580 angles[i] = angle[i]; 00581 offsets[i] = offset[i]; 00582 }// end for i 00583 } 00584 }; 00585 00589 class Asar 00590 { 00591 public: 00592 //Attributes 00593 long asarType; 00594 double slantRangeLeft; 00595 double slantRangeRight; 00596 00598 Asar(){}; 00599 00604 Asar( const long asarTyp, double slantLeft, double slantRight) 00605 { 00606 asarType = asarTyp; 00607 slantRangeLeft = slantLeft; 00608 slantRangeRight = slantRight; 00609 } 00610 };//class Asar 00611 00612 00616 class BulbTable 00617 { 00618 public: 00619 double day; 00620 double ut1Utc; 00621 double ut1Tai; 00622 00624 BulbTable(){}; 00625 00627 BulbTable(double dayUtc, double diffUt1Utc, double diffUt1Tai) 00628 { 00629 day = dayUtc; 00630 ut1Utc = diffUt1Utc; 00631 ut1Tai = diffUt1Tai; 00632 } 00633 00634 }; 00635 00639 class DemPoint 00640 { 00641 public: 00642 00643 //Attributes 00644 double lon; 00645 double lat; 00646 double alt; 00647 00649 DemPoint(){}; 00650 00652 DemPoint( double longitude, double latitude, double altitude) 00653 { 00654 lon = longitude; 00655 lat = latitude; 00656 alt = altitude; 00657 } 00658 }; 00659 00663 class DorisHeader 00664 { 00665 public: 00666 //Atributtes 00667 string fileName; 00668 string sensingStart; // UTC 00669 string sensingStop; // UTC 00670 long relOrbit; 00671 long absOrbit; 00672 double deltaUt1; 00673 string leapUtc; 00674 int leapSign; 00675 int leapErr; 00676 long numDsd; 00677 long dsOffset; 00678 long numDsr; 00679 00680 // extra data: the following values are not read from the file. 00681 // but it must be provided for the writing function 00682 //MPH 00683 string procStageCode; 00684 string refDoc; 00685 string procTime; 00686 string softwareVersion; 00687 string phase; 00688 long cycle; 00689 string stateVectorTime; 00690 double xPosition; 00691 double yPosition; 00692 double zPosition; 00693 double xVelocity; 00694 double yVelocity; 00695 double zVelocity; 00696 string stateVectorSource; 00697 string productErr; 00698 long totSize; 00699 long numDataSets; 00700 00701 //SPH 00702 string sphDescriptor; 00703 string sensingStartTai; // TAI 00704 long absOrbitStart; 00705 double relTimeAscNodeStart; 00706 string sensingStopTai; // TAI 00707 long absOrbitStop; 00708 double relTimeAscNodeStop; 00709 string equatorCrossTime; 00710 long equatorCrossLong; 00711 string ascendingFlag; 00712 long startLat; 00713 long startLong; 00714 long stopLat; 00715 long stopLong; 00716 long numIsps; 00717 long numMissingIsps; 00718 long numErrorIsps; 00719 long numDiscardedIsps; 00720 long numRsIsps; 00721 long numRsCorrections; 00722 long dsrSize; 00723 00725 DorisHeader(); 00726 00728 DorisHeader(string fileNam, 00729 string senStart, 00730 string sensStop, 00731 long relOrbi, 00732 long absOrbi, 00733 double delta_Ut1, 00734 string leap_Utc, 00735 int leap_Sign, 00736 int leap_Err, 00737 long num_Dsd, 00738 long ds_Offset, 00739 long num_Dsr); 00740 00742 DorisHeader(string fileNam, 00743 string sensStart, 00744 string sensStop, 00745 long relOrbi, 00746 long absOrbi, 00747 double delta_Ut1, 00748 string leap_Utc, 00749 int leap_Sign, 00750 int leap_Err, 00751 long num_Dsd, 00752 long ds_Offset, 00753 long num_Dsr, 00754 string procStageCod, 00755 string ref_Doc, 00756 string procTim, 00757 string softVersion, 00758 string phaseIn, 00759 long cycleIn, 00760 string stateVectorTim, 00761 double xPos, 00762 double yPos, 00763 double zPos, 00764 double xVel, 00765 double yVel, 00766 double zVel, 00767 string stateVectSource, 00768 string prodErr, 00769 long tot_Size, 00770 long numDataSet, 00771 string sphDesc, 00772 string sensStartTai, 00773 long absOrbStart, 00774 double relTimAscNodeStart, 00775 string sensStopTai, 00776 long absOrbStop, 00777 double relTimAscNodeStop, 00778 string equator_CrossTime, 00779 long equator_CrossLong, 00780 string ascendFlag, 00781 long start_Lat, 00782 long start_Long, 00783 long stop_Lat, 00784 long stop_Long, 00785 long num_Isps, 00786 long numMissIsps, 00787 long numErrIsps, 00788 long numDiscardIsps, 00789 long num_RsIsps, 00790 long num_RsCorrections, 00791 long dsr_Size 00792 ); 00793 00794 }; 00795 00799 class FileModel 00800 { 00801 public: 00802 00803 //Attributes 00804 vector<string> files; 00805 string auxFile; 00806 long timeRef; 00807 double time0; 00808 double time1; 00809 00811 FileModel(){}; 00812 00814 FileModel( vector<string> &fileNames, 00815 const string auxiliaryFile, 00816 const long timeReference, 00817 const double timeZero, 00818 const double timeOne ) 00819 { 00820 files = fileNames; 00821 auxFile = auxiliaryFile; 00822 timeRef = timeReference; 00823 time0 = timeZero; 00824 time1 = timeOne; 00825 } 00826 00827 }; 00828 00832 class HarmonicData 00833 { 00834 public: 00835 00836 //Attributes 00837 vector<long> harmonicTypePitch; 00838 vector<long> harmonicTypeRoll; 00839 vector<long> harmonicTypeYaw; 00840 vector<double> harmonicCoeffPitch; 00841 vector<double> harmonicCoeffRoll; 00842 vector<double> harmonicCoeffYaw; 00843 00845 HarmonicData(){}; 00846 00848 HarmonicData( vector<long> &harmonicTypPitch, 00849 vector<long> &harmonicTypRoll, 00850 vector<long> &harmonicTypYaw, 00851 vector<double> &harmonicCoefPitch, 00852 vector<double> &harmonicCoefRoll, 00853 vector<double> &harmonicCoefYaw ) 00854 { 00855 harmonicTypePitch = harmonicTypPitch; 00856 harmonicTypeRoll = harmonicTypRoll; 00857 harmonicTypeYaw = harmonicTypYaw; 00858 harmonicCoeffPitch = harmonicCoefPitch; 00859 harmonicCoeffRoll = harmonicCoefRoll; 00860 harmonicCoeffYaw = harmonicCoefYaw; 00861 } 00862 00863 }; 00864 00868 class HarmonicModel 00869 { 00870 public: 00871 00872 //Attributes 00873 long angleType; 00874 HarmonicData harmonicData; 00875 double offsets[3]; 00876 00878 HarmonicModel(){}; 00879 00881 HarmonicModel( const long angleTyp, HarmonicData &harmonicDat, double *offset) 00882 { 00883 angleType = angleTyp; 00884 harmonicData = harmonicDat; 00885 00886 for ( int i = 0 ; i < 3 ; ++i ) 00887 { 00888 offsets[i] = offset[i]; 00889 } 00890 } 00891 }; 00892 00896 class MatrixModel 00897 { 00898 public: 00899 00900 //Attributes 00901 double attMatrix[3][3]; 00902 double offsets[3]; 00903 00905 MatrixModel(){}; 00906 00908 MatrixModel( double **matrix, double *offset ) 00909 { 00910 for ( int i = 0 ; i < 3 ; ++i) 00911 { 00912 for ( int j = 0 ; j < 3 ; ++j ) 00913 { 00914 attMatrix[i][j] = matrix[i][j]; 00915 }// end for j 00916 offsets[i] = offset[i]; 00917 }// end for i 00918 } 00919 }; 00920 00924 class MlstHarmonics 00925 { 00926 public: 00927 00928 //Attributes 00929 double refTime; 00930 double period; 00931 double sinAmplitude; 00932 double cosAmplitude; 00933 00935 MlstHarmonics() 00936 { 00937 refTime = 0.; 00938 period = 1.; 00939 sinAmplitude = 0.; 00940 cosAmplitude = 0.; 00941 }; 00942 00944 MlstHarmonics(double time_in, double period_in, 00945 double sinAmp_in, double cosAmp_in) 00946 { 00947 refTime = time_in; 00948 period = period_in; 00949 sinAmplitude = sinAmp_in; 00950 cosAmplitude = cosAmp_in; 00951 } 00952 }; 00953 00957 class MlstNonlinearDrift 00958 { 00959 public: 00960 00961 //Attributes 00962 long linearApproxValidity; 00963 double quadraticTerm; 00964 vector<MlstHarmonics> mlstHarmonics; 00965 00967 MlstNonlinearDrift() 00968 { 00969 long i; 00970 00971 linearApproxValidity = 99999; 00972 quadraticTerm = 0.; 00973 for (i = 0 ; i < 2 ; i ++ ) 00974 { 00975 mlstHarmonics.push_back(MlstHarmonics()); 00976 } 00977 }; 00978 00980 MlstNonlinearDrift(long linApprox, double quadratic, const vector<MlstHarmonics> &harmonics) 00981 { 00982 linearApproxValidity = linApprox; 00983 quadraticTerm = quadratic; 00984 mlstHarmonics = harmonics; 00985 } 00986 }; 00987 00991 class ParamModel 00992 { 00993 public: 00994 00995 //Attributes 00996 long model; 00997 vector<double> modelParam; 00998 01000 ParamModel(){}; 01001 01003 ParamModel( const long mod, vector<double> &modParam) 01004 { 01005 model = mod; 01006 modelParam = modParam; 01007 } 01008 }; 01009 01013 class SwathGeometry 01014 { 01015 public: 01016 01017 //Attributes 01018 long geometryType; 01019 double azimuth; 01020 double elevation; 01021 double altitude; 01022 double distance; 01023 01025 SwathGeometry(){}; 01026 01028 SwathGeometry( long geomType, double azim, double elevat, 01029 double alt, double dist) 01030 { 01031 geometryType = geomType; 01032 azimuth = azim; 01033 elevation = elevat; 01034 altitude = alt; 01035 distance = dist; 01036 } 01037 }; 01038 01042 class TrackerLimits 01043 { 01044 public: 01045 01046 //Attributes 01047 double maxPenalty; 01048 double normThr; 01049 double maxGap; 01050 01052 TrackerLimits(){}; 01053 01055 TrackerLimits( double maxPenal,double normThreshold, double maximumGap) 01056 { 01057 maxPenalty = maxPenal; 01058 normThr = normThreshold; 01059 maxGap = maximumGap; 01060 } 01061 }; 01062 01066 class StfPt 01067 { 01068 public: 01069 01070 //Attributes 01071 double lon; 01072 double lat; 01073 01075 StfPt(){}; 01076 01078 StfPt( double longitude, double latitude ) 01079 { 01080 lon = longitude; 01081 lat = latitude; 01082 } 01083 }; 01084 01088 class StfVhr 01089 { 01090 public: 01091 01092 //Attributes 01093 string stfName; 01094 string ReferenceOSF; 01095 string ReferenceSDF; 01096 long swathType; 01097 long swathPointType; 01098 01099 double timeStep; 01100 long refractionMode; 01101 double frequency; 01102 01103 long numPoints; 01104 vector<double> altitude; 01105 01106 bool geometryFlag; 01107 01108 long repCycle; 01109 long cycleLength; 01110 double mlstDrift; 01111 01112 long absOrbit; 01113 long orbitStart; 01114 long orbitStop; 01115 01116 double position[3]; 01117 double velocity[3]; 01118 01120 StfVhr(); 01121 01123 StfVhr( string stfNam, 01124 string refOSF, 01125 string refSDF, 01126 long swathTyp, 01127 long swathPointTyp, 01128 double timStep, 01129 long refrMode, 01130 double freq, 01131 long numP, 01132 const vector<double> &alt, 01133 bool geomFlag, 01134 long repCycl, 01135 long cyclLength, 01136 double meanlstDrift, 01137 long absOrb, 01138 long orbit0, 01139 long orbit1, 01140 double *pos, 01141 double *vel 01142 ); 01143 01145 StfVhr( const StfVhr &stfVhr ); 01146 01148 ~StfVhr(); 01149 01151 void operator=( const StfVhr &stfVhr ); 01152 01153 };//class StfVhr 01154 01158 class ZonePoint 01159 { 01160 public: 01161 01162 //Attributes 01163 double ptLong; 01164 double ptLat; 01165 01167 ZonePoint(){}; 01168 01170 ZonePoint( double ptLongitude, double ptLatitude) 01171 { 01172 ptLong = ptLongitude; 01173 ptLat = ptLatitude; 01174 } 01175 }; 01176 01180 class AttitudeModel 01181 { 01182 public: 01183 //Attributes 01184 long attitudeModel; 01185 long AOCS; 01186 ParamModel *paramModel; 01187 HarmonicModel *harmonicModel; 01188 FileModel *fileModel; 01189 AngleModel *angleModel; 01190 MatrixModel *matrixModel; 01191 01193 AttitudeModel(); 01194 01196 AttitudeModel( long attModel, 01197 long AOCSModel, 01198 ParamModel &parMod, 01199 HarmonicModel &harmMod, 01200 FileModel &fileMod, 01201 AngleModel &angleMod, 01202 MatrixModel &matrixMod 01203 ); 01204 01206 AttitudeModel( const AttitudeModel &attModel ); 01207 01209 ~AttitudeModel(); 01210 01212 void operator=( const AttitudeModel &attModel ); 01213 01214 protected: 01215 01216 private: 01218 void eraseAttitude(); 01219 }; 01220 01224 class PolarMotionParams 01225 { 01226 public: 01227 //Attributes 01228 double x; 01229 double y; 01230 01232 PolarMotionParams() 01233 { 01234 x = 0.; 01235 y = 0.; 01236 } 01237 01239 PolarMotionParams( double x1, double y1 ) 01240 { 01241 x = x1; 01242 y = y1; 01243 } 01244 01245 }; 01246 01250 class IersBulletinBrec 01251 { 01252 public: 01253 double day; 01254 double ut1Utc; 01255 double ut1Tai; 01256 PolarMotionParams polarMotionParams; 01257 01259 IersBulletinBrec() 01260 { 01261 day = 0.; 01262 ut1Utc = 0.; 01263 ut1Tai = 0.; 01264 } 01265 01267 IersBulletinBrec(double dayUtc, double diffUt1Utc, double diffUt1Tai, 01268 PolarMotionParams polarMotion) 01269 { 01270 day = dayUtc; 01271 ut1Utc = diffUt1Utc; 01272 ut1Tai = diffUt1Tai; 01273 polarMotionParams = polarMotion; 01274 } 01275 01276 }; 01277 01281 class IersBulletinArec 01282 { 01283 public: 01284 double day; 01285 double ut1Utc; 01286 double ut1Tai; 01287 PolarMotionParams polarMotionParams; 01288 01290 IersBulletinArec() 01291 { 01292 day = 0.; 01293 ut1Utc = 0.; 01294 ut1Tai = 0.; 01295 } 01296 01298 IersBulletinArec(double dayUtc, double diffUt1Utc, double diffUt1Tai, 01299 PolarMotionParams polarMotion) 01300 { 01301 day = dayUtc; 01302 ut1Utc = diffUt1Utc; 01303 ut1Tai = diffUt1Tai; 01304 polarMotionParams = polarMotion; 01305 } 01306 01307 }; 01308 01312 class PolarMotionFormula 01313 { 01314 public: 01315 01316 double ax; 01317 double bx; 01318 double cx; 01319 double dx; 01320 double ex; 01321 01322 double ay; 01323 double by; 01324 double cy; 01325 double dy; 01326 double ey; 01327 01328 double Aref; 01329 double Adiv; 01330 double Cref; 01331 double Cdiv; 01332 01334 PolarMotionFormula() 01335 { 01336 ax = 0.; 01337 bx = 0.; 01338 cx = 0.; 01339 dx = 0.; 01340 ex = 0.; 01341 01342 ay = 0.; 01343 by = 0.; 01344 cy = 0.; 01345 dy = 0.; 01346 ey = 0.; 01347 01348 Aref = 0.; 01349 Adiv = 0.; 01350 Cref = 0.; 01351 Cdiv = 0.; 01352 } 01353 01355 PolarMotionFormula(double a1, double b1, double c1, double d1, double e1, 01356 double a2, double b2, double c2, double d2, double e2, 01357 double Ar, double Ad, double Cr, double Cd) 01358 { 01359 ax = a1; 01360 bx = b1; 01361 cx = c1; 01362 dx = d1; 01363 ex = e1; 01364 01365 ay = a2; 01366 by = b2; 01367 cy = c2; 01368 dy = d2; 01369 ey = e2; 01370 01371 Aref = Ar; 01372 Adiv = Ad; 01373 Cref = Cr; 01374 Cdiv = Cd; 01375 } 01376 01377 }; 01378 01382 class TimeCorrelationFormula 01383 { 01384 public: 01385 01386 double a; 01387 double b; 01388 double bRef; 01389 01391 TimeCorrelationFormula() 01392 { 01393 a = 0.; 01394 b = 0.; 01395 bRef = 0.; 01396 } 01397 01399 TimeCorrelationFormula(double a1, double b1, double br) 01400 { 01401 a = a1; 01402 b = b1; 01403 bRef = br; 01404 } 01405 }; 01406 01410 class IersBulletinBFile 01411 { 01412 public: 01413 01414 string bulletinId; 01415 vector<IersBulletinBrec> finalTable; 01416 vector<IersBulletinBrec> preliminaryTable; 01417 01419 IersBulletinBFile() 01420 { 01421 bulletinId = ""; 01422 } 01423 01425 IersBulletinBFile(string bulId, 01426 vector<IersBulletinBrec> &vecFinal, 01427 vector<IersBulletinBrec> &vecPrel) 01428 { 01429 bulletinId = bulId; 01430 finalTable = vecFinal; 01431 preliminaryTable = vecPrel; 01432 } 01433 01434 };//class IersBulletinBFile 01435 01439 class IersBulletinAFile 01440 { 01441 public: 01442 01443 string bulletinId; 01444 vector<IersBulletinArec> predictionTable; 01445 PolarMotionFormula polarMotionFormula; 01446 TimeCorrelationFormula timeCorrelationFormula; 01447 01449 IersBulletinAFile() 01450 { 01451 bulletinId = ""; 01452 } 01453 01455 IersBulletinAFile(string bulId, 01456 vector<IersBulletinArec> &vecPred, 01457 PolarMotionFormula &polarFormula, 01458 TimeCorrelationFormula &timeFormula) 01459 { 01460 bulletinId = bulId; 01461 predictionTable = vecPred; 01462 polarMotionFormula = polarFormula; 01463 timeCorrelationFormula = timeFormula; 01464 } 01465 01466 };//class IersBulletinAFile 01467 01471 class DemMiniTiles 01472 { 01473 public: 01474 string fileName; 01475 double lonSize; 01476 double latSize; 01477 01479 DemMiniTiles() 01480 { 01481 fileName = ""; 01482 lonSize = 0.; 01483 latSize = 0.; 01484 } 01485 01487 DemMiniTiles(string fileN, double lon, double lat) 01488 { 01489 fileName = fileN; 01490 lonSize = lon; 01491 latSize = lat; 01492 } 01493 }; // AN-492 01494 01498 class QuaternionPlusAngle 01499 { 01500 public: 01501 01502 //Attributes 01503 long inertialFrame; 01504 vector<AttRec> quat; 01505 AngleModel angleModel; 01506 01508 QuaternionPlusAngle(){}; 01509 01511 QuaternionPlusAngle( long frame, vector<AttRec> attvec, AngleModel &angModel ) 01512 { 01513 inertialFrame = frame; 01514 quat = attvec; 01515 angleModel = angModel; 01516 } 01517 }; // AN-469 01518 01519 // 01522 class QuaternionPlusMatrix 01523 { 01524 public: 01525 01526 //Attributes 01527 long inertialFrame; 01528 vector<AttRec> quat; 01529 MatrixModel matrixModel; 01530 01532 QuaternionPlusMatrix(){}; 01533 01535 QuaternionPlusMatrix( long frame, vector<AttRec> attvec, MatrixModel &matModel ) 01536 { 01537 inertialFrame = frame; 01538 quat = attvec; 01539 matrixModel = matModel; 01540 } 01541 }; // AN-469 01542 01546 class AttitudeDefinitionModel 01547 { 01548 public: 01549 //Attributes 01550 long attitudeModel; 01551 long AOCS; 01552 ParamModel *paramModel; 01553 HarmonicModel *harmonicModel; 01554 FileModel *fileModel; 01555 AngleModel *angleModel; 01556 MatrixModel *matrixModel; 01557 QuaternionPlusAngle *quaternionAngleModel; 01558 QuaternionPlusMatrix * quaternionMatrixModel; 01559 01561 AttitudeDefinitionModel(); 01562 01564 AttitudeDefinitionModel( long attModel, 01565 long AOCSModel, 01566 ParamModel &parMod, 01567 HarmonicModel &harmMod, 01568 FileModel &fileMod, 01569 AngleModel &angleMod, 01570 MatrixModel &matrixMod, 01571 QuaternionPlusAngle &quatAngMod, 01572 QuaternionPlusMatrix &quatMatMod 01573 ); 01574 01576 AttitudeDefinitionModel( const AttitudeDefinitionModel &attModel ); 01577 01579 ~AttitudeDefinitionModel(); 01580 01582 void operator=( const AttitudeDefinitionModel &attModel ); 01583 01584 protected: 01585 01586 private: 01588 void eraseAttitude(); 01589 }; // AN-469 01590 01591 }//end EECFI 01592 01593 #endif