![]() |
Earth Observation Mission CFI Software Orbit Software User Manual |
![]() |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.3 00003 //-------------------------------------------------------- 00004 00005 //-------------------------------------------------------------------- 00006 // CVS Info: $Id: OrbitData.h,v 1.12 2011/11/23 13:03:24 expcfi Exp $ 00007 //-------------------------------------------------------------------- 00008 00013 00014 #ifndef __EECFI_ORBITDATA__ 00015 #define __EECFI_ORBITDATA__ 00016 00017 //--INCLUDE----------------------------------------------------------- 00018 #include "DataHandlingData.h" 00019 #include "LibData.h" 00020 00021 //--NAMESPACES-------------------------------------------------------- 00022 using namespace std; 00023 00024 namespace EECFI 00025 { 00026 //------------------------------------------------------ 00027 // CONSTANT DATA 00028 //------------------------------------------------------ 00030 #define XOCFI_NUM_CHECK_PARAMS 6 00031 00032 //------------------------------------------------------ 00033 // DATA ENUMERATION 00034 // Enumeration values are defined in an equivalent way to the C library 00035 // except for the prefix that has been changed from XX_ to XXCFI_ 00036 //------------------------------------------------------ 00037 00039 typedef enum 00040 { 00041 XOCFI_ORBIT_EXTRA_DEP_NODAL_PERIOD = 0, 00042 XOCFI_ORBIT_EXTRA_DEP_UTC_CURRENT_ANX, 00043 XOCFI_ORBIT_EXTRA_DEP_ORBIT_NUMBER, 00044 XOCFI_ORBIT_EXTRA_DEP_SEC_SINCE_ANX, 00045 XOCFI_ORBIT_EXTRA_DEP_MEAN_KEPL_A, 00046 XOCFI_ORBIT_EXTRA_DEP_MEAN_KEPL_E, 00047 XOCFI_ORBIT_EXTRA_DEP_MEAN_KEPL_I, 00048 XOCFI_ORBIT_EXTRA_DEP_MEAN_KEPL_RA, 00049 XOCFI_ORBIT_EXTRA_DEP_MEAN_KEPL_W, 00050 XOCFI_ORBIT_EXTRA_DEP_MEAN_KEPL_M, 00051 XOCFI_ORBIT_EXTRA_NUM_DEP_ELEMENTS 00052 } OrbitExtraModelMKODependantEnum; 00053 00055 typedef enum 00056 { 00057 XOCFI_ORBIT_EXTRA_GEOC_LONG = 0, 00058 XOCFI_ORBIT_EXTRA_GEOD_LAT, 00059 XOCFI_ORBIT_EXTRA_GEOD_ALT, 00060 XOCFI_ORBIT_EXTRA_GEOC_LONG_D, 00061 XOCFI_ORBIT_EXTRA_GEOD_LAT_D, 00062 XOCFI_ORBIT_EXTRA_GEOD_ALT_D, 00063 XOCFI_ORBIT_EXTRA_GEOC_LONG_2D, 00064 XOCFI_ORBIT_EXTRA_GEOD_LAT_2D, 00065 XOCFI_ORBIT_EXTRA_GEOD_ALT_2D, 00066 XOCFI_ORBIT_EXTRA_RAD_CUR_PARALLEL_MERIDIAN, 00067 XOCFI_ORBIT_EXTRA_RAD_CUR_ORTHO_MERIDIAN, 00068 XOCFI_ORBIT_EXTRA_RAD_CUR_ALONG_GROUNDTRACK, 00069 XOCFI_ORBIT_EXTRA_NORTH_VEL, 00070 XOCFI_ORBIT_EXTRA_EAST_VEL, 00071 XOCFI_ORBIT_EXTRA_MAG_VEL, 00072 XOCFI_ORBIT_EXTRA_AZ_VEL, 00073 XOCFI_ORBIT_EXTRA_NORTH_ACC, 00074 XOCFI_ORBIT_EXTRA_EAST_ACC, 00075 XOCFI_ORBIT_EXTRA_GROUNDTRACK_ACC, 00076 XOCFI_ORBIT_EXTRA_AZ_ACC, 00077 XOCFI_ORBIT_EXTRA_SAT_ECLIPSE_FLAG, 00078 XOCFI_ORBIT_EXTRA_SZA, 00079 XOCFI_ORBIT_EXTRA_MLST, 00080 XOCFI_ORBIT_EXTRA_TLST, 00081 XOCFI_ORBIT_EXTRA_TRUE_SUN_RA, 00082 XOCFI_ORBIT_EXTRA_TRUE_SUN_DEC, 00083 XOCFI_ORBIT_EXTRA_TRUE_SUN_SEMIDIAM, 00084 XOCFI_ORBIT_EXTRA_MOON_RA, 00085 XOCFI_ORBIT_EXTRA_MOON_DEC, 00086 XOCFI_ORBIT_EXTRA_MOON_SEMI_DIAM, 00087 XOCFI_ORBIT_EXTRA_MOON_AREA_LIT, 00088 XOCFI_ORBIT_EXTRA_OSC_KEPL_A, 00089 XOCFI_ORBIT_EXTRA_OSC_KEPL_E, 00090 XOCFI_ORBIT_EXTRA_OSC_KEPL_I, 00091 XOCFI_ORBIT_EXTRA_OSC_KEPL_RA, 00092 XOCFI_ORBIT_EXTRA_OSC_KEPL_W, 00093 XOCFI_ORBIT_EXTRA_OSC_KEPL_M, 00094 XOCFI_ORBIT_EXTRA_ORBIT_RAD, 00095 XOCFI_ORBIT_EXTRA_RADIAL_ORB_VEL, 00096 XOCFI_ORBIT_EXTRA_TRANS_ORB_VEL, 00097 XOCFI_ORBIT_EXTRA_ORB_VEL_MAG, 00098 XOCFI_ORBIT_EXTRA_RA_SAT, 00099 XOCFI_ORBIT_EXTRA_DEC_SAT, 00100 XOCFI_ORBIT_EXTRA_EARTH_ROTATION_ANGLE, 00101 XOCFI_ORBIT_EXTRA_RA_SAT_D, 00102 XOCFI_ORBIT_EXTRA_RA_SAT_2D, 00103 XOCFI_ORBIT_EXTRA_OSC_TRUE_LAT, 00104 XOCFI_ORBIT_EXTRA_OSC_TRUE_LAT_D, 00105 XOCFI_ORBIT_EXTRA_OSC_TRUE_LAT_2D, 00106 XOCFI_ORBIT_EXTRA_NUM_INDEP_ELEMENTS 00107 00108 } OrbitExtraModelMKOIndependantEnum; 00109 00111 typedef enum 00112 { 00113 // model independant 00114 XOCFI_ORBIT_EXTRA_NO_RESULTS = 0, 00115 XOCFI_ORBIT_EXTRA_GEOLOCATION = 1, 00116 XOCFI_ORBIT_EXTRA_GEOLOCATION_D = 2, 00117 XOCFI_ORBIT_EXTRA_GEOLOCATION_2D = 4, 00118 XOCFI_ORBIT_EXTRA_GEOLOCATION_EXTRA = 8, 00119 XOCFI_ORBIT_EXTRA_EARTH_FIXED_D = 16, 00120 XOCFI_ORBIT_EXTRA_EARTH_FIXED_2D = 32, 00121 XOCFI_ORBIT_EXTRA_SUN = 64, 00122 XOCFI_ORBIT_EXTRA_MOON = 128, 00123 XOCFI_ORBIT_EXTRA_OSCULATING_KEPLER = 256, 00124 XOCFI_ORBIT_EXTRA_INERTIAL_AUX = 512, 00125 // model dependant 00126 XOCFI_ORBIT_EXTRA_DEP_ANX_TIMING = 1024, 00127 XOCFI_ORBIT_EXTRA_DEP_MEAN_KEPLER = 2048, 00128 XOCFI_ORBIT_EXTRA_ALL_RESULTS = 4095 00129 00130 }OrbitExtraChoiceEnum; 00131 00133 typedef enum 00134 { 00135 XOCFI_SAT_DEFAULT = XLCFI_SAT_DEFAULT, 00136 XOCFI_SAT_DEFAULT1 = XLCFI_SAT_DEFAULT1, 00137 XOCFI_SAT_DEFAULT2 = XLCFI_SAT_DEFAULT2, 00138 XOCFI_SAT_DEFAULT3 = XLCFI_SAT_DEFAULT3, 00139 XOCFI_SAT_DEFAULT4 = XLCFI_SAT_DEFAULT4, 00140 XOCFI_SAT_DEFAULT5 = XLCFI_SAT_DEFAULT5, 00141 XOCFI_SAT_DEFAULT6 = XLCFI_SAT_DEFAULT6, 00142 XOCFI_SAT_DEFAULT7 = XLCFI_SAT_DEFAULT7, 00143 XOCFI_SAT_DEFAULT8 = XLCFI_SAT_DEFAULT8, 00144 XOCFI_SAT_DEFAULT9 = XLCFI_SAT_DEFAULT9, 00145 XOCFI_SAT_ERS1 = XLCFI_SAT_ERS1, 00146 XOCFI_SAT_ERS2 = XLCFI_SAT_ERS2, 00147 XOCFI_SAT_ENVISAT = XLCFI_SAT_ENVISAT, 00148 XOCFI_SAT_METOP1 = XLCFI_SAT_METOP1, 00149 XOCFI_SAT_METOP2 = XLCFI_SAT_METOP2, 00150 XOCFI_SAT_METOP3 = XLCFI_SAT_METOP3, 00151 XOCFI_SAT_CRYOSAT = XLCFI_SAT_CRYOSAT, 00152 XOCFI_SAT_ADM = XLCFI_SAT_ADM, 00153 XOCFI_SAT_GOCE = XLCFI_SAT_GOCE, 00154 XOCFI_SAT_SMOS = XLCFI_SAT_SMOS, 00155 XOCFI_SAT_TERRASAR = XLCFI_SAT_TERRASAR, 00156 XOCFI_SAT_EARTHCARE = XLCFI_SAT_EARTHCARE, 00157 XOCFI_SAT_SWARM_A = XLCFI_SAT_SWARM_A, 00158 XOCFI_SAT_SWARM_B = XLCFI_SAT_SWARM_B, 00159 XOCFI_SAT_SWARM_C = XLCFI_SAT_SWARM_C, 00160 XOCFI_SAT_SENTINEL_1A = XLCFI_SAT_SENTINEL_1A, 00161 XOCFI_SAT_SENTINEL_1B = XLCFI_SAT_SENTINEL_1B, 00162 XOCFI_SAT_SENTINEL_2 = XLCFI_SAT_SENTINEL_2, 00163 XOCFI_SAT_SENTINEL_3 = XLCFI_SAT_SENTINEL_3, 00164 XOCFI_SAT_SEOSAT = XLCFI_SAT_SEOSAT, 00165 XOCFI_SAT_SENTINEL_1C = XLCFI_SAT_SENTINEL_1C, 00166 XOCFI_SAT_SENTINEL_2A = XLCFI_SAT_SENTINEL_2A, 00167 XOCFI_SAT_SENTINEL_2B = XLCFI_SAT_SENTINEL_2B, 00168 XOCFI_SAT_SENTINEL_2C = XLCFI_SAT_SENTINEL_2C, 00169 XOCFI_SAT_SENTINEL_3A = XLCFI_SAT_SENTINEL_3A, 00170 XOCFI_SAT_SENTINEL_3B = XLCFI_SAT_SENTINEL_3B, 00171 XOCFI_SAT_SENTINEL_3C = XLCFI_SAT_SENTINEL_3C, 00172 XOCFI_SAT_GENERIC = XLCFI_SAT_GENERIC 00173 } SatIdOrbitEnum; 00174 00176 typedef enum 00177 { 00178 XOCFI_TIME_UNDEF = XLCFI_TIME_UNDEF, 00179 XOCFI_TIME_TAI = XLCFI_TIME_TAI, 00180 XOCFI_TIME_UTC = XLCFI_TIME_UTC, 00181 XOCFI_TIME_UT1 = XLCFI_TIME_UT1, 00182 XOCFI_TIME_GPS = XLCFI_TIME_GPS 00183 } TimeRefOrbitEnum; 00184 00186 typedef enum 00187 { 00188 XOCFI_TIME_REF_OF_TAI = XDCFI_TIME_REF_OF_TAI, 00189 XOCFI_TIME_REF_OF_UTC = XDCFI_TIME_REF_OF_UTC, 00190 XOCFI_TIME_REF_OF_UT1 = XDCFI_TIME_REF_OF_UT1, 00191 XOCFI_TIME_REF_OF_GPS = XDCFI_TIME_REF_OF_GPS 00192 } TimeRefOfOrbitEnum; 00193 00195 typedef enum 00196 { 00197 XOCFI_SEL_FILE = 0, 00198 XOCFI_SEL_TIME, 00199 XOCFI_SEL_ORBIT, 00200 XOCFI_SEL_DEFAULT 00201 } InitModeEnum; 00202 00204 typedef enum 00205 { 00206 XOCFI_ORBIT_INIT_UNKNOWN_MODE = -1, 00207 XOCFI_ORBIT_INIT_AUTO = XDCFI_AUTO, 00208 XOCFI_ORBIT_INIT_ORBIT_CHANGE_MODE = XDCFI_ORBIT_CHANGE, 00209 XOCFI_ORBIT_INIT_STATE_VECTOR_MODE = XDCFI_STATE_VECTOR, 00210 XOCFI_ORBIT_INIT_OSF_MODE = XDCFI_OSF_TYPE, 00211 XOCFI_ORBIT_INIT_POF_MODE = XDCFI_POF_TYPE, 00212 XOCFI_ORBIT_INIT_ROF_MODE = XDCFI_ROF_TYPE, 00213 XOCFI_ORBIT_INIT_DORIS_MODE = XDCFI_DORIS_TYPE, 00214 XOCFI_ORBIT_INIT_POF_N_DORIS_MODE = XDCFI_POF_N_DORIS_TYPE, 00215 XOCFI_ORBIT_INIT_OEF_OSF_MODE = XDCFI_OEF_OSF_TYPE, 00216 XOCFI_ORBIT_INIT_OEF_POF_MODE = XDCFI_OEF_POF_TYPE, 00217 XOCFI_ORBIT_INIT_TLE_MODE = XDCFI_TLE_TYPE, 00218 XOCFI_ORBIT_INIT_STATE_VECTOR_PRECISE_MODE, 00219 XOCFI_ORBIT_INIT_POF_PRECISE_MODE, 00220 XOCFI_ORBIT_INIT_ROF_PRECISE_MODE, 00221 XOCFI_ORBIT_INIT_DORIS_PRECISE_MODE, 00222 XOCFI_ORBIT_INIT_OEF_POF_PRECISE_MODE, 00223 XOCFI_ORBIT_INIT_POF_N_DORIS_PRECISE_MODE, 00224 XOCFI_ORBIT_INIT_MAX_VALUE 00225 00226 } OrbitInitModeEnum; 00227 00229 typedef enum 00230 { 00231 XOCFI_INTERPOL_MODEL_DEFAULT = 0 00232 } InterpolModelEnum; 00233 00235 typedef enum 00236 { 00237 XOCFI_PROPAG_MODEL_MEAN_KEPL = 0, 00238 XOCFI_PROPAG_MODEL_SPOT = 1, 00239 XOCFI_PROPAG_MODEL_TLE = 2, 00240 XOCFI_PROPAG_MODEL_PRECISE = 3, 00241 XOCFI_PROPAG_MODEL_AUTO = 10, 00242 XOCFI_PROPAG_MODEL_DOUBLE = 100 00243 } PropagModelEnum; 00244 00246 typedef enum 00247 { 00248 XOCFI_NOSUNSYNC_DRIFT = 0, 00249 XOCFI_NOSUNSYNC_INCLINATION, 00250 XOCFI_NOSUNSYNC_DRIFT_NONLINEAR, 00251 XOCFI_NOSUNSYNC_USE_SIM_MODEL = 10 00252 } NoSunSychronousModeEnum; 00253 00255 typedef enum 00256 { 00257 XOCFI_OSV_PRECISE_NO = 1, 00258 XOCFI_OSV_PRECISE_MINUTE, 00259 XOCFI_OSV_PRECISE_TEN_SECONDS 00260 00261 } OsvPreciseEnum; 00262 00264 typedef enum 00265 { 00266 XOCFI_REF_FILETYPE_OSF = 1, 00267 XOCFI_REF_FILETYPE_OEF_OSF, 00268 XOCFI_REF_FILETYPE_POF, 00269 XOCFI_REF_FILETYPE_OEF_POF, 00270 XOCFI_REF_FILETYPE_DORIS_NAV, 00271 XOCFI_REF_FILETYPE_ROF, 00272 XOCFI_REF_FILETYPE_DORIS_PREM, 00273 XOCFI_REF_FILETYPE_DORIS_PREC 00274 00275 } RefFiletypeEnum; 00276 00278 typedef enum 00279 { 00280 XOCFI_NO_PHASE_INCREMENT = 0, 00281 XOCFI_PHASE_INCREMENT = 1 00282 } GenOsfPhaseIncrementEnum; 00283 00285 typedef enum 00286 { 00287 XOCFI_FIT_TLE = 0, 00288 XOCFI_ONE_TLE_PER_OSV 00289 } TLEFitModeEnum; 00290 00292 typedef enum 00293 { 00294 XOCFI_SEARCH_FORWARD = 1, 00295 XOCFI_SEARCH_BACKWARD = -1 00296 } GenOsfSearchDirectionEnum; 00297 00299 typedef enum 00300 { 00301 XOCFI_DEFAULT_VALUES = XDCFI_DEFAULT_VALUES, 00302 XOCFI_USER_VALUES = XDCFI_USER_VALUES 00303 } OrbitPrecisePropagUserFlagEnum; 00304 00306 typedef enum 00307 { 00308 XOCFI_NOT_SELECT = XDCFI_NOT_SELECT, 00309 XOCFI_SELECT = XDCFI_SELECT 00310 } OrbitPrecisePropagSelectionFlagEnum; 00311 00313 typedef enum 00314 { 00315 XOCFI_SGA_USE_PARAMETERS = XDCFI_SGA_USE_PARAMETERS, 00316 XOCFI_SGA_READ_VALUES_FROM_FILE = XDCFI_SGA_READ_VALUES_FROM_FILE 00317 } OrbitPrecisePropagSgaFlagEnum; 00318 00319 //------------------------------------------------------ 00320 // DATA STRUCTURES 00321 //------------------------------------------------------ 00322 00324 class ANXExtra 00325 { 00326 public: 00327 long absOrbit; 00328 double tAnx; 00329 double tNod; 00330 00332 ANXExtra() 00333 { 00334 absOrbit = -1; 00335 tAnx = -1; 00336 tNod = -1; 00337 }; 00338 00340 ANXExtra( long absOrb, double timeAnx, double timeNod ) 00341 { 00342 absOrbit = absOrb; 00343 tAnx = timeAnx; 00344 tNod = timeNod; 00345 } 00346 00347 }; 00348 00350 class ValidityTime 00351 { 00352 public: 00353 long timeRef; 00354 double start; 00355 double stop; 00356 00358 ValidityTime() 00359 { 00360 timeRef = -1; 00361 start = -1; 00362 stop = -1; 00363 } 00364 00366 ValidityTime( long timeReference, double startVal, double stopVal ) 00367 { 00368 timeRef = timeReference; 00369 start = startVal; 00370 stop = stopVal; 00371 } 00372 }; 00373 00375 class OrbitInfo 00376 { 00377 public: 00378 long absOrbit; 00379 long relOrbit; 00380 long cycle; 00381 long phase; 00382 00384 OrbitInfo() 00385 { 00386 absOrbit = -1; 00387 relOrbit = -1; 00388 cycle = -1; 00389 phase = -1; 00390 } 00391 00393 OrbitInfo( long absoluteOrbit, long relativeOrbit, long cycleOrbit, 00394 long phaseOrbit) 00395 { 00396 absOrbit = absoluteOrbit; 00397 relOrbit = relativeOrbit; 00398 cycle = cycleOrbit; 00399 phase = phaseOrbit; 00400 } 00401 00402 }; 00403 00405 class StateVectorInfo 00406 { 00407 public: 00408 double pos[3]; 00409 double vel[3]; 00410 double acc[3]; 00411 00413 StateVectorInfo() 00414 { 00415 pos[0] = 0.; vel[1] = 0.; acc[2] = 0.; 00416 pos[0] = 0.; vel[1] = 0.; acc[2] = 0.; 00417 pos[0] = 0.; vel[1] = 0.; acc[2] = 0.; 00418 } 00419 00421 StateVectorInfo( double *posIn, double *velIn, double *accIn ) 00422 { 00423 pos[0] = posIn[0]; vel[1] = velIn[1]; acc[2] = accIn[2]; 00424 pos[0] = posIn[0]; vel[1] = velIn[1]; acc[2] = accIn[2]; 00425 pos[0] = posIn[0]; vel[1] = velIn[1]; acc[2] = accIn[2]; 00426 } 00427 }; 00428 00430 class StateVectorExtraInfo 00431 { 00432 public: 00433 double modelDep[XOCFI_ORBIT_EXTRA_NUM_DEP_ELEMENTS]; 00434 double modelIndep[XOCFI_ORBIT_EXTRA_NUM_INDEP_ELEMENTS]; 00435 00437 StateVectorExtraInfo() 00438 { 00439 int i; 00440 for ( i = 0 ; i < XOCFI_ORBIT_EXTRA_NUM_DEP_ELEMENTS ; i++ ) 00441 modelDep[i] = 0.; 00442 for ( i = 0 ; i < XOCFI_ORBIT_EXTRA_NUM_INDEP_ELEMENTS ; i++ ) 00443 modelIndep[i] = 0.; 00444 } 00445 00447 StateVectorExtraInfo( double *model, double *extra ) 00448 { 00449 int i; 00450 for ( i = 0 ; i < XOCFI_ORBIT_EXTRA_NUM_DEP_ELEMENTS ; i++ ) 00451 modelDep[i] = model[i]; 00452 for ( i = 0 ; i < XOCFI_ORBIT_EXTRA_NUM_INDEP_ELEMENTS ; i++ ) 00453 modelIndep[i] = extra[i]; 00454 } 00455 }; 00456 00458 class AnxInfo 00459 { 00460 public: 00461 double anxTai; 00462 double anxUtc; 00463 double anxUt1; 00464 double anxPos[3]; 00465 double anxVel[3]; 00466 double kepl[6]; 00467 double tNod; 00468 }; 00469 00471 class RefOrbitInfo 00472 { 00473 public: 00474 long driftMode; 00475 double inclination; 00476 long repCycle; 00477 long cycleLength; 00478 double AnxLong; 00479 double mlst; 00480 double mlstDrift; 00481 MlstNonlinearDrift mlstNonlinearDrift; 00482 }; 00483 00485 class OsfRecords 00486 { 00487 public: 00488 OrbitInfo missionInfo; 00489 RefOrbitInfo refOrbitinfo; 00490 AnxInfo anxInfo; 00491 }; 00492 00494 class OrbitalInfo 00495 { 00496 public: 00497 long absOrbit; 00498 long repCycle; 00499 long cycLength; 00500 double mlstDrift; 00501 double mlst; 00502 double phasing; 00503 double utcAnx; 00504 double posAnx[3]; 00505 double velAnx[3]; 00506 double meanKep[6]; 00507 double oscKep[6]; 00508 double nodalPeriod; 00509 }; 00510 00511 } // closing namespace 00512 00513 #endif