![]() |
Earth Observation Mission CFI Software Lib Software User Manual |
![]() |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.19 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 #include "LibDllExport.h" 00021 00022 //--NAMESPACES-------------------------------------------------------- 00023 00024 namespace EECFI 00025 { 00026 00027 //------------------------------------------------------ 00028 // CONSTANTS 00029 //------------------------------------------------------ 00031 #define MCFI_PI 3.14159265358979323846 00032 00033 // AN-673 00035 #define XLCFI_MAX_P_FIELD_CUC_UNIT_OCTETS 2 00036 00038 #define XLCFI_MAX_T_FIELD_CUC_UNIT_OCTETS 7 00039 00041 #define XLCFI_MAX_T_FIELD_CUC_SUBUNIT_OCTETS 10 00042 00044 #define XLCFI_MAX_CUC_ARRAY_LENGTH (XLCFI_MAX_P_FIELD_CUC_UNIT_OCTETS+XLCFI_MAX_T_FIELD_CUC_UNIT_OCTETS+XLCFI_MAX_T_FIELD_CUC_SUBUNIT_OCTETS) 00045 00046 //------------------------------------------------------ 00047 // DATA ENUMERATION 00048 // Enumeration values are defined in an equivalent way to the C library 00049 // except for the prefix that has been changed from XX_ to XXCFI_ 00050 //------------------------------------------------------ 00051 00053 typedef enum 00054 { 00055 XLCFI_SAT_DEFAULT = 0, 00056 XLCFI_SAT_DEFAULT1 = 1, 00057 XLCFI_SAT_DEFAULT2 = 2, 00058 XLCFI_SAT_DEFAULT3 = 3, 00059 XLCFI_SAT_DEFAULT4 = 4, 00060 XLCFI_SAT_DEFAULT5 = 5, 00061 XLCFI_SAT_DEFAULT6 = 6, 00062 XLCFI_SAT_DEFAULT7 = 7, 00063 XLCFI_SAT_DEFAULT8 = 8, 00064 XLCFI_SAT_DEFAULT9 = 9, 00065 XLCFI_SAT_ERS1 = 11, 00066 XLCFI_SAT_ERS2 = 12, 00067 XLCFI_SAT_ENVISAT = 21, 00068 XLCFI_SAT_METOP1 = 31, 00069 XLCFI_SAT_METOP2 = 32, 00070 XLCFI_SAT_METOP3 = 33, 00071 XLCFI_SAT_CRYOSAT = 41, 00072 XLCFI_SAT_ADM = 51, 00073 XLCFI_SAT_GOCE = 61, 00074 XLCFI_SAT_SMOS = 71, 00075 XLCFI_SAT_TERRASAR = 81, 00076 XLCFI_SAT_EARTHCARE = 91, 00077 XLCFI_SAT_SWARM_A = 101, 00078 XLCFI_SAT_SWARM_B = 102, 00079 XLCFI_SAT_SWARM_C = 103, 00080 XLCFI_SAT_SENTINEL_1A = 110, 00081 XLCFI_SAT_SENTINEL_1B = 111, 00082 XLCFI_SAT_SENTINEL_2 = 112, 00083 XLCFI_SAT_SENTINEL_3 = 113, 00084 XLCFI_SAT_SEOSAT = 120, 00085 XLCFI_SAT_SENTINEL_1C = 125, 00086 XLCFI_SAT_SENTINEL_2A = 126, 00087 XLCFI_SAT_SENTINEL_2B = 127, 00088 XLCFI_SAT_SENTINEL_2C = 128, 00089 XLCFI_SAT_SENTINEL_3A = 129, 00090 XLCFI_SAT_SENTINEL_3B = 130, 00091 XLCFI_SAT_SENTINEL_3C = 131, 00092 XLCFI_SAT_JASON_CSA = 132, // AN-531 00093 XLCFI_SAT_JASON_CSB = 133, // AN-531 00094 XLCFI_SAT_METOP_SG_A1 = 134, // AN-530 00095 XLCFI_SAT_METOP_SG_A2 = 135, // AN-530 00096 XLCFI_SAT_METOP_SG_A3 = 136, // AN-530 00097 XLCFI_SAT_METOP_SG_B1 = 137, // AN-530 00098 XLCFI_SAT_METOP_SG_B2 = 138, // AN-530 00099 XLCFI_SAT_METOP_SG_B3 = 139, // AN-530 00100 XLCFI_SAT_SENTINEL_5P = 140, // AN-502 00101 XLCFI_SAT_BIOMASS = 141, // AN-601 00102 XLCFI_SAT_SENTINEL_5 = 142, // AN-639 00103 XLCFI_SAT_SAOCOM_CS = 143, // AN-640 00104 XLCFI_SAT_FLEX = 144, /* AN-640 */ 00105 XLCFI_SAT_GENERIC = 200, 00106 // AN-353 00107 XLCFI_SAT_GENERIC_GEO = 300, 00108 XLCFI_SAT_MTG = 301, 00109 // END AN-353 00110 XLCFI_SAT_GENERIC_MEO = 400 // AN-550 00111 } SatIdEnum; 00112 00113 00115 typedef enum 00116 { 00117 XLCFI_TIMEMOD_AUTO = -2, 00118 XLCFI_TIMEMOD_USER = -1, 00119 XLCFI_TIMEMOD_NONE = 0, 00120 XLCFI_TIMEMOD_IERS_B_PREDICTED = 1, 00121 XLCFI_TIMEMOD_IERS_B_RESTITUTED, 00122 XLCFI_TIMEMOD_FOS_PREDICTED, 00123 XLCFI_TIMEMOD_FOS_RESTITUTED, 00124 XLCFI_TIMEMOD_DORIS_PRELIMINARY, 00125 XLCFI_TIMEMOD_DORIS_PRECISE, 00126 XLCFI_TIMEMOD_DORIS_NAVIGATOR, 00127 XLCFI_TIMEMOD_OSF, 00128 XLCFI_TIMEMOD_IERS_A_ONLY_PREDICTION, 00129 XLCFI_TIMEMOD_IERS_A_PREDICTION_AND_FORMULA, 00130 XLCFI_TIMEMOD_IERS_B_AND_A_ONLY_PREDICTION 00131 } TimeModelEnum; 00132 00133 00135 typedef enum 00136 { 00137 XLCFI_TIME_UNDEF = -1, 00138 XLCFI_TIME_TAI, 00139 XLCFI_TIME_UTC, 00140 XLCFI_TIME_UT1, 00141 XLCFI_TIME_GPS 00142 } XLTimeRefEnum; 00143 00144 00146 typedef enum 00147 { 00148 XLCFI_PROC = 0 00149 } TimeProcEnum; 00150 00152 typedef enum 00153 { 00154 XLCFI_TRANS_STD = 0, 00155 XLCFI_TRANS_ENVI_GS = 11, 00156 XLCFI_TRANS_CRYO_GS = 21, 00157 XLCFI_TRANS_CRYO_TM = 22, 00158 XLCFI_TRANS_CRYO_TM_SIRAL = 23, 00159 XLCFI_TRANS_SMOS_TM = 31, 00160 XLCFI_TRANS_GENERIC_GPS_SEC = 41, 00161 XLCFI_TRANS_GENERIC_GPS_WEEK = 42 00162 } TimeTransEnum; 00163 00164 00184 typedef enum 00185 { 00186 XLCFI_ASCII_UNDEF = -1, 00187 XLCFI_ASCII_STD = 11, 00188 XLCFI_ASCII_STD_REF = 12, 00189 XLCFI_ASCII_STD_MICROSEC = 13, 00190 XLCFI_ASCII_STD_REF_MICROSEC = 14, 00191 XLCFI_ASCII_COMPACT = 21, 00192 XLCFI_ASCII_COMPACT_REF = 22, 00193 XLCFI_ASCII_COMPACT_MICROSEC = 23, 00194 XLCFI_ASCII_COMPACT_REF_MICROSEC = 24, 00195 XLCFI_ASCII_ENVI = 31, 00196 XLCFI_ASCII_ENVI_REF = 32, 00197 XLCFI_ASCII_ENVI_MICROSEC = 33, 00198 XLCFI_ASCII_ENVI_REF_MICROSEC = 34, 00199 XLCFI_ASCII_CCSDSA = 41, 00200 XLCFI_ASCII_CCSDSA_REF = 42, 00201 XLCFI_ASCII_CCSDSA_MICROSEC = 43, 00202 XLCFI_ASCII_CCSDSA_REF_MICROSEC = 44, 00203 XLCFI_ASCII_CCSDSA_COMPACT = 51, 00204 XLCFI_ASCII_CCSDSA_COMPACT_REF = 52, 00205 XLCFI_ASCII_CCSDSA_COMPACT_MICROSEC = 53, 00206 XLCFI_ASCII_CCSDSA_COMPACT_REF_MICROSEC = 54 00207 } TimeAsciiEnum; 00208 00209 00211 typedef enum // Flag to indicate the grade of a derivative 00212 { 00213 XLCFI_NO_DER = 0, 00214 XLCFI_DER_1ST, 00215 XLCFI_DER_2ND, 00216 XLCFI_ITER_NO_DER, 00217 XLCFI_ITER_DER_1ST, 00218 XLCFI_NO_ITER_NO_DER, 00219 XLCFI_NO_ITER_DER_1ST 00220 } DerivEnum; 00221 00222 00224 typedef enum // It defines a coordinate system 00225 { 00226 XLCFI_CS_UNDEF = 0, 00227 XLCFI_CS_BM2000 = 1, 00228 XLCFI_CS_HM2000, 00229 XLCFI_CS_GM2000, 00230 XLCFI_CS_MOD, 00231 XLCFI_CS_TOD, 00232 XLCFI_CS_PEF, 00233 XLCFI_CS_EF, 00234 XLCFI_CS_LIF, 00235 XLCFI_CS_BM1950, 00236 XLCFI_CS_GALACTIC, 00237 XLCFI_CS_SAT_ACT_REF, 00238 XLCFI_CS_QUASI_MEAN_DATE, 00239 XLCFI_CS_PSE_TRUE_DATE, 00240 XLCFI_CS_TOPOCENTRIC, 00241 XLCFI_CS_SAT_REF, 00242 XLCFI_CS_SAT_REL_REF 00243 } CoordinateSystemEnum; // Updated for AN-509 00244 00246 typedef enum 00247 { 00248 XLCFI_CS_SAT_ORBITAL_REF = 0, 00249 XLCFI_CS_SAT_NOMINAL_ATT, 00250 XLCFI_CS_SAT_ATT, 00251 XLCFI_CS_INSTR_ATT 00252 } XLAttitudeFrameEnum; // AN-509 00253 00255 typedef enum 00256 { 00257 XLCFI_KEPLER_MEAN = 1, 00258 XLCFI_KEPLER_OSC 00259 } KeplerModeEnum; 00260 00262 typedef enum 00263 { 00264 XLCFI_MODE_FLAG_LOCATION = 0, 00265 XLCFI_MODE_FLAG_DIRECTION 00266 } ModeFlagEnum; 00267 00269 typedef enum 00270 { 00271 XLCFI_MERCURY = 1, 00272 XLCFI_VENUS, 00273 XLCFI_EM_BAR, 00274 XLCFI_MARS, 00275 XLCFI_JUPITER, 00276 XLCFI_SATURN, 00277 XLCFI_URANUS, 00278 XLCFI_NEPTUNE 00279 } PlanetEnum; 00280 00282 typedef enum 00283 { 00284 XLCFI_FK4 = 0, 00285 XLCFI_FK5 00286 } StarCatalogEnum; 00287 00288 00290 typedef enum 00291 { 00292 XLCFI_ANGLE_TYPE_TRUE_LAT_TOD = 0, 00293 XLCFI_ANGLE_TYPE_TRUE_LAT_EF, 00294 XLCFI_ANGLE_TYPE_TRUE_LAT_GM2000 00295 } AngleTypeEnum; // AN-736: aligned value with DH and POINTING 00296 00298 typedef enum 00299 { 00300 XLCFI_MODEL_DEFAULT, 00301 XLCFI_MODEL_CONFIG 00302 } ModelSetsEnum; 00303 00305 typedef enum 00306 { 00307 XLCFI_MODEL_TYPE_EARTH, 00308 XLCFI_MODEL_TYPE_SUN, 00309 XLCFI_MODEL_TYPE_MOON, 00310 XLCFI_MODEL_TYPE_PLANET, 00311 XLCFI_MODEL_TYPE_STAR, 00312 XLCFI_MODEL_TYPE_NUTATION, 00313 XLCFI_MODEL_TYPE_PRECESSION, 00314 XLCFI_MODEL_TYPE_CONSTANTS, 00315 XLCFI_MODEL_TYPE_LIGHT_PROPAGATION, //AN-553 00316 XLCFI_NUM_MODEL_TYPES_ENUM 00317 } ModelTypesEnum; 00318 00320 typedef enum 00321 { 00322 XLCFI_MODEL_EARTH_DEFAULT 00323 } ModelEarthEnum; 00324 00325 00327 typedef enum 00328 { 00329 XLCFI_MODEL_SUN_DEFAULT, 00330 XLCFI_MODEL_SUN_TRAVEL_TIME /* AN-517 */ 00331 } ModelSunEnum; 00332 00333 00335 typedef enum 00336 { 00337 XLCFI_MODEL_MOON_DEFAULT 00338 } ModelMoonEnum; 00339 00340 00342 typedef enum 00343 { 00344 XLCFI_MODEL_PLANETS_DEFAULT 00345 } ModelPlanetsEnum; 00346 00347 00349 typedef enum 00350 { 00351 XLCFI_MODEL_STAR_DEFAULT 00352 } ModelStarEnum; 00353 00354 00356 typedef enum 00357 { 00358 XLCFI_MODEL_NUTATION_DEFAULT 00359 } ModelNutationEnum; 00360 00361 00363 typedef enum 00364 { 00365 XLCFI_MODEL_PRECESSION_DEFAULT 00366 } ModelPrecessionEnum; 00367 00369 typedef enum 00370 { 00371 XLCFI_MODEL_CONSTANTS_DEFAULT 00372 } ModelConstantsEnum; 00373 00375 typedef enum 00376 { 00377 XLCFI_MODEL_LIGHT_PROPAGATION_DISABLED, 00378 XLCFI_MODEL_LIGHT_PROPAGATION_RECEIVER, 00379 XLCFI_MODEL_LIGHT_PROPAGATION_TRANSMITTER 00380 } ModelLightPropagationEnum; //AN-553 00381 00383 typedef enum 00384 { 00385 XLCFI_NO_BULLETIN = -1, 00386 XLCFI_BULLETIN_B, 00387 XLCFI_BULLETIN_A, 00388 XLCFI_BULLETIN_B_AND_A 00389 } XLBulletinTypeEnum; 00390 00392 typedef enum 00393 { 00394 XLCFI_FORMULA_ENABLED, 00395 XLCFI_FORMULA_DISABLED 00396 } IersFormulaFlagEnum; 00397 00398 /* AN-518 */ 00400 typedef enum 00401 { 00402 XLCFI_INTERPOL_SLERP 00403 } QuaternionsInterpolationAlgoEnum; 00404 00405 // AN-673 00407 typedef enum 00408 { 00409 XLCFI_CUC_T_FIELD, 00410 XLCFI_CUC_T_AND_P_FIELDS 00411 } CucTimeTypeEnum; 00412 00414 typedef enum 00415 { 00416 XLCFI_EPOCH_CCSDS, 00417 XLCFI_EPOCH_GPS, 00418 XLCFI_EPOCH_USER_DEFINED 00419 } CucEpochTypeEnum; 00420 00421 //------------------------------------------------------ 00422 // DATA STRUCTURES 00423 //------------------------------------------------------ 00424 00426 class XL_DECL TimeInterval 00427 { 00428 public: 00429 long timeRef; 00430 double startTime; 00431 double stopTime; 00432 00434 TimeInterval() 00435 {timeRef = -1, startTime = 0, stopTime = 0;}; 00436 00438 TimeInterval(long ref, double start, double stop) 00439 {timeRef = ref, startTime = start, stopTime = stop;}; 00440 }; 00441 00443 class XL_DECL OrbitInterval 00444 { 00445 public: 00446 long startOrbit; 00447 long stopOrbit; 00448 00450 OrbitInterval() {startOrbit = 0, stopOrbit = 0;}; 00451 00453 OrbitInterval(long start, long stop) 00454 {startOrbit = start, stopOrbit = stop;}; 00455 }; 00456 00458 class XL_DECL TimeData 00459 { 00460 public: 00461 double taiTime; 00462 double ut1Time; 00463 double tai_utc; 00464 double tai_ut1; 00465 double tai_gps; 00466 }; 00467 00469 class XL_DECL LeapSecondInfo 00470 { 00471 public: 00472 long flag; 00473 double utcTime; 00474 }; 00475 00477 class XL_DECL LaunchInertialFrameConfig 00478 { 00479 public: 00480 long enabledFlag; 00481 double longitude; 00482 double utcTime; 00483 00484 LaunchInertialFrameConfig() 00485 { 00486 utcTime = 0; /* AN-341 */ 00487 enabledFlag = 0L; /* AN-341 */ 00488 longitude = 0; /* AN-341 */ 00489 } 00490 }; 00491 00493 class XL_DECL TimeCorrelationData 00494 { 00495 public: 00496 long iersBulletinType; 00497 long iersFormulaFlag; 00498 long predictionFirstRecord; 00499 PolarMotionFormula polarMotionFormula; 00500 TimeCorrelationFormula timeCorrelationFormula; 00501 std::vector<TimeData> timeCorrVector; 00502 std::vector<PolarMotionParams> polarMotionParams; 00503 LeapSecondInfo leapSecond; 00504 LaunchInertialFrameConfig launchInertialFrameConfig; 00505 00507 TimeCorrelationData() 00508 { 00509 iersBulletinType = XLCFI_NO_BULLETIN; 00510 iersFormulaFlag = XLCFI_FORMULA_DISABLED; 00511 predictionFirstRecord = 0L; 00512 } 00513 00515 TimeCorrelationData(long bulType, long iersFormula, long predFirst, 00516 const PolarMotionFormula &polarForm, const TimeCorrelationFormula &timeForm, 00517 const std::vector<TimeData> &timData, const std::vector<PolarMotionParams> &polarData, 00518 const LeapSecondInfo &leapInfo ) 00519 { 00520 iersBulletinType = bulType; 00521 iersFormulaFlag = iersFormula; 00522 predictionFirstRecord = predFirst; 00523 polarMotionFormula = polarForm; 00524 timeCorrelationFormula = timeForm; 00525 timeCorrVector = timData; 00526 polarMotionParams = polarData; 00527 leapSecond = leapInfo; 00528 } 00529 00531 TimeCorrelationData(long bulType, long iersFormula, long predFirst, 00532 const PolarMotionFormula &polarForm, const TimeCorrelationFormula &timeForm, 00533 const std::vector<TimeData> &timData, const std::vector<PolarMotionParams> &polarData, 00534 const LeapSecondInfo &leapInfo, const LaunchInertialFrameConfig &launchInertialFrameCfg ) 00535 { 00536 iersBulletinType = bulType; 00537 iersFormulaFlag = iersFormula; 00538 predictionFirstRecord = predFirst; 00539 polarMotionFormula = polarForm; 00540 timeCorrelationFormula = timeForm; 00541 timeCorrVector = timData; 00542 polarMotionParams = polarData; 00543 leapSecond = leapInfo; 00544 launchInertialFrameConfig = launchInertialFrameCfg; /* AN-341 */ 00545 } 00546 }; 00547 00549 class XL_DECL Kepler 00550 { 00551 public: 00552 long mode; 00553 long cs; 00554 double a; 00555 double e; 00556 double i; 00557 double ra; 00558 double w; 00559 double m; 00560 }; 00561 00563 class XL_DECL Topocentric 00564 { 00565 public: 00566 double azim; 00567 double elev; 00568 double range; 00569 double azimDer; 00570 double elevDer; 00571 double rangeDer; 00572 }; 00573 00575 class XL_DECL ModelData 00576 { 00577 public: 00578 long earthModel; 00579 long sunModel; 00580 long moonModel; 00581 long planetModel; 00582 long starModel; 00583 long nutationModel; 00584 long precessionModel; 00585 long constantsModel; 00586 long lightPropagationModel; 00587 00588 /* Earth shape and gravity */ 00589 double re; 00590 double mu; 00591 double j2; 00592 double j3; 00593 double j4; 00594 00595 double majorAxis; 00596 double minorAxis; 00597 double ecc; 00598 double flat; 00599 00600 /* Earth rotation */ 00601 double gcoef0; 00602 double gcoef1; 00603 double gcoef2; 00604 00605 double gcoefSim0; 00606 double gcoefSim1; 00607 double gcoefSim2; 00608 00609 /* constants */ 00610 double au; 00611 }; 00612 00614 class XL_DECL GeoidCalcOutputs 00615 { 00616 public: 00617 double undulation; 00618 }; // AN-425 00619 00621 class XL_DECL QuaternionsInterpolationCfg 00622 { 00623 public: 00624 QuaternionsInterpolationAlgoEnum algo; 00625 }; // AN-518 00626 00628 class XL_DECL CucTimeConfig 00629 { 00630 public: 00631 long cucType; 00632 long epochType; 00633 long timeRef; 00634 double epoch; 00635 long basicTimeUnitNumOctets; 00636 long fractionalTimeUnitNumOctets; 00637 00639 CucTimeConfig() 00640 { 00641 this->cucType = 0; 00642 this->epochType = 0; 00643 this->timeRef = 0; 00644 this->epoch = 0.; 00645 this->basicTimeUnitNumOctets = 0; 00646 this->fractionalTimeUnitNumOctets = 0; 00647 } 00648 00650 CucTimeConfig(long cucTypeIn, long epochTypeIn, long timeRefIn, 00651 double epochIn, long timeUnitsOctetsIn, long fractionTimeUnitOctetsIn) 00652 { 00653 this->cucType = cucTypeIn; 00654 this->epochType = epochTypeIn; 00655 this->timeRef = timeRefIn; 00656 this->epoch = epochIn; 00657 this->basicTimeUnitNumOctets = timeUnitsOctetsIn; 00658 this->fractionalTimeUnitNumOctets = fractionTimeUnitOctetsIn; 00659 } 00660 }; // AN-673 00661 00662 00663 } // closing namespace 00664 00665 #endif