![]() |
Earth Observation Mission CFI Software DataHandling Software User Manual |
![]() |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.3 00003 //-------------------------------------------------------- 00004 00005 //-------------------------------------------------------------------- 00006 // CVS Info: $Id: DataHandlingData.h,v 1.16 2011/11/23 12:56:28 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 } XDSatIdEnum; 00389 00391 typedef enum 00392 { 00393 XDCFI_BULLETIN_A = 0, 00394 XDCFI_BULLETIN_B 00395 } XDBulletinTypeEnum; 00396 00397 //------------------------------------------------------ 00398 // DATA STRUCTURES 00399 //------------------------------------------------------ 00400 00404 class AngleModel 00405 { 00406 public: 00407 00408 //Attributes 00409 double angles[3]; 00410 double offsets[3]; 00411 00413 AngleModel(){}; 00414 00416 AngleModel( double *angle, double *offset) 00417 { 00418 for ( int i = 0 ; i < 3 ; ++i) 00419 { 00420 angles[i] = angle[i]; 00421 offsets[i] = offset[i]; 00422 }// end for i 00423 } 00424 }; 00425 00429 class Asar 00430 { 00431 public: 00432 //Attributes 00433 long asarType; 00434 double slantRangeLeft; 00435 double slantRangeRight; 00436 00438 Asar(){}; 00439 00444 Asar( const long asarTyp, double slantLeft, double slantRight) 00445 { 00446 asarType = asarTyp; 00447 slantRangeLeft = slantLeft; 00448 slantRangeRight = slantRight; 00449 } 00450 };//class Asar 00451 00452 00456 class BulbTable 00457 { 00458 public: 00459 double day; 00460 double ut1Utc; 00461 double ut1Tai; 00462 00464 BulbTable(){}; 00465 00467 BulbTable(double dayUtc, double diffUt1Utc, double diffUt1Tai) 00468 { 00469 day = dayUtc; 00470 ut1Utc = diffUt1Utc; 00471 ut1Tai = diffUt1Tai; 00472 } 00473 00474 }; 00475 00479 class DemPoint 00480 { 00481 public: 00482 00483 //Attributes 00484 double lon; 00485 double lat; 00486 double alt; 00487 00489 DemPoint(){}; 00490 00492 DemPoint( double longitude, double latitude, double altitude) 00493 { 00494 lon = longitude; 00495 lat = latitude; 00496 alt = altitude; 00497 } 00498 }; 00499 00503 class DorisHeader 00504 { 00505 public: 00506 //Atributtes 00507 string fileName; 00508 string sensingStart; // UTC 00509 string sensingStop; // UTC 00510 long relOrbit; 00511 long absOrbit; 00512 double deltaUt1; 00513 string leapUtc; 00514 int leapSign; 00515 int leapErr; 00516 long numDsd; 00517 long dsOffset; 00518 long numDsr; 00519 00520 // extra data: the following values are not read from the file. 00521 // but it must be provided for the writing function 00522 //MPH 00523 string procStageCode; 00524 string refDoc; 00525 string procTime; 00526 string softwareVersion; 00527 string phase; 00528 long cycle; 00529 string stateVectorTime; 00530 double xPosition; 00531 double yPosition; 00532 double zPosition; 00533 double xVelocity; 00534 double yVelocity; 00535 double zVelocity; 00536 string stateVectorSource; 00537 string productErr; 00538 long totSize; 00539 long numDataSets; 00540 00541 //SPH 00542 string sphDescriptor; 00543 string sensingStartTai; // TAI 00544 long absOrbitStart; 00545 double relTimeAscNodeStart; 00546 string sensingStopTai; // TAI 00547 long absOrbitStop; 00548 double relTimeAscNodeStop; 00549 string equatorCrossTime; 00550 long equatorCrossLong; 00551 string ascendingFlag; 00552 long startLat; 00553 long startLong; 00554 long stopLat; 00555 long stopLong; 00556 long numIsps; 00557 long numMissingIsps; 00558 long numErrorIsps; 00559 long numDiscardedIsps; 00560 long numRsIsps; 00561 long numRsCorrections; 00562 long dsrSize; 00563 00565 DorisHeader(); 00566 00568 DorisHeader(string fileNam, 00569 string senStart, 00570 string sensStop, 00571 long relOrbi, 00572 long absOrbi, 00573 double delta_Ut1, 00574 string leap_Utc, 00575 int leap_Sign, 00576 int leap_Err, 00577 long num_Dsd, 00578 long ds_Offset, 00579 long num_Dsr); 00580 00582 DorisHeader(string fileNam, 00583 string sensStart, 00584 string sensStop, 00585 long relOrbi, 00586 long absOrbi, 00587 double delta_Ut1, 00588 string leap_Utc, 00589 int leap_Sign, 00590 int leap_Err, 00591 long num_Dsd, 00592 long ds_Offset, 00593 long num_Dsr, 00594 string procStageCod, 00595 string ref_Doc, 00596 string procTim, 00597 string softVersion, 00598 string phaseIn, 00599 long cycleIn, 00600 string stateVectorTim, 00601 double xPos, 00602 double yPos, 00603 double zPos, 00604 double xVel, 00605 double yVel, 00606 double zVel, 00607 string stateVectSource, 00608 string prodErr, 00609 long tot_Size, 00610 long numDataSet, 00611 string sphDesc, 00612 string sensStartTai, 00613 long absOrbStart, 00614 double relTimAscNodeStart, 00615 string sensStopTai, 00616 long absOrbStop, 00617 double relTimAscNodeStop, 00618 string equator_CrossTime, 00619 long equator_CrossLong, 00620 string ascendFlag, 00621 long start_Lat, 00622 long start_Long, 00623 long stop_Lat, 00624 long stop_Long, 00625 long num_Isps, 00626 long numMissIsps, 00627 long numErrIsps, 00628 long numDiscardIsps, 00629 long num_RsIsps, 00630 long num_RsCorrections, 00631 long dsr_Size 00632 ); 00633 00634 }; 00635 00639 class FileModel 00640 { 00641 public: 00642 00643 //Attributes 00644 vector<string> files; 00645 string auxFile; 00646 long timeRef; 00647 double time0; 00648 double time1; 00649 00651 FileModel(){}; 00652 00654 FileModel( vector<string> &fileNames, 00655 const string auxiliaryFile, 00656 const long timeReference, 00657 const double timeZero, 00658 const double timeOne ) 00659 { 00660 files = fileNames; 00661 auxFile = auxiliaryFile; 00662 timeRef = timeReference; 00663 time0 = timeZero; 00664 time1 = timeOne; 00665 } 00666 00667 }; 00668 00672 class HarmonicData 00673 { 00674 public: 00675 00676 //Attributes 00677 vector<long> harmonicTypePitch; 00678 vector<long> harmonicTypeRoll; 00679 vector<long> harmonicTypeYaw; 00680 vector<double> harmonicCoeffPitch; 00681 vector<double> harmonicCoeffRoll; 00682 vector<double> harmonicCoeffYaw; 00683 00685 HarmonicData(){}; 00686 00688 HarmonicData( vector<long> &harmonicTypPitch, 00689 vector<long> &harmonicTypRoll, 00690 vector<long> &harmonicTypYaw, 00691 vector<double> &harmonicCoefPitch, 00692 vector<double> &harmonicCoefRoll, 00693 vector<double> &harmonicCoefYaw ) 00694 { 00695 harmonicTypePitch = harmonicTypPitch; 00696 harmonicTypeRoll = harmonicTypRoll; 00697 harmonicTypeYaw = harmonicTypYaw; 00698 harmonicCoeffPitch = harmonicCoefPitch; 00699 harmonicCoeffRoll = harmonicCoefRoll; 00700 harmonicCoeffYaw = harmonicCoefYaw; 00701 } 00702 00703 }; 00704 00708 class HarmonicModel 00709 { 00710 public: 00711 00712 //Attributes 00713 long angleType; 00714 HarmonicData harmonicData; 00715 double offsets[3]; 00716 00718 HarmonicModel(){}; 00719 00721 HarmonicModel( const long angleTyp, HarmonicData &harmonicDat, double *offset) 00722 { 00723 angleType = angleTyp; 00724 harmonicData = harmonicDat; 00725 00726 for ( int i = 0 ; i < 3 ; ++i ) 00727 { 00728 offsets[i] = offset[i]; 00729 } 00730 } 00731 }; 00732 00736 class MatrixModel 00737 { 00738 public: 00739 00740 //Attributes 00741 double attMatrix[3][3]; 00742 double offsets[3]; 00743 00745 MatrixModel(){}; 00746 00748 MatrixModel( double **matrix, double *offset ) 00749 { 00750 for ( int i = 0 ; i < 3 ; ++i) 00751 { 00752 for ( int j = 0 ; j < 3 ; ++j ) 00753 { 00754 attMatrix[i][j] = matrix[i][j]; 00755 }// end for j 00756 offsets[i] = offset[i]; 00757 }// end for i 00758 } 00759 }; 00760 00764 class MlstHarmonics 00765 { 00766 public: 00767 00768 //Attributes 00769 double refTime; 00770 double period; 00771 double sinAmplitude; 00772 double cosAmplitude; 00773 00775 MlstHarmonics() 00776 { 00777 refTime = 0.; 00778 period = 1.; 00779 sinAmplitude = 0.; 00780 cosAmplitude = 0.; 00781 }; 00782 00784 MlstHarmonics(double time_in, double period_in, 00785 double sinAmp_in, double cosAmp_in) 00786 { 00787 refTime = time_in; 00788 period = period_in; 00789 sinAmplitude = sinAmp_in; 00790 cosAmplitude = cosAmp_in; 00791 } 00792 }; 00793 00797 class MlstNonlinearDrift 00798 { 00799 public: 00800 00801 //Attributes 00802 long linearApproxValidity; 00803 double quadraticTerm; 00804 vector<MlstHarmonics> mlstHarmonics; 00805 00807 MlstNonlinearDrift() 00808 { 00809 long i; 00810 00811 linearApproxValidity = 99999; 00812 quadraticTerm = 0.; 00813 for (i = 0 ; i < 2 ; i ++ ) 00814 { 00815 mlstHarmonics.push_back(MlstHarmonics()); 00816 } 00817 }; 00818 00820 MlstNonlinearDrift(long linApprox, double quadratic, const vector<MlstHarmonics> &harmonics) 00821 { 00822 linearApproxValidity = linApprox; 00823 quadraticTerm = quadratic; 00824 mlstHarmonics = harmonics; 00825 } 00826 }; 00827 00831 class ParamModel 00832 { 00833 public: 00834 00835 //Attributes 00836 long model; 00837 vector<double> modelParam; 00838 00840 ParamModel(){}; 00841 00843 ParamModel( const long mod, vector<double> &modParam) 00844 { 00845 model = mod; 00846 modelParam = modParam; 00847 } 00848 }; 00849 00853 class SwathGeometry 00854 { 00855 public: 00856 00857 //Attributes 00858 long geometryType; 00859 double azimuth; 00860 double elevation; 00861 double altitude; 00862 double distance; 00863 00865 SwathGeometry(){}; 00866 00868 SwathGeometry( long geomType, double azim, double elevat, 00869 double alt, double dist) 00870 { 00871 geometryType = geomType; 00872 azimuth = azim; 00873 elevation = elevat; 00874 altitude = alt; 00875 distance = dist; 00876 } 00877 }; 00878 00882 class TrackerLimits 00883 { 00884 public: 00885 00886 //Attributes 00887 double maxPenalty; 00888 double normThr; 00889 double maxGap; 00890 00892 TrackerLimits(){}; 00893 00895 TrackerLimits( double maxPenal,double normThreshold, double maximumGap) 00896 { 00897 maxPenalty = maxPenal; 00898 normThr = normThreshold; 00899 maxGap = maximumGap; 00900 } 00901 }; 00902 00906 class StfPt 00907 { 00908 public: 00909 00910 //Attributes 00911 double lon; 00912 double lat; 00913 00915 StfPt(){}; 00916 00918 StfPt( double longitude, double latitude ) 00919 { 00920 lon = longitude; 00921 lat = latitude; 00922 } 00923 }; 00924 00928 class StfVhr 00929 { 00930 public: 00931 00932 //Attributes 00933 string stfName; 00934 string ReferenceOSF; 00935 string ReferenceSDF; 00936 long swathType; 00937 long swathPointType; 00938 00939 double timeStep; 00940 long refractionMode; 00941 double frequency; 00942 00943 long numPoints; 00944 vector<double> altitude; 00945 00946 bool geometryFlag; 00947 00948 long repCycle; 00949 long cycleLength; 00950 double mlstDrift; 00951 00952 long absOrbit; 00953 long orbitStart; 00954 long orbitStop; 00955 00956 double position[3]; 00957 double velocity[3]; 00958 00960 StfVhr(); 00961 00963 StfVhr( string stfNam, 00964 string refOSF, 00965 string refSDF, 00966 long swathTyp, 00967 long swathPointTyp, 00968 double timStep, 00969 long refrMode, 00970 double freq, 00971 long numP, 00972 const vector<double> &alt, 00973 bool geomFlag, 00974 long repCycl, 00975 long cyclLength, 00976 double meanlstDrift, 00977 long absOrb, 00978 long orbit0, 00979 long orbit1, 00980 double *pos, 00981 double *vel 00982 ); 00983 00985 StfVhr( const StfVhr &stfVhr ); 00986 00988 ~StfVhr(); 00989 00991 void operator=( const StfVhr &stfVhr ); 00992 00993 };//class StfVhr 00994 00998 class ZonePoint 00999 { 01000 public: 01001 01002 //Attributes 01003 double ptLong; 01004 double ptLat; 01005 01007 ZonePoint(){}; 01008 01010 ZonePoint( double ptLongitude, double ptLatitude) 01011 { 01012 ptLong = ptLongitude; 01013 ptLat = ptLatitude; 01014 } 01015 }; 01016 01020 class AttitudeModel 01021 { 01022 public: 01023 //Attributes 01024 long attitudeModel; 01025 long AOCS; 01026 ParamModel *paramModel; 01027 HarmonicModel *harmonicModel; 01028 FileModel *fileModel; 01029 AngleModel *angleModel; 01030 MatrixModel *matrixModel; 01031 01033 AttitudeModel(); 01034 01036 AttitudeModel( long attModel, 01037 long AOCSModel, 01038 ParamModel &parMod, 01039 HarmonicModel &harmMod, 01040 FileModel &fileMod, 01041 AngleModel &angleMod, 01042 MatrixModel &matrixMod 01043 ); 01044 01046 AttitudeModel( const AttitudeModel &attModel ); 01047 01049 ~AttitudeModel(); 01050 01052 void operator=( const AttitudeModel &attModel ); 01053 01054 protected: 01055 01056 private: 01058 void eraseAttitude(); 01059 }; 01060 01064 class PolarMotionParams 01065 { 01066 public: 01067 //Attributes 01068 double x; 01069 double y; 01070 01072 PolarMotionParams() 01073 { 01074 x = 0.; 01075 y = 0.; 01076 } 01077 01079 PolarMotionParams( double x1, double y1 ) 01080 { 01081 x = x1; 01082 y = y1; 01083 } 01084 01085 }; 01086 01090 class IersBulletinBrec 01091 { 01092 public: 01093 double day; 01094 double ut1Utc; 01095 double ut1Tai; 01096 PolarMotionParams polarMotionParams; 01097 01099 IersBulletinBrec() 01100 { 01101 day = 0.; 01102 ut1Utc = 0.; 01103 ut1Tai = 0.; 01104 } 01105 01107 IersBulletinBrec(double dayUtc, double diffUt1Utc, double diffUt1Tai, 01108 PolarMotionParams polarMotion) 01109 { 01110 day = dayUtc; 01111 ut1Utc = diffUt1Utc; 01112 ut1Tai = diffUt1Tai; 01113 polarMotionParams = polarMotion; 01114 } 01115 01116 }; 01117 01121 class IersBulletinArec 01122 { 01123 public: 01124 double day; 01125 double ut1Utc; 01126 double ut1Tai; 01127 PolarMotionParams polarMotionParams; 01128 01130 IersBulletinArec() 01131 { 01132 day = 0.; 01133 ut1Utc = 0.; 01134 ut1Tai = 0.; 01135 } 01136 01138 IersBulletinArec(double dayUtc, double diffUt1Utc, double diffUt1Tai, 01139 PolarMotionParams polarMotion) 01140 { 01141 day = dayUtc; 01142 ut1Utc = diffUt1Utc; 01143 ut1Tai = diffUt1Tai; 01144 polarMotionParams = polarMotion; 01145 } 01146 01147 }; 01148 01152 class PolarMotionFormula 01153 { 01154 public: 01155 01156 double ax; 01157 double bx; 01158 double cx; 01159 double dx; 01160 double ex; 01161 01162 double ay; 01163 double by; 01164 double cy; 01165 double dy; 01166 double ey; 01167 01168 double Aref; 01169 double Adiv; 01170 double Cref; 01171 double Cdiv; 01172 01174 PolarMotionFormula() 01175 { 01176 ax = 0.; 01177 bx = 0.; 01178 cx = 0.; 01179 dx = 0.; 01180 ex = 0.; 01181 01182 ay = 0.; 01183 by = 0.; 01184 cy = 0.; 01185 dy = 0.; 01186 ey = 0.; 01187 01188 Aref = 0.; 01189 Adiv = 0.; 01190 Cref = 0.; 01191 Cdiv = 0.; 01192 } 01193 01195 PolarMotionFormula(double a1, double b1, double c1, double d1, double e1, 01196 double a2, double b2, double c2, double d2, double e2, 01197 double Ar, double Ad, double Cr, double Cd) 01198 { 01199 ax = a1; 01200 bx = b1; 01201 cx = c1; 01202 dx = d1; 01203 ex = e1; 01204 01205 ay = a2; 01206 by = b2; 01207 cy = c2; 01208 dy = d2; 01209 ey = e2; 01210 01211 Aref = Ar; 01212 Adiv = Ad; 01213 Cref = Cr; 01214 Cdiv = Cd; 01215 } 01216 01217 }; 01218 01222 class TimeCorrelationFormula 01223 { 01224 public: 01225 01226 double a; 01227 double b; 01228 double bRef; 01229 01231 TimeCorrelationFormula() 01232 { 01233 a = 0.; 01234 b = 0.; 01235 bRef = 0.; 01236 } 01237 01239 TimeCorrelationFormula(double a1, double b1, double br) 01240 { 01241 a = a1; 01242 b = b1; 01243 bRef = br; 01244 } 01245 }; 01246 01250 class IersBulletinBFile 01251 { 01252 public: 01253 01254 string bulletinId; 01255 vector<IersBulletinBrec> finalTable; 01256 vector<IersBulletinBrec> preliminaryTable; 01257 01259 IersBulletinBFile() 01260 { 01261 bulletinId = ""; 01262 } 01263 01265 IersBulletinBFile(string bulId, 01266 vector<IersBulletinBrec> &vecFinal, 01267 vector<IersBulletinBrec> &vecPrel) 01268 { 01269 bulletinId = bulId; 01270 finalTable = vecFinal; 01271 preliminaryTable = vecPrel; 01272 } 01273 01274 };//class IersBulletinBFile 01275 01279 class IersBulletinAFile 01280 { 01281 public: 01282 01283 string bulletinId; 01284 vector<IersBulletinArec> predictionTable; 01285 PolarMotionFormula polarMotionFormula; 01286 TimeCorrelationFormula timeCorrelationFormula; 01287 01289 IersBulletinAFile() 01290 { 01291 bulletinId = ""; 01292 } 01293 01295 IersBulletinAFile(string bulId, 01296 vector<IersBulletinArec> &vecPred, 01297 PolarMotionFormula &polarFormula, 01298 TimeCorrelationFormula &timeFormula) 01299 { 01300 bulletinId = bulId; 01301 predictionTable = vecPred; 01302 polarMotionFormula = polarFormula; 01303 timeCorrelationFormula = timeFormula; 01304 } 01305 01306 };//class IersBulletinAFile 01307 01308 }//end EECFI 01309 01310 #endif