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