![]() |
Earth Observation Mission CFI Software Lib Software User Manual |
![]() |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.15 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 = 1, 00294 XLCFI_ANGLE_TYPE_MEAN_LAT_TOD, 00295 XLCFI_ANGLE_TYPE_TRUE_LAT_GM2000, 00296 XLCFI_ANGLE_TYPE_TRUE_LAT_EF 00297 } AngleTypeEnum; 00298 00300 typedef enum 00301 { 00302 XLCFI_MODEL_DEFAULT, 00303 XLCFI_MODEL_CONFIG 00304 } ModelSetsEnum; 00305 00307 typedef enum 00308 { 00309 XLCFI_MODEL_TYPE_EARTH, 00310 XLCFI_MODEL_TYPE_SUN, 00311 XLCFI_MODEL_TYPE_MOON, 00312 XLCFI_MODEL_TYPE_PLANET, 00313 XLCFI_MODEL_TYPE_STAR, 00314 XLCFI_MODEL_TYPE_NUTATION, 00315 XLCFI_MODEL_TYPE_PRECESSION, 00316 XLCFI_MODEL_TYPE_CONSTANTS, 00317 XLCFI_MODEL_TYPE_LIGHT_PROPAGATION, //AN-553 00318 XLCFI_NUM_MODEL_TYPES_ENUM 00319 } ModelTypesEnum; 00320 00322 typedef enum 00323 { 00324 XLCFI_MODEL_EARTH_DEFAULT 00325 } ModelEarthEnum; 00326 00327 00329 typedef enum 00330 { 00331 XLCFI_MODEL_SUN_DEFAULT, 00332 XLCFI_MODEL_SUN_TRAVEL_TIME /* AN-517 */ 00333 } ModelSunEnum; 00334 00335 00337 typedef enum 00338 { 00339 XLCFI_MODEL_MOON_DEFAULT 00340 } ModelMoonEnum; 00341 00342 00344 typedef enum 00345 { 00346 XLCFI_MODEL_PLANETS_DEFAULT 00347 } ModelPlanetsEnum; 00348 00349 00351 typedef enum 00352 { 00353 XLCFI_MODEL_STAR_DEFAULT 00354 } ModelStarEnum; 00355 00356 00358 typedef enum 00359 { 00360 XLCFI_MODEL_NUTATION_DEFAULT 00361 } ModelNutationEnum; 00362 00363 00365 typedef enum 00366 { 00367 XLCFI_MODEL_PRECESSION_DEFAULT 00368 } ModelPrecessionEnum; 00369 00371 typedef enum 00372 { 00373 XLCFI_MODEL_CONSTANTS_DEFAULT 00374 } ModelConstantsEnum; 00375 00377 typedef enum 00378 { 00379 XLCFI_MODEL_LIGHT_PROPAGATION_DISABLED, 00380 XLCFI_MODEL_LIGHT_PROPAGATION_RECEIVER, 00381 XLCFI_MODEL_LIGHT_PROPAGATION_TRANSMITTER 00382 } ModelLightPropagationEnum; //AN-553 00383 00385 typedef enum 00386 { 00387 XLCFI_NO_BULLETIN = -1, 00388 XLCFI_BULLETIN_B, 00389 XLCFI_BULLETIN_A, 00390 XLCFI_BULLETIN_B_AND_A 00391 } XLBulletinTypeEnum; 00392 00394 typedef enum 00395 { 00396 XLCFI_FORMULA_ENABLED, 00397 XLCFI_FORMULA_DISABLED 00398 } IersFormulaFlagEnum; 00399 00400 /* AN-518 */ 00402 typedef enum 00403 { 00404 XLCFI_INTERPOL_SLERP 00405 } QuaternionsInterpolationAlgoEnum; 00406 00407 // AN-673 00409 typedef enum 00410 { 00411 XLCFI_CUC_T_FIELD, 00412 XLCFI_CUC_T_AND_P_FIELDS 00413 } CucTimeTypeEnum; 00414 00416 typedef enum 00417 { 00418 XLCFI_EPOCH_CCSDS, 00419 XLCFI_EPOCH_GPS, 00420 XLCFI_EPOCH_USER_DEFINED 00421 } CucEpochTypeEnum; 00422 00423 //------------------------------------------------------ 00424 // DATA STRUCTURES 00425 //------------------------------------------------------ 00426 00428 class XL_DECL TimeInterval 00429 { 00430 public: 00431 long timeRef; 00432 double startTime; 00433 double stopTime; 00434 00436 TimeInterval() 00437 {timeRef = -1, startTime = 0, stopTime = 0;}; 00438 00440 TimeInterval(long ref, double start, double stop) 00441 {timeRef = ref, startTime = start, stopTime = stop;}; 00442 }; 00443 00445 class XL_DECL OrbitInterval 00446 { 00447 public: 00448 long startOrbit; 00449 long stopOrbit; 00450 00452 OrbitInterval() {startOrbit = 0, stopOrbit = 0;}; 00453 00455 OrbitInterval(long start, long stop) 00456 {startOrbit = start, stopOrbit = stop;}; 00457 }; 00458 00460 class XL_DECL TimeData 00461 { 00462 public: 00463 double taiTime; 00464 double ut1Time; 00465 double tai_utc; 00466 double tai_ut1; 00467 double tai_gps; 00468 }; 00469 00471 class XL_DECL LeapSecondInfo 00472 { 00473 public: 00474 long flag; 00475 double utcTime; 00476 }; 00477 00479 class XL_DECL LaunchInertialFrameConfig 00480 { 00481 public: 00482 long enabledFlag; 00483 double longitude; 00484 double utcTime; 00485 00486 LaunchInertialFrameConfig() 00487 { 00488 utcTime = 0; /* AN-341 */ 00489 enabledFlag = 0L; /* AN-341 */ 00490 longitude = 0; /* AN-341 */ 00491 } 00492 }; 00493 00495 class XL_DECL TimeCorrelationData 00496 { 00497 public: 00498 long iersBulletinType; 00499 long iersFormulaFlag; 00500 long predictionFirstRecord; 00501 PolarMotionFormula polarMotionFormula; 00502 TimeCorrelationFormula timeCorrelationFormula; 00503 vector<TimeData> timeCorrVector; 00504 vector<PolarMotionParams> polarMotionParams; 00505 LeapSecondInfo leapSecond; 00506 LaunchInertialFrameConfig launchInertialFrameConfig; 00507 00509 TimeCorrelationData() 00510 { 00511 iersBulletinType = XLCFI_NO_BULLETIN; 00512 iersFormulaFlag = XLCFI_FORMULA_DISABLED; 00513 predictionFirstRecord = 0L; 00514 } 00515 00517 TimeCorrelationData(long bulType, long iersFormula, long predFirst, 00518 PolarMotionFormula &polarForm, TimeCorrelationFormula &timeForm, 00519 vector<TimeData> &timData, vector<PolarMotionParams> &polarData, 00520 LeapSecondInfo &leapInfo ) 00521 { 00522 iersBulletinType = bulType; 00523 iersFormulaFlag = iersFormula; 00524 predictionFirstRecord = predFirst; 00525 polarMotionFormula = polarForm; 00526 timeCorrelationFormula = timeForm; 00527 timeCorrVector = timData; 00528 polarMotionParams = polarData; 00529 leapSecond = leapInfo; 00530 } 00531 00533 TimeCorrelationData(long bulType, long iersFormula, long predFirst, 00534 PolarMotionFormula &polarForm, TimeCorrelationFormula &timeForm, 00535 vector<TimeData> &timData, vector<PolarMotionParams> &polarData, 00536 LeapSecondInfo &leapInfo, LaunchInertialFrameConfig &launchInertialFrameCfg ) 00537 { 00538 iersBulletinType = bulType; 00539 iersFormulaFlag = iersFormula; 00540 predictionFirstRecord = predFirst; 00541 polarMotionFormula = polarForm; 00542 timeCorrelationFormula = timeForm; 00543 timeCorrVector = timData; 00544 polarMotionParams = polarData; 00545 leapSecond = leapInfo; 00546 launchInertialFrameConfig = launchInertialFrameCfg; /* AN-341 */ 00547 } 00548 }; 00549 00551 class XL_DECL Kepler 00552 { 00553 public: 00554 long mode; 00555 long cs; 00556 double a; 00557 double e; 00558 double i; 00559 double ra; 00560 double w; 00561 double m; 00562 }; 00563 00565 class XL_DECL Topocentric 00566 { 00567 public: 00568 double azim; 00569 double elev; 00570 double range; 00571 double azimDer; 00572 double elevDer; 00573 double rangeDer; 00574 }; 00575 00577 class XL_DECL ModelData 00578 { 00579 public: 00580 long earthModel; 00581 long sunModel; 00582 long moonModel; 00583 long planetModel; 00584 long starModel; 00585 long nutationModel; 00586 long precessionModel; 00587 long constantsModel; 00588 long lightPropagationModel; 00589 00590 /* Earth shape and gravity */ 00591 double re; 00592 double mu; 00593 double j2; 00594 double j3; 00595 double j4; 00596 00597 double majorAxis; 00598 double minorAxis; 00599 double ecc; 00600 double flat; 00601 00602 /* Earth rotation */ 00603 double gcoef0; 00604 double gcoef1; 00605 double gcoef2; 00606 00607 double gcoefSim0; 00608 double gcoefSim1; 00609 double gcoefSim2; 00610 00611 /* constants */ 00612 double au; 00613 }; 00614 00616 class XL_DECL GeoidCalcOutputs 00617 { 00618 public: 00619 double undulation; 00620 }; // AN-425 00621 00623 class XL_DECL QuaternionsInterpolationCfg 00624 { 00625 public: 00626 QuaternionsInterpolationAlgoEnum algo; 00627 }; // AN-518 00628 00630 class XL_DECL CucTimeConfig 00631 { 00632 public: 00633 long cucType; 00634 long epochType; 00635 long timeRef; 00636 double epoch; 00637 long basicTimeUnitNumOctets; 00638 long fractionalTimeUnitNumOctets; 00639 00641 CucTimeConfig() 00642 { 00643 this->cucType = 0; 00644 this->epochType = 0; 00645 this->timeRef = 0; 00646 this->epoch = 0.; 00647 this->basicTimeUnitNumOctets = 0; 00648 this->fractionalTimeUnitNumOctets = 0; 00649 } 00650 00652 CucTimeConfig(long cucTypeIn, long epochTypeIn, long timeRefIn, 00653 double epochIn, long timeUnitsOctetsIn, long fractionTimeUnitOctetsIn) 00654 { 00655 this->cucType = cucTypeIn; 00656 this->epochType = epochTypeIn; 00657 this->timeRef = timeRefIn; 00658 this->epoch = epochIn; 00659 this->basicTimeUnitNumOctets = timeUnitsOctetsIn; 00660 this->fractionalTimeUnitNumOctets = fractionTimeUnitOctetsIn; 00661 } 00662 }; // AN-673 00663 00664 00665 } // closing namespace 00666 00667 #endif