![]() |
Earth Observation Mission CFI Software DataHandling Software User Manual |
![]() |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.4 00003 //-------------------------------------------------------- 00004 00005 //-------------------------------------------------------------------- 00006 // CVS Info: $Id: DataHandlingData.h,v 1.19 2012/06/20 16:10:45 expcfi Exp $ 00007 //-------------------------------------------------------------------- 00008 00010 // This file contais generic data that can be used as input/output in 00011 // the classes of EXPCFI DataHandling library 00013 00014 #ifndef __EECFI_DATAHANDLINGDATA__ 00015 #define __EECFI_DATAHANDLINGDATA__ 00016 00017 //--INCLUDE----------------------------------------------------------- 00018 #include <string> 00019 #include <vector> 00020 00021 //--NAMESPACES-------------------------------------------------------- 00022 using namespace std; 00023 00024 namespace EECFI 00025 { 00026 //------------------------------------------------------ 00027 // CONSTANT DATA 00028 //------------------------------------------------------ 00029 00030 //------------------------------------------------------ 00031 // DATA ENUMERATION 00032 //------------------------------------------------------ 00033 00035 typedef enum 00036 { 00037 XDCFI_ATT_QUATERNIONS = 0, 00038 XDCFI_ATT_ANGLES 00039 } AttitudeDataTypeEnum; 00040 00042 typedef enum 00043 { 00044 XDCFI_LINE_GEOM = 0, 00045 XDCFI_POINT_GEOM, 00046 XDCFI_LIMB_GEOM, 00047 XDCFI_DISTANCE_GEOM 00048 } GeomTypeEnum; 00049 00051 typedef enum 00052 { 00053 XDCFI_NO_ASAR = 0, 00054 XDCFI_NARROW_ASAR, 00055 XDCFI_WIDE_ASAR 00056 } AsarTypeEnum; 00057 00059 typedef enum 00060 { 00061 XDCFI_NO_REF = 0, 00062 XDCFI_STD_REF, 00063 XDCFI_USER_REF, 00064 XDCFI_PRED_REF, 00065 XDCFI_STD_REF_N = 10, 00066 XDCFI_USER_REF_N = 20, 00067 XDCFI_PRED_REF_N = 30, 00068 XDCFI_US76_REF = 300, 00069 XDCFI_TROPIC_REF, 00070 XDCFI_MID_SUM_REF, 00071 XDCFI_MID_WIN_REF, 00072 XDCFI_SUBAR_SUM_REF, 00073 XDCFI_SUBAR_WIN_REF, 00074 XDCFI_LUT_REF = 400, 00075 XDCFI_US76_REF_N = 3000, 00076 XDCFI_TROPIC_REF_N, 00077 XDCFI_MID_SUM_REF_N, 00078 XDCFI_MID_WIN_REF_N, 00079 XDCFI_SUBAR_SUM_REF_N, 00080 XDCFI_SUBAR_WIN_REF_N, 00081 XDCFI_LUT_REF_N = 4000 00082 } TargetRayEnum; 00083 00085 typedef enum 00086 { 00087 XDCFI_OPEN_SWATH, 00088 XDCFI_CLOSED_SWATH 00089 } SwathTypecEnum; 00090 00092 typedef enum 00093 { 00094 XDCFI_GEODETIC_SWATH_TYPE, 00095 XDCFI_INERTIAL_SWATH_TYPE 00096 } SwathPointTypeEnum; 00097 00099 typedef enum 00100 { 00101 XDCFI_SWATH_POINTING_GEOM = 0, /* Algorithms of calculation of Swaths */ 00102 XDCFI_SWATH_DISTANCE_GEOM, 00103 XDCFI_SWATH_LIMB_GEOM, 00104 XDCFI_SWATH_INERTIAL_GEOM, 00105 XDCFI_SWATH_SUBSATELLITE_GEOM, 00106 XDCFI_SWATH_ASAR_GEOM 00107 00108 } SwathGeomEnum; 00109 00111 typedef enum 00112 { 00113 XDCFI_NOT_DEFINED = -1, 00114 XDCFI_POINT = 0, 00115 XDCFI_CIRCLE = 1, 00116 XDCFI_SEGMENT = 2, 00117 XDCFI_POLYGON = 3 00118 } ZoneTypeEnum; 00119 00121 typedef enum 00122 { 00123 XDCFI_SAT_ORBITAL_REF = 0, 00124 XDCFI_SAT_NOMINAL_ATT, 00125 XDCFI_SAT_ATT, 00126 XDCFI_INSTR_ATT 00127 } AttitudeFrameEnum; 00128 00130 typedef enum 00131 { 00132 XDCFI_BAR_MEAN_2000 = 1, 00133 XDCFI_HEL_MEAN_2000, 00134 XDCFI_GEO_MEAN_2000, 00135 XDCFI_MEAN_DATE, 00136 XDCFI_TRUE_DATE, 00137 XDCFI_EARTH_FIXED, 00138 XDCFI_BAR_MEAN_1950, 00139 XDCFI_GALACTIC, 00140 XDCFI_SAT_ACT_REF, 00141 XDCFI_QUASI_MEAN_DATE, 00142 XDCFI_PSE_TRUE_DATE, 00143 XDCFI_PSEUDO_EARTH_FIXED, 00144 XDCFI_TOPOCENTRIC, 00145 XDCFI_SAT_REF, 00146 XDCFI_SAT_REL_REF 00147 } CoordinateSystemsEnum; 00148 00150 typedef enum 00151 { 00152 XDCFI_3_ADJUST_NOMI = 1, 00153 XDCFI_4_ADJUST_DMAN, 00154 XDCFI_5_INTERP_DGAP, 00155 XDCFI_6_EXTRAP_LT1D, 00156 XDCFI_7_EXTRAP_1D2D, 00157 XDCFI_8_EXTRAP_GT2D, 00158 XDCFI_8_EXTRAP_AMAN, 00159 XDCFI_Q_INDEX_MAX_ENUM 00160 } QualityIndexEnum; 00161 00163 typedef enum 00164 { 00165 XDCFI_SCF_DRAW_SOLID, 00166 XDCFI_SCF_DRAW_DASHED, 00167 XDCFI_SCF_DRAW_DOTTED, 00168 XDCFI_SCF_DRAW_TIMELINE 00169 } SCFDrawModesEnum; 00170 00172 typedef enum 00173 { 00174 XDCFI_SCF_FILL_SOLID, 00175 XDCFI_SCF_FILL_HOLLOW 00176 } SCFFillModesEnum; 00177 00179 typedef enum 00180 { 00181 XDCFI_TIME_UNDEF = -1, 00182 XDCFI_TIME_TAI, 00183 XDCFI_TIME_UTC, 00184 XDCFI_TIME_UT1, 00185 XDCFI_TIME_GPS 00186 } TimeRefDataHandlingEnum; 00187 00189 typedef enum 00190 { 00191 XDCFI_TIME_REF_OF_TAI = XDCFI_TIME_TAI, 00192 XDCFI_TIME_REF_OF_UTC = XDCFI_TIME_UTC, 00193 XDCFI_TIME_REF_OF_UT1 = XDCFI_TIME_UT1, 00194 XDCFI_TIME_REF_OF_GPS = XDCFI_TIME_GPS 00195 } TimeRefOfDataHandlingEnum; 00196 00198 typedef enum 00199 { 00200 XDCFI_READ_DB = 0, 00201 XDCFI_GNOMONIC = 1, 00202 XDCFI_RECTANGULAR = 2 00203 } ProjectionEnum; 00204 00206 typedef enum 00207 { 00208 XDCFI_ATT_NONE = 0, 00209 XDCFI_ATT_AOCS, 00210 XDCFI_ATT_PARAM, 00211 XDCFI_ATT_HARMONIC, 00212 XDCFI_ATT_FILE, 00213 XDCFI_ATT_ANGLE, 00214 XDCFI_ATT_MATRIX 00215 } AttModelEnum; 00216 00218 typedef enum 00219 { 00220 XDCFI_OSF_FILE, 00221 XDCFI_ORBIT_FILE, 00222 XDCFI_POF_FILE, 00223 XDCFI_ROF_FILE, 00224 XDCFI_DORIS_FILE, 00225 XDCFI_SDF_FILE, 00226 XDCFI_STF_FILE, 00227 XDCFI_ATTITUDE_FILE, 00228 XDCFI_DEM_CONF_FILE, 00229 XDCFI_DEM_FILE, 00230 XDCFI_ZONE_FILE, 00231 XDCFI_STATION_FILE, 00232 XDCFI_STAR_FILE, 00233 XDCFI_ATT_STAR_TRACKER_CONF_FILE, 00234 XDCFI_ATT_STAR_TRACKER_FILE, 00235 XDCFI_IERS_BULLETIN_FILE, 00236 XDCFI_TLE_FILE 00237 } FileEnum; 00238 00240 typedef enum 00241 { 00242 XDCFI_UNKNOWN_TYPE = -1, 00243 XDCFI_AUTO, 00244 XDCFI_ORBIT_CHANGE, 00245 XDCFI_STATE_VECTOR, 00246 XDCFI_OSF_TYPE, 00247 XDCFI_POF_TYPE, 00248 XDCFI_ROF_TYPE, 00249 XDCFI_DORIS_TYPE, 00250 XDCFI_POF_N_DORIS_TYPE, 00251 XDCFI_OEF_OSF_TYPE, 00252 XDCFI_OEF_POF_TYPE, 00253 XDCFI_IERS_B_TYPE, 00254 XDCFI_TLE_TYPE, 00255 XDCFI_STF_TYPE, 00256 XDCFI_DORISPREC_TYPE, 00257 XDCFI_DORISPREM_TYPE, 00258 XDCFI_ATT_TYPE, 00259 XDCFI_SCF_TYPE, 00260 XDCFI_PRECISE_PROPAG_TYPE, 00261 XDCFI_DEMCFG_TYPE, 00262 XDCFI_SATCFG_TYPE, 00263 XDCFI_GND_DB_TYPE, 00264 XDCFI_SW_DEF_TYPE, 00265 XDCFI_ZON_DB_TYPE, 00266 XDCFI_STR1ATT_TYPE, 00267 XDCFI_IERS_A_TYPE, 00268 XDCFI_IERS_B_AND_A_TYPE, 00269 XDCFI_FILE_TYPE_MAX_VALUE 00270 } FileTypeEnum; 00271 00273 typedef enum 00274 { 00275 XDCFI_DEM_ACE_MODEL = 0, 00276 XDCFI_DEM_GETASSE30_V1, 00277 XDCFI_DEM_GETASSE30_V2, 00278 XDCFI_DEM_ACE2_9SEC, 00279 XDCFI_DEM_NUM_MODELS 00280 } DemModelEnum; 00281 00283 typedef enum 00284 { 00285 XDCFI_DEM_GETASSE30_SOURCE_ACE, /* land-ice/snow */ 00286 XDCFI_DEM_GETASSE30_SOURCE_MSS, /* sea */ 00287 XDCFI_DEM_GETASSE30_SOURCE_EGM96, /* sea-ice */ 00288 XDCFI_DEM_GETASSE30_SOURCE_SRTM30 /* land */ 00289 } DemGetasseDataSourceEnum; 00290 00291 /* DEM Data Source Types for ACE2 9secs */ 00292 typedef enum 00293 { 00294 XDCFI_DEM_ACE2_SOURCE_SRTM0, /* Pure SRTM (above 60°N pure GLOBE data, below 60S pure ACE [original] data) */ 00295 XDCFI_DEM_ACE2_SOURCE_SRTM1, /* SRTM voids filled by interpolation and/or altimeter data */ 00296 XDCFI_DEM_ACE2_SOURCE_SRTM2, /* SRTM data warped using the ERS-1 Geodetic Mission */ 00297 XDCFI_DEM_ACE2_SOURCE_SRTM3, /* SRTM data warped using EnviSat & ERS-2 data */ 00298 XDCFI_DEM_ACE2_SOURCE_SRTM_LAKE, /* Mean lake level data derived from Altimetry */ 00299 XDCFI_DEM_ACE2_SOURCE_SRTM_GLOBE, /* GLOBE/ACE data warped using combined altimetry (only above 60°N) */ 00300 XDCFI_DEM_ACE2_SOURCE_SRTM_ALT /* Pure altimetry data (derived from ERS-1 Geodetic Mission, 00301 ERS-2 and EnviSat data using Delaunay Triangulation and Bilinear interpolation) */ 00302 } DemAce2DataSourceEnum; 00303 00304 00306 typedef enum 00307 { 00308 XDCFI_CFI_READ_ATT_INIT_PARSER_ERR = 0, 00309 XDCFI_CFI_READ_ATT_READ_PARAM_ERR, 00310 XDCFI_CFI_READ_ATT_WRONG_FILE_TYPE_ERR, 00311 XDCFI_CFI_READ_XML_ATT_NAVIGATION_ERR, 00312 XDCFI_CFI_READ_ATT_WRONG_DATA_TYPE_ERR, 00313 XDCFI_CFI_READ_ATT_INCONSISTENT_DATA_TYPE_ERR, 00314 XDCFI_CFI_READ_ATT_XML_DATA_BLOCK_SIZE_ERR, 00315 XDCFI_CFI_READ_ATT_WRONG_REF_FRAME_ERR, 00316 XDCFI_CFI_READ_ATT_READ_LIST_ERR, 00317 XDCFI_CFI_READ_ATT_TIME_CONV_ERR, 00318 XDCFI_CFI_READ_ATT_MEMORY_ERR, 00319 XDCFI_CFI_READ_ATT_CLEANUP_PARSER_ERR, 00320 XDCFI_CFI_READ_ATT_WRONG_TIME_REF_ERR, 00321 XDCFI_CFI_READ_ATT_WRONG_QUATERNION_ERR, 00322 XDCFI_CFI_READ_ATT_WRONG_ANGLE_ERR, 00323 XDCFI_CFI_READ_ATT_MAX_GAP_ERR 00324 } ReadAttErrEnum; 00325 00327 typedef enum 00328 { 00329 XDCFI_DEFAULT_VALUES = 0, 00330 XDCFI_USER_VALUES = 1 00331 } PrecisePropagUserFlagEnum; 00332 00334 typedef enum 00335 { 00336 XDCFI_NOT_SELECT = 0, 00337 XDCFI_SELECT = 1 00338 } PrecisePropagSelectionFlagEnum; 00339 00341 typedef enum 00342 { 00343 XDCFI_SGA_USE_PARAMETERS = 0, 00344 XDCFI_SGA_READ_VALUES_FROM_FILE = 1 00345 } PrecisePropagSgaFlagEnum; 00346 00348 typedef enum 00349 { 00350 XDCFI_SAT_DEFAULT = 0, 00351 XDCFI_SAT_DEFAULT1 = 1, 00352 XDCFI_SAT_DEFAULT2 = 2, 00353 XDCFI_SAT_DEFAULT3 = 3, 00354 XDCFI_SAT_DEFAULT4 = 4, 00355 XDCFI_SAT_DEFAULT5 = 5, 00356 XDCFI_SAT_DEFAULT6 = 6, 00357 XDCFI_SAT_DEFAULT7 = 7, 00358 XDCFI_SAT_DEFAULT8 = 8, 00359 XDCFI_SAT_DEFAULT9 = 9, 00360 XDCFI_SAT_ERS1 = 11, 00361 XDCFI_SAT_ERS2 = 12, 00362 XDCFI_SAT_ENVISAT = 21, 00363 XDCFI_SAT_METOP1 = 31, 00364 XDCFI_SAT_METOP2 = 32, 00365 XDCFI_SAT_METOP3 = 33, 00366 XDCFI_SAT_CRYOSAT = 41, 00367 XDCFI_SAT_ADM = 51, 00368 XDCFI_SAT_GOCE = 61, 00369 XDCFI_SAT_SMOS = 71, 00370 XDCFI_SAT_TERRASAR = 81, 00371 XDCFI_SAT_EARTHCARE = 91, 00372 XDCFI_SAT_SWARM_A = 101, 00373 XDCFI_SAT_SWARM_B = 102, 00374 XDCFI_SAT_SWARM_C = 103, 00375 XDCFI_SAT_SENTINEL_1A = 110, 00376 XDCFI_SAT_SENTINEL_1B = 111, 00377 XDCFI_SAT_SENTINEL_2 = 112, 00378 XDCFI_SAT_SENTINEL_3 = 113, 00379 XDCFI_SAT_SEOSAT = 120, 00380 XDCFI_SAT_SENTINEL_1C = 125, 00381 XDCFI_SAT_SENTINEL_2A = 126, 00382 XDCFI_SAT_SENTINEL_2B = 127, 00383 XDCFI_SAT_SENTINEL_2C = 128, 00384 XDCFI_SAT_SENTINEL_3A = 129, 00385 XDCFI_SAT_SENTINEL_3B = 130, 00386 XDCFI_SAT_SENTINEL_3C = 131, 00387 XDCFI_SAT_GENERIC = 200, 00388 XDCFI_SAT_GENERIC_GEO = 300, 00389 XDCFI_SAT_MTG = 301 00390 } XDSatIdEnum; 00391 00393 typedef enum 00394 { 00395 XDCFI_BULLETIN_A = 0, 00396 XDCFI_BULLETIN_B 00397 } XDBulletinTypeEnum; 00398 00400 typedef enum 00401 { 00402 XDCFI_NO_CACHE = 0, 00403 XDCFI_PRELOAD_CACHE, 00404 XDCFI_FIFO_CACHE 00405 } DemCacheTypeEnum; // Added for AN-487 00406 00407 //------------------------------------------------------ 00408 // DATA STRUCTURES 00409 //------------------------------------------------------ 00410 00414 class AngleModel 00415 { 00416 public: 00417 00418 //Attributes 00419 double angles[3]; 00420 double offsets[3]; 00421 00423 AngleModel(){}; 00424 00426 AngleModel( double *angle, double *offset) 00427 { 00428 for ( int i = 0 ; i < 3 ; ++i) 00429 { 00430 angles[i] = angle[i]; 00431 offsets[i] = offset[i]; 00432 }// end for i 00433 } 00434 }; 00435 00439 class Asar 00440 { 00441 public: 00442 //Attributes 00443 long asarType; 00444 double slantRangeLeft; 00445 double slantRangeRight; 00446 00448 Asar(){}; 00449 00454 Asar( const long asarTyp, double slantLeft, double slantRight) 00455 { 00456 asarType = asarTyp; 00457 slantRangeLeft = slantLeft; 00458 slantRangeRight = slantRight; 00459 } 00460 };//class Asar 00461 00462 00466 class BulbTable 00467 { 00468 public: 00469 double day; 00470 double ut1Utc; 00471 double ut1Tai; 00472 00474 BulbTable(){}; 00475 00477 BulbTable(double dayUtc, double diffUt1Utc, double diffUt1Tai) 00478 { 00479 day = dayUtc; 00480 ut1Utc = diffUt1Utc; 00481 ut1Tai = diffUt1Tai; 00482 } 00483 00484 }; 00485 00489 class DemPoint 00490 { 00491 public: 00492 00493 //Attributes 00494 double lon; 00495 double lat; 00496 double alt; 00497 00499 DemPoint(){}; 00500 00502 DemPoint( double longitude, double latitude, double altitude) 00503 { 00504 lon = longitude; 00505 lat = latitude; 00506 alt = altitude; 00507 } 00508 }; 00509 00513 class DorisHeader 00514 { 00515 public: 00516 //Atributtes 00517 string fileName; 00518 string sensingStart; // UTC 00519 string sensingStop; // UTC 00520 long relOrbit; 00521 long absOrbit; 00522 double deltaUt1; 00523 string leapUtc; 00524 int leapSign; 00525 int leapErr; 00526 long numDsd; 00527 long dsOffset; 00528 long numDsr; 00529 00530 // extra data: the following values are not read from the file. 00531 // but it must be provided for the writing function 00532 //MPH 00533 string procStageCode; 00534 string refDoc; 00535 string procTime; 00536 string softwareVersion; 00537 string phase; 00538 long cycle; 00539 string stateVectorTime; 00540 double xPosition; 00541 double yPosition; 00542 double zPosition; 00543 double xVelocity; 00544 double yVelocity; 00545 double zVelocity; 00546 string stateVectorSource; 00547 string productErr; 00548 long totSize; 00549 long numDataSets; 00550 00551 //SPH 00552 string sphDescriptor; 00553 string sensingStartTai; // TAI 00554 long absOrbitStart; 00555 double relTimeAscNodeStart; 00556 string sensingStopTai; // TAI 00557 long absOrbitStop; 00558 double relTimeAscNodeStop; 00559 string equatorCrossTime; 00560 long equatorCrossLong; 00561 string ascendingFlag; 00562 long startLat; 00563 long startLong; 00564 long stopLat; 00565 long stopLong; 00566 long numIsps; 00567 long numMissingIsps; 00568 long numErrorIsps; 00569 long numDiscardedIsps; 00570 long numRsIsps; 00571 long numRsCorrections; 00572 long dsrSize; 00573 00575 DorisHeader(); 00576 00578 DorisHeader(string fileNam, 00579 string senStart, 00580 string sensStop, 00581 long relOrbi, 00582 long absOrbi, 00583 double delta_Ut1, 00584 string leap_Utc, 00585 int leap_Sign, 00586 int leap_Err, 00587 long num_Dsd, 00588 long ds_Offset, 00589 long num_Dsr); 00590 00592 DorisHeader(string fileNam, 00593 string sensStart, 00594 string sensStop, 00595 long relOrbi, 00596 long absOrbi, 00597 double delta_Ut1, 00598 string leap_Utc, 00599 int leap_Sign, 00600 int leap_Err, 00601 long num_Dsd, 00602 long ds_Offset, 00603 long num_Dsr, 00604 string procStageCod, 00605 string ref_Doc, 00606 string procTim, 00607 string softVersion, 00608 string phaseIn, 00609 long cycleIn, 00610 string stateVectorTim, 00611 double xPos, 00612 double yPos, 00613 double zPos, 00614 double xVel, 00615 double yVel, 00616 double zVel, 00617 string stateVectSource, 00618 string prodErr, 00619 long tot_Size, 00620 long numDataSet, 00621 string sphDesc, 00622 string sensStartTai, 00623 long absOrbStart, 00624 double relTimAscNodeStart, 00625 string sensStopTai, 00626 long absOrbStop, 00627 double relTimAscNodeStop, 00628 string equator_CrossTime, 00629 long equator_CrossLong, 00630 string ascendFlag, 00631 long start_Lat, 00632 long start_Long, 00633 long stop_Lat, 00634 long stop_Long, 00635 long num_Isps, 00636 long numMissIsps, 00637 long numErrIsps, 00638 long numDiscardIsps, 00639 long num_RsIsps, 00640 long num_RsCorrections, 00641 long dsr_Size 00642 ); 00643 00644 }; 00645 00649 class FileModel 00650 { 00651 public: 00652 00653 //Attributes 00654 vector<string> files; 00655 string auxFile; 00656 long timeRef; 00657 double time0; 00658 double time1; 00659 00661 FileModel(){}; 00662 00664 FileModel( vector<string> &fileNames, 00665 const string auxiliaryFile, 00666 const long timeReference, 00667 const double timeZero, 00668 const double timeOne ) 00669 { 00670 files = fileNames; 00671 auxFile = auxiliaryFile; 00672 timeRef = timeReference; 00673 time0 = timeZero; 00674 time1 = timeOne; 00675 } 00676 00677 }; 00678 00682 class HarmonicData 00683 { 00684 public: 00685 00686 //Attributes 00687 vector<long> harmonicTypePitch; 00688 vector<long> harmonicTypeRoll; 00689 vector<long> harmonicTypeYaw; 00690 vector<double> harmonicCoeffPitch; 00691 vector<double> harmonicCoeffRoll; 00692 vector<double> harmonicCoeffYaw; 00693 00695 HarmonicData(){}; 00696 00698 HarmonicData( vector<long> &harmonicTypPitch, 00699 vector<long> &harmonicTypRoll, 00700 vector<long> &harmonicTypYaw, 00701 vector<double> &harmonicCoefPitch, 00702 vector<double> &harmonicCoefRoll, 00703 vector<double> &harmonicCoefYaw ) 00704 { 00705 harmonicTypePitch = harmonicTypPitch; 00706 harmonicTypeRoll = harmonicTypRoll; 00707 harmonicTypeYaw = harmonicTypYaw; 00708 harmonicCoeffPitch = harmonicCoefPitch; 00709 harmonicCoeffRoll = harmonicCoefRoll; 00710 harmonicCoeffYaw = harmonicCoefYaw; 00711 } 00712 00713 }; 00714 00718 class HarmonicModel 00719 { 00720 public: 00721 00722 //Attributes 00723 long angleType; 00724 HarmonicData harmonicData; 00725 double offsets[3]; 00726 00728 HarmonicModel(){}; 00729 00731 HarmonicModel( const long angleTyp, HarmonicData &harmonicDat, double *offset) 00732 { 00733 angleType = angleTyp; 00734 harmonicData = harmonicDat; 00735 00736 for ( int i = 0 ; i < 3 ; ++i ) 00737 { 00738 offsets[i] = offset[i]; 00739 } 00740 } 00741 }; 00742 00746 class MatrixModel 00747 { 00748 public: 00749 00750 //Attributes 00751 double attMatrix[3][3]; 00752 double offsets[3]; 00753 00755 MatrixModel(){}; 00756 00758 MatrixModel( double **matrix, double *offset ) 00759 { 00760 for ( int i = 0 ; i < 3 ; ++i) 00761 { 00762 for ( int j = 0 ; j < 3 ; ++j ) 00763 { 00764 attMatrix[i][j] = matrix[i][j]; 00765 }// end for j 00766 offsets[i] = offset[i]; 00767 }// end for i 00768 } 00769 }; 00770 00774 class MlstHarmonics 00775 { 00776 public: 00777 00778 //Attributes 00779 double refTime; 00780 double period; 00781 double sinAmplitude; 00782 double cosAmplitude; 00783 00785 MlstHarmonics() 00786 { 00787 refTime = 0.; 00788 period = 1.; 00789 sinAmplitude = 0.; 00790 cosAmplitude = 0.; 00791 }; 00792 00794 MlstHarmonics(double time_in, double period_in, 00795 double sinAmp_in, double cosAmp_in) 00796 { 00797 refTime = time_in; 00798 period = period_in; 00799 sinAmplitude = sinAmp_in; 00800 cosAmplitude = cosAmp_in; 00801 } 00802 }; 00803 00807 class MlstNonlinearDrift 00808 { 00809 public: 00810 00811 //Attributes 00812 long linearApproxValidity; 00813 double quadraticTerm; 00814 vector<MlstHarmonics> mlstHarmonics; 00815 00817 MlstNonlinearDrift() 00818 { 00819 long i; 00820 00821 linearApproxValidity = 99999; 00822 quadraticTerm = 0.; 00823 for (i = 0 ; i < 2 ; i ++ ) 00824 { 00825 mlstHarmonics.push_back(MlstHarmonics()); 00826 } 00827 }; 00828 00830 MlstNonlinearDrift(long linApprox, double quadratic, const vector<MlstHarmonics> &harmonics) 00831 { 00832 linearApproxValidity = linApprox; 00833 quadraticTerm = quadratic; 00834 mlstHarmonics = harmonics; 00835 } 00836 }; 00837 00841 class ParamModel 00842 { 00843 public: 00844 00845 //Attributes 00846 long model; 00847 vector<double> modelParam; 00848 00850 ParamModel(){}; 00851 00853 ParamModel( const long mod, vector<double> &modParam) 00854 { 00855 model = mod; 00856 modelParam = modParam; 00857 } 00858 }; 00859 00863 class SwathGeometry 00864 { 00865 public: 00866 00867 //Attributes 00868 long geometryType; 00869 double azimuth; 00870 double elevation; 00871 double altitude; 00872 double distance; 00873 00875 SwathGeometry(){}; 00876 00878 SwathGeometry( long geomType, double azim, double elevat, 00879 double alt, double dist) 00880 { 00881 geometryType = geomType; 00882 azimuth = azim; 00883 elevation = elevat; 00884 altitude = alt; 00885 distance = dist; 00886 } 00887 }; 00888 00892 class TrackerLimits 00893 { 00894 public: 00895 00896 //Attributes 00897 double maxPenalty; 00898 double normThr; 00899 double maxGap; 00900 00902 TrackerLimits(){}; 00903 00905 TrackerLimits( double maxPenal,double normThreshold, double maximumGap) 00906 { 00907 maxPenalty = maxPenal; 00908 normThr = normThreshold; 00909 maxGap = maximumGap; 00910 } 00911 }; 00912 00916 class StfPt 00917 { 00918 public: 00919 00920 //Attributes 00921 double lon; 00922 double lat; 00923 00925 StfPt(){}; 00926 00928 StfPt( double longitude, double latitude ) 00929 { 00930 lon = longitude; 00931 lat = latitude; 00932 } 00933 }; 00934 00938 class StfVhr 00939 { 00940 public: 00941 00942 //Attributes 00943 string stfName; 00944 string ReferenceOSF; 00945 string ReferenceSDF; 00946 long swathType; 00947 long swathPointType; 00948 00949 double timeStep; 00950 long refractionMode; 00951 double frequency; 00952 00953 long numPoints; 00954 vector<double> altitude; 00955 00956 bool geometryFlag; 00957 00958 long repCycle; 00959 long cycleLength; 00960 double mlstDrift; 00961 00962 long absOrbit; 00963 long orbitStart; 00964 long orbitStop; 00965 00966 double position[3]; 00967 double velocity[3]; 00968 00970 StfVhr(); 00971 00973 StfVhr( string stfNam, 00974 string refOSF, 00975 string refSDF, 00976 long swathTyp, 00977 long swathPointTyp, 00978 double timStep, 00979 long refrMode, 00980 double freq, 00981 long numP, 00982 const vector<double> &alt, 00983 bool geomFlag, 00984 long repCycl, 00985 long cyclLength, 00986 double meanlstDrift, 00987 long absOrb, 00988 long orbit0, 00989 long orbit1, 00990 double *pos, 00991 double *vel 00992 ); 00993 00995 StfVhr( const StfVhr &stfVhr ); 00996 00998 ~StfVhr(); 00999 01001 void operator=( const StfVhr &stfVhr ); 01002 01003 };//class StfVhr 01004 01008 class ZonePoint 01009 { 01010 public: 01011 01012 //Attributes 01013 double ptLong; 01014 double ptLat; 01015 01017 ZonePoint(){}; 01018 01020 ZonePoint( double ptLongitude, double ptLatitude) 01021 { 01022 ptLong = ptLongitude; 01023 ptLat = ptLatitude; 01024 } 01025 }; 01026 01030 class AttitudeModel 01031 { 01032 public: 01033 //Attributes 01034 long attitudeModel; 01035 long AOCS; 01036 ParamModel *paramModel; 01037 HarmonicModel *harmonicModel; 01038 FileModel *fileModel; 01039 AngleModel *angleModel; 01040 MatrixModel *matrixModel; 01041 01043 AttitudeModel(); 01044 01046 AttitudeModel( long attModel, 01047 long AOCSModel, 01048 ParamModel &parMod, 01049 HarmonicModel &harmMod, 01050 FileModel &fileMod, 01051 AngleModel &angleMod, 01052 MatrixModel &matrixMod 01053 ); 01054 01056 AttitudeModel( const AttitudeModel &attModel ); 01057 01059 ~AttitudeModel(); 01060 01062 void operator=( const AttitudeModel &attModel ); 01063 01064 protected: 01065 01066 private: 01068 void eraseAttitude(); 01069 }; 01070 01074 class PolarMotionParams 01075 { 01076 public: 01077 //Attributes 01078 double x; 01079 double y; 01080 01082 PolarMotionParams() 01083 { 01084 x = 0.; 01085 y = 0.; 01086 } 01087 01089 PolarMotionParams( double x1, double y1 ) 01090 { 01091 x = x1; 01092 y = y1; 01093 } 01094 01095 }; 01096 01100 class IersBulletinBrec 01101 { 01102 public: 01103 double day; 01104 double ut1Utc; 01105 double ut1Tai; 01106 PolarMotionParams polarMotionParams; 01107 01109 IersBulletinBrec() 01110 { 01111 day = 0.; 01112 ut1Utc = 0.; 01113 ut1Tai = 0.; 01114 } 01115 01117 IersBulletinBrec(double dayUtc, double diffUt1Utc, double diffUt1Tai, 01118 PolarMotionParams polarMotion) 01119 { 01120 day = dayUtc; 01121 ut1Utc = diffUt1Utc; 01122 ut1Tai = diffUt1Tai; 01123 polarMotionParams = polarMotion; 01124 } 01125 01126 }; 01127 01131 class IersBulletinArec 01132 { 01133 public: 01134 double day; 01135 double ut1Utc; 01136 double ut1Tai; 01137 PolarMotionParams polarMotionParams; 01138 01140 IersBulletinArec() 01141 { 01142 day = 0.; 01143 ut1Utc = 0.; 01144 ut1Tai = 0.; 01145 } 01146 01148 IersBulletinArec(double dayUtc, double diffUt1Utc, double diffUt1Tai, 01149 PolarMotionParams polarMotion) 01150 { 01151 day = dayUtc; 01152 ut1Utc = diffUt1Utc; 01153 ut1Tai = diffUt1Tai; 01154 polarMotionParams = polarMotion; 01155 } 01156 01157 }; 01158 01162 class PolarMotionFormula 01163 { 01164 public: 01165 01166 double ax; 01167 double bx; 01168 double cx; 01169 double dx; 01170 double ex; 01171 01172 double ay; 01173 double by; 01174 double cy; 01175 double dy; 01176 double ey; 01177 01178 double Aref; 01179 double Adiv; 01180 double Cref; 01181 double Cdiv; 01182 01184 PolarMotionFormula() 01185 { 01186 ax = 0.; 01187 bx = 0.; 01188 cx = 0.; 01189 dx = 0.; 01190 ex = 0.; 01191 01192 ay = 0.; 01193 by = 0.; 01194 cy = 0.; 01195 dy = 0.; 01196 ey = 0.; 01197 01198 Aref = 0.; 01199 Adiv = 0.; 01200 Cref = 0.; 01201 Cdiv = 0.; 01202 } 01203 01205 PolarMotionFormula(double a1, double b1, double c1, double d1, double e1, 01206 double a2, double b2, double c2, double d2, double e2, 01207 double Ar, double Ad, double Cr, double Cd) 01208 { 01209 ax = a1; 01210 bx = b1; 01211 cx = c1; 01212 dx = d1; 01213 ex = e1; 01214 01215 ay = a2; 01216 by = b2; 01217 cy = c2; 01218 dy = d2; 01219 ey = e2; 01220 01221 Aref = Ar; 01222 Adiv = Ad; 01223 Cref = Cr; 01224 Cdiv = Cd; 01225 } 01226 01227 }; 01228 01232 class TimeCorrelationFormula 01233 { 01234 public: 01235 01236 double a; 01237 double b; 01238 double bRef; 01239 01241 TimeCorrelationFormula() 01242 { 01243 a = 0.; 01244 b = 0.; 01245 bRef = 0.; 01246 } 01247 01249 TimeCorrelationFormula(double a1, double b1, double br) 01250 { 01251 a = a1; 01252 b = b1; 01253 bRef = br; 01254 } 01255 }; 01256 01260 class IersBulletinBFile 01261 { 01262 public: 01263 01264 string bulletinId; 01265 vector<IersBulletinBrec> finalTable; 01266 vector<IersBulletinBrec> preliminaryTable; 01267 01269 IersBulletinBFile() 01270 { 01271 bulletinId = ""; 01272 } 01273 01275 IersBulletinBFile(string bulId, 01276 vector<IersBulletinBrec> &vecFinal, 01277 vector<IersBulletinBrec> &vecPrel) 01278 { 01279 bulletinId = bulId; 01280 finalTable = vecFinal; 01281 preliminaryTable = vecPrel; 01282 } 01283 01284 };//class IersBulletinBFile 01285 01289 class IersBulletinAFile 01290 { 01291 public: 01292 01293 string bulletinId; 01294 vector<IersBulletinArec> predictionTable; 01295 PolarMotionFormula polarMotionFormula; 01296 TimeCorrelationFormula timeCorrelationFormula; 01297 01299 IersBulletinAFile() 01300 { 01301 bulletinId = ""; 01302 } 01303 01305 IersBulletinAFile(string bulId, 01306 vector<IersBulletinArec> &vecPred, 01307 PolarMotionFormula &polarFormula, 01308 TimeCorrelationFormula &timeFormula) 01309 { 01310 bulletinId = bulId; 01311 predictionTable = vecPred; 01312 polarMotionFormula = polarFormula; 01313 timeCorrelationFormula = timeFormula; 01314 } 01315 01316 };//class IersBulletinAFile 01317 01318 }//end EECFI 01319 01320 #endif