Earth Observation Mission CFI Software Lib Software User Manual |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.26 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_TRUTHS = 154, 00114 XLCFI_SAT_GENERIC = 200, 00115 // AN-353 00116 XLCFI_SAT_GENERIC_GEO = 300, 00117 XLCFI_SAT_MTG = 301, 00118 // END AN-353 00119 XLCFI_SAT_GENERIC_MEO = 400 // AN-550 00120 } SatIdEnum; 00121 00123 typedef enum 00124 { 00125 XLCFI_TIMEMOD_AUTO = -2, 00126 XLCFI_TIMEMOD_USER = -1, 00127 XLCFI_TIMEMOD_NONE = 0, 00128 XLCFI_TIMEMOD_IERS_B_PREDICTED = 1, 00129 XLCFI_TIMEMOD_IERS_B_RESTITUTED, 00130 XLCFI_TIMEMOD_FOS_PREDICTED, 00131 XLCFI_TIMEMOD_FOS_RESTITUTED, 00132 XLCFI_TIMEMOD_DORIS_PRELIMINARY, 00133 XLCFI_TIMEMOD_DORIS_PRECISE, 00134 XLCFI_TIMEMOD_DORIS_NAVIGATOR, 00135 XLCFI_TIMEMOD_OSF, 00136 XLCFI_TIMEMOD_IERS_A_ONLY_PREDICTION, 00137 XLCFI_TIMEMOD_IERS_A_PREDICTION_AND_FORMULA, 00138 XLCFI_TIMEMOD_IERS_B_AND_A_ONLY_PREDICTION 00139 } TimeModelEnum; 00140 00142 typedef enum 00143 { 00144 XLCFI_TIME_UNDEF = -1, 00145 XLCFI_TIME_TAI, 00146 XLCFI_TIME_UTC, 00147 XLCFI_TIME_UT1, 00148 XLCFI_TIME_GPS 00149 } XLTimeRefEnum; 00150 00152 typedef enum 00153 { 00154 XLCFI_PROC = 0 00155 } TimeProcEnum; 00156 00158 typedef enum 00159 { 00160 XLCFI_TRANS_STD = 0, 00161 XLCFI_TRANS_ENVI_GS = 11, 00162 XLCFI_TRANS_CRYO_GS = 21, 00163 XLCFI_TRANS_CRYO_TM = 22, 00164 XLCFI_TRANS_CRYO_TM_SIRAL = 23, 00165 XLCFI_TRANS_SMOS_TM = 31, 00166 XLCFI_TRANS_GENERIC_GPS_SEC = 41, 00167 XLCFI_TRANS_GENERIC_GPS_WEEK = 42 00168 } TimeTransEnum; 00169 00189 typedef enum 00190 { 00191 XLCFI_ASCII_UNDEF = -1, 00192 XLCFI_ASCII_STD = 11, 00193 XLCFI_ASCII_STD_REF = 12, 00194 XLCFI_ASCII_STD_MICROSEC = 13, 00195 XLCFI_ASCII_STD_REF_MICROSEC = 14, 00196 XLCFI_ASCII_COMPACT = 21, 00197 XLCFI_ASCII_COMPACT_REF = 22, 00198 XLCFI_ASCII_COMPACT_MICROSEC = 23, 00199 XLCFI_ASCII_COMPACT_REF_MICROSEC = 24, 00200 XLCFI_ASCII_ENVI = 31, 00201 XLCFI_ASCII_ENVI_REF = 32, 00202 XLCFI_ASCII_ENVI_MICROSEC = 33, 00203 XLCFI_ASCII_ENVI_REF_MICROSEC = 34, 00204 XLCFI_ASCII_CCSDSA = 41, 00205 XLCFI_ASCII_CCSDSA_REF = 42, 00206 XLCFI_ASCII_CCSDSA_MICROSEC = 43, 00207 XLCFI_ASCII_CCSDSA_REF_MICROSEC = 44, 00208 XLCFI_ASCII_CCSDSA_COMPACT = 51, 00209 XLCFI_ASCII_CCSDSA_COMPACT_REF = 52, 00210 XLCFI_ASCII_CCSDSA_COMPACT_MICROSEC = 53, 00211 XLCFI_ASCII_CCSDSA_COMPACT_REF_MICROSEC = 54 00212 } TimeAsciiEnum; 00213 00215 typedef enum // Flag to indicate the grade of a derivative 00216 { 00217 XLCFI_NO_DER = 0, 00218 XLCFI_DER_1ST, 00219 XLCFI_DER_2ND, 00220 XLCFI_ITER_NO_DER, 00221 XLCFI_ITER_DER_1ST, 00222 XLCFI_NO_ITER_NO_DER, 00223 XLCFI_NO_ITER_DER_1ST 00224 } DerivEnum; 00225 00227 typedef enum // It defines a coordinate system 00228 { 00229 XLCFI_CS_UNDEF = 0, 00230 XLCFI_CS_BM2000 = 1, 00231 XLCFI_CS_HM2000, 00232 XLCFI_CS_GM2000, 00233 XLCFI_CS_MOD, 00234 XLCFI_CS_TOD, 00235 XLCFI_CS_PEF, 00236 XLCFI_CS_EF, 00237 XLCFI_CS_LIF, 00238 XLCFI_CS_BM1950, 00239 XLCFI_CS_GALACTIC, 00240 XLCFI_CS_SAT_ACT_REF, 00241 XLCFI_CS_QUASI_MEAN_DATE, 00242 XLCFI_CS_PSE_TRUE_DATE, 00243 XLCFI_CS_TOPOCENTRIC, 00244 XLCFI_CS_SAT_REF, 00245 XLCFI_CS_SAT_REL_REF 00246 } CoordinateSystemEnum; // Updated for AN-509 00247 00249 typedef enum 00250 { 00251 XLCFI_CS_SAT_ORBITAL_REF = 0, 00252 XLCFI_CS_SAT_NOMINAL_ATT, 00253 XLCFI_CS_SAT_ATT, 00254 XLCFI_CS_INSTR_ATT 00255 } XLAttitudeFrameEnum; // AN-509 00256 00258 typedef enum 00259 { 00260 XLCFI_KEPLER_MEAN = 1, 00261 XLCFI_KEPLER_OSC 00262 } KeplerModeEnum; 00263 00265 typedef enum 00266 { 00267 XLCFI_MODE_FLAG_LOCATION = 0, 00268 XLCFI_MODE_FLAG_DIRECTION 00269 } ModeFlagEnum; 00270 00272 typedef enum 00273 { 00274 XLCFI_MERCURY = 1, 00275 XLCFI_VENUS, 00276 XLCFI_EM_BAR, 00277 XLCFI_MARS, 00278 XLCFI_JUPITER, 00279 XLCFI_SATURN, 00280 XLCFI_URANUS, 00281 XLCFI_NEPTUNE 00282 } PlanetEnum; 00283 00285 typedef enum 00286 { 00287 XLCFI_FK4 = 0, 00288 XLCFI_FK5 00289 } StarCatalogEnum; 00290 00292 typedef enum 00293 { 00294 XLCFI_ANGLE_TYPE_TRUE_LAT_TOD = 0, 00295 XLCFI_ANGLE_TYPE_TRUE_LAT_EF, 00296 XLCFI_ANGLE_TYPE_TRUE_LAT_GM2000 00297 } AngleTypeEnum; // AN-736: aligned value with DH and POINTING 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 00328 typedef enum 00329 { 00330 XLCFI_MODEL_SUN_DEFAULT, 00331 XLCFI_MODEL_SUN_TRAVEL_TIME /* AN-517 */ 00332 } ModelSunEnum; 00333 00335 typedef enum 00336 { 00337 XLCFI_MODEL_MOON_DEFAULT 00338 } ModelMoonEnum; 00339 00341 typedef enum 00342 { 00343 XLCFI_MODEL_PLANETS_DEFAULT 00344 } ModelPlanetsEnum; 00345 00347 typedef enum 00348 { 00349 XLCFI_MODEL_STAR_DEFAULT 00350 } ModelStarEnum; 00351 00353 typedef enum 00354 { 00355 XLCFI_MODEL_NUTATION_DEFAULT 00356 } ModelNutationEnum; 00357 00359 typedef enum 00360 { 00361 XLCFI_MODEL_PRECESSION_DEFAULT 00362 } ModelPrecessionEnum; 00363 00365 typedef enum 00366 { 00367 XLCFI_MODEL_CONSTANTS_DEFAULT 00368 } ModelConstantsEnum; 00369 00371 typedef enum 00372 { 00373 XLCFI_MODEL_LIGHT_PROPAGATION_DISABLED, 00374 XLCFI_MODEL_LIGHT_PROPAGATION_RECEIVER, 00375 XLCFI_MODEL_LIGHT_PROPAGATION_TRANSMITTER 00376 } ModelLightPropagationEnum; //AN-553 00377 00379 typedef enum 00380 { 00381 XLCFI_NO_BULLETIN = -1, 00382 XLCFI_BULLETIN_B, 00383 XLCFI_BULLETIN_A, 00384 XLCFI_BULLETIN_B_AND_A 00385 } XLBulletinTypeEnum; 00386 00388 typedef enum 00389 { 00390 XLCFI_FORMULA_ENABLED, 00391 XLCFI_FORMULA_DISABLED 00392 } IersFormulaFlagEnum; 00393 00394 /* AN-518 */ 00396 typedef enum 00397 { 00398 XLCFI_INTERPOL_SLERP 00399 } QuaternionsInterpolationAlgoEnum; 00400 00401 // AN-673 00403 typedef enum 00404 { 00405 XLCFI_CUC_T_FIELD, 00406 XLCFI_CUC_T_AND_P_FIELDS 00407 } CucTimeTypeEnum; 00408 00410 typedef enum 00411 { 00412 XLCFI_EPOCH_CCSDS, 00413 XLCFI_EPOCH_GPS, 00414 XLCFI_EPOCH_USER_DEFINED 00415 } CucEpochTypeEnum; 00416 00417 //------------------------------------------------------ 00418 // DATA STRUCTURES 00419 //------------------------------------------------------ 00420 00422 class XL_DECL TimeInterval 00423 { 00424 public: 00425 long timeRef; 00426 double startTime; 00427 double stopTime; 00428 00430 TimeInterval() : 00431 timeRef(-1), startTime(0.), stopTime(0.) {} 00432 00434 TimeInterval(long ref, double start, double stop) : 00435 timeRef(ref), startTime(start), stopTime(stop) {} 00436 }; 00437 00439 class XL_DECL OrbitInterval 00440 { 00441 public: 00442 long startOrbit; 00443 long stopOrbit; 00444 00446 OrbitInterval() : 00447 startOrbit(0L), stopOrbit(0L) {} 00448 00450 OrbitInterval(long start, long stop) : 00451 startOrbit(start), stopOrbit(stop) {} 00452 }; 00453 00455 class XL_DECL TimeData 00456 { 00457 public: 00458 double taiTime; 00459 double ut1Time; 00460 double tai_utc; 00461 double tai_ut1; 00462 double tai_gps; 00463 }; 00464 00466 class XL_DECL LeapSecondInfo 00467 { 00468 public: 00469 long flag; 00470 double utcTime; 00471 }; 00472 00474 class XL_DECL LaunchInertialFrameConfig 00475 { 00476 public: 00477 long enabledFlag; 00478 double longitude; 00479 double utcTime; 00480 }; 00481 00483 class XL_DECL TimeCorrelationData 00484 { 00485 public: 00486 long iersBulletinType; 00487 long iersFormulaFlag; 00488 long predictionFirstRecord; 00489 PolarMotionFormula polarMotionFormula; 00490 TimeCorrelationFormula timeCorrelationFormula; 00491 std::vector<TimeData> timeCorrVector; 00492 std::vector<PolarMotionParams> polarMotionParams; 00493 LeapSecondInfo leapSecond; 00494 LaunchInertialFrameConfig launchInertialFrameConfig; 00495 00497 TimeCorrelationData() : 00498 iersBulletinType(XLCFI_NO_BULLETIN), 00499 iersFormulaFlag(XLCFI_FORMULA_DISABLED), 00500 predictionFirstRecord(0L), 00501 polarMotionFormula(), 00502 timeCorrelationFormula(), 00503 timeCorrVector(), 00504 polarMotionParams(), 00505 leapSecond(), 00506 launchInertialFrameConfig() {} 00507 00509 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) : 00510 iersBulletinType(bulType), 00511 iersFormulaFlag(iersFormula), 00512 predictionFirstRecord(predFirst), 00513 polarMotionFormula(polarForm), 00514 timeCorrelationFormula(timeForm), 00515 timeCorrVector(timData), 00516 polarMotionParams(polarData), 00517 leapSecond(leapInfo), 00518 launchInertialFrameConfig() {} 00519 00521 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) : 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 launchInertialFrameConfig(launchInertialFrameCfg) {} 00531 }; 00532 00534 class XL_DECL Kepler 00535 { 00536 public: 00537 long mode; 00538 long cs; 00539 double a; 00540 double e; 00541 double i; 00542 double ra; 00543 double w; 00544 double m; 00545 }; 00546 00548 class XL_DECL Topocentric 00549 { 00550 public: 00551 double azim; 00552 double elev; 00553 double range; 00554 double azimDer; 00555 double elevDer; 00556 double rangeDer; 00557 }; 00558 00560 class XL_DECL ModelData 00561 { 00562 public: 00563 long earthModel; 00564 long sunModel; 00565 long moonModel; 00566 long planetModel; 00567 long starModel; 00568 long nutationModel; 00569 long precessionModel; 00570 long constantsModel; 00571 long lightPropagationModel; 00572 00573 /* Earth shape and gravity */ 00574 double re; 00575 double mu; 00576 double j2; 00577 double j3; 00578 double j4; 00579 00580 double majorAxis; 00581 double minorAxis; 00582 double ecc; 00583 double flat; 00584 00585 /* Earth rotation */ 00586 double gcoef0; 00587 double gcoef1; 00588 double gcoef2; 00589 00590 double gcoefSim0; 00591 double gcoefSim1; 00592 double gcoefSim2; 00593 00594 /* constants */ 00595 double au; 00596 }; 00597 00599 class XL_DECL GeoidCalcOutputs 00600 { 00601 public: 00602 double undulation; 00603 }; // AN-425 00604 00606 class XL_DECL QuaternionsInterpolationCfg 00607 { 00608 public: 00609 QuaternionsInterpolationAlgoEnum algo; 00610 }; // AN-518 00611 00613 class XL_DECL CucTimeConfig 00614 { 00615 public: 00616 long cucType; 00617 long epochType; 00618 long timeRef; 00619 double epoch; 00620 long basicTimeUnitNumOctets; 00621 long fractionalTimeUnitNumOctets; 00622 00624 CucTimeConfig() : 00625 cucType(0L), 00626 epochType(0L), 00627 timeRef(0L), 00628 epoch(0.), 00629 basicTimeUnitNumOctets(0L), 00630 fractionalTimeUnitNumOctets(0L) {} 00631 00633 CucTimeConfig(long cucTypeIn, long epochTypeIn, long timeRefIn, double epochIn, long timeUnitsOctetsIn, long fractionTimeUnitOctetsIn) : 00634 cucType(cucTypeIn), 00635 epochType(epochTypeIn), 00636 timeRef(timeRefIn), 00637 epoch(epochIn), 00638 basicTimeUnitNumOctets(timeUnitsOctetsIn), 00639 fractionalTimeUnitNumOctets(fractionTimeUnitOctetsIn) {} 00640 00641 }; // AN-673 00642 00643 } // namespace EECFI 00644 00645 #endif