![]() |
Earth Observation Mission CFI Software Pointing Software User Manual |
![]() |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.3 00003 //-------------------------------------------------------- 00004 00005 //-------------------------------------------------------------------- 00006 // CVS Info: $Id: PointingData.h,v 1.14 2011/11/23 13:04:51 expcfi 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 XPCFI_MODEL_SENTINEL2 00057 } SatNominalAttModelEnum; 00058 00059 typedef enum 00060 { 00061 XPCFI_ANGLE_TYPE_TRUE_LAT_TOD = 0, 00062 XPCFI_ANGLE_TYPE_MEAN_LAT_TOD 00063 } PointingAngleTypeEnum; 00064 00066 typedef enum 00067 { 00068 XPCFI_SEL_FILE = 0, 00069 XPCFI_SEL_TIME, 00070 XPCFI_SEL_ORBIT, 00071 XPCFI_SEL_DEFAULT 00072 } PointingInitModeEnum; 00073 00075 typedef enum 00076 { 00077 XPCFI_SAT_NOMINAL_ATT_INIT_MODE = 0, 00078 XPCFI_SAT_NOMINAL_ATT_INIT_MODEL_MODE, 00079 XPCFI_SAT_NOMINAL_ATT_INIT_HARMONIC_MODE, 00080 XPCFI_SAT_NOMINAL_ATT_INIT_FILE_MODE 00081 00082 } SatNominalAttModeEnum; 00083 00085 typedef enum 00086 { 00087 XPCFI_SAT_ATT_ANGLE_INIT_MODE = 0, 00088 XPCFI_SAT_ATT_MATRIX_INIT_MODE, 00089 XPCFI_SAT_ATT_INIT_HARMONIC_MODE, 00090 XPCFI_SAT_ATT_INIT_FILE_MODE 00091 00092 } SatAttModeEnum; 00093 00095 typedef enum 00096 { 00097 XPCFI_INSTR_ATT_ANGLE_INIT_MODE = 0, 00098 XPCFI_INSTR_ATT_MATRIX_INIT_MODE, 00099 XPCFI_INSTR_ATT_INIT_HARMONIC_MODE, 00100 XPCFI_INSTR_ATT_INIT_FILE_MODE 00101 00102 } InstrAttModeEnum; 00103 00105 typedef enum 00106 { 00107 XPCFI_ATTITUDE_INIT_NO_DATA_MODE = 0, 00108 XPCFI_ATTITUDE_COMPUTE_MODE, 00109 XPCFI_ATTITUDE_USER_SET_MODE 00110 00111 } AttitudeModeEnum; 00112 00114 typedef enum 00115 { 00116 XPCFI_ATTITUDE_GENERIC_FILE_MODEL = 0, 00117 XPCFI_ATTITUDE_STAR_TRACKER_FILE_MODEL, 00118 XPCFI_ATTITUDE_QUATERNION_NO_FILE_MODEL 00119 00120 } AttitudeFileModelEnum; 00121 00123 typedef enum 00124 { 00125 XPCFI_BM2000 = 1, 00126 XPCFI_HM2000 , 00127 XPCFI_GM2000, 00128 XPCFI_MOD, 00129 XPCFI_TOD, 00130 XPCFI_PEF, 00131 XPCFI_EF, 00132 XPCFI_BM1950, 00133 XPCFI_GALACTIC 00134 } CsRlEnum; 00135 00137 typedef enum 00138 { 00139 XPCFI_SAT_ORBITAL_REF = 0, 00140 XPCFI_SAT_NOMINAL_ATT = 1, 00141 XPCFI_SAT_ATT = 2, 00142 XPCFI_INSTR_ATT = 3 00143 } AttFrEnum; 00144 00146 typedef enum 00147 { 00148 XPCFI_FRAME_FLAG_EXT = 0, 00149 XPCFI_FRAME_FLAG_SAT 00150 } FrameFlagEnum; 00151 00153 typedef enum 00154 { 00155 XPCFI_NO_INTER = 0, 00156 XPCFI_INTER_1ST, 00157 XPCFI_INTER_2ND 00158 } InterModeEnum; 00159 00161 typedef enum 00162 { 00163 XPCFI_SOURCE_STAR, 00164 XPCFI_SOURCE_SUN, 00165 XPCFI_SOURCE_MOON, 00166 XPCFI_SOURCE_GENERIC 00167 } SourceTypeEnum; 00168 00170 typedef enum 00171 { 00172 XPCFI_USER_TARGET_TYPE = 0, 00173 XPCFI_LOS_TARGET_TYPE, 00174 XPCFI_DEM_TARGET_TYPE 00175 } TargetTypeEnum; 00176 00178 typedef enum 00179 { 00180 XPCFI_X_AXIS = 0, 00181 XPCFI_NEG_X_AXIS, 00182 XPCFI_Y_AXIS, 00183 XPCFI_NEG_Y_AXIS, 00184 XPCFI_Z_AXIS, 00185 XPCFI_NEG_Z_AXIS 00186 } PointingAxisEnum; 00187 00189 typedef enum 00190 { 00191 XPCFI_SUN_VEC = 0, 00192 XPCFI_MOON_VEC, 00193 XPCFI_EARTH_VEC, 00194 XPCFI_NADIR_VEC, 00195 XPCFI_INERTIAL_VEL_VEC, 00196 XPCFI_EF_VEL_VEC, 00197 XPCFI_INERTIAL_TARGET_VEC, 00198 XPCFI_EF_TARGET_VEC, 00199 XPCFI_SC_EF_VEL_VEC, 00200 XPCFI_ORBIT_POLE, 00201 XPCFI_INERTIAL_POS_VEC_CORRECTED, 00202 XPCFI_INERTIAL_VEL_VEC_ROTATED 00203 } AxisTargetEnum; 00204 00206 // Changed for AN-407 (Enumeration TargetPointingRayEnum was removed) 00207 typedef enum 00208 { 00209 XPCFI_NO_REF_INIT = XDCFI_NO_REF, 00210 XPCFI_STD_INIT = XDCFI_STD_REF, 00211 XPCFI_USER_INIT = XDCFI_USER_REF, 00212 XPCFI_PRED_INIT = XDCFI_PRED_REF, 00213 XPCFI_STD_INIT_N = XDCFI_STD_REF_N, 00214 XPCFI_USER_INIT_N = XDCFI_USER_REF_N, 00215 XPCFI_PRED_INIT_N = XDCFI_PRED_REF_N, 00216 XPCFI_US76_INIT = XDCFI_US76_REF, 00217 XPCFI_TROPIC_INIT = XDCFI_TROPIC_REF, 00218 XPCFI_MID_SUM_INIT = XDCFI_MID_SUM_REF, 00219 XPCFI_MID_WIN_INIT = XDCFI_MID_WIN_REF, 00220 XPCFI_SUBAR_SUM_INIT = XDCFI_SUBAR_SUM_REF, 00221 XPCFI_SUBAR_WIN_INIT = XDCFI_SUBAR_WIN_REF, 00222 XPCFI_LUT_INIT = XDCFI_LUT_REF, 00223 XPCFI_US76_INIT_N = XDCFI_US76_REF_N, 00224 XPCFI_TROPIC_INIT_N = XDCFI_TROPIC_REF_N, 00225 XPCFI_MID_SUM_INIT_N = XDCFI_MID_SUM_REF_N, 00226 XPCFI_MID_WIN_INIT_N = XDCFI_MID_WIN_REF_N, 00227 XPCFI_SUBAR_SUM_INIT_N = XDCFI_SUBAR_SUM_REF_N, 00228 XPCFI_SUBAR_WIN_INIT_N = XDCFI_SUBAR_WIN_REF_N, 00229 XPCFI_LUT_INIT_N = XDCFI_LUT_REF_N 00230 } AtmosModeEnum; 00231 00233 typedef enum 00234 { 00235 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_GT = 1, 00236 XPCFI_TARG_EXTRA_AUX_RAD_CUR = 2, 00237 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_GT_D = 4, 00238 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_GT_2D = 8, 00239 XPCFI_TARG_EXTRA_AUX_RAD_CUR_D = 16, 00240 XPCFI_TARG_EXTRA_AUX_RAD_CUR_2D = 32, 00241 XPCFI_TARG_EXTRA_AUX_TARGET_NADIR_VEL = 64, 00242 XPCFI_TARG_EXTRA_AUX_MLST = 128, 00243 XPCFI_TARG_EXTRA_AUX_TLST = 256, 00244 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_SAT_NAD = 512, 00245 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_SAT_NAD_D = 1024, 00246 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_SAT_NAD_2D = 2048, 00247 XPCFI_TARG_EXTRA_AUX_LOOK_DIR = 4096, 00248 XPCFI_TARG_EXTRA_AUX_DIST_SSP_MIN_DIST_GT = 8192, 00249 XPCFI_TARG_EXTRA_AUX_DIST_SSP_MIN_DIST_GT_D= 16384, 00250 XPCFI_TARG_EXTRA_AUX_DIST_SSP_MIN_DIST_GT_2D = 32768, 00251 XPCFI_TARG_EXTRA_AUX_ALL = XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_GT + XPCFI_TARG_EXTRA_AUX_RAD_CUR + \ 00252 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_GT_D + XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_GT_2D +\ 00253 XPCFI_TARG_EXTRA_AUX_RAD_CUR_D + XPCFI_TARG_EXTRA_AUX_RAD_CUR_2D + XPCFI_TARG_EXTRA_AUX_TARGET_NADIR_VEL + \ 00254 XPCFI_TARG_EXTRA_AUX_MLST + XPCFI_TARG_EXTRA_AUX_TLST + \ 00255 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_SAT_NAD + XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_SAT_NAD_D + \ 00256 XPCFI_TARG_EXTRA_AUX_DIST_NAD_TARG_SAT_NAD_2D + XPCFI_TARG_EXTRA_AUX_LOOK_DIR +\ 00257 XPCFI_TARG_EXTRA_AUX_DIST_SSP_MIN_DIST_GT + XPCFI_TARG_EXTRA_AUX_DIST_SSP_MIN_DIST_GT_D + \ 00258 XPCFI_TARG_EXTRA_AUX_DIST_SSP_MIN_DIST_GT_2D 00259 00260 } TargetResAuxNameEnum; 00261 00263 typedef enum 00264 { 00265 XPCFI_TARG_EXTRA_MAIN_GEO = 1, 00266 XPCFI_TARG_EXTRA_MAIN_GEO_D = 2, 00267 XPCFI_TARG_EXTRA_MAIN_GEO_2D = 4, 00268 XPCFI_TARG_EXTRA_MAIN_TARG2SAT_TOP = 8, 00269 XPCFI_TARG_EXTRA_MAIN_TARG2SAT_TOP_D = 16, 00270 XPCFI_TARG_EXTRA_MAIN_TARG2SAT_TOP_2D = 32, 00271 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_TOP = 64, 00272 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_TOP_D = 128, 00273 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_TOP_2D = 256, 00274 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_ATTITUDE = 512, 00275 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_ATTITUDE_D = 1024, 00276 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_ATTITUDE_2D= 2048, 00277 XPCFI_TARG_EXTRA_MAIN_ALL = XPCFI_TARG_EXTRA_MAIN_GEO + XPCFI_TARG_EXTRA_MAIN_GEO_D + XPCFI_TARG_EXTRA_MAIN_GEO_2D +\ 00278 XPCFI_TARG_EXTRA_MAIN_TARG2SAT_TOP + XPCFI_TARG_EXTRA_MAIN_TARG2SAT_TOP_D + XPCFI_TARG_EXTRA_MAIN_TARG2SAT_TOP_2D + \ 00279 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_TOP + XPCFI_TARG_EXTRA_MAIN_SAT2TARG_TOP_D + XPCFI_TARG_EXTRA_MAIN_SAT2TARG_TOP_2D + \ 00280 XPCFI_TARG_EXTRA_MAIN_SAT2TARG_ATTITUDE + XPCFI_TARG_EXTRA_MAIN_SAT2TARG_ATTITUDE_D + XPCFI_TARG_EXTRA_MAIN_SAT2TARG_ATTITUDE_2D 00281 00282 }TargetResMainNameEnum; /* CAREFUL: variables holding these values MUST be declared as long !!! */ 00283 00285 typedef enum 00286 { 00287 XPCFI_SAT_DEFAULT = XLCFI_SAT_DEFAULT, 00288 XPCFI_SAT_DEFAULT1 = XLCFI_SAT_DEFAULT1, 00289 XPCFI_SAT_DEFAULT2 = XLCFI_SAT_DEFAULT2, 00290 XPCFI_SAT_DEFAULT3 = XLCFI_SAT_DEFAULT3, 00291 XPCFI_SAT_DEFAULT4 = XLCFI_SAT_DEFAULT4, 00292 XPCFI_SAT_DEFAULT5 = XLCFI_SAT_DEFAULT5, 00293 XPCFI_SAT_DEFAULT6 = XLCFI_SAT_DEFAULT6, 00294 XPCFI_SAT_DEFAULT7 = XLCFI_SAT_DEFAULT7, 00295 XPCFI_SAT_DEFAULT8 = XLCFI_SAT_DEFAULT8, 00296 XPCFI_SAT_DEFAULT9 = XLCFI_SAT_DEFAULT9, 00297 XPCFI_SAT_ERS1 = XLCFI_SAT_ERS1, 00298 XPCFI_SAT_ERS2 = XLCFI_SAT_ERS2, 00299 XPCFI_SAT_ENVISAT = XLCFI_SAT_ENVISAT, 00300 XPCFI_SAT_METOP1 = XLCFI_SAT_METOP1, 00301 XPCFI_SAT_METOP2 = XLCFI_SAT_METOP2, 00302 XPCFI_SAT_METOP3 = XLCFI_SAT_METOP3, 00303 XPCFI_SAT_CRYOSAT = XLCFI_SAT_CRYOSAT, 00304 XPCFI_SAT_ADM = XLCFI_SAT_ADM, 00305 XPCFI_SAT_GOCE = XLCFI_SAT_GOCE, 00306 XPCFI_SAT_SMOS = XLCFI_SAT_SMOS, 00307 XPCFI_SAT_TERRASAR = XLCFI_SAT_TERRASAR, 00308 XPCFI_SAT_EARTHCARE = XLCFI_SAT_EARTHCARE, 00309 XPCFI_SAT_SWARM_A = XLCFI_SAT_SWARM_A, 00310 XPCFI_SAT_SWARM_B = XLCFI_SAT_SWARM_B, 00311 XPCFI_SAT_SWARM_C = XLCFI_SAT_SWARM_C, 00312 XPCFI_SAT_SENTINEL_1A = XLCFI_SAT_SENTINEL_1A, 00313 XPCFI_SAT_SENTINEL_1B = XLCFI_SAT_SENTINEL_1B, 00314 XPCFI_SAT_SENTINEL_2 = XLCFI_SAT_SENTINEL_2, 00315 XPCFI_SAT_SENTINEL_3 = XLCFI_SAT_SENTINEL_3, 00316 XPCFI_SAT_SEOSAT = XLCFI_SAT_SEOSAT, 00317 XPCFI_SAT_SENTINEL_1C = XLCFI_SAT_SENTINEL_1C, 00318 XPCFI_SAT_SENTINEL_2A = XLCFI_SAT_SENTINEL_2A, 00319 XPCFI_SAT_SENTINEL_2B = XLCFI_SAT_SENTINEL_2B, 00320 XPCFI_SAT_SENTINEL_2C = XLCFI_SAT_SENTINEL_2C, 00321 XPCFI_SAT_SENTINEL_3A = XLCFI_SAT_SENTINEL_3A, 00322 XPCFI_SAT_SENTINEL_3B = XLCFI_SAT_SENTINEL_3B, 00323 XPCFI_SAT_SENTINEL_3C = XLCFI_SAT_SENTINEL_3C, 00324 XPCFI_SAT_GENERIC = XLCFI_SAT_GENERIC 00325 } SatIdPointingEnum; 00326 00328 typedef enum // Flag to indicate the grade of a derivative 00329 { 00330 XPCFI_NO_DER = XLCFI_NO_DER, 00331 XPCFI_DER_1ST = XLCFI_DER_1ST, 00332 XPCFI_DER_2ND = XLCFI_DER_2ND 00333 } DerivPointingEnum; 00334 00335 00337 typedef enum 00338 { 00339 XPCFI_TIME_UNDEF = XLCFI_TIME_UNDEF, 00340 XPCFI_TIME_TAI = XLCFI_TIME_TAI, 00341 XPCFI_TIME_UTC = XLCFI_TIME_UTC, 00342 XPCFI_TIME_UT1 = XLCFI_TIME_UT1, 00343 XPCFI_TIME_GPS = XLCFI_TIME_GPS 00344 } TimeRefPointingEnum; 00345 00347 typedef enum 00348 { 00349 XPCFI_MODE_FLAG_LOCATION = XLCFI_MODE_FLAG_LOCATION, 00350 XPCFI_MODE_FLAG_DIRECTION = XLCFI_MODE_FLAG_DIRECTION 00351 } ModeFlagPointingEnum; 00352 00354 typedef enum 00355 { 00356 XPCFI_DEM_ACE_MODEL = XDCFI_DEM_ACE_MODEL 00357 } DemModelPointingEnum; 00358 00359 //------------------------------------------------------ 00360 // DATA STRUCTURES 00361 //------------------------------------------------------ 00362 00364 class AttDataRec 00365 { 00366 public: 00367 long timeRef; 00368 double time; 00369 double quaternion[4]; 00370 double angles[3]; 00371 00373 AttDataRec() 00374 { 00375 timeRef = 0; 00376 time = 0.; 00377 for ( int i = 0 ; i < 4 ; i++ ) 00378 { 00379 quaternion[i] = 0.; 00380 if ( i < 3 ) 00381 angles[i] = 0.; 00382 } 00383 } 00384 00386 AttDataRec( long timeReference, double timeIn, 00387 double *quaternions, double *angle ) 00388 { 00389 timeRef = timeReference; 00390 time = timeIn; 00391 00392 quaternion[0] = quaternions[0]; 00393 quaternion[1] = quaternions[1]; 00394 quaternion[2] = quaternions[2]; 00395 quaternion[3] = quaternions[3]; 00396 00397 angles[0] = angle[0]; 00398 angles[1] = angle[1]; 00399 angles[2] = angle[2]; 00400 } 00401 }; 00402 00404 class AttFileModel 00405 { 00406 public: 00407 long fileModel; 00408 double valTime0; 00409 double valTime1; 00410 long dataType; 00411 long inertialFrame; 00412 double maxGap; 00413 vector<AttDataRec> attData; 00414 }; 00415 00417 class StarTrackerAux 00418 { 00419 public: 00420 long starTrId; 00421 long aberrCorrection; 00422 double strAttRot[3][3]; 00423 }; 00424 00426 class SatAttFileModel 00427 { 00428 public: 00429 long fileModel; 00430 double valTime0; 00431 double valTime1; 00432 long dataType; 00433 long inertialFrame; 00434 double maxGap; 00435 vector<AttDataRec> attData; 00436 StarTrackerAux auxData; 00437 vector<StarTracker> tmData; 00438 }; 00439 00441 class QuatPlusMatrixModel 00442 { 00443 public: 00444 long inertialFrame; 00445 vector<AttRec> quat; 00446 double rotMatrix[3][3]; 00447 }; 00448 00450 class QuatPlusAnglesModel 00451 { 00452 public: 00453 long inertialFrame; 00454 vector<AttRec> quat; 00455 double angles[3]; 00456 }; 00457 00459 class AtmosIdData 00460 { 00461 public: 00462 double atmMaxAltStd; 00463 double atmMaxAltUser; 00464 }; 00465 00467 class AzElDefinition 00468 { 00469 public: 00470 long az0Axis; 00471 long az90Axis; 00472 long el90Axis; 00473 }; 00474 00476 class CsTra 00477 { 00478 public: 00479 bool azelFlag; 00480 AzElDefinition azelDef; 00481 CsRlEnum refi; 00482 AttFrEnum reff; 00483 bool ambFlag; 00484 DerivPointingEnum deriv; 00485 double v[3]; 00486 double vd[3]; 00487 double v2d[3]; 00488 double m[3][3]; 00489 double md[3][3]; 00490 double m2d[3][3]; 00491 }; 00492 00494 class AttitudeData 00495 { 00496 public: 00497 long model; 00498 StateVector satVector; 00499 long sourceFrame; 00500 long targetFrame; 00501 CsTra satMat; 00502 double offset[3]; 00503 CsTra attitudeEF; 00504 }; 00505 00507 class ParDer 00508 { 00509 public: 00510 DerivPointingEnum deriv; 00511 double p; 00512 double pd; 00513 double p2d; 00514 }; 00515 00517 class GenericTargetData 00518 { 00519 public: 00520 long timeRef; 00521 double time; 00522 Coord satVector; 00523 long iray; 00524 double freq; 00525 long deriv; 00526 }; 00527 00529 class TargetData 00530 { 00531 public: 00532 Coord tarVector; 00533 ParDer zTan; 00534 ParDer range; 00535 ParDer time; 00536 Coord tarSatVector; 00537 Coord satTarVector; 00538 00539 TargetData const &operator=(TargetData const &tarDat) 00540 { 00541 return tarDat; 00542 } 00543 }; 00544 00546 class TargetIdData 00547 { 00548 public: 00549 GenericTargetData genericData; 00550 long earthCrossed; 00551 long atmCrossed; 00552 vector<TargetData> user; 00553 vector<TargetData> los; 00554 bool earthFlag; 00555 TargetData earth; 00556 Coord exitAtmVector; 00557 }; 00558 00559 } // closing namespace 00560 00561 #endif