![]() |
Earth Observation Mission CFI Software DataHandling Software User Manual |
![]() |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.8 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 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_FILE_TYPE_MAX_VALUE 00281 } FileTypeEnum; 00282 00284 typedef enum 00285 { 00286 XDCFI_DEM_ACE_MODEL = 0, 00287 XDCFI_DEM_GETASSE30_V1, 00288 XDCFI_DEM_GETASSE30_V2, 00289 XDCFI_DEM_ACE2_9SEC, 00290 XDCFI_DEM_GETASSE30_V3, /*AN-503*/ 00291 XDCFI_DEM_GDEM_V2, /*AN-504*/ 00292 XDCFI_DEM_NUM_MODELS 00293 } DemModelEnum; 00294 00296 typedef enum 00297 { 00298 XDCFI_DEM_GETASSE30_SOURCE_ACE, /* land-ice/snow */ 00299 XDCFI_DEM_GETASSE30_SOURCE_MSS, /* sea */ 00300 XDCFI_DEM_GETASSE30_SOURCE_EGM96, /* sea-ice */ 00301 XDCFI_DEM_GETASSE30_SOURCE_SRTM30 /* land */ 00302 } DemGetasseDataSourceEnum; 00303 00304 /* DEM Data Source Types for ACE2 9secs */ 00305 typedef enum 00306 { 00307 XDCFI_DEM_ACE2_SOURCE_SRTM0, /* Pure SRTM (above 60�N pure GLOBE data, below 60S pure ACE [original] data) */ 00308 XDCFI_DEM_ACE2_SOURCE_SRTM1, /* SRTM voids filled by interpolation and/or altimeter data */ 00309 XDCFI_DEM_ACE2_SOURCE_SRTM2, /* SRTM data warped using the ERS-1 Geodetic Mission */ 00310 XDCFI_DEM_ACE2_SOURCE_SRTM3, /* SRTM data warped using EnviSat & ERS-2 data */ 00311 XDCFI_DEM_ACE2_SOURCE_SRTM_LAKE, /* Mean lake level data derived from Altimetry */ 00312 XDCFI_DEM_ACE2_SOURCE_SRTM_GLOBE, /* GLOBE/ACE data warped using combined altimetry (only above 60�N) */ 00313 XDCFI_DEM_ACE2_SOURCE_SRTM_ALT /* Pure altimetry data (derived from ERS-1 Geodetic Mission, 00314 ERS-2 and EnviSat data using Delaunay Triangulation and Bilinear interpolation) */ 00315 } DemAce2DataSourceEnum; 00316 00317 /* DEM Data Source Types for GDEM v2 */ 00318 typedef enum 00319 { 00320 XDCFI_DEM_GDEM_SOURCE_NO_SOURCE_FILE = -1, 00321 XDCFI_DEM_GDEM_SOURCE_SRTM3_V3 = 0, 00322 XDCFI_DEM_GDEM_SOURCE_SRTM3_V2, 00323 XDCFI_DEM_GDEM_SOURCE_NED, 00324 XDCFI_DEM_GDEM_SOURCE_CDED, 00325 XDCFI_DEM_GDEM_SOURCE_ALASKA_DEM 00326 } DemGdemV2DataSourceEnum; 00327 00329 typedef enum 00330 { 00331 XDCFI_CFI_READ_ATT_INIT_PARSER_ERR = 0, 00332 XDCFI_CFI_READ_ATT_READ_PARAM_ERR, 00333 XDCFI_CFI_READ_ATT_WRONG_FILE_TYPE_ERR, 00334 XDCFI_CFI_READ_XML_ATT_NAVIGATION_ERR, 00335 XDCFI_CFI_READ_ATT_WRONG_DATA_TYPE_ERR, 00336 XDCFI_CFI_READ_ATT_INCONSISTENT_DATA_TYPE_ERR, 00337 XDCFI_CFI_READ_ATT_XML_DATA_BLOCK_SIZE_ERR, 00338 XDCFI_CFI_READ_ATT_WRONG_REF_FRAME_ERR, 00339 XDCFI_CFI_READ_ATT_READ_LIST_ERR, 00340 XDCFI_CFI_READ_ATT_TIME_CONV_ERR, 00341 XDCFI_CFI_READ_ATT_MEMORY_ERR, 00342 XDCFI_CFI_READ_ATT_CLEANUP_PARSER_ERR, 00343 XDCFI_CFI_READ_ATT_WRONG_TIME_REF_ERR, 00344 XDCFI_CFI_READ_ATT_WRONG_QUATERNION_ERR, 00345 XDCFI_CFI_READ_ATT_WRONG_ANGLE_ERR, 00346 XDCFI_CFI_READ_ATT_MAX_GAP_ERR, 00347 XDCFI_CFI_READ_ATT_OBSOLETE_TAG_WARN //AN-516 00348 } ReadAttErrEnum; 00349 00351 typedef enum 00352 { 00353 XDCFI_DEFAULT_VALUES = 0, 00354 XDCFI_USER_VALUES = 1 00355 } PrecisePropagUserFlagEnum; 00356 00358 typedef enum 00359 { 00360 XDCFI_NOT_SELECT = 0, 00361 XDCFI_SELECT = 1 00362 } PrecisePropagSelectionFlagEnum; 00363 00365 typedef enum 00366 { 00367 XDCFI_SGA_USE_PARAMETERS = 0, 00368 XDCFI_SGA_READ_VALUES_FROM_FILE = 1 00369 } PrecisePropagSgaFlagEnum; 00370 00372 typedef enum 00373 { 00374 XDCFI_SAT_DEFAULT = 0, 00375 XDCFI_SAT_DEFAULT1 = 1, 00376 XDCFI_SAT_DEFAULT2 = 2, 00377 XDCFI_SAT_DEFAULT3 = 3, 00378 XDCFI_SAT_DEFAULT4 = 4, 00379 XDCFI_SAT_DEFAULT5 = 5, 00380 XDCFI_SAT_DEFAULT6 = 6, 00381 XDCFI_SAT_DEFAULT7 = 7, 00382 XDCFI_SAT_DEFAULT8 = 8, 00383 XDCFI_SAT_DEFAULT9 = 9, 00384 XDCFI_SAT_ERS1 = 11, 00385 XDCFI_SAT_ERS2 = 12, 00386 XDCFI_SAT_ENVISAT = 21, 00387 XDCFI_SAT_METOP1 = 31, 00388 XDCFI_SAT_METOP2 = 32, 00389 XDCFI_SAT_METOP3 = 33, 00390 XDCFI_SAT_CRYOSAT = 41, 00391 XDCFI_SAT_ADM = 51, 00392 XDCFI_SAT_GOCE = 61, 00393 XDCFI_SAT_SMOS = 71, 00394 XDCFI_SAT_TERRASAR = 81, 00395 XDCFI_SAT_EARTHCARE = 91, 00396 XDCFI_SAT_SWARM_A = 101, 00397 XDCFI_SAT_SWARM_B = 102, 00398 XDCFI_SAT_SWARM_C = 103, 00399 XDCFI_SAT_SENTINEL_1A = 110, 00400 XDCFI_SAT_SENTINEL_1B = 111, 00401 XDCFI_SAT_SENTINEL_2 = 112, 00402 XDCFI_SAT_SENTINEL_3 = 113, 00403 XDCFI_SAT_SEOSAT = 120, 00404 XDCFI_SAT_SENTINEL_1C = 125, 00405 XDCFI_SAT_SENTINEL_2A = 126, 00406 XDCFI_SAT_SENTINEL_2B = 127, 00407 XDCFI_SAT_SENTINEL_2C = 128, 00408 XDCFI_SAT_SENTINEL_3A = 129, 00409 XDCFI_SAT_SENTINEL_3B = 130, 00410 XDCFI_SAT_SENTINEL_3C = 131, 00411 XDCFI_SAT_JASON_CSA = 132, // AN-531 00412 XDCFI_SAT_JASON_CSB = 133, // AN-531 00413 XDCFI_SAT_METOP_SG_A1 = 134, // AN-530 00414 XDCFI_SAT_METOP_SG_A2 = 135, // AN-530 00415 XDCFI_SAT_METOP_SG_A3 = 136, // AN-530 00416 XDCFI_SAT_METOP_SG_B1 = 137, // AN-530 00417 XDCFI_SAT_METOP_SG_B2 = 138, // AN-530 00418 XDCFI_SAT_METOP_SG_B3 = 139, // AN-530 00419 XDCFI_SAT_SENTINEL_5P = 140, // AN-502 00420 XDCFI_SAT_GENERIC = 200, 00421 XDCFI_SAT_GENERIC_GEO = 300, 00422 XDCFI_SAT_MTG = 301, 00423 XDCFI_SAT_GENERIC_MEO = 400 // AN-550 00424 } XDSatIdEnum; 00425 00427 typedef enum 00428 { 00429 XDCFI_BULLETIN_A = 0, 00430 XDCFI_BULLETIN_B 00431 } XDBulletinTypeEnum; 00432 00434 typedef enum 00435 { 00436 XDCFI_NO_CACHE = 0, 00437 XDCFI_PRELOAD_CACHE, 00438 XDCFI_FIFO_CACHE 00439 } DemCacheTypeEnum; // Added for AN-487 00440 00442 typedef enum 00443 { 00444 XDCFI_DEM_GEOID_COMPUTATION_DISABLED = 0, 00445 XDCFI_DEM_GEOID_COMPUTATION_ENABLED = 1 00446 } DemGeoidFlagEnum; // AN-466 00447 00449 typedef enum 00450 { 00451 XDCFI_ATT_NONE_MODEL = 0, 00452 XDCFI_ATT_AOCS_MODEL, 00453 XDCFI_ATT_PARAMETER_MODEL, 00454 XDCFI_ATT_HARMONIC_MODEL, 00455 XDCFI_ATT_FILE_MODEL, 00456 XDCFI_ATT_ANGLE_MODEL, 00457 XDCFI_ATT_MATRIX_MODEL, 00458 XDCFI_ATT_QUATERNION_ANGLE_MODEL, 00459 XDCFI_ATT_QUATERNION_MATRIX_MODEL 00460 } AttDefModelEnum; // AN-469 00461 00463 typedef enum 00464 { 00465 XDCFI_SAT_NOMINAL_ATT_DEF = 0, 00466 XDCFI_SAT_ATT_DEF, 00467 XDCFI_INSTR_ATT_DEF 00468 } XDAttDefFrameEnum; // AN-469 00469 00471 typedef enum 00472 { 00473 XDCFI_AOCS_GPM = 0, 00474 XDCFI_AOCS_LNP, 00475 XDCFI_AOCS_YSM, 00476 XDCFI_AOCS_ZDOPPLER 00477 } XDSatNominalAttAocsModeEnum; // AN-469 00478 00480 typedef enum 00481 { 00482 XDCFI_MODEL_GENERIC = 0, 00483 XDCFI_MODEL_ENVISAT, 00484 XDCFI_MODEL_CRYOSAT, 00485 XDCFI_MODEL_ADM, 00486 XDCFI_MODEL_SENTINEL1, 00487 XDCFI_MODEL_SENTINEL2, 00488 XDCFI_MODEL_GEO 00489 } XDSatNominalAttModelEnum; // AN-469 00490 00492 typedef enum 00493 { 00494 XDCFI_ANGLE_TYPE_TRUE_LAT_TOD = 0, 00495 XDCFI_ANGLE_TYPE_MEAN_LAT_TOD, 00496 XDCFI_ANGLE_TYPE_TRUE_LAT_EF /* AN-508 */ 00497 } XDAngleTypeEnum; // AN-469 00498 00500 typedef enum 00501 { 00502 XDCFI_FIT_TLE = 0, /*Used for POF, not valid for OSV LIST*/ 00503 XDCFI_FIT_TLE_LIST, 00504 XDCFI_ONE_TLE_PER_OSV 00505 } XDTLEFitmodeEnum; 00506 00508 typedef enum 00509 { 00510 XDCFI_SP3_POSITION_TYPE, 00511 XDCFI_SP3_POSITION_PLUS_VELOCITY_TYPE 00512 } XDCFISP3FileTypeEnum; // AN-550 00513 00515 typedef enum 00516 { 00517 XDCFI_SP3_GPS = 0, 00518 XDCFI_SP3_MIXED, 00519 XDCFI_SP3_GLONASS, 00520 XDCFI_SP3_LEO, 00521 XDCFI_SP3_GALILEO, 00522 XDCFI_SP3_COMPASS, 00523 XDCFI_SP3_QZSS 00524 } XDCFISP3FileDescriptorEnum; // AN-550 00525 00527 typedef enum 00528 { 00529 XDCFI_SP3_TIME_GPS = 0, 00530 XDCFI_SP3_TIME_GLONASS, 00531 XDCFI_SP3_TIME_GALILEO, 00532 XDCFI_SP3_TIME_TAI, 00533 XDCFI_SP3_TIME_UTC, 00534 XDCFI_SP3_TIME_QZSS 00535 } XDCFISP3TimeSystemEnum; 00536 00538 typedef enum 00539 { 00540 XDCFI_SAT_GPS = 0, 00541 XDCFI_SAT_GLONASS, 00542 XDCFI_SAT_LEO, 00543 XDCFI_SAT_GALILEO, 00544 XDCFI_SAT_COMPASS, 00545 XDCFI_SAT_QZSS 00546 } XDCFISATSP3SatDescriptorEnum; 00547 00549 typedef enum 00550 { 00551 XDCFI_DORIS_CRYOSAT_TYPE, 00552 XDCFI_DORIS_SENTINEL3_TYPE 00553 } XDDORISFileTypeEnum; 00554 00555 //------------------------------------------------------ 00556 // DATA STRUCTURES 00557 //------------------------------------------------------ 00558 00562 class AngleModel 00563 { 00564 public: 00565 00566 //Attributes 00567 double angles[3]; 00568 double offsets[3]; 00569 00571 AngleModel(){}; 00572 00574 AngleModel( double *angle, double *offset) 00575 { 00576 for ( int i = 0 ; i < 3 ; ++i) 00577 { 00578 angles[i] = angle[i]; 00579 offsets[i] = offset[i]; 00580 }// end for i 00581 } 00582 }; 00583 00587 class Asar 00588 { 00589 public: 00590 //Attributes 00591 long asarType; 00592 double slantRangeLeft; 00593 double slantRangeRight; 00594 00596 Asar(){}; 00597 00602 Asar( const long asarTyp, double slantLeft, double slantRight) 00603 { 00604 asarType = asarTyp; 00605 slantRangeLeft = slantLeft; 00606 slantRangeRight = slantRight; 00607 } 00608 };//class Asar 00609 00610 00614 class BulbTable 00615 { 00616 public: 00617 double day; 00618 double ut1Utc; 00619 double ut1Tai; 00620 00622 BulbTable(){}; 00623 00625 BulbTable(double dayUtc, double diffUt1Utc, double diffUt1Tai) 00626 { 00627 day = dayUtc; 00628 ut1Utc = diffUt1Utc; 00629 ut1Tai = diffUt1Tai; 00630 } 00631 00632 }; 00633 00637 class DemPoint 00638 { 00639 public: 00640 00641 //Attributes 00642 double lon; 00643 double lat; 00644 double alt; 00645 00647 DemPoint(){}; 00648 00650 DemPoint( double longitude, double latitude, double altitude) 00651 { 00652 lon = longitude; 00653 lat = latitude; 00654 alt = altitude; 00655 } 00656 }; 00657 00661 class DorisHeader 00662 { 00663 public: 00664 //Atributtes 00665 string fileName; 00666 string sensingStart; // UTC 00667 string sensingStop; // UTC 00668 long relOrbit; 00669 long absOrbit; 00670 double deltaUt1; 00671 string leapUtc; 00672 int leapSign; 00673 int leapErr; 00674 long numDsd; 00675 long dsOffset; 00676 long numDsr; 00677 00678 // extra data: the following values are not read from the file. 00679 // but it must be provided for the writing function 00680 //MPH 00681 string procStageCode; 00682 string refDoc; 00683 string procTime; 00684 string softwareVersion; 00685 string phase; 00686 long cycle; 00687 string stateVectorTime; 00688 double xPosition; 00689 double yPosition; 00690 double zPosition; 00691 double xVelocity; 00692 double yVelocity; 00693 double zVelocity; 00694 string stateVectorSource; 00695 string productErr; 00696 long totSize; 00697 long numDataSets; 00698 00699 //SPH 00700 string sphDescriptor; 00701 string sensingStartTai; // TAI 00702 long absOrbitStart; 00703 double relTimeAscNodeStart; 00704 string sensingStopTai; // TAI 00705 long absOrbitStop; 00706 double relTimeAscNodeStop; 00707 string equatorCrossTime; 00708 long equatorCrossLong; 00709 string ascendingFlag; 00710 long startLat; 00711 long startLong; 00712 long stopLat; 00713 long stopLong; 00714 long numIsps; 00715 long numMissingIsps; 00716 long numErrorIsps; 00717 long numDiscardedIsps; 00718 long numRsIsps; 00719 long numRsCorrections; 00720 long dsrSize; 00721 00723 DorisHeader(); 00724 00726 DorisHeader(string fileNam, 00727 string senStart, 00728 string sensStop, 00729 long relOrbi, 00730 long absOrbi, 00731 double delta_Ut1, 00732 string leap_Utc, 00733 int leap_Sign, 00734 int leap_Err, 00735 long num_Dsd, 00736 long ds_Offset, 00737 long num_Dsr); 00738 00740 DorisHeader(string fileNam, 00741 string sensStart, 00742 string sensStop, 00743 long relOrbi, 00744 long absOrbi, 00745 double delta_Ut1, 00746 string leap_Utc, 00747 int leap_Sign, 00748 int leap_Err, 00749 long num_Dsd, 00750 long ds_Offset, 00751 long num_Dsr, 00752 string procStageCod, 00753 string ref_Doc, 00754 string procTim, 00755 string softVersion, 00756 string phaseIn, 00757 long cycleIn, 00758 string stateVectorTim, 00759 double xPos, 00760 double yPos, 00761 double zPos, 00762 double xVel, 00763 double yVel, 00764 double zVel, 00765 string stateVectSource, 00766 string prodErr, 00767 long tot_Size, 00768 long numDataSet, 00769 string sphDesc, 00770 string sensStartTai, 00771 long absOrbStart, 00772 double relTimAscNodeStart, 00773 string sensStopTai, 00774 long absOrbStop, 00775 double relTimAscNodeStop, 00776 string equator_CrossTime, 00777 long equator_CrossLong, 00778 string ascendFlag, 00779 long start_Lat, 00780 long start_Long, 00781 long stop_Lat, 00782 long stop_Long, 00783 long num_Isps, 00784 long numMissIsps, 00785 long numErrIsps, 00786 long numDiscardIsps, 00787 long num_RsIsps, 00788 long num_RsCorrections, 00789 long dsr_Size 00790 ); 00791 00792 }; 00793 00797 class FileModel 00798 { 00799 public: 00800 00801 //Attributes 00802 vector<string> files; 00803 string auxFile; 00804 long timeRef; 00805 double time0; 00806 double time1; 00807 00809 FileModel(){}; 00810 00812 FileModel( vector<string> &fileNames, 00813 const string auxiliaryFile, 00814 const long timeReference, 00815 const double timeZero, 00816 const double timeOne ) 00817 { 00818 files = fileNames; 00819 auxFile = auxiliaryFile; 00820 timeRef = timeReference; 00821 time0 = timeZero; 00822 time1 = timeOne; 00823 } 00824 00825 }; 00826 00830 class HarmonicData 00831 { 00832 public: 00833 00834 //Attributes 00835 vector<long> harmonicTypePitch; 00836 vector<long> harmonicTypeRoll; 00837 vector<long> harmonicTypeYaw; 00838 vector<double> harmonicCoeffPitch; 00839 vector<double> harmonicCoeffRoll; 00840 vector<double> harmonicCoeffYaw; 00841 00843 HarmonicData(){}; 00844 00846 HarmonicData( vector<long> &harmonicTypPitch, 00847 vector<long> &harmonicTypRoll, 00848 vector<long> &harmonicTypYaw, 00849 vector<double> &harmonicCoefPitch, 00850 vector<double> &harmonicCoefRoll, 00851 vector<double> &harmonicCoefYaw ) 00852 { 00853 harmonicTypePitch = harmonicTypPitch; 00854 harmonicTypeRoll = harmonicTypRoll; 00855 harmonicTypeYaw = harmonicTypYaw; 00856 harmonicCoeffPitch = harmonicCoefPitch; 00857 harmonicCoeffRoll = harmonicCoefRoll; 00858 harmonicCoeffYaw = harmonicCoefYaw; 00859 } 00860 00861 }; 00862 00866 class HarmonicModel 00867 { 00868 public: 00869 00870 //Attributes 00871 long angleType; 00872 HarmonicData harmonicData; 00873 double offsets[3]; 00874 00876 HarmonicModel(){}; 00877 00879 HarmonicModel( const long angleTyp, HarmonicData &harmonicDat, double *offset) 00880 { 00881 angleType = angleTyp; 00882 harmonicData = harmonicDat; 00883 00884 for ( int i = 0 ; i < 3 ; ++i ) 00885 { 00886 offsets[i] = offset[i]; 00887 } 00888 } 00889 }; 00890 00894 class MatrixModel 00895 { 00896 public: 00897 00898 //Attributes 00899 double attMatrix[3][3]; 00900 double offsets[3]; 00901 00903 MatrixModel(){}; 00904 00906 MatrixModel( double **matrix, double *offset ) 00907 { 00908 for ( int i = 0 ; i < 3 ; ++i) 00909 { 00910 for ( int j = 0 ; j < 3 ; ++j ) 00911 { 00912 attMatrix[i][j] = matrix[i][j]; 00913 }// end for j 00914 offsets[i] = offset[i]; 00915 }// end for i 00916 } 00917 }; 00918 00922 class MlstHarmonics 00923 { 00924 public: 00925 00926 //Attributes 00927 double refTime; 00928 double period; 00929 double sinAmplitude; 00930 double cosAmplitude; 00931 00933 MlstHarmonics() 00934 { 00935 refTime = 0.; 00936 period = 1.; 00937 sinAmplitude = 0.; 00938 cosAmplitude = 0.; 00939 }; 00940 00942 MlstHarmonics(double time_in, double period_in, 00943 double sinAmp_in, double cosAmp_in) 00944 { 00945 refTime = time_in; 00946 period = period_in; 00947 sinAmplitude = sinAmp_in; 00948 cosAmplitude = cosAmp_in; 00949 } 00950 }; 00951 00955 class MlstNonlinearDrift 00956 { 00957 public: 00958 00959 //Attributes 00960 long linearApproxValidity; 00961 double quadraticTerm; 00962 vector<MlstHarmonics> mlstHarmonics; 00963 00965 MlstNonlinearDrift() 00966 { 00967 long i; 00968 00969 linearApproxValidity = 99999; 00970 quadraticTerm = 0.; 00971 for (i = 0 ; i < 2 ; i ++ ) 00972 { 00973 mlstHarmonics.push_back(MlstHarmonics()); 00974 } 00975 }; 00976 00978 MlstNonlinearDrift(long linApprox, double quadratic, const vector<MlstHarmonics> &harmonics) 00979 { 00980 linearApproxValidity = linApprox; 00981 quadraticTerm = quadratic; 00982 mlstHarmonics = harmonics; 00983 } 00984 }; 00985 00989 class ParamModel 00990 { 00991 public: 00992 00993 //Attributes 00994 long model; 00995 vector<double> modelParam; 00996 00998 ParamModel(){}; 00999 01001 ParamModel( const long mod, vector<double> &modParam) 01002 { 01003 model = mod; 01004 modelParam = modParam; 01005 } 01006 }; 01007 01011 class SwathGeometry 01012 { 01013 public: 01014 01015 //Attributes 01016 long geometryType; 01017 double azimuth; 01018 double elevation; 01019 double altitude; 01020 double distance; 01021 01023 SwathGeometry(){}; 01024 01026 SwathGeometry( long geomType, double azim, double elevat, 01027 double alt, double dist) 01028 { 01029 geometryType = geomType; 01030 azimuth = azim; 01031 elevation = elevat; 01032 altitude = alt; 01033 distance = dist; 01034 } 01035 }; 01036 01040 class TrackerLimits 01041 { 01042 public: 01043 01044 //Attributes 01045 double maxPenalty; 01046 double normThr; 01047 double maxGap; 01048 01050 TrackerLimits(){}; 01051 01053 TrackerLimits( double maxPenal,double normThreshold, double maximumGap) 01054 { 01055 maxPenalty = maxPenal; 01056 normThr = normThreshold; 01057 maxGap = maximumGap; 01058 } 01059 }; 01060 01064 class StfPt 01065 { 01066 public: 01067 01068 //Attributes 01069 double lon; 01070 double lat; 01071 01073 StfPt(){}; 01074 01076 StfPt( double longitude, double latitude ) 01077 { 01078 lon = longitude; 01079 lat = latitude; 01080 } 01081 }; 01082 01086 class StfVhr 01087 { 01088 public: 01089 01090 //Attributes 01091 string stfName; 01092 string ReferenceOSF; 01093 string ReferenceSDF; 01094 long swathType; 01095 long swathPointType; 01096 01097 double timeStep; 01098 long refractionMode; 01099 double frequency; 01100 01101 long numPoints; 01102 vector<double> altitude; 01103 01104 bool geometryFlag; 01105 01106 long repCycle; 01107 long cycleLength; 01108 double mlstDrift; 01109 01110 long absOrbit; 01111 long orbitStart; 01112 long orbitStop; 01113 01114 double position[3]; 01115 double velocity[3]; 01116 01118 StfVhr(); 01119 01121 StfVhr( string stfNam, 01122 string refOSF, 01123 string refSDF, 01124 long swathTyp, 01125 long swathPointTyp, 01126 double timStep, 01127 long refrMode, 01128 double freq, 01129 long numP, 01130 const vector<double> &alt, 01131 bool geomFlag, 01132 long repCycl, 01133 long cyclLength, 01134 double meanlstDrift, 01135 long absOrb, 01136 long orbit0, 01137 long orbit1, 01138 double *pos, 01139 double *vel 01140 ); 01141 01143 StfVhr( const StfVhr &stfVhr ); 01144 01146 ~StfVhr(); 01147 01149 void operator=( const StfVhr &stfVhr ); 01150 01151 };//class StfVhr 01152 01156 class ZonePoint 01157 { 01158 public: 01159 01160 //Attributes 01161 double ptLong; 01162 double ptLat; 01163 01165 ZonePoint(){}; 01166 01168 ZonePoint( double ptLongitude, double ptLatitude) 01169 { 01170 ptLong = ptLongitude; 01171 ptLat = ptLatitude; 01172 } 01173 }; 01174 01178 class AttitudeModel 01179 { 01180 public: 01181 //Attributes 01182 long attitudeModel; 01183 long AOCS; 01184 ParamModel *paramModel; 01185 HarmonicModel *harmonicModel; 01186 FileModel *fileModel; 01187 AngleModel *angleModel; 01188 MatrixModel *matrixModel; 01189 01191 AttitudeModel(); 01192 01194 AttitudeModel( long attModel, 01195 long AOCSModel, 01196 ParamModel &parMod, 01197 HarmonicModel &harmMod, 01198 FileModel &fileMod, 01199 AngleModel &angleMod, 01200 MatrixModel &matrixMod 01201 ); 01202 01204 AttitudeModel( const AttitudeModel &attModel ); 01205 01207 ~AttitudeModel(); 01208 01210 void operator=( const AttitudeModel &attModel ); 01211 01212 protected: 01213 01214 private: 01216 void eraseAttitude(); 01217 }; 01218 01222 class PolarMotionParams 01223 { 01224 public: 01225 //Attributes 01226 double x; 01227 double y; 01228 01230 PolarMotionParams() 01231 { 01232 x = 0.; 01233 y = 0.; 01234 } 01235 01237 PolarMotionParams( double x1, double y1 ) 01238 { 01239 x = x1; 01240 y = y1; 01241 } 01242 01243 }; 01244 01248 class IersBulletinBrec 01249 { 01250 public: 01251 double day; 01252 double ut1Utc; 01253 double ut1Tai; 01254 PolarMotionParams polarMotionParams; 01255 01257 IersBulletinBrec() 01258 { 01259 day = 0.; 01260 ut1Utc = 0.; 01261 ut1Tai = 0.; 01262 } 01263 01265 IersBulletinBrec(double dayUtc, double diffUt1Utc, double diffUt1Tai, 01266 PolarMotionParams polarMotion) 01267 { 01268 day = dayUtc; 01269 ut1Utc = diffUt1Utc; 01270 ut1Tai = diffUt1Tai; 01271 polarMotionParams = polarMotion; 01272 } 01273 01274 }; 01275 01279 class IersBulletinArec 01280 { 01281 public: 01282 double day; 01283 double ut1Utc; 01284 double ut1Tai; 01285 PolarMotionParams polarMotionParams; 01286 01288 IersBulletinArec() 01289 { 01290 day = 0.; 01291 ut1Utc = 0.; 01292 ut1Tai = 0.; 01293 } 01294 01296 IersBulletinArec(double dayUtc, double diffUt1Utc, double diffUt1Tai, 01297 PolarMotionParams polarMotion) 01298 { 01299 day = dayUtc; 01300 ut1Utc = diffUt1Utc; 01301 ut1Tai = diffUt1Tai; 01302 polarMotionParams = polarMotion; 01303 } 01304 01305 }; 01306 01310 class PolarMotionFormula 01311 { 01312 public: 01313 01314 double ax; 01315 double bx; 01316 double cx; 01317 double dx; 01318 double ex; 01319 01320 double ay; 01321 double by; 01322 double cy; 01323 double dy; 01324 double ey; 01325 01326 double Aref; 01327 double Adiv; 01328 double Cref; 01329 double Cdiv; 01330 01332 PolarMotionFormula() 01333 { 01334 ax = 0.; 01335 bx = 0.; 01336 cx = 0.; 01337 dx = 0.; 01338 ex = 0.; 01339 01340 ay = 0.; 01341 by = 0.; 01342 cy = 0.; 01343 dy = 0.; 01344 ey = 0.; 01345 01346 Aref = 0.; 01347 Adiv = 0.; 01348 Cref = 0.; 01349 Cdiv = 0.; 01350 } 01351 01353 PolarMotionFormula(double a1, double b1, double c1, double d1, double e1, 01354 double a2, double b2, double c2, double d2, double e2, 01355 double Ar, double Ad, double Cr, double Cd) 01356 { 01357 ax = a1; 01358 bx = b1; 01359 cx = c1; 01360 dx = d1; 01361 ex = e1; 01362 01363 ay = a2; 01364 by = b2; 01365 cy = c2; 01366 dy = d2; 01367 ey = e2; 01368 01369 Aref = Ar; 01370 Adiv = Ad; 01371 Cref = Cr; 01372 Cdiv = Cd; 01373 } 01374 01375 }; 01376 01380 class TimeCorrelationFormula 01381 { 01382 public: 01383 01384 double a; 01385 double b; 01386 double bRef; 01387 01389 TimeCorrelationFormula() 01390 { 01391 a = 0.; 01392 b = 0.; 01393 bRef = 0.; 01394 } 01395 01397 TimeCorrelationFormula(double a1, double b1, double br) 01398 { 01399 a = a1; 01400 b = b1; 01401 bRef = br; 01402 } 01403 }; 01404 01408 class IersBulletinBFile 01409 { 01410 public: 01411 01412 string bulletinId; 01413 vector<IersBulletinBrec> finalTable; 01414 vector<IersBulletinBrec> preliminaryTable; 01415 01417 IersBulletinBFile() 01418 { 01419 bulletinId = ""; 01420 } 01421 01423 IersBulletinBFile(string bulId, 01424 vector<IersBulletinBrec> &vecFinal, 01425 vector<IersBulletinBrec> &vecPrel) 01426 { 01427 bulletinId = bulId; 01428 finalTable = vecFinal; 01429 preliminaryTable = vecPrel; 01430 } 01431 01432 };//class IersBulletinBFile 01433 01437 class IersBulletinAFile 01438 { 01439 public: 01440 01441 string bulletinId; 01442 vector<IersBulletinArec> predictionTable; 01443 PolarMotionFormula polarMotionFormula; 01444 TimeCorrelationFormula timeCorrelationFormula; 01445 01447 IersBulletinAFile() 01448 { 01449 bulletinId = ""; 01450 } 01451 01453 IersBulletinAFile(string bulId, 01454 vector<IersBulletinArec> &vecPred, 01455 PolarMotionFormula &polarFormula, 01456 TimeCorrelationFormula &timeFormula) 01457 { 01458 bulletinId = bulId; 01459 predictionTable = vecPred; 01460 polarMotionFormula = polarFormula; 01461 timeCorrelationFormula = timeFormula; 01462 } 01463 01464 };//class IersBulletinAFile 01465 01469 class DemMiniTiles 01470 { 01471 public: 01472 string fileName; 01473 double lonSize; 01474 double latSize; 01475 01477 DemMiniTiles() 01478 { 01479 fileName = ""; 01480 lonSize = 0.; 01481 latSize = 0.; 01482 } 01483 01485 DemMiniTiles(string fileN, double lon, double lat) 01486 { 01487 fileName = fileN; 01488 lonSize = lon; 01489 latSize = lat; 01490 } 01491 }; // AN-492 01492 01496 class QuaternionPlusAngle 01497 { 01498 public: 01499 01500 //Attributes 01501 long inertialFrame; 01502 vector<AttRec> quat; 01503 AngleModel angleModel; 01504 01506 QuaternionPlusAngle(){}; 01507 01509 QuaternionPlusAngle( long frame, vector<AttRec> attvec, AngleModel &angModel ) 01510 { 01511 inertialFrame = frame; 01512 quat = attvec; 01513 angleModel = angModel; 01514 } 01515 }; // AN-469 01516 01517 // 01520 class QuaternionPlusMatrix 01521 { 01522 public: 01523 01524 //Attributes 01525 long inertialFrame; 01526 vector<AttRec> quat; 01527 MatrixModel matrixModel; 01528 01530 QuaternionPlusMatrix(){}; 01531 01533 QuaternionPlusMatrix( long frame, vector<AttRec> attvec, MatrixModel &matModel ) 01534 { 01535 inertialFrame = frame; 01536 quat = attvec; 01537 matrixModel = matModel; 01538 } 01539 }; // AN-469 01540 01544 class AttitudeDefinitionModel 01545 { 01546 public: 01547 //Attributes 01548 long attitudeModel; 01549 long AOCS; 01550 ParamModel *paramModel; 01551 HarmonicModel *harmonicModel; 01552 FileModel *fileModel; 01553 AngleModel *angleModel; 01554 MatrixModel *matrixModel; 01555 QuaternionPlusAngle *quaternionAngleModel; 01556 QuaternionPlusMatrix * quaternionMatrixModel; 01557 01559 AttitudeDefinitionModel(); 01560 01562 AttitudeDefinitionModel( long attModel, 01563 long AOCSModel, 01564 ParamModel &parMod, 01565 HarmonicModel &harmMod, 01566 FileModel &fileMod, 01567 AngleModel &angleMod, 01568 MatrixModel &matrixMod, 01569 QuaternionPlusAngle &quatAngMod, 01570 QuaternionPlusMatrix &quatMatMod 01571 ); 01572 01574 AttitudeDefinitionModel( const AttitudeDefinitionModel &attModel ); 01575 01577 ~AttitudeDefinitionModel(); 01578 01580 void operator=( const AttitudeDefinitionModel &attModel ); 01581 01582 protected: 01583 01584 private: 01586 void eraseAttitude(); 01587 }; // AN-469 01588 01589 }//end EECFI 01590 01591 #endif