Earth Observation Mission CFI Software Lib Software User Manual |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.10 00003 //-------------------------------------------------------- 00004 00005 //-------------------------------------------------------------------- 00006 // CVS Info: $Id: LibData.h,v 1.30 2014-02-26 13:00:48 paat Exp $ 00007 //-------------------------------------------------------------------- 00008 00013 00014 #ifndef __EECFI_LIBDATA__ 00015 #define __EECFI_LIBDATA__ 00016 00017 //--INCLUDE----------------------------------------------------------- 00018 #include <vector> 00019 #include "DataHandlingData.h" 00020 00021 //--NAMESPACES-------------------------------------------------------- 00022 using namespace std; 00023 00024 namespace EECFI 00025 { 00026 00027 //------------------------------------------------------ 00028 // CONSTANTS 00029 //------------------------------------------------------ 00031 #define MCFI_PI 3.14159265358979323846 00032 00033 //------------------------------------------------------ 00034 // DATA ENUMERATION 00035 // Enumeration values are defined in an equivalent way to the C library 00036 // except for the prefix that has been changed from XX_ to XXCFI_ 00037 //------------------------------------------------------ 00038 00040 typedef enum 00041 { 00042 XLCFI_SAT_DEFAULT = 0, 00043 XLCFI_SAT_DEFAULT1 = 1, 00044 XLCFI_SAT_DEFAULT2 = 2, 00045 XLCFI_SAT_DEFAULT3 = 3, 00046 XLCFI_SAT_DEFAULT4 = 4, 00047 XLCFI_SAT_DEFAULT5 = 5, 00048 XLCFI_SAT_DEFAULT6 = 6, 00049 XLCFI_SAT_DEFAULT7 = 7, 00050 XLCFI_SAT_DEFAULT8 = 8, 00051 XLCFI_SAT_DEFAULT9 = 9, 00052 XLCFI_SAT_ERS1 = 11, 00053 XLCFI_SAT_ERS2 = 12, 00054 XLCFI_SAT_ENVISAT = 21, 00055 XLCFI_SAT_METOP1 = 31, 00056 XLCFI_SAT_METOP2 = 32, 00057 XLCFI_SAT_METOP3 = 33, 00058 XLCFI_SAT_CRYOSAT = 41, 00059 XLCFI_SAT_ADM = 51, 00060 XLCFI_SAT_GOCE = 61, 00061 XLCFI_SAT_SMOS = 71, 00062 XLCFI_SAT_TERRASAR = 81, 00063 XLCFI_SAT_EARTHCARE = 91, 00064 XLCFI_SAT_SWARM_A = 101, 00065 XLCFI_SAT_SWARM_B = 102, 00066 XLCFI_SAT_SWARM_C = 103, 00067 XLCFI_SAT_SENTINEL_1A = 110, 00068 XLCFI_SAT_SENTINEL_1B = 111, 00069 XLCFI_SAT_SENTINEL_2 = 112, 00070 XLCFI_SAT_SENTINEL_3 = 113, 00071 XLCFI_SAT_SEOSAT = 120, 00072 XLCFI_SAT_SENTINEL_1C = 125, 00073 XLCFI_SAT_SENTINEL_2A = 126, 00074 XLCFI_SAT_SENTINEL_2B = 127, 00075 XLCFI_SAT_SENTINEL_2C = 128, 00076 XLCFI_SAT_SENTINEL_3A = 129, 00077 XLCFI_SAT_SENTINEL_3B = 130, 00078 XLCFI_SAT_SENTINEL_3C = 131, 00079 XLCFI_SAT_JASON_CSA = 132, // AN-531 00080 XLCFI_SAT_JASON_CSB = 133, // AN-531 00081 XLCFI_SAT_METOP_SG_A1 = 134, // AN-530 00082 XLCFI_SAT_METOP_SG_A2 = 135, // AN-530 00083 XLCFI_SAT_METOP_SG_A3 = 136, // AN-530 00084 XLCFI_SAT_METOP_SG_B1 = 137, // AN-530 00085 XLCFI_SAT_METOP_SG_B2 = 138, // AN-530 00086 XLCFI_SAT_METOP_SG_B3 = 139, // AN-530 00087 XLCFI_SAT_SENTINEL_5P = 140, // AN-502 00088 XLCFI_SAT_GENERIC = 200, 00089 // AN-353 00090 XLCFI_SAT_GENERIC_GEO = 300, 00091 XLCFI_SAT_MTG = 301, 00092 // END AN-353 00093 XLCFI_SAT_GENERIC_MEO = 400 // AN-550 00094 } SatIdEnum; 00095 00096 00098 typedef enum 00099 { 00100 XLCFI_TIMEMOD_AUTO = -2, 00101 XLCFI_TIMEMOD_USER = -1, 00102 XLCFI_TIMEMOD_NONE = 0, 00103 XLCFI_TIMEMOD_IERS_B_PREDICTED = 1, 00104 XLCFI_TIMEMOD_IERS_B_RESTITUTED, 00105 XLCFI_TIMEMOD_FOS_PREDICTED, 00106 XLCFI_TIMEMOD_FOS_RESTITUTED, 00107 XLCFI_TIMEMOD_DORIS_PRELIMINARY, 00108 XLCFI_TIMEMOD_DORIS_PRECISE, 00109 XLCFI_TIMEMOD_DORIS_NAVIGATOR, 00110 XLCFI_TIMEMOD_OSF, 00111 XLCFI_TIMEMOD_IERS_A_ONLY_PREDICTION, 00112 XLCFI_TIMEMOD_IERS_A_PREDICTION_AND_FORMULA, 00113 XLCFI_TIMEMOD_IERS_B_AND_A_ONLY_PREDICTION 00114 } TimeModelEnum; 00115 00116 00118 typedef enum 00119 { 00120 XLCFI_TIME_UNDEF = -1, 00121 XLCFI_TIME_TAI, 00122 XLCFI_TIME_UTC, 00123 XLCFI_TIME_UT1, 00124 XLCFI_TIME_GPS 00125 } XLTimeRefEnum; 00126 00127 00129 typedef enum 00130 { 00131 XLCFI_PROC = 0 00132 } TimeProcEnum; 00133 00135 typedef enum 00136 { 00137 XLCFI_TRANS_STD = 0, 00138 XLCFI_TRANS_ENVI_GS = 11, 00139 XLCFI_TRANS_CRYO_GS = 21, 00140 XLCFI_TRANS_CRYO_TM = 22, 00141 XLCFI_TRANS_CRYO_TM_SIRAL = 23, 00142 XLCFI_TRANS_SMOS_TM = 31, 00143 XLCFI_TRANS_GENERIC_GPS_SEC = 41, 00144 XLCFI_TRANS_GENERIC_GPS_WEEK = 42 00145 } TimeTransEnum; 00146 00147 00166 typedef enum 00167 { 00168 XLCFI_ASCII_UNDEF = -1, 00169 XLCFI_ASCII_STD = 11, 00170 XLCFI_ASCII_STD_REF = 12, 00171 XLCFI_ASCII_STD_MICROSEC = 13, 00172 XLCFI_ASCII_STD_REF_MICROSEC = 14, 00173 XLCFI_ASCII_COMPACT = 21, 00174 XLCFI_ASCII_COMPACT_REF = 22, 00175 XLCFI_ASCII_COMPACT_MICROSEC = 23, 00176 XLCFI_ASCII_COMPACT_REF_MICROSEC = 24, 00177 XLCFI_ASCII_ENVI = 31, 00178 XLCFI_ASCII_ENVI_REF = 32, 00179 XLCFI_ASCII_ENVI_MICROSEC = 33, 00180 XLCFI_ASCII_ENVI_REF_MICROSEC = 34, 00181 XLCFI_ASCII_CCSDSA = 41, 00182 XLCFI_ASCII_CCSDSA_REF = 42, 00183 XLCFI_ASCII_CCSDSA_MICROSEC = 43, 00184 XLCFI_ASCII_CCSDSA_REF_MICROSEC = 44, 00185 XLCFI_ASCII_CCSDSA_COMPACT = 51, 00186 XLCFI_ASCII_CCSDSA_COMPACT_REF = 52, 00187 XLCFI_ASCII_CCSDSA_COMPACT_MICROSEC = 53, 00188 XLCFI_ASCII_CCSDSA_COMPACT_REF_MICROSEC = 54 00189 } TimeAsciiEnum; 00190 00191 00193 typedef enum // Flag to indicate the grade of a derivative 00194 { 00195 XLCFI_NO_DER = 0, 00196 XLCFI_DER_1ST, 00197 XLCFI_DER_2ND, 00198 XLCFI_ITER_NO_DER, 00199 XLCFI_ITER_DER_1ST, 00200 XLCFI_NO_ITER_NO_DER, 00201 XLCFI_NO_ITER_DER_1ST 00202 } DerivEnum; 00203 00204 00206 typedef enum // It defines a coordinate system 00207 { 00208 XLCFI_CS_UNDEF = 0, 00209 XLCFI_CS_BM2000 = 1, 00210 XLCFI_CS_HM2000, 00211 XLCFI_CS_GM2000, 00212 XLCFI_CS_MOD, 00213 XLCFI_CS_TOD, 00214 XLCFI_CS_PEF, 00215 XLCFI_CS_EF, 00216 XLCFI_CS_LIF, 00217 XLCFI_CS_BM1950, 00218 XLCFI_CS_GALACTIC, 00219 XLCFI_CS_SAT_ACT_REF, 00220 XLCFI_CS_QUASI_MEAN_DATE, 00221 XLCFI_CS_PSE_TRUE_DATE, 00222 XLCFI_CS_TOPOCENTRIC, 00223 XLCFI_CS_SAT_REF, 00224 XLCFI_CS_SAT_REL_REF 00225 } CoordinateSystemEnum; // Updated for AN-509 00226 00228 typedef enum 00229 { 00230 XLCFI_CS_SAT_ORBITAL_REF = 0, 00231 XLCFI_CS_SAT_NOMINAL_ATT, 00232 XLCFI_CS_SAT_ATT, 00233 XLCFI_CS_INSTR_ATT 00234 } XLAttitudeFrameEnum; // AN-509 00235 00237 typedef enum 00238 { 00239 XLCFI_KEPLER_MEAN = 1, 00240 XLCFI_KEPLER_OSC 00241 } KeplerModeEnum; 00242 00244 typedef enum 00245 { 00246 XLCFI_MODE_FLAG_LOCATION = 0, 00247 XLCFI_MODE_FLAG_DIRECTION 00248 } ModeFlagEnum; 00249 00251 typedef enum 00252 { 00253 XLCFI_MERCURY = 1, 00254 XLCFI_VENUS, 00255 XLCFI_EM_BAR, 00256 XLCFI_MARS, 00257 XLCFI_JUPITER, 00258 XLCFI_SATURN, 00259 XLCFI_URANUS, 00260 XLCFI_NEPTUNE 00261 } PlanetEnum; 00262 00264 typedef enum 00265 { 00266 XLCFI_FK4 = 0, 00267 XLCFI_FK5 00268 } StarCatalogEnum; 00269 00270 00272 typedef enum 00273 { 00274 XLCFI_ANGLE_TYPE_TRUE_LAT_TOD = 1, 00275 XLCFI_ANGLE_TYPE_MEAN_LAT_TOD, 00276 XLCFI_ANGLE_TYPE_TRUE_LAT_GM2000, 00277 XLCFI_ANGLE_TYPE_TRUE_LAT_EF 00278 } AngleTypeEnum; 00279 00281 typedef enum 00282 { 00283 XLCFI_MODEL_DEFAULT, 00284 XLCFI_MODEL_CONFIG 00285 } ModelSetsEnum; 00286 00288 typedef enum 00289 { 00290 XLCFI_MODEL_TYPE_EARTH, 00291 XLCFI_MODEL_TYPE_SUN, 00292 XLCFI_MODEL_TYPE_MOON, 00293 XLCFI_MODEL_TYPE_PLANET, 00294 XLCFI_MODEL_TYPE_STAR, 00295 XLCFI_MODEL_TYPE_NUTATION, 00296 XLCFI_MODEL_TYPE_PRECESSION, 00297 XLCFI_MODEL_TYPE_CONSTANTS, 00298 XLCFI_MODEL_TYPE_LIGHT_PROPAGATION, //AN-553 00299 XLCFI_NUM_MODEL_TYPES_ENUM 00300 } ModelTypesEnum; 00301 00303 typedef enum 00304 { 00305 XLCFI_MODEL_EARTH_DEFAULT 00306 } ModelEarthEnum; 00307 00308 00310 typedef enum 00311 { 00312 XLCFI_MODEL_SUN_DEFAULT, 00313 XLCFI_MODEL_SUN_TRAVEL_TIME /* AN-517 */ 00314 } ModelSunEnum; 00315 00316 00318 typedef enum 00319 { 00320 XLCFI_MODEL_MOON_DEFAULT 00321 } ModelMoonEnum; 00322 00323 00325 typedef enum 00326 { 00327 XLCFI_MODEL_PLANETS_DEFAULT 00328 } ModelPlanetsEnum; 00329 00330 00332 typedef enum 00333 { 00334 XLCFI_MODEL_STAR_DEFAULT 00335 } ModelStarEnum; 00336 00337 00339 typedef enum 00340 { 00341 XLCFI_MODEL_NUTATION_DEFAULT 00342 } ModelNutationEnum; 00343 00344 00346 typedef enum 00347 { 00348 XLCFI_MODEL_PRECESSION_DEFAULT 00349 } ModelPrecessionEnum; 00350 00352 typedef enum 00353 { 00354 XLCFI_MODEL_CONSTANTS_DEFAULT 00355 } ModelConstantsEnum; 00356 00358 typedef enum 00359 { 00360 XLCFI_MODEL_LIGHT_PROPAGATION_DISABLED, 00361 XLCFI_MODEL_LIGHT_PROPAGATION_RECEIVER, 00362 XLCFI_MODEL_LIGHT_PROPAGATION_TRANSMITTER 00363 } ModelLightPropagationEnum; //AN-553 00364 00366 typedef enum 00367 { 00368 XLCFI_NO_BULLETIN = -1, 00369 XLCFI_BULLETIN_B, 00370 XLCFI_BULLETIN_A, 00371 XLCFI_BULLETIN_B_AND_A 00372 } XLBulletinTypeEnum; 00373 00375 typedef enum 00376 { 00377 XLCFI_FORMULA_ENABLED, 00378 XLCFI_FORMULA_DISABLED 00379 } IersFormulaFlagEnum; 00380 00381 /* AN-518 */ 00383 typedef enum 00384 { 00385 XLCFI_INTERPOL_SLERP 00386 } QuaternionsInterpolationAlgoEnum; 00387 00388 //------------------------------------------------------ 00389 // DATA STRUCTURES 00390 //------------------------------------------------------ 00391 00393 class TimeInterval 00394 { 00395 public: 00396 long timeRef; 00397 double startTime; 00398 double stopTime; 00399 00401 TimeInterval() 00402 {timeRef = -1, startTime = 0, stopTime = 0;}; 00403 00405 TimeInterval(long ref, double start, double stop) 00406 {timeRef = ref, startTime = start, stopTime = stop;}; 00407 }; 00408 00410 class OrbitInterval 00411 { 00412 public: 00413 long startOrbit; 00414 long stopOrbit; 00415 00417 OrbitInterval() {startOrbit = 0, stopOrbit = 0;}; 00418 00420 OrbitInterval(long start, long stop) 00421 {startOrbit = start, stopOrbit = stop;}; 00422 }; 00423 00425 class TimeData 00426 { 00427 public: 00428 double taiTime; 00429 double ut1Time; 00430 double tai_utc; 00431 double tai_ut1; 00432 double tai_gps; 00433 }; 00434 00436 class LeapSecondInfo 00437 { 00438 public: 00439 long flag; 00440 double utcTime; 00441 }; 00442 00444 class LaunchInertialFrameConfig 00445 { 00446 public: 00447 long enabledFlag; 00448 double longitude; 00449 double utcTime; 00450 00451 LaunchInertialFrameConfig() 00452 { 00453 utcTime = 0; /* AN-341 */ 00454 enabledFlag = 0L; /* AN-341 */ 00455 longitude = 0; /* AN-341 */ 00456 } 00457 }; 00458 00460 class TimeCorrelationData 00461 { 00462 public: 00463 long iersBulletinType; 00464 long iersFormulaFlag; 00465 long predictionFirstRecord; 00466 PolarMotionFormula polarMotionFormula; 00467 TimeCorrelationFormula timeCorrelationFormula; 00468 vector<TimeData> timeCorrVector; 00469 vector<PolarMotionParams> polarMotionParams; 00470 LeapSecondInfo leapSecond; 00471 LaunchInertialFrameConfig launchInertialFrameConfig; 00472 00474 TimeCorrelationData() 00475 { 00476 iersBulletinType = XLCFI_NO_BULLETIN; 00477 iersFormulaFlag = XLCFI_FORMULA_DISABLED; 00478 predictionFirstRecord = 0L; 00479 } 00480 00482 TimeCorrelationData(long bulType, long iersFormula, long predFirst, 00483 PolarMotionFormula &polarForm, TimeCorrelationFormula &timeForm, 00484 vector<TimeData> &timData, vector<PolarMotionParams> &polarData, 00485 LeapSecondInfo &leapInfo ) 00486 { 00487 iersBulletinType = bulType; 00488 iersFormulaFlag = iersFormula; 00489 predictionFirstRecord = predFirst; 00490 polarMotionFormula = polarForm; 00491 timeCorrelationFormula = timeForm; 00492 timeCorrVector = timData; 00493 polarMotionParams = polarData; 00494 leapSecond = leapInfo; 00495 } 00496 00498 TimeCorrelationData(long bulType, long iersFormula, long predFirst, 00499 PolarMotionFormula &polarForm, TimeCorrelationFormula &timeForm, 00500 vector<TimeData> &timData, vector<PolarMotionParams> &polarData, 00501 LeapSecondInfo &leapInfo, LaunchInertialFrameConfig &launchInertialFrameCfg ) 00502 { 00503 iersBulletinType = bulType; 00504 iersFormulaFlag = iersFormula; 00505 predictionFirstRecord = predFirst; 00506 polarMotionFormula = polarForm; 00507 timeCorrelationFormula = timeForm; 00508 timeCorrVector = timData; 00509 polarMotionParams = polarData; 00510 leapSecond = leapInfo; 00511 launchInertialFrameConfig = launchInertialFrameCfg; /* AN-341 */ 00512 } 00513 }; 00514 00516 class Kepler 00517 { 00518 public: 00519 long mode; 00520 long cs; 00521 double a; 00522 double e; 00523 double i; 00524 double ra; 00525 double w; 00526 double m; 00527 }; 00528 00530 class Topocentric 00531 { 00532 public: 00533 double azim; 00534 double elev; 00535 double range; 00536 double azimDer; 00537 double elevDer; 00538 double rangeDer; 00539 }; 00540 00542 class ModelData 00543 { 00544 public: 00545 long earthModel; 00546 long sunModel; 00547 long moonModel; 00548 long planetModel; 00549 long starModel; 00550 long nutationModel; 00551 long precessionModel; 00552 long constantsModel; 00553 long lightPropagationModel; 00554 00555 /* Earth shape and gravity */ 00556 double re; 00557 double mu; 00558 double j2; 00559 double j3; 00560 double j4; 00561 00562 double majorAxis; 00563 double minorAxis; 00564 double ecc; 00565 double flat; 00566 00567 /* Earth rotation */ 00568 double gcoef0; 00569 double gcoef1; 00570 double gcoef2; 00571 00572 double gcoefSim0; 00573 double gcoefSim1; 00574 double gcoefSim2; 00575 00576 /* constants */ 00577 double au; 00578 }; 00579 00581 class GeoidCalcOutputs 00582 { 00583 public: 00584 double undulation; 00585 }; // AN-425 00586 00588 class QuaternionsInterpolationCfg 00589 { 00590 public: 00591 QuaternionsInterpolationAlgoEnum algo; 00592 }; // AN-518 00593 00594 00595 00596 } // closing namespace 00597 00598 #endif