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