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