![]() |
Earth Observation Mission CFI Software Pointing Software User Manual |
![]() |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.2 00003 //-------------------------------------------------------- 00004 00005 //-------------------------------------------------------------------- 00006 // CVS Info: $Id: PointingData.h,v 1.9 2010/03/17 16:00:04 rucc Exp $ 00007 //-------------------------------------------------------------------- 00008 00013 00014 #ifndef __EECFI_POINTINGDATA__ 00015 #define __EECFI_POINTINGDATA__ 00016 00017 //--INCLUDE----------------------------------------------------------- 00018 #include "DataHandlingData.h" 00019 #include "LibData.h" 00020 #include "StarTracker.h" 00021 #include "AttRec.h" 00022 #include "Coord.h" 00023 #include "StateVector.h" 00024 00025 //--NAMESPACES-------------------------------------------------------- 00026 using namespace std; 00027 00028 namespace EECFI 00029 { 00030 //------------------------------------------------------ 00031 // CONSTANT DATA 00032 //------------------------------------------------------ 00033 00034 //------------------------------------------------------ 00035 // DATA ENUMERATION 00036 // Enumeration values are defined in an equivalent way to the C library 00037 // except for the prefix that has been changed from XX_ to XXCFI_ 00038 //------------------------------------------------------ 00039 00041 typedef enum 00042 { 00043 XPCFI_AOCS_GPM = 0, 00044 XPCFI_AOCS_LNP, 00045 XPCFI_AOCS_YSM, 00046 XPCFI_AOCS_ZDOPPLER 00047 } SatNominalAttAocsModeEnum; 00048 00049 typedef enum 00050 { 00051 XPCFI_MODEL_GENERIC = 0, 00052 XPCFI_MODEL_ENVISAT, 00053 XPCFI_MODEL_CRYOSAT, 00054 XPCFI_MODEL_ADM, 00055 XPCFI_MODEL_SENTINEL1 00056 } SatNominalAttModelEnum; 00057 00058 typedef enum 00059 { 00060 XPCFI_ANGLE_TYPE_TRUE_LAT_TOD = 0, 00061 XPCFI_ANGLE_TYPE_MEAN_LAT_TOD 00062 } PointingAngleTypeEnum; 00063 00065 typedef enum 00066 { 00067 XPCFI_SEL_FILE = 0, 00068 XPCFI_SEL_TIME, 00069 XPCFI_SEL_ORBIT, 00070 XPCFI_SEL_DEFAULT 00071 } PointingInitModeEnum; 00072 00074 typedef enum 00075 { 00076 XPCFI_SAT_NOMINAL_ATT_INIT_MODE = 0, 00077 XPCFI_SAT_NOMINAL_ATT_INIT_MODEL_MODE, 00078 XPCFI_SAT_NOMINAL_ATT_INIT_HARMONIC_MODE, 00079 XPCFI_SAT_NOMINAL_ATT_INIT_FILE_MODE 00080 00081 } SatNominalAttModeEnum; 00082 00084 typedef enum 00085 { 00086 XPCFI_SAT_ATT_ANGLE_INIT_MODE = 0, 00087 XPCFI_SAT_ATT_MATRIX_INIT_MODE, 00088 XPCFI_SAT_ATT_INIT_HARMONIC_MODE, 00089 XPCFI_SAT_ATT_INIT_FILE_MODE 00090 00091 } SatAttModeEnum; 00092 00094 typedef enum 00095 { 00096 XPCFI_INSTR_ATT_ANGLE_INIT_MODE = 0, 00097 XPCFI_INSTR_ATT_MATRIX_INIT_MODE, 00098 XPCFI_INSTR_ATT_INIT_HARMONIC_MODE, 00099 XPCFI_INSTR_ATT_INIT_FILE_MODE 00100 00101 } InstrAttModeEnum; 00102 00104 typedef enum 00105 { 00106 XPCFI_ATTITUDE_INIT_NO_DATA_MODE = 0, 00107 XPCFI_ATTITUDE_COMPUTE_MODE, 00108 XPCFI_ATTITUDE_USER_SET_MODE 00109 00110 } AttitudeModeEnum; 00111 00113 typedef enum 00114 { 00115 XPCFI_ATTITUDE_GENERIC_FILE_MODEL = 0, 00116 XPCFI_ATTITUDE_STAR_TRACKER_FILE_MODEL, 00117 XPCFI_ATTITUDE_QUATERNION_NO_FILE_MODEL 00118 00119 } AttitudeFileModelEnum; 00120 00122 typedef enum 00123 { 00124 XPCFI_BM2000 = 1, 00125 XPCFI_HM2000 , 00126 XPCFI_GM2000, 00127 XPCFI_MOD, 00128 XPCFI_TOD, 00129 XPCFI_EF, 00130 XPCFI_BM1950, 00131 XPCFI_GALACTIC 00132 } CsRlEnum; 00133 00135 typedef enum 00136 { 00137 XPCFI_SAT_ORBITAL_REF = 0, 00138 XPCFI_SAT_NOMINAL_ATT = 1, 00139 XPCFI_SAT_ATT = 2, 00140 XPCFI_INSTR_ATT = 3 00141 } AttFrEnum; 00142 00144 typedef enum 00145 { 00146 XPCFI_FRAME_FLAG_EXT = 0, 00147 XPCFI_FRAME_FLAG_SAT 00148 } FrameFlagEnum; 00149 00151 typedef enum 00152 { 00153 XPCFI_NO_INTER = 0, 00154 XPCFI_INTER_1ST, 00155 XPCFI_INTER_2ND 00156 } InterModeEnum; 00157 00159 typedef enum 00160 { 00161 XPCFI_SOURCE_STAR, 00162 XPCFI_SOURCE_SUN, 00163 XPCFI_SOURCE_MOON, 00164 XPCFI_SOURCE_GENERIC 00165 } SourceTypeEnum; 00166 00168 typedef enum 00169 { 00170 XPCFI_USER_TARGET_TYPE = 0, 00171 XPCFI_LOS_TARGET_TYPE, 00172 XPCFI_DEM_TARGET_TYPE 00173 } TargetTypeEnum; 00174 00176 typedef enum 00177 { 00178 XPCFI_X_AXIS = 0, 00179 XPCFI_NEG_X_AXIS, 00180 XPCFI_Y_AXIS, 00181 XPCFI_NEG_Y_AXIS, 00182 XPCFI_Z_AXIS, 00183 XPCFI_NEG_Z_AXIS 00184 } PointingAxisEnum; 00185 00187 typedef enum 00188 { 00189 XPCFI_SUN_VEC = 0, 00190 XPCFI_MOON_VEC, 00191 XPCFI_EARTH_VEC, 00192 XPCFI_NADIR_VEC, 00193 XPCFI_INERTIAL_VEL_VEC, 00194 XPCFI_EF_VEL_VEC, 00195 XPCFI_INERTIAL_TARGET_VEC, 00196 XPCFI_EF_TARGET_VEC, 00197 XPCFI_SC_EF_VEL_VEC, 00198 XPCFI_ORBIT_POLE, 00199 XPCFI_INERTIAL_POS_VEC_CORRECTED, 00200 XPCFI_INERTIAL_VEL_VEC_ROTATED 00201 } AxisTargetEnum; 00202 00204 typedef enum 00205 { 00206 XPCFI_USER_INIT = 1, 00207 XPCFI_LUT_INIT, 00208 XPCFI_COMPLEX_INIT 00209 } AtmosModeEnum; 00210 00212 typedef enum 00213 { 00214 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_GT = 1, 00215 XPCFI_TARG_EXTRA_AUX_RAD_CUR = 2, 00216 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_GT_D = 4, 00217 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_GT_2D = 8, 00218 XPCFI_TARG_EXTRA_AUX_RAD_CUR_D = 16, 00219 XPCFI_TARG_EXTRA_AUX_RAD_CUR_2D = 32, 00220 XPCFI_TARG_EXTRA_AUX_TARGET_NADIR_VEL = 64, 00221 XPCFI_TARG_EXTRA_AUX_MLST = 128, 00222 XPCFI_TARG_EXTRA_AUX_TLST = 256, 00223 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_SAT_NAD = 512, 00224 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_SAT_NAD_D = 1024, 00225 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_SAT_NAD_2D = 2048, 00226 XPCFI_TARG_EXTRA_AUX_LOOK_DIR = 4096, 00227 XPCFI_TARG_EXTRA_AUX_DIST_SSP_MIN_DIST_GT = 8192, 00228 XPCFI_TARG_EXTRA_AUX_DIST_SSP_MIN_DIST_GT_D= 16384, 00229 XPCFI_TARG_EXTRA_AUX_DIST_SSP_MIN_DIST_GT_2D = 32768, 00230 XPCFI_TARG_EXTRA_AUX_ALL = XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_GT + XPCFI_TARG_EXTRA_AUX_RAD_CUR + \ 00231 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_GT_D + XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_GT_2D +\ 00232 XPCFI_TARG_EXTRA_AUX_RAD_CUR_D + XPCFI_TARG_EXTRA_AUX_RAD_CUR_2D + XPCFI_TARG_EXTRA_AUX_TARGET_NADIR_VEL + \ 00233 XPCFI_TARG_EXTRA_AUX_MLST + XPCFI_TARG_EXTRA_AUX_TLST + \ 00234 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_SAT_NAD + XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_SAT_NAD_D + \ 00235 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_SAT_NAD_2D + XPCFI_TARG_EXTRA_AUX_LOOK_DIR +\ 00236 XPCFI_TARG_EXTRA_AUX_DIST_SSP_MIN_DIST_GT + XPCFI_TARG_EXTRA_AUX_DIST_SSP_MIN_DIST_GT_D + \ 00237 XPCFI_TARG_EXTRA_AUX_DIST_SSP_MIN_DIST_GT_2D 00238 00239 } TargetResAuxNameEnum; 00240 00242 typedef enum 00243 { 00244 XPCFI_TARG_EXTRA_MAIN_GEO = 1, 00245 XPCFI_TARG_EXTRA_MAIN_GEO_D = 2, 00246 XPCFI_TARG_EXTRA_MAIN_GEO_2D = 4, 00247 XPCFI_TARG_EXTRA_MAIN_TARG2SAT_TOP = 8, 00248 XPCFI_TARG_EXTRA_MAIN_TARG2SAT_TOP_D = 16, 00249 XPCFI_TARG_EXTRA_MAIN_TARG2SAT_TOP_2D = 32, 00250 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_TOP = 64, 00251 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_TOP_D = 128, 00252 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_TOP_2D = 256, 00253 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_ATTITUDE = 512, 00254 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_ATTITUDE_D = 1024, 00255 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_ATTITUDE_2D= 2048, 00256 XPCFI_TARG_EXTRA_MAIN_ALL = XPCFI_TARG_EXTRA_MAIN_GEO + XPCFI_TARG_EXTRA_MAIN_GEO_D + XPCFI_TARG_EXTRA_MAIN_GEO_2D +\ 00257 XPCFI_TARG_EXTRA_MAIN_TARG2SAT_TOP + XPCFI_TARG_EXTRA_MAIN_TARG2SAT_TOP_D + XPCFI_TARG_EXTRA_MAIN_TARG2SAT_TOP_2D + \ 00258 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_TOP + XPCFI_TARG_EXTRA_MAIN_SAT2TARG_TOP_D + XPCFI_TARG_EXTRA_MAIN_SAT2TARG_TOP_2D + \ 00259 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_ATTITUDE + XPCFI_TARG_EXTRA_MAIN_SAT2TARG_ATTITUDE_D + XPCFI_TARG_EXTRA_MAIN_SAT2TARG_ATTITUDE_2D 00260 00261 }TargetResMainNameEnum; /* CAREFUL: variables holding these values MUST be declared as long !!! */ 00262 00264 typedef enum 00265 { 00266 XPCFI_SAT_DEFAULT = XLCFI_SAT_DEFAULT, 00267 XPCFI_SAT_DEFAULT1 = XLCFI_SAT_DEFAULT1, 00268 XPCFI_SAT_DEFAULT2 = XLCFI_SAT_DEFAULT2, 00269 XPCFI_SAT_DEFAULT3 = XLCFI_SAT_DEFAULT3, 00270 XPCFI_SAT_DEFAULT4 = XLCFI_SAT_DEFAULT4, 00271 XPCFI_SAT_DEFAULT5 = XLCFI_SAT_DEFAULT5, 00272 XPCFI_SAT_DEFAULT6 = XLCFI_SAT_DEFAULT6, 00273 XPCFI_SAT_DEFAULT7 = XLCFI_SAT_DEFAULT7, 00274 XPCFI_SAT_DEFAULT8 = XLCFI_SAT_DEFAULT8, 00275 XPCFI_SAT_DEFAULT9 = XLCFI_SAT_DEFAULT9, 00276 XPCFI_SAT_ERS1 = XLCFI_SAT_ERS1, 00277 XPCFI_SAT_ERS2 = XLCFI_SAT_ERS2, 00278 XPCFI_SAT_ENVISAT = XLCFI_SAT_ENVISAT, 00279 XPCFI_SAT_METOP1 = XLCFI_SAT_METOP1, 00280 XPCFI_SAT_METOP2 = XLCFI_SAT_METOP2, 00281 XPCFI_SAT_METOP3 = XLCFI_SAT_METOP3, 00282 XPCFI_SAT_CRYOSAT = XLCFI_SAT_CRYOSAT, 00283 XPCFI_SAT_ADM = XLCFI_SAT_ADM, 00284 XPCFI_SAT_GOCE = XLCFI_SAT_GOCE, 00285 XPCFI_SAT_SMOS = XLCFI_SAT_SMOS, 00286 XPCFI_SAT_TERRASAR = XLCFI_SAT_TERRASAR, 00287 XPCFI_SAT_EARTHCARE = XLCFI_SAT_EARTHCARE, 00288 XPCFI_SAT_SWARM_A = XLCFI_SAT_SWARM_A, 00289 XPCFI_SAT_SWARM_B = XLCFI_SAT_SWARM_B, 00290 XPCFI_SAT_SWARM_C = XLCFI_SAT_SWARM_C, 00291 XPCFI_SAT_SENTINEL_1A = XLCFI_SAT_SENTINEL_1A, 00292 XPCFI_SAT_SENTINEL_1B = XLCFI_SAT_SENTINEL_1B, 00293 XPCFI_SAT_SENTINEL_2 = XLCFI_SAT_SENTINEL_2, 00294 XPCFI_SAT_SENTINEL_3 = XLCFI_SAT_SENTINEL_3, 00295 XPCFI_SAT_SEOSAT = XLCFI_SAT_SEOSAT, 00296 XPCFI_SAT_SENTINEL_1C = XLCFI_SAT_SENTINEL_1C, 00297 XPCFI_SAT_SENTINEL_2A = XLCFI_SAT_SENTINEL_2A, 00298 XPCFI_SAT_SENTINEL_2B = XLCFI_SAT_SENTINEL_2B, 00299 XPCFI_SAT_SENTINEL_2C = XLCFI_SAT_SENTINEL_2C, 00300 XPCFI_SAT_SENTINEL_3A = XLCFI_SAT_SENTINEL_3A, 00301 XPCFI_SAT_SENTINEL_3B = XLCFI_SAT_SENTINEL_3B, 00302 XPCFI_SAT_SENTINEL_3C = XLCFI_SAT_SENTINEL_3C, 00303 XPCFI_SAT_GENERIC = XLCFI_SAT_GENERIC 00304 } SatIdPointingEnum; 00305 00307 typedef enum // Flag to indicate the grade of a derivative 00308 { 00309 XPCFI_NO_DER = XLCFI_NO_DER, 00310 XPCFI_DER_1ST = XLCFI_DER_1ST, 00311 XPCFI_DER_2ND = XLCFI_DER_2ND 00312 } DerivPointingEnum; 00313 00315 typedef enum 00316 { 00317 XPCFI_NO_REF = XDCFI_NO_REF, 00318 XPCFI_STD_REF = XDCFI_STD_REF, 00319 XPCFI_USER_REF = XDCFI_USER_REF, 00320 XPCFI_PRED_REF = XDCFI_PRED_REF, 00321 XPCFI_STD_REF_N = XDCFI_STD_REF_N, 00322 XPCFI_USER_REF_N = XDCFI_USER_REF_N, 00323 XPCFI_PRED_REF_N = XDCFI_PRED_REF_N, 00324 XPCFI_US76_REF = XDCFI_US76_REF, 00325 XPCFI_TROPIC_REF = XDCFI_TROPIC_REF, 00326 XPCFI_MID_SUM_REF = XDCFI_MID_SUM_REF, 00327 XPCFI_MID_WIN_REF = XDCFI_MID_WIN_REF, 00328 XPCFI_SUBAR_SUM_REF = XDCFI_SUBAR_SUM_REF, 00329 XPCFI_SUBAR_WIN_REF = XDCFI_SUBAR_WIN_REF, 00330 XPCFI_LUT_REF = XDCFI_LUT_REF, 00331 XPCFI_US76_REF_N = XDCFI_US76_REF_N, 00332 XPCFI_TROPIC_REF_N = XDCFI_TROPIC_REF_N, 00333 XPCFI_MID_SUM_REF_N = XDCFI_MID_SUM_REF_N, 00334 XPCFI_MID_WIN_REF_N = XDCFI_MID_WIN_REF_N, 00335 XPCFI_SUBAR_SUM_REF_N = XDCFI_SUBAR_SUM_REF_N, 00336 XPCFI_SUBAR_WIN_REF_N = XDCFI_SUBAR_WIN_REF_N, 00337 XPCFI_LUT_REF_N = XDCFI_LUT_REF_N 00338 } TargetPointingRayEnum; 00339 00341 typedef enum 00342 { 00343 XPCFI_TIME_UNDEF = XLCFI_TIME_UNDEF, 00344 XPCFI_TIME_TAI = XLCFI_TIME_TAI, 00345 XPCFI_TIME_UTC = XLCFI_TIME_UTC, 00346 XPCFI_TIME_UT1 = XLCFI_TIME_UT1, 00347 XPCFI_TIME_GPS = XLCFI_TIME_GPS 00348 } TimeRefPointingEnum; 00349 00351 typedef enum 00352 { 00353 XPCFI_MODE_FLAG_LOCATION = XLCFI_MODE_FLAG_LOCATION, 00354 XPCFI_MODE_FLAG_DIRECTION = XLCFI_MODE_FLAG_DIRECTION 00355 } ModeFlagPointingEnum; 00356 00358 typedef enum 00359 { 00360 XPCFI_DEM_ACE_MODEL = XDCFI_DEM_ACE_MODEL 00361 } DemModelPointingEnum; 00362 00363 //------------------------------------------------------ 00364 // DATA STRUCTURES 00365 //------------------------------------------------------ 00366 00368 class AttDataRec 00369 { 00370 public: 00371 long timeRef; 00372 double time; 00373 double quaternion[4]; 00374 double angles[3]; 00375 00377 AttDataRec() 00378 { 00379 timeRef = 0; 00380 time = 0.; 00381 for ( int i = 0 ; i < 4 ; i++ ) 00382 { 00383 quaternion[i] = 0.; 00384 if ( i < 3 ) 00385 angles[i] = 0.; 00386 } 00387 } 00388 00390 AttDataRec( long timeReference, double timeIn, 00391 double *quaternions, double *angle ) 00392 { 00393 timeRef = timeReference; 00394 time = timeIn; 00395 00396 quaternion[0] = quaternions[0]; 00397 quaternion[1] = quaternions[1]; 00398 quaternion[2] = quaternions[2]; 00399 quaternion[3] = quaternions[3]; 00400 00401 angles[0] = angle[0]; 00402 angles[1] = angle[1]; 00403 angles[2] = angle[2]; 00404 } 00405 }; 00406 00408 class AttFileModel 00409 { 00410 public: 00411 long fileModel; 00412 double valTime0; 00413 double valTime1; 00414 long dataType; 00415 long inertialFrame; 00416 double maxGap; 00417 vector<AttDataRec> attData; 00418 }; 00419 00421 class StarTrackerAux 00422 { 00423 public: 00424 long starTrId; 00425 long aberrCorrection; 00426 double strAttRot[3][3]; 00427 }; 00428 00430 class SatAttFileModel 00431 { 00432 public: 00433 long fileModel; 00434 double valTime0; 00435 double valTime1; 00436 long dataType; 00437 long inertialFrame; 00438 double maxGap; 00439 vector<AttDataRec> attData; 00440 StarTrackerAux auxData; 00441 vector<StarTracker> tmData; 00442 }; 00443 00445 class QuatPlusMatrixModel 00446 { 00447 public: 00448 long inertialFrame; 00449 vector<AttRec> quat; 00450 double rotMatrix[3][3]; 00451 }; 00452 00454 class QuatPlusAnglesModel 00455 { 00456 public: 00457 long inertialFrame; 00458 vector<AttRec> quat; 00459 double angles[3]; 00460 }; 00461 00463 class AtmosIdData 00464 { 00465 public: 00466 double atmMaxAltStd; 00467 double atmMaxAltUser; 00468 }; 00469 00471 class AzElDefinition 00472 { 00473 public: 00474 long az0Axis; 00475 long az90Axis; 00476 long el90Axis; 00477 }; 00478 00480 class CsTra 00481 { 00482 public: 00483 bool azelFlag; 00484 AzElDefinition azelDef; 00485 CsRlEnum refi; 00486 AttFrEnum reff; 00487 bool ambFlag; 00488 DerivPointingEnum deriv; 00489 double v[3]; 00490 double vd[3]; 00491 double v2d[3]; 00492 double m[3][3]; 00493 double md[3][3]; 00494 double m2d[3][3]; 00495 }; 00496 00498 class AttitudeData 00499 { 00500 public: 00501 long model; 00502 StateVector satVector; 00503 long sourceFrame; 00504 long targetFrame; 00505 CsTra satMat; 00506 double offset[3]; 00507 CsTra attitudeEF; 00508 }; 00509 00511 class ParDer 00512 { 00513 public: 00514 DerivPointingEnum deriv; 00515 double p; 00516 double pd; 00517 double p2d; 00518 }; 00519 00521 class GenericTargetData 00522 { 00523 public: 00524 long timeRef; 00525 double time; 00526 Coord satVector; 00527 long iray; 00528 double freq; 00529 long deriv; 00530 }; 00531 00533 class TargetData 00534 { 00535 public: 00536 Coord tarVector; 00537 ParDer zTan; 00538 ParDer range; 00539 ParDer time; 00540 Coord tarSatVector; 00541 Coord satTarVector; 00542 00543 TargetData const &operator=(TargetData const &tarDat) 00544 { 00545 return tarDat; 00546 } 00547 }; 00548 00550 class TargetIdData 00551 { 00552 public: 00553 GenericTargetData genericData; 00554 long earthCrossed; 00555 long atmCrossed; 00556 vector<TargetData> user; 00557 vector<TargetData> los; 00558 bool earthFlag; 00559 TargetData earth; 00560 Coord exitAtmVector; 00561 }; 00562 00563 } // closing namespace 00564 00565 #endif