Earth Observation Mission CFI Software Lib Software User Manual |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.6 00003 //-------------------------------------------------------- 00004 00005 //-------------------------------------------------------------------- 00006 // CVS Info: $Id: LibData.h,v 1.26 2013-09-18 07:43:55 expcfi Exp $ 00007 //-------------------------------------------------------------------- 00008 00013 00014 #ifndef __EECFI_LIBDATA__ 00015 #define __EECFI_LIBDATA__ 00016 00017 //--INCLUDE----------------------------------------------------------- 00018 #include <vector> 00019 #include "DataHandlingData.h" 00020 00021 //--NAMESPACES-------------------------------------------------------- 00022 using namespace std; 00023 00024 namespace EECFI 00025 { 00026 00027 //------------------------------------------------------ 00028 // CONSTANTS 00029 //------------------------------------------------------ 00031 #define MCFI_PI 3.14159265358979323846 00032 00033 //------------------------------------------------------ 00034 // DATA ENUMERATION 00035 // Enumeration values are defined in an equivalent way to the C library 00036 // except for the prefix that has been changed from XX_ to XXCFI_ 00037 //------------------------------------------------------ 00038 00040 typedef enum 00041 { 00042 XLCFI_SAT_DEFAULT = 0, 00043 XLCFI_SAT_DEFAULT1 = 1, 00044 XLCFI_SAT_DEFAULT2 = 2, 00045 XLCFI_SAT_DEFAULT3 = 3, 00046 XLCFI_SAT_DEFAULT4 = 4, 00047 XLCFI_SAT_DEFAULT5 = 5, 00048 XLCFI_SAT_DEFAULT6 = 6, 00049 XLCFI_SAT_DEFAULT7 = 7, 00050 XLCFI_SAT_DEFAULT8 = 8, 00051 XLCFI_SAT_DEFAULT9 = 9, 00052 XLCFI_SAT_ERS1 = 11, 00053 XLCFI_SAT_ERS2 = 12, 00054 XLCFI_SAT_ENVISAT = 21, 00055 XLCFI_SAT_METOP1 = 31, 00056 XLCFI_SAT_METOP2 = 32, 00057 XLCFI_SAT_METOP3 = 33, 00058 XLCFI_SAT_CRYOSAT = 41, 00059 XLCFI_SAT_ADM = 51, 00060 XLCFI_SAT_GOCE = 61, 00061 XLCFI_SAT_SMOS = 71, 00062 XLCFI_SAT_TERRASAR = 81, 00063 XLCFI_SAT_EARTHCARE = 91, 00064 XLCFI_SAT_SWARM_A = 101, 00065 XLCFI_SAT_SWARM_B = 102, 00066 XLCFI_SAT_SWARM_C = 103, 00067 XLCFI_SAT_SENTINEL_1A = 110, 00068 XLCFI_SAT_SENTINEL_1B = 111, 00069 XLCFI_SAT_SENTINEL_2 = 112, 00070 XLCFI_SAT_SENTINEL_3 = 113, 00071 XLCFI_SAT_SEOSAT = 120, 00072 XLCFI_SAT_SENTINEL_1C = 125, 00073 XLCFI_SAT_SENTINEL_2A = 126, 00074 XLCFI_SAT_SENTINEL_2B = 127, 00075 XLCFI_SAT_SENTINEL_2C = 128, 00076 XLCFI_SAT_SENTINEL_3A = 129, 00077 XLCFI_SAT_SENTINEL_3B = 130, 00078 XLCFI_SAT_SENTINEL_3C = 131, 00079 XLCFI_SAT_GENERIC = 200, 00080 // AN-353 00081 XLCFI_SAT_GENERIC_GEO = 300, 00082 XLCFI_SAT_MTG = 301 00083 // END AN-353 00084 } SatIdEnum; 00085 00086 00088 typedef enum 00089 { 00090 XLCFI_TIMEMOD_AUTO = -2, 00091 XLCFI_TIMEMOD_USER = -1, 00092 XLCFI_TIMEMOD_NONE = 0, 00093 XLCFI_TIMEMOD_IERS_B_PREDICTED = 1, 00094 XLCFI_TIMEMOD_IERS_B_RESTITUTED, 00095 XLCFI_TIMEMOD_FOS_PREDICTED, 00096 XLCFI_TIMEMOD_FOS_RESTITUTED, 00097 XLCFI_TIMEMOD_DORIS_PRELIMINARY, 00098 XLCFI_TIMEMOD_DORIS_PRECISE, 00099 XLCFI_TIMEMOD_DORIS_NAVIGATOR, 00100 XLCFI_TIMEMOD_OSF, 00101 XLCFI_TIMEMOD_IERS_A_ONLY_PREDICTION, 00102 XLCFI_TIMEMOD_IERS_A_PREDICTION_AND_FORMULA, 00103 XLCFI_TIMEMOD_IERS_B_AND_A_ONLY_PREDICTION 00104 } TimeModelEnum; 00105 00106 00108 typedef enum 00109 { 00110 XLCFI_TIME_UNDEF = -1, 00111 XLCFI_TIME_TAI, 00112 XLCFI_TIME_UTC, 00113 XLCFI_TIME_UT1, 00114 XLCFI_TIME_GPS 00115 } XLTimeRefEnum; 00116 00117 00119 typedef enum 00120 { 00121 XLCFI_PROC = 0 00122 } TimeProcEnum; 00123 00125 typedef enum 00126 { 00127 XLCFI_TRANS_STD = 0, 00128 XLCFI_TRANS_ENVI_GS = 11, 00129 XLCFI_TRANS_CRYO_GS = 21, 00130 XLCFI_TRANS_CRYO_TM = 22, 00131 XLCFI_TRANS_CRYO_TM_SIRAL = 23, 00132 XLCFI_TRANS_SMOS_TM = 31, 00133 XLCFI_TRANS_GENERIC_GPS_SEC = 41, 00134 XLCFI_TRANS_GENERIC_GPS_WEEK = 42 00135 } TimeTransEnum; 00136 00137 00156 typedef enum 00157 { 00158 XLCFI_ASCII_UNDEF = -1, 00159 XLCFI_ASCII_STD = 11, 00160 XLCFI_ASCII_STD_REF = 12, 00161 XLCFI_ASCII_STD_MICROSEC = 13, 00162 XLCFI_ASCII_STD_REF_MICROSEC = 14, 00163 XLCFI_ASCII_COMPACT = 21, 00164 XLCFI_ASCII_COMPACT_REF = 22, 00165 XLCFI_ASCII_COMPACT_MICROSEC = 23, 00166 XLCFI_ASCII_COMPACT_REF_MICROSEC = 24, 00167 XLCFI_ASCII_ENVI = 31, 00168 XLCFI_ASCII_ENVI_REF = 32, 00169 XLCFI_ASCII_ENVI_MICROSEC = 33, 00170 XLCFI_ASCII_ENVI_REF_MICROSEC = 34, 00171 XLCFI_ASCII_CCSDSA = 41, 00172 XLCFI_ASCII_CCSDSA_REF = 42, 00173 XLCFI_ASCII_CCSDSA_MICROSEC = 43, 00174 XLCFI_ASCII_CCSDSA_REF_MICROSEC = 44, 00175 XLCFI_ASCII_CCSDSA_COMPACT = 51, 00176 XLCFI_ASCII_CCSDSA_COMPACT_REF = 52, 00177 XLCFI_ASCII_CCSDSA_COMPACT_MICROSEC = 53, 00178 XLCFI_ASCII_CCSDSA_COMPACT_REF_MICROSEC = 54 00179 } TimeAsciiEnum; 00180 00181 00183 typedef enum // Flag to indicate the grade of a derivative 00184 { 00185 XLCFI_NO_DER = 0, 00186 XLCFI_DER_1ST, 00187 XLCFI_DER_2ND, 00188 XLCFI_ITER_NO_DER, 00189 XLCFI_ITER_DER_1ST, 00190 XLCFI_NO_ITER_NO_DER, 00191 XLCFI_NO_ITER_DER_1ST, 00192 } DerivEnum; 00193 00194 00196 typedef enum // It defines a coordinate system 00197 { 00198 XLCFI_CS_UNDEF = 0, 00199 XLCFI_CS_BM2000 = 1, 00200 XLCFI_CS_HM2000, 00201 XLCFI_CS_GM2000, 00202 XLCFI_CS_MOD, 00203 XLCFI_CS_TOD, 00204 XLCFI_CS_PEF, 00205 XLCFI_CS_EF, 00206 XLCFI_CS_BM1950, 00207 XLCFI_CS_GALACTIC, 00208 XLCFI_CS_SAT_ACT_REF, 00209 XLCFI_CS_QUASI_MEAN_DATE, 00210 XLCFI_CS_PSE_TRUE_DATE, 00211 XLCFI_CS_TOPOCENTRIC, 00212 XLCFI_CS_SAT_REF, 00213 XLCFI_CS_SAT_REL_REF 00214 } CoordinateSystemEnum; // Updated for AN-509 00215 00217 typedef enum 00218 { 00219 XLCFI_CS_SAT_ORBITAL_REF = 0, 00220 XLCFI_CS_SAT_NOMINAL_ATT, 00221 XLCFI_CS_SAT_ATT, 00222 XLCFI_CS_INSTR_ATT 00223 } XLAttitudeFrameEnum; // AN-509 00224 00226 typedef enum 00227 { 00228 XLCFI_KEPLER_MEAN = 1, 00229 XLCFI_KEPLER_OSC 00230 } KeplerModeEnum; 00231 00233 typedef enum 00234 { 00235 XLCFI_MODE_FLAG_LOCATION = 0, 00236 XLCFI_MODE_FLAG_DIRECTION 00237 } ModeFlagEnum; 00238 00240 typedef enum 00241 { 00242 XLCFI_MERCURY = 1, 00243 XLCFI_VENUS, 00244 XLCFI_EM_BAR, 00245 XLCFI_MARS, 00246 XLCFI_JUPITER, 00247 XLCFI_SATURN, 00248 XLCFI_URANUS, 00249 XLCFI_NEPTUNE 00250 } PlanetEnum; 00251 00253 typedef enum 00254 { 00255 XLCFI_FK4 = 0, 00256 XLCFI_FK5 00257 } StarCatalogEnum; 00258 00259 00261 typedef enum 00262 { 00263 XLCFI_ANGLE_TYPE_TRUE_LAT_TOD = 1, 00264 XLCFI_ANGLE_TYPE_MEAN_LAT_TOD, 00265 XLCFI_ANGLE_TYPE_TRUE_LAT_GM2000, 00266 XLCFI_ANGLE_TYPE_TRUE_LAT_EF 00267 } AngleTypeEnum; 00268 00270 typedef enum 00271 { 00272 XLCFI_MODEL_DEFAULT, 00273 XLCFI_MODEL_CONFIG 00274 } ModelSetsEnum; 00275 00277 typedef enum 00278 { 00279 XLCFI_MODEL_TYPE_EARTH, 00280 XLCFI_MODEL_TYPE_SUN, 00281 XLCFI_MODEL_TYPE_MOON, 00282 XLCFI_MODEL_TYPE_PLANET, 00283 XLCFI_MODEL_TYPE_STAR, 00284 XLCFI_MODEL_TYPE_NUTATION, 00285 XLCFI_MODEL_TYPE_PRECESSION, 00286 XLCFI_MODEL_TYPE_CONSTANTS, 00287 XLCFI_NUM_MODEL_TYPES_ENUM 00288 } ModelTypesEnum; 00289 00291 typedef enum 00292 { 00293 XLCFI_MODEL_EARTH_DEFAULT 00294 } ModelEarthEnum; 00295 00296 00298 typedef enum 00299 { 00300 XLCFI_MODEL_SUN_DEFAULT 00301 } ModelSunEnum; 00302 00303 00305 typedef enum 00306 { 00307 XLCFI_MODEL_MOON_DEFAULT 00308 } ModelMoonEnum; 00309 00310 00312 typedef enum 00313 { 00314 XLCFI_MODEL_PLANETS_DEFAULT 00315 } ModelPlanetsEnum; 00316 00317 00319 typedef enum 00320 { 00321 XLCFI_MODEL_STAR_DEFAULT 00322 } ModelStarEnum; 00323 00324 00326 typedef enum 00327 { 00328 XLCFI_MODEL_NUTATION_DEFAULT 00329 } ModelNutationEnum; 00330 00331 00333 typedef enum 00334 { 00335 XLCFI_MODEL_PRECESSION_DEFAULT 00336 } ModelPrecessionEnum; 00337 00339 typedef enum 00340 { 00341 XLCFI_MODEL_CONSTANTS_DEFAULT 00342 } ModelConstantsEnum; 00343 00345 typedef enum 00346 { 00347 XLCFI_NO_BULLETIN = -1, 00348 XLCFI_BULLETIN_B, 00349 XLCFI_BULLETIN_A, 00350 XLCFI_BULLETIN_B_AND_A 00351 } XLBulletinTypeEnum; 00352 00354 typedef enum 00355 { 00356 XLCFI_FORMULA_ENABLED, 00357 XLCFI_FORMULA_DISABLED 00358 } IersFormulaFlagEnum; 00359 00360 //------------------------------------------------------ 00361 // DATA STRUCTURES 00362 //------------------------------------------------------ 00363 00365 class TimeInterval 00366 { 00367 public: 00368 long timeRef; 00369 double startTime; 00370 double stopTime; 00371 00373 TimeInterval() 00374 {timeRef = -1, startTime = 0, stopTime = 0;}; 00375 00377 TimeInterval(long ref, double start, double stop) 00378 {timeRef = ref, startTime = start, stopTime = stop;}; 00379 }; 00380 00382 class OrbitInterval 00383 { 00384 public: 00385 long startOrbit; 00386 long stopOrbit; 00387 00389 OrbitInterval() {startOrbit = 0, stopOrbit = 0;}; 00390 00392 OrbitInterval(long start, long stop) 00393 {startOrbit = start, stopOrbit = stop;}; 00394 }; 00395 00397 class TimeData 00398 { 00399 public: 00400 double taiTime; 00401 double ut1Time; 00402 double tai_utc; 00403 double tai_ut1; 00404 double tai_gps; 00405 }; 00406 00408 class LeapSecondInfo 00409 { 00410 public: 00411 long flag; 00412 double utcTime; 00413 }; 00414 00416 class TimeCorrelationData 00417 { 00418 public: 00419 long iersBulletinType; 00420 long iersFormulaFlag; 00421 long predictionFirstRecord; 00422 PolarMotionFormula polarMotionFormula; 00423 TimeCorrelationFormula timeCorrelationFormula; 00424 vector<TimeData> timeCorrVector; 00425 vector<PolarMotionParams> polarMotionParams; 00426 LeapSecondInfo leapSecond; 00427 00429 TimeCorrelationData() 00430 { 00431 iersBulletinType = XLCFI_NO_BULLETIN; 00432 iersFormulaFlag = XLCFI_FORMULA_DISABLED; 00433 predictionFirstRecord = 0L; 00434 } 00435 00437 TimeCorrelationData(long bulType, long iersFormula, long predFirst, 00438 PolarMotionFormula &polarForm, TimeCorrelationFormula &timeForm, 00439 vector<TimeData> &timData, vector<PolarMotionParams> &polarData, 00440 LeapSecondInfo &leapInfo ) 00441 { 00442 iersBulletinType = bulType; 00443 iersFormulaFlag = iersFormula; 00444 predictionFirstRecord = predFirst; 00445 polarMotionFormula = polarForm; 00446 timeCorrelationFormula = timeForm; 00447 timeCorrVector = timData; 00448 polarMotionParams = polarData; 00449 leapSecond = leapInfo; 00450 } 00451 }; 00452 00454 class Kepler 00455 { 00456 public: 00457 long mode; 00458 long cs; 00459 double a; 00460 double e; 00461 double i; 00462 double ra; 00463 double w; 00464 double m; 00465 }; 00466 00468 class Topocentric 00469 { 00470 public: 00471 double azim; 00472 double elev; 00473 double range; 00474 double azimDer; 00475 double elevDer; 00476 double rangeDer; 00477 }; 00478 00480 class ModelData 00481 { 00482 public: 00483 long earthModel; 00484 long sunModel; 00485 long moonModel; 00486 long planetModel; 00487 long starModel; 00488 long nutationModel; 00489 long precessionModel; 00490 long constantsModel; 00491 00492 /* Earth shape and gravity */ 00493 double re; 00494 double mu; 00495 double j2; 00496 double j3; 00497 double j4; 00498 00499 double majorAxis; 00500 double minorAxis; 00501 double ecc; 00502 double flat; 00503 00504 /* Earth rotation */ 00505 double gcoef0; 00506 double gcoef1; 00507 double gcoef2; 00508 00509 double gcoefSim0; 00510 double gcoefSim1; 00511 double gcoefSim2; 00512 00513 /* constants */ 00514 double au; 00515 }; 00516 00518 class GeoidCalcOutputs 00519 { 00520 public: 00521 double undulation; 00522 }; // AN-425 00523 00524 } // closing namespace 00525 00526 #endif