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