Earth Observation Mission CFI Software DataHandling Software User Manual |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.6 00003 //-------------------------------------------------------- 00004 00005 //-------------------------------------------------------------------- 00006 // CVS Info: $Id: DataHandlingData.h,v 1.28 2013-09-18 07:43:45 expcfi 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_OSF_FILE, 00222 XDCFI_ORBIT_FILE, 00223 XDCFI_POF_FILE, 00224 XDCFI_ROF_FILE, 00225 XDCFI_DORIS_FILE, 00226 XDCFI_SDF_FILE, 00227 XDCFI_STF_FILE, 00228 XDCFI_ATTITUDE_FILE, 00229 XDCFI_DEM_CONF_FILE, 00230 XDCFI_DEM_FILE, 00231 XDCFI_ZONE_FILE, 00232 XDCFI_STATION_FILE, 00233 XDCFI_STAR_FILE, 00234 XDCFI_ATT_STAR_TRACKER_CONF_FILE, 00235 XDCFI_ATT_STAR_TRACKER_FILE, 00236 XDCFI_IERS_BULLETIN_FILE, 00237 XDCFI_TLE_FILE, 00238 XDCFI_ATTITUDE_DEFINITION_FILE, // AN-469 00239 XDCFI_USER_OSV_LIST 00240 } FileEnum; 00241 00243 typedef enum 00244 { 00245 XDCFI_UNKNOWN_TYPE = -1, 00246 XDCFI_AUTO, 00247 XDCFI_ORBIT_CHANGE, 00248 XDCFI_STATE_VECTOR, 00249 XDCFI_OSF_TYPE, 00250 XDCFI_POF_TYPE, 00251 XDCFI_ROF_TYPE, 00252 XDCFI_DORIS_TYPE, 00253 XDCFI_POF_N_DORIS_TYPE, 00254 XDCFI_OEF_OSF_TYPE, 00255 XDCFI_OEF_POF_TYPE, 00256 XDCFI_IERS_B_TYPE, 00257 XDCFI_TLE_TYPE, 00258 XDCFI_STF_TYPE, 00259 XDCFI_DORISPREC_TYPE, 00260 XDCFI_DORISPREM_TYPE, 00261 XDCFI_ATT_TYPE, 00262 XDCFI_SCF_TYPE, 00263 XDCFI_PRECISE_PROPAG_TYPE, 00264 XDCFI_DEMCFG_TYPE, 00265 XDCFI_SATCFG_TYPE, 00266 XDCFI_GND_DB_TYPE, 00267 XDCFI_SW_DEF_TYPE, 00268 XDCFI_ZON_DB_TYPE, 00269 XDCFI_STR1ATT_TYPE, 00270 XDCFI_IERS_A_TYPE, 00271 XDCFI_IERS_B_AND_A_TYPE, 00272 XDCFI_USER_OSV_LIST_TYPE, 00273 XDCFI_ATT_DEF_TYPE, 00274 XDCFI_FILE_TYPE_MAX_VALUE 00275 } FileTypeEnum; 00276 00278 typedef enum 00279 { 00280 XDCFI_DEM_ACE_MODEL = 0, 00281 XDCFI_DEM_GETASSE30_V1, 00282 XDCFI_DEM_GETASSE30_V2, 00283 XDCFI_DEM_ACE2_9SEC, 00284 XDCFI_DEM_NUM_MODELS 00285 } DemModelEnum; 00286 00288 typedef enum 00289 { 00290 XDCFI_DEM_GETASSE30_SOURCE_ACE, /* land-ice/snow */ 00291 XDCFI_DEM_GETASSE30_SOURCE_MSS, /* sea */ 00292 XDCFI_DEM_GETASSE30_SOURCE_EGM96, /* sea-ice */ 00293 XDCFI_DEM_GETASSE30_SOURCE_SRTM30 /* land */ 00294 } DemGetasseDataSourceEnum; 00295 00296 /* DEM Data Source Types for ACE2 9secs */ 00297 typedef enum 00298 { 00299 XDCFI_DEM_ACE2_SOURCE_SRTM0, /* Pure SRTM (above 60�N pure GLOBE data, below 60S pure ACE [original] data) */ 00300 XDCFI_DEM_ACE2_SOURCE_SRTM1, /* SRTM voids filled by interpolation and/or altimeter data */ 00301 XDCFI_DEM_ACE2_SOURCE_SRTM2, /* SRTM data warped using the ERS-1 Geodetic Mission */ 00302 XDCFI_DEM_ACE2_SOURCE_SRTM3, /* SRTM data warped using EnviSat & ERS-2 data */ 00303 XDCFI_DEM_ACE2_SOURCE_SRTM_LAKE, /* Mean lake level data derived from Altimetry */ 00304 XDCFI_DEM_ACE2_SOURCE_SRTM_GLOBE, /* GLOBE/ACE data warped using combined altimetry (only above 60�N) */ 00305 XDCFI_DEM_ACE2_SOURCE_SRTM_ALT /* Pure altimetry data (derived from ERS-1 Geodetic Mission, 00306 ERS-2 and EnviSat data using Delaunay Triangulation and Bilinear interpolation) */ 00307 } DemAce2DataSourceEnum; 00308 00309 00311 typedef enum 00312 { 00313 XDCFI_CFI_READ_ATT_INIT_PARSER_ERR = 0, 00314 XDCFI_CFI_READ_ATT_READ_PARAM_ERR, 00315 XDCFI_CFI_READ_ATT_WRONG_FILE_TYPE_ERR, 00316 XDCFI_CFI_READ_XML_ATT_NAVIGATION_ERR, 00317 XDCFI_CFI_READ_ATT_WRONG_DATA_TYPE_ERR, 00318 XDCFI_CFI_READ_ATT_INCONSISTENT_DATA_TYPE_ERR, 00319 XDCFI_CFI_READ_ATT_XML_DATA_BLOCK_SIZE_ERR, 00320 XDCFI_CFI_READ_ATT_WRONG_REF_FRAME_ERR, 00321 XDCFI_CFI_READ_ATT_READ_LIST_ERR, 00322 XDCFI_CFI_READ_ATT_TIME_CONV_ERR, 00323 XDCFI_CFI_READ_ATT_MEMORY_ERR, 00324 XDCFI_CFI_READ_ATT_CLEANUP_PARSER_ERR, 00325 XDCFI_CFI_READ_ATT_WRONG_TIME_REF_ERR, 00326 XDCFI_CFI_READ_ATT_WRONG_QUATERNION_ERR, 00327 XDCFI_CFI_READ_ATT_WRONG_ANGLE_ERR, 00328 XDCFI_CFI_READ_ATT_MAX_GAP_ERR 00329 } ReadAttErrEnum; 00330 00332 typedef enum 00333 { 00334 XDCFI_DEFAULT_VALUES = 0, 00335 XDCFI_USER_VALUES = 1 00336 } PrecisePropagUserFlagEnum; 00337 00339 typedef enum 00340 { 00341 XDCFI_NOT_SELECT = 0, 00342 XDCFI_SELECT = 1 00343 } PrecisePropagSelectionFlagEnum; 00344 00346 typedef enum 00347 { 00348 XDCFI_SGA_USE_PARAMETERS = 0, 00349 XDCFI_SGA_READ_VALUES_FROM_FILE = 1 00350 } PrecisePropagSgaFlagEnum; 00351 00353 typedef enum 00354 { 00355 XDCFI_SAT_DEFAULT = 0, 00356 XDCFI_SAT_DEFAULT1 = 1, 00357 XDCFI_SAT_DEFAULT2 = 2, 00358 XDCFI_SAT_DEFAULT3 = 3, 00359 XDCFI_SAT_DEFAULT4 = 4, 00360 XDCFI_SAT_DEFAULT5 = 5, 00361 XDCFI_SAT_DEFAULT6 = 6, 00362 XDCFI_SAT_DEFAULT7 = 7, 00363 XDCFI_SAT_DEFAULT8 = 8, 00364 XDCFI_SAT_DEFAULT9 = 9, 00365 XDCFI_SAT_ERS1 = 11, 00366 XDCFI_SAT_ERS2 = 12, 00367 XDCFI_SAT_ENVISAT = 21, 00368 XDCFI_SAT_METOP1 = 31, 00369 XDCFI_SAT_METOP2 = 32, 00370 XDCFI_SAT_METOP3 = 33, 00371 XDCFI_SAT_CRYOSAT = 41, 00372 XDCFI_SAT_ADM = 51, 00373 XDCFI_SAT_GOCE = 61, 00374 XDCFI_SAT_SMOS = 71, 00375 XDCFI_SAT_TERRASAR = 81, 00376 XDCFI_SAT_EARTHCARE = 91, 00377 XDCFI_SAT_SWARM_A = 101, 00378 XDCFI_SAT_SWARM_B = 102, 00379 XDCFI_SAT_SWARM_C = 103, 00380 XDCFI_SAT_SENTINEL_1A = 110, 00381 XDCFI_SAT_SENTINEL_1B = 111, 00382 XDCFI_SAT_SENTINEL_2 = 112, 00383 XDCFI_SAT_SENTINEL_3 = 113, 00384 XDCFI_SAT_SEOSAT = 120, 00385 XDCFI_SAT_SENTINEL_1C = 125, 00386 XDCFI_SAT_SENTINEL_2A = 126, 00387 XDCFI_SAT_SENTINEL_2B = 127, 00388 XDCFI_SAT_SENTINEL_2C = 128, 00389 XDCFI_SAT_SENTINEL_3A = 129, 00390 XDCFI_SAT_SENTINEL_3B = 130, 00391 XDCFI_SAT_SENTINEL_3C = 131, 00392 XDCFI_SAT_GENERIC = 200, 00393 XDCFI_SAT_GENERIC_GEO = 300, 00394 XDCFI_SAT_MTG = 301 00395 } XDSatIdEnum; 00396 00398 typedef enum 00399 { 00400 XDCFI_BULLETIN_A = 0, 00401 XDCFI_BULLETIN_B 00402 } XDBulletinTypeEnum; 00403 00405 typedef enum 00406 { 00407 XDCFI_NO_CACHE = 0, 00408 XDCFI_PRELOAD_CACHE, 00409 XDCFI_FIFO_CACHE 00410 } DemCacheTypeEnum; // Added for AN-487 00411 00413 typedef enum 00414 { 00415 XDCFI_DEM_GEOID_COMPUTATION_DISABLED = 0, 00416 XDCFI_DEM_GEOID_COMPUTATION_ENABLED = 1 00417 } DemGeoidFlagEnum; // AN-466 00418 00420 typedef enum 00421 { 00422 XDCFI_ATT_NONE_MODEL = 0, 00423 XDCFI_ATT_AOCS_MODEL, 00424 XDCFI_ATT_PARAMETER_MODEL, 00425 XDCFI_ATT_HARMONIC_MODEL, 00426 XDCFI_ATT_FILE_MODEL, 00427 XDCFI_ATT_ANGLE_MODEL, 00428 XDCFI_ATT_MATRIX_MODEL, 00429 XDCFI_ATT_QUATERNION_ANGLE_MODEL, 00430 XDCFI_ATT_QUATERNION_MATRIX_MODEL 00431 } AttDefModelEnum; // AN-469 00432 00434 typedef enum 00435 { 00436 XDCFI_SAT_NOMINAL_ATT_DEF = 0, 00437 XDCFI_SAT_ATT_DEF, 00438 XDCFI_INSTR_ATT_DEF 00439 } XDAttDefFrameEnum; // AN-469 00440 00442 typedef enum 00443 { 00444 XDCFI_AOCS_GPM = 0, 00445 XDCFI_AOCS_LNP, 00446 XDCFI_AOCS_YSM, 00447 XDCFI_AOCS_ZDOPPLER 00448 } XDSatNominalAttAocsModeEnum; // AN-469 00449 00451 typedef enum 00452 { 00453 XDCFI_MODEL_GENERIC = 0, 00454 XDCFI_MODEL_ENVISAT, 00455 XDCFI_MODEL_CRYOSAT, 00456 XDCFI_MODEL_ADM, 00457 XDCFI_MODEL_SENTINEL1, 00458 XDCFI_MODEL_SENTINEL2, 00459 XDCFI_MODEL_GEO 00460 } XDSatNominalAttModelEnum; // AN-469 00461 00463 typedef enum 00464 { 00465 XDCFI_ANGLE_TYPE_TRUE_LAT_TOD = 0, 00466 XDCFI_ANGLE_TYPE_MEAN_LAT_TOD 00467 } XDAngleTypeEnum; // AN-469 00468 00470 typedef enum 00471 { 00472 XDCFI_FIT_TLE = 0, /*Used for POF, not valid for OSV LIST*/ 00473 XDCFI_FIT_TLE_LIST, 00474 XDCFI_ONE_TLE_PER_OSV 00475 } XDTLEFitmodeEnum; 00476 00477 //------------------------------------------------------ 00478 // DATA STRUCTURES 00479 //------------------------------------------------------ 00480 00484 class AngleModel 00485 { 00486 public: 00487 00488 //Attributes 00489 double angles[3]; 00490 double offsets[3]; 00491 00493 AngleModel(){}; 00494 00496 AngleModel( double *angle, double *offset) 00497 { 00498 for ( int i = 0 ; i < 3 ; ++i) 00499 { 00500 angles[i] = angle[i]; 00501 offsets[i] = offset[i]; 00502 }// end for i 00503 } 00504 }; 00505 00509 class Asar 00510 { 00511 public: 00512 //Attributes 00513 long asarType; 00514 double slantRangeLeft; 00515 double slantRangeRight; 00516 00518 Asar(){}; 00519 00524 Asar( const long asarTyp, double slantLeft, double slantRight) 00525 { 00526 asarType = asarTyp; 00527 slantRangeLeft = slantLeft; 00528 slantRangeRight = slantRight; 00529 } 00530 };//class Asar 00531 00532 00536 class BulbTable 00537 { 00538 public: 00539 double day; 00540 double ut1Utc; 00541 double ut1Tai; 00542 00544 BulbTable(){}; 00545 00547 BulbTable(double dayUtc, double diffUt1Utc, double diffUt1Tai) 00548 { 00549 day = dayUtc; 00550 ut1Utc = diffUt1Utc; 00551 ut1Tai = diffUt1Tai; 00552 } 00553 00554 }; 00555 00559 class DemPoint 00560 { 00561 public: 00562 00563 //Attributes 00564 double lon; 00565 double lat; 00566 double alt; 00567 00569 DemPoint(){}; 00570 00572 DemPoint( double longitude, double latitude, double altitude) 00573 { 00574 lon = longitude; 00575 lat = latitude; 00576 alt = altitude; 00577 } 00578 }; 00579 00583 class DorisHeader 00584 { 00585 public: 00586 //Atributtes 00587 string fileName; 00588 string sensingStart; // UTC 00589 string sensingStop; // UTC 00590 long relOrbit; 00591 long absOrbit; 00592 double deltaUt1; 00593 string leapUtc; 00594 int leapSign; 00595 int leapErr; 00596 long numDsd; 00597 long dsOffset; 00598 long numDsr; 00599 00600 // extra data: the following values are not read from the file. 00601 // but it must be provided for the writing function 00602 //MPH 00603 string procStageCode; 00604 string refDoc; 00605 string procTime; 00606 string softwareVersion; 00607 string phase; 00608 long cycle; 00609 string stateVectorTime; 00610 double xPosition; 00611 double yPosition; 00612 double zPosition; 00613 double xVelocity; 00614 double yVelocity; 00615 double zVelocity; 00616 string stateVectorSource; 00617 string productErr; 00618 long totSize; 00619 long numDataSets; 00620 00621 //SPH 00622 string sphDescriptor; 00623 string sensingStartTai; // TAI 00624 long absOrbitStart; 00625 double relTimeAscNodeStart; 00626 string sensingStopTai; // TAI 00627 long absOrbitStop; 00628 double relTimeAscNodeStop; 00629 string equatorCrossTime; 00630 long equatorCrossLong; 00631 string ascendingFlag; 00632 long startLat; 00633 long startLong; 00634 long stopLat; 00635 long stopLong; 00636 long numIsps; 00637 long numMissingIsps; 00638 long numErrorIsps; 00639 long numDiscardedIsps; 00640 long numRsIsps; 00641 long numRsCorrections; 00642 long dsrSize; 00643 00645 DorisHeader(); 00646 00648 DorisHeader(string fileNam, 00649 string senStart, 00650 string sensStop, 00651 long relOrbi, 00652 long absOrbi, 00653 double delta_Ut1, 00654 string leap_Utc, 00655 int leap_Sign, 00656 int leap_Err, 00657 long num_Dsd, 00658 long ds_Offset, 00659 long num_Dsr); 00660 00662 DorisHeader(string fileNam, 00663 string sensStart, 00664 string sensStop, 00665 long relOrbi, 00666 long absOrbi, 00667 double delta_Ut1, 00668 string leap_Utc, 00669 int leap_Sign, 00670 int leap_Err, 00671 long num_Dsd, 00672 long ds_Offset, 00673 long num_Dsr, 00674 string procStageCod, 00675 string ref_Doc, 00676 string procTim, 00677 string softVersion, 00678 string phaseIn, 00679 long cycleIn, 00680 string stateVectorTim, 00681 double xPos, 00682 double yPos, 00683 double zPos, 00684 double xVel, 00685 double yVel, 00686 double zVel, 00687 string stateVectSource, 00688 string prodErr, 00689 long tot_Size, 00690 long numDataSet, 00691 string sphDesc, 00692 string sensStartTai, 00693 long absOrbStart, 00694 double relTimAscNodeStart, 00695 string sensStopTai, 00696 long absOrbStop, 00697 double relTimAscNodeStop, 00698 string equator_CrossTime, 00699 long equator_CrossLong, 00700 string ascendFlag, 00701 long start_Lat, 00702 long start_Long, 00703 long stop_Lat, 00704 long stop_Long, 00705 long num_Isps, 00706 long numMissIsps, 00707 long numErrIsps, 00708 long numDiscardIsps, 00709 long num_RsIsps, 00710 long num_RsCorrections, 00711 long dsr_Size 00712 ); 00713 00714 }; 00715 00719 class FileModel 00720 { 00721 public: 00722 00723 //Attributes 00724 vector<string> files; 00725 string auxFile; 00726 long timeRef; 00727 double time0; 00728 double time1; 00729 00731 FileModel(){}; 00732 00734 FileModel( vector<string> &fileNames, 00735 const string auxiliaryFile, 00736 const long timeReference, 00737 const double timeZero, 00738 const double timeOne ) 00739 { 00740 files = fileNames; 00741 auxFile = auxiliaryFile; 00742 timeRef = timeReference; 00743 time0 = timeZero; 00744 time1 = timeOne; 00745 } 00746 00747 }; 00748 00752 class HarmonicData 00753 { 00754 public: 00755 00756 //Attributes 00757 vector<long> harmonicTypePitch; 00758 vector<long> harmonicTypeRoll; 00759 vector<long> harmonicTypeYaw; 00760 vector<double> harmonicCoeffPitch; 00761 vector<double> harmonicCoeffRoll; 00762 vector<double> harmonicCoeffYaw; 00763 00765 HarmonicData(){}; 00766 00768 HarmonicData( vector<long> &harmonicTypPitch, 00769 vector<long> &harmonicTypRoll, 00770 vector<long> &harmonicTypYaw, 00771 vector<double> &harmonicCoefPitch, 00772 vector<double> &harmonicCoefRoll, 00773 vector<double> &harmonicCoefYaw ) 00774 { 00775 harmonicTypePitch = harmonicTypPitch; 00776 harmonicTypeRoll = harmonicTypRoll; 00777 harmonicTypeYaw = harmonicTypYaw; 00778 harmonicCoeffPitch = harmonicCoefPitch; 00779 harmonicCoeffRoll = harmonicCoefRoll; 00780 harmonicCoeffYaw = harmonicCoefYaw; 00781 } 00782 00783 }; 00784 00788 class HarmonicModel 00789 { 00790 public: 00791 00792 //Attributes 00793 long angleType; 00794 HarmonicData harmonicData; 00795 double offsets[3]; 00796 00798 HarmonicModel(){}; 00799 00801 HarmonicModel( const long angleTyp, HarmonicData &harmonicDat, double *offset) 00802 { 00803 angleType = angleTyp; 00804 harmonicData = harmonicDat; 00805 00806 for ( int i = 0 ; i < 3 ; ++i ) 00807 { 00808 offsets[i] = offset[i]; 00809 } 00810 } 00811 }; 00812 00816 class MatrixModel 00817 { 00818 public: 00819 00820 //Attributes 00821 double attMatrix[3][3]; 00822 double offsets[3]; 00823 00825 MatrixModel(){}; 00826 00828 MatrixModel( double **matrix, double *offset ) 00829 { 00830 for ( int i = 0 ; i < 3 ; ++i) 00831 { 00832 for ( int j = 0 ; j < 3 ; ++j ) 00833 { 00834 attMatrix[i][j] = matrix[i][j]; 00835 }// end for j 00836 offsets[i] = offset[i]; 00837 }// end for i 00838 } 00839 }; 00840 00844 class MlstHarmonics 00845 { 00846 public: 00847 00848 //Attributes 00849 double refTime; 00850 double period; 00851 double sinAmplitude; 00852 double cosAmplitude; 00853 00855 MlstHarmonics() 00856 { 00857 refTime = 0.; 00858 period = 1.; 00859 sinAmplitude = 0.; 00860 cosAmplitude = 0.; 00861 }; 00862 00864 MlstHarmonics(double time_in, double period_in, 00865 double sinAmp_in, double cosAmp_in) 00866 { 00867 refTime = time_in; 00868 period = period_in; 00869 sinAmplitude = sinAmp_in; 00870 cosAmplitude = cosAmp_in; 00871 } 00872 }; 00873 00877 class MlstNonlinearDrift 00878 { 00879 public: 00880 00881 //Attributes 00882 long linearApproxValidity; 00883 double quadraticTerm; 00884 vector<MlstHarmonics> mlstHarmonics; 00885 00887 MlstNonlinearDrift() 00888 { 00889 long i; 00890 00891 linearApproxValidity = 99999; 00892 quadraticTerm = 0.; 00893 for (i = 0 ; i < 2 ; i ++ ) 00894 { 00895 mlstHarmonics.push_back(MlstHarmonics()); 00896 } 00897 }; 00898 00900 MlstNonlinearDrift(long linApprox, double quadratic, const vector<MlstHarmonics> &harmonics) 00901 { 00902 linearApproxValidity = linApprox; 00903 quadraticTerm = quadratic; 00904 mlstHarmonics = harmonics; 00905 } 00906 }; 00907 00911 class ParamModel 00912 { 00913 public: 00914 00915 //Attributes 00916 long model; 00917 vector<double> modelParam; 00918 00920 ParamModel(){}; 00921 00923 ParamModel( const long mod, vector<double> &modParam) 00924 { 00925 model = mod; 00926 modelParam = modParam; 00927 } 00928 }; 00929 00933 class SwathGeometry 00934 { 00935 public: 00936 00937 //Attributes 00938 long geometryType; 00939 double azimuth; 00940 double elevation; 00941 double altitude; 00942 double distance; 00943 00945 SwathGeometry(){}; 00946 00948 SwathGeometry( long geomType, double azim, double elevat, 00949 double alt, double dist) 00950 { 00951 geometryType = geomType; 00952 azimuth = azim; 00953 elevation = elevat; 00954 altitude = alt; 00955 distance = dist; 00956 } 00957 }; 00958 00962 class TrackerLimits 00963 { 00964 public: 00965 00966 //Attributes 00967 double maxPenalty; 00968 double normThr; 00969 double maxGap; 00970 00972 TrackerLimits(){}; 00973 00975 TrackerLimits( double maxPenal,double normThreshold, double maximumGap) 00976 { 00977 maxPenalty = maxPenal; 00978 normThr = normThreshold; 00979 maxGap = maximumGap; 00980 } 00981 }; 00982 00986 class StfPt 00987 { 00988 public: 00989 00990 //Attributes 00991 double lon; 00992 double lat; 00993 00995 StfPt(){}; 00996 00998 StfPt( double longitude, double latitude ) 00999 { 01000 lon = longitude; 01001 lat = latitude; 01002 } 01003 }; 01004 01008 class StfVhr 01009 { 01010 public: 01011 01012 //Attributes 01013 string stfName; 01014 string ReferenceOSF; 01015 string ReferenceSDF; 01016 long swathType; 01017 long swathPointType; 01018 01019 double timeStep; 01020 long refractionMode; 01021 double frequency; 01022 01023 long numPoints; 01024 vector<double> altitude; 01025 01026 bool geometryFlag; 01027 01028 long repCycle; 01029 long cycleLength; 01030 double mlstDrift; 01031 01032 long absOrbit; 01033 long orbitStart; 01034 long orbitStop; 01035 01036 double position[3]; 01037 double velocity[3]; 01038 01040 StfVhr(); 01041 01043 StfVhr( string stfNam, 01044 string refOSF, 01045 string refSDF, 01046 long swathTyp, 01047 long swathPointTyp, 01048 double timStep, 01049 long refrMode, 01050 double freq, 01051 long numP, 01052 const vector<double> &alt, 01053 bool geomFlag, 01054 long repCycl, 01055 long cyclLength, 01056 double meanlstDrift, 01057 long absOrb, 01058 long orbit0, 01059 long orbit1, 01060 double *pos, 01061 double *vel 01062 ); 01063 01065 StfVhr( const StfVhr &stfVhr ); 01066 01068 ~StfVhr(); 01069 01071 void operator=( const StfVhr &stfVhr ); 01072 01073 };//class StfVhr 01074 01078 class ZonePoint 01079 { 01080 public: 01081 01082 //Attributes 01083 double ptLong; 01084 double ptLat; 01085 01087 ZonePoint(){}; 01088 01090 ZonePoint( double ptLongitude, double ptLatitude) 01091 { 01092 ptLong = ptLongitude; 01093 ptLat = ptLatitude; 01094 } 01095 }; 01096 01100 class AttitudeModel 01101 { 01102 public: 01103 //Attributes 01104 long attitudeModel; 01105 long AOCS; 01106 ParamModel *paramModel; 01107 HarmonicModel *harmonicModel; 01108 FileModel *fileModel; 01109 AngleModel *angleModel; 01110 MatrixModel *matrixModel; 01111 01113 AttitudeModel(); 01114 01116 AttitudeModel( long attModel, 01117 long AOCSModel, 01118 ParamModel &parMod, 01119 HarmonicModel &harmMod, 01120 FileModel &fileMod, 01121 AngleModel &angleMod, 01122 MatrixModel &matrixMod 01123 ); 01124 01126 AttitudeModel( const AttitudeModel &attModel ); 01127 01129 ~AttitudeModel(); 01130 01132 void operator=( const AttitudeModel &attModel ); 01133 01134 protected: 01135 01136 private: 01138 void eraseAttitude(); 01139 }; 01140 01144 class PolarMotionParams 01145 { 01146 public: 01147 //Attributes 01148 double x; 01149 double y; 01150 01152 PolarMotionParams() 01153 { 01154 x = 0.; 01155 y = 0.; 01156 } 01157 01159 PolarMotionParams( double x1, double y1 ) 01160 { 01161 x = x1; 01162 y = y1; 01163 } 01164 01165 }; 01166 01170 class IersBulletinBrec 01171 { 01172 public: 01173 double day; 01174 double ut1Utc; 01175 double ut1Tai; 01176 PolarMotionParams polarMotionParams; 01177 01179 IersBulletinBrec() 01180 { 01181 day = 0.; 01182 ut1Utc = 0.; 01183 ut1Tai = 0.; 01184 } 01185 01187 IersBulletinBrec(double dayUtc, double diffUt1Utc, double diffUt1Tai, 01188 PolarMotionParams polarMotion) 01189 { 01190 day = dayUtc; 01191 ut1Utc = diffUt1Utc; 01192 ut1Tai = diffUt1Tai; 01193 polarMotionParams = polarMotion; 01194 } 01195 01196 }; 01197 01201 class IersBulletinArec 01202 { 01203 public: 01204 double day; 01205 double ut1Utc; 01206 double ut1Tai; 01207 PolarMotionParams polarMotionParams; 01208 01210 IersBulletinArec() 01211 { 01212 day = 0.; 01213 ut1Utc = 0.; 01214 ut1Tai = 0.; 01215 } 01216 01218 IersBulletinArec(double dayUtc, double diffUt1Utc, double diffUt1Tai, 01219 PolarMotionParams polarMotion) 01220 { 01221 day = dayUtc; 01222 ut1Utc = diffUt1Utc; 01223 ut1Tai = diffUt1Tai; 01224 polarMotionParams = polarMotion; 01225 } 01226 01227 }; 01228 01232 class PolarMotionFormula 01233 { 01234 public: 01235 01236 double ax; 01237 double bx; 01238 double cx; 01239 double dx; 01240 double ex; 01241 01242 double ay; 01243 double by; 01244 double cy; 01245 double dy; 01246 double ey; 01247 01248 double Aref; 01249 double Adiv; 01250 double Cref; 01251 double Cdiv; 01252 01254 PolarMotionFormula() 01255 { 01256 ax = 0.; 01257 bx = 0.; 01258 cx = 0.; 01259 dx = 0.; 01260 ex = 0.; 01261 01262 ay = 0.; 01263 by = 0.; 01264 cy = 0.; 01265 dy = 0.; 01266 ey = 0.; 01267 01268 Aref = 0.; 01269 Adiv = 0.; 01270 Cref = 0.; 01271 Cdiv = 0.; 01272 } 01273 01275 PolarMotionFormula(double a1, double b1, double c1, double d1, double e1, 01276 double a2, double b2, double c2, double d2, double e2, 01277 double Ar, double Ad, double Cr, double Cd) 01278 { 01279 ax = a1; 01280 bx = b1; 01281 cx = c1; 01282 dx = d1; 01283 ex = e1; 01284 01285 ay = a2; 01286 by = b2; 01287 cy = c2; 01288 dy = d2; 01289 ey = e2; 01290 01291 Aref = Ar; 01292 Adiv = Ad; 01293 Cref = Cr; 01294 Cdiv = Cd; 01295 } 01296 01297 }; 01298 01302 class TimeCorrelationFormula 01303 { 01304 public: 01305 01306 double a; 01307 double b; 01308 double bRef; 01309 01311 TimeCorrelationFormula() 01312 { 01313 a = 0.; 01314 b = 0.; 01315 bRef = 0.; 01316 } 01317 01319 TimeCorrelationFormula(double a1, double b1, double br) 01320 { 01321 a = a1; 01322 b = b1; 01323 bRef = br; 01324 } 01325 }; 01326 01330 class IersBulletinBFile 01331 { 01332 public: 01333 01334 string bulletinId; 01335 vector<IersBulletinBrec> finalTable; 01336 vector<IersBulletinBrec> preliminaryTable; 01337 01339 IersBulletinBFile() 01340 { 01341 bulletinId = ""; 01342 } 01343 01345 IersBulletinBFile(string bulId, 01346 vector<IersBulletinBrec> &vecFinal, 01347 vector<IersBulletinBrec> &vecPrel) 01348 { 01349 bulletinId = bulId; 01350 finalTable = vecFinal; 01351 preliminaryTable = vecPrel; 01352 } 01353 01354 };//class IersBulletinBFile 01355 01359 class IersBulletinAFile 01360 { 01361 public: 01362 01363 string bulletinId; 01364 vector<IersBulletinArec> predictionTable; 01365 PolarMotionFormula polarMotionFormula; 01366 TimeCorrelationFormula timeCorrelationFormula; 01367 01369 IersBulletinAFile() 01370 { 01371 bulletinId = ""; 01372 } 01373 01375 IersBulletinAFile(string bulId, 01376 vector<IersBulletinArec> &vecPred, 01377 PolarMotionFormula &polarFormula, 01378 TimeCorrelationFormula &timeFormula) 01379 { 01380 bulletinId = bulId; 01381 predictionTable = vecPred; 01382 polarMotionFormula = polarFormula; 01383 timeCorrelationFormula = timeFormula; 01384 } 01385 01386 };//class IersBulletinAFile 01387 01391 class DemMiniTiles 01392 { 01393 public: 01394 string fileName; 01395 double lonSize; 01396 double latSize; 01397 01399 DemMiniTiles() 01400 { 01401 fileName = ""; 01402 lonSize = 0.; 01403 latSize = 0.; 01404 } 01405 01407 DemMiniTiles(string fileN, double lon, double lat) 01408 { 01409 fileName = fileN; 01410 lonSize = lon; 01411 latSize = lat; 01412 } 01413 }; // AN-492 01414 01418 class QuaternionPlusAngle 01419 { 01420 public: 01421 01422 //Attributes 01423 long inertialFrame; 01424 vector<AttRec> quat; 01425 AngleModel angleModel; 01426 01428 QuaternionPlusAngle(){}; 01429 01431 QuaternionPlusAngle( long frame, vector<AttRec> attvec, AngleModel &angModel ) 01432 { 01433 inertialFrame = frame; 01434 quat = attvec; 01435 angleModel = angModel; 01436 } 01437 }; // AN-469 01438 01439 // 01442 class QuaternionPlusMatrix 01443 { 01444 public: 01445 01446 //Attributes 01447 long inertialFrame; 01448 vector<AttRec> quat; 01449 MatrixModel matrixModel; 01450 01452 QuaternionPlusMatrix(){}; 01453 01455 QuaternionPlusMatrix( long frame, vector<AttRec> attvec, MatrixModel &matModel ) 01456 { 01457 inertialFrame = frame; 01458 quat = attvec; 01459 matrixModel = matModel; 01460 } 01461 }; // AN-469 01462 01466 class AttitudeDefinitionModel 01467 { 01468 public: 01469 //Attributes 01470 long attitudeModel; 01471 long AOCS; 01472 ParamModel *paramModel; 01473 HarmonicModel *harmonicModel; 01474 FileModel *fileModel; 01475 AngleModel *angleModel; 01476 MatrixModel *matrixModel; 01477 QuaternionPlusAngle *quaternionAngleModel; 01478 QuaternionPlusMatrix * quaternionMatrixModel; 01479 01481 AttitudeDefinitionModel(); 01482 01484 AttitudeDefinitionModel( long attModel, 01485 long AOCSModel, 01486 ParamModel &parMod, 01487 HarmonicModel &harmMod, 01488 FileModel &fileMod, 01489 AngleModel &angleMod, 01490 MatrixModel &matrixMod, 01491 QuaternionPlusAngle &quatAngMod, 01492 QuaternionPlusMatrix &quatMatMod 01493 ); 01494 01496 AttitudeDefinitionModel( const AttitudeDefinitionModel &attModel ); 01497 01499 ~AttitudeDefinitionModel(); 01500 01502 void operator=( const AttitudeDefinitionModel &attModel ); 01503 01504 protected: 01505 01506 private: 01508 void eraseAttitude(); 01509 }; // AN-469 01510 01511 }//end EECFI 01512 01513 #endif