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