Earth Observation Mission CFI Software DataHandling Software User Manual |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.2 00003 //-------------------------------------------------------- 00004 00005 //-------------------------------------------------------------------- 00006 // CVS Info: $Id: DataHandlingData.h,v 1.11 2010/12/02 16:15:32 cavm 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_QUASI_TRUE_DATE, 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_B_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_FILE_TYPE_MAX_VALUE 00268 } FileTypeEnum; 00269 00271 typedef enum 00272 { 00273 XDCFI_DEM_ACE_MODEL = 0, 00274 XDCFI_DEM_GETASSE30_V1, 00275 XDCFI_DEM_GETASSE30_V2, 00276 XDCFI_DEM_ACE2_9SEC, 00277 XDCFI_DEM_NUM_MODELS 00278 } DemModelEnum; 00279 00281 typedef enum 00282 { 00283 XDCFI_DEM_GETASSE30_SOURCE_ACE, /* land-ice/snow */ 00284 XDCFI_DEM_GETASSE30_SOURCE_MSS, /* sea */ 00285 XDCFI_DEM_GETASSE30_SOURCE_EGM96, /* sea-ice */ 00286 XDCFI_DEM_GETASSE30_SOURCE_SRTM30 /* land */ 00287 } DemGetasseDataSourceEnum; 00288 00289 /* DEM Data Source Types for ACE2 9secs */ 00290 typedef enum 00291 { 00292 XDCFI_DEM_ACE2_SOURCE_SRTM0, /* Pure SRTM (above 60°N pure GLOBE data, below 60S pure ACE [original] data) */ 00293 XDCFI_DEM_ACE2_SOURCE_SRTM1, /* SRTM voids filled by interpolation and/or altimeter data */ 00294 XDCFI_DEM_ACE2_SOURCE_SRTM2, /* SRTM data warped using the ERS-1 Geodetic Mission */ 00295 XDCFI_DEM_ACE2_SOURCE_SRTM3, /* SRTM data warped using EnviSat & ERS-2 data */ 00296 XDCFI_DEM_ACE2_SOURCE_SRTM_LAKE, /* Mean lake level data derived from Altimetry */ 00297 XDCFI_DEM_ACE2_SOURCE_SRTM_GLOBE, /* GLOBE/ACE data warped using combined altimetry (only above 60°N) */ 00298 XDCFI_DEM_ACE2_SOURCE_SRTM_ALT /* Pure altimetry data (derived from ERS-1 Geodetic Mission, 00299 ERS-2 and EnviSat data using Delaunay Triangulation and Bilinear interpolation) */ 00300 } DemAce2DataSourceEnum; 00301 00302 00304 typedef enum 00305 { 00306 XDCFI_CFI_READ_ATT_INIT_PARSER_ERR = 0, 00307 XDCFI_CFI_READ_ATT_READ_PARAM_ERR, 00308 XDCFI_CFI_READ_ATT_WRONG_FILE_TYPE_ERR, 00309 XDCFI_CFI_READ_XML_ATT_NAVIGATION_ERR, 00310 XDCFI_CFI_READ_ATT_WRONG_DATA_TYPE_ERR, 00311 XDCFI_CFI_READ_ATT_INCONSISTENT_DATA_TYPE_ERR, 00312 XDCFI_CFI_READ_ATT_XML_DATA_BLOCK_SIZE_ERR, 00313 XDCFI_CFI_READ_ATT_WRONG_REF_FRAME_ERR, 00314 XDCFI_CFI_READ_ATT_READ_LIST_ERR, 00315 XDCFI_CFI_READ_ATT_TIME_CONV_ERR, 00316 XDCFI_CFI_READ_ATT_MEMORY_ERR, 00317 XDCFI_CFI_READ_ATT_CLEANUP_PARSER_ERR, 00318 XDCFI_CFI_READ_ATT_WRONG_TIME_REF_ERR, 00319 XDCFI_CFI_READ_ATT_WRONG_QUATERNION_ERR, 00320 XDCFI_CFI_READ_ATT_WRONG_ANGLE_ERR, 00321 XDCFI_CFI_READ_ATT_MAX_GAP_ERR 00322 } ReadAttErrEnum; 00323 00325 typedef enum 00326 { 00327 XDCFI_DEFAULT_VALUES = 0, 00328 XDCFI_USER_VALUES = 1 00329 } PrecisePropagUserFlagEnum; 00330 00332 typedef enum 00333 { 00334 XDCFI_NOT_SELECT = 0, 00335 XDCFI_SELECT = 1 00336 } PrecisePropagSelectionFlagEnum; 00337 00339 typedef enum 00340 { 00341 XDCFI_SGA_USE_PARAMETERS = 0, 00342 XDCFI_SGA_READ_VALUES_FROM_FILE = 1 00343 } PrecisePropagSgaFlagEnum; 00344 00346 typedef enum 00347 { 00348 XDCFI_SAT_DEFAULT = 0, 00349 XDCFI_SAT_DEFAULT1 = 1, 00350 XDCFI_SAT_DEFAULT2 = 2, 00351 XDCFI_SAT_DEFAULT3 = 3, 00352 XDCFI_SAT_DEFAULT4 = 4, 00353 XDCFI_SAT_DEFAULT5 = 5, 00354 XDCFI_SAT_DEFAULT6 = 6, 00355 XDCFI_SAT_DEFAULT7 = 7, 00356 XDCFI_SAT_DEFAULT8 = 8, 00357 XDCFI_SAT_DEFAULT9 = 9, 00358 XDCFI_SAT_ERS1 = 11, 00359 XDCFI_SAT_ERS2 = 12, 00360 XDCFI_SAT_ENVISAT = 21, 00361 XDCFI_SAT_METOP1 = 31, 00362 XDCFI_SAT_METOP2 = 32, 00363 XDCFI_SAT_METOP3 = 33, 00364 XDCFI_SAT_CRYOSAT = 41, 00365 XDCFI_SAT_ADM = 51, 00366 XDCFI_SAT_GOCE = 61, 00367 XDCFI_SAT_SMOS = 71, 00368 XDCFI_SAT_TERRASAR = 81, 00369 XDCFI_SAT_EARTHCARE = 91, 00370 XDCFI_SAT_SWARM_A = 101, 00371 XDCFI_SAT_SWARM_B = 102, 00372 XDCFI_SAT_SWARM_C = 103, 00373 XDCFI_SAT_SENTINEL_1A = 110, 00374 XDCFI_SAT_SENTINEL_1B = 111, 00375 XDCFI_SAT_SENTINEL_2 = 112, 00376 XDCFI_SAT_SENTINEL_3 = 113, 00377 XDCFI_SAT_SEOSAT = 120, 00378 XDCFI_SAT_SENTINEL_1C = 125, 00379 XDCFI_SAT_SENTINEL_2A = 126, 00380 XDCFI_SAT_SENTINEL_2B = 127, 00381 XDCFI_SAT_SENTINEL_2C = 128, 00382 XDCFI_SAT_SENTINEL_3A = 129, 00383 XDCFI_SAT_SENTINEL_3B = 130, 00384 XDCFI_SAT_SENTINEL_3C = 131, 00385 XDCFI_SAT_GENERIC = 200 00386 } XDSatIdEnum; 00387 00388 //------------------------------------------------------ 00389 // DATA STRUCTURES 00390 //------------------------------------------------------ 00391 00395 class AngleModel 00396 { 00397 public: 00398 00399 //Attributes 00400 double angles[3]; 00401 double offsets[3]; 00402 00404 AngleModel(){}; 00405 00407 AngleModel( double *angle, double *offset) 00408 { 00409 for ( int i = 0 ; i < 3 ; ++i) 00410 { 00411 angles[i] = angle[i]; 00412 offsets[i] = offset[i]; 00413 }// end for i 00414 } 00415 }; 00416 00420 class Asar 00421 { 00422 public: 00423 //Attributes 00424 long asarType; 00425 double slantRangeLeft; 00426 double slantRangeRight; 00427 00429 Asar(){}; 00430 00435 Asar( const long asarTyp, double slantLeft, double slantRight) 00436 { 00437 asarType = asarTyp; 00438 slantRangeLeft = slantLeft; 00439 slantRangeRight = slantRight; 00440 } 00441 };//class Asar 00442 00443 00447 class BulbTable 00448 { 00449 public: 00450 double day; 00451 double ut1Utc; 00452 double ut1Tai; 00453 00455 BulbTable(){}; 00456 00458 BulbTable(double dayUtc, double diffUt1Utc, double diffUt1Tai) 00459 { 00460 day = dayUtc; 00461 ut1Utc = diffUt1Utc; 00462 ut1Tai = diffUt1Tai; 00463 } 00464 00465 }; 00466 00470 class DemPoint 00471 { 00472 public: 00473 00474 //Attributes 00475 double lon; 00476 double lat; 00477 double alt; 00478 00480 DemPoint(){}; 00481 00483 DemPoint( double longitude, double latitude, double altitude) 00484 { 00485 lon = longitude; 00486 lat = latitude; 00487 alt = altitude; 00488 } 00489 }; 00490 00494 class DorisHeader 00495 { 00496 public: 00497 //Atributtes 00498 string fileName; 00499 string sensingStart; // UTC 00500 string sensingStop; // UTC 00501 long relOrbit; 00502 long absOrbit; 00503 double deltaUt1; 00504 string leapUtc; 00505 int leapSign; 00506 int leapErr; 00507 long numDsd; 00508 long dsOffset; 00509 long numDsr; 00510 00511 // extra data: the following values are not read from the file. 00512 // but it must be provided for the writing function 00513 //MPH 00514 string procStageCode; 00515 string refDoc; 00516 string procTime; 00517 string softwareVersion; 00518 string phase; 00519 long cycle; 00520 string stateVectorTime; 00521 double xPosition; 00522 double yPosition; 00523 double zPosition; 00524 double xVelocity; 00525 double yVelocity; 00526 double zVelocity; 00527 string stateVectorSource; 00528 string productErr; 00529 long totSize; 00530 long numDataSets; 00531 00532 //SPH 00533 string sphDescriptor; 00534 string sensingStartTai; // TAI 00535 long absOrbitStart; 00536 double relTimeAscNodeStart; 00537 string sensingStopTai; // TAI 00538 long absOrbitStop; 00539 double relTimeAscNodeStop; 00540 string equatorCrossTime; 00541 long equatorCrossLong; 00542 string ascendingFlag; 00543 long startLat; 00544 long startLong; 00545 long stopLat; 00546 long stopLong; 00547 long numIsps; 00548 long numMissingIsps; 00549 long numErrorIsps; 00550 long numDiscardedIsps; 00551 long numRsIsps; 00552 long numRsCorrections; 00553 long dsrSize; 00554 00556 DorisHeader(); 00557 00559 DorisHeader(string fileNam, 00560 string senStart, 00561 string sensStop, 00562 long relOrbi, 00563 long absOrbi, 00564 double delta_Ut1, 00565 string leap_Utc, 00566 int leap_Sign, 00567 int leap_Err, 00568 long num_Dsd, 00569 long ds_Offset, 00570 long num_Dsr); 00571 00573 DorisHeader(string fileNam, 00574 string sensStart, 00575 string sensStop, 00576 long relOrbi, 00577 long absOrbi, 00578 double delta_Ut1, 00579 string leap_Utc, 00580 int leap_Sign, 00581 int leap_Err, 00582 long num_Dsd, 00583 long ds_Offset, 00584 long num_Dsr, 00585 string procStageCod, 00586 string ref_Doc, 00587 string procTim, 00588 string softVersion, 00589 string phaseIn, 00590 long cycleIn, 00591 string stateVectorTim, 00592 double xPos, 00593 double yPos, 00594 double zPos, 00595 double xVel, 00596 double yVel, 00597 double zVel, 00598 string stateVectSource, 00599 string prodErr, 00600 long tot_Size, 00601 long numDataSet, 00602 string sphDesc, 00603 string sensStartTai, 00604 long absOrbStart, 00605 double relTimAscNodeStart, 00606 string sensStopTai, 00607 long absOrbStop, 00608 double relTimAscNodeStop, 00609 string equator_CrossTime, 00610 long equator_CrossLong, 00611 string ascendFlag, 00612 long start_Lat, 00613 long start_Long, 00614 long stop_Lat, 00615 long stop_Long, 00616 long num_Isps, 00617 long numMissIsps, 00618 long numErrIsps, 00619 long numDiscardIsps, 00620 long num_RsIsps, 00621 long num_RsCorrections, 00622 long dsr_Size 00623 ); 00624 00625 }; 00626 00630 class FileModel 00631 { 00632 public: 00633 00634 //Attributes 00635 vector<string> files; 00636 string auxFile; 00637 long timeRef; 00638 double time0; 00639 double time1; 00640 00642 FileModel(){}; 00643 00645 FileModel( vector<string> &fileNames, 00646 const string auxiliaryFile, 00647 const long timeReference, 00648 const double timeZero, 00649 const double timeOne ) 00650 { 00651 files = fileNames; 00652 auxFile = auxiliaryFile; 00653 timeRef = timeReference; 00654 time0 = timeZero; 00655 time1 = timeOne; 00656 } 00657 00658 }; 00659 00663 class HarmonicData 00664 { 00665 public: 00666 00667 //Attributes 00668 vector<long> harmonicTypePitch; 00669 vector<long> harmonicTypeRoll; 00670 vector<long> harmonicTypeYaw; 00671 vector<double> harmonicCoeffPitch; 00672 vector<double> harmonicCoeffRoll; 00673 vector<double> harmonicCoeffYaw; 00674 00676 HarmonicData(){}; 00677 00679 HarmonicData( vector<long> &harmonicTypPitch, 00680 vector<long> &harmonicTypRoll, 00681 vector<long> &harmonicTypYaw, 00682 vector<double> &harmonicCoefPitch, 00683 vector<double> &harmonicCoefRoll, 00684 vector<double> &harmonicCoefYaw ) 00685 { 00686 harmonicTypePitch = harmonicTypPitch; 00687 harmonicTypeRoll = harmonicTypRoll; 00688 harmonicTypeYaw = harmonicTypYaw; 00689 harmonicCoeffPitch = harmonicCoefPitch; 00690 harmonicCoeffRoll = harmonicCoefRoll; 00691 harmonicCoeffYaw = harmonicCoefYaw; 00692 } 00693 00694 }; 00695 00699 class HarmonicModel 00700 { 00701 public: 00702 00703 //Attributes 00704 long angleType; 00705 HarmonicData harmonicData; 00706 double offsets[3]; 00707 00709 HarmonicModel(){}; 00710 00712 HarmonicModel( const long angleTyp, HarmonicData &harmonicDat, double *offset) 00713 { 00714 angleType = angleTyp; 00715 harmonicData = harmonicDat; 00716 00717 for ( int i = 0 ; i < 3 ; ++i ) 00718 { 00719 offsets[i] = offset[i]; 00720 } 00721 } 00722 }; 00723 00727 class MatrixModel 00728 { 00729 public: 00730 00731 //Attributes 00732 double attMatrix[3][3]; 00733 double offsets[3]; 00734 00736 MatrixModel(){}; 00737 00739 MatrixModel( double **matrix, double *offset ) 00740 { 00741 for ( int i = 0 ; i < 3 ; ++i) 00742 { 00743 for ( int j = 0 ; j < 3 ; ++j ) 00744 { 00745 attMatrix[i][j] = matrix[i][j]; 00746 }// end for j 00747 offsets[i] = offset[i]; 00748 }// end for i 00749 } 00750 }; 00751 00755 class MlstHarmonics 00756 { 00757 public: 00758 00759 //Attributes 00760 double refTime; 00761 double period; 00762 double sinAmplitude; 00763 double cosAmplitude; 00764 00766 MlstHarmonics() 00767 { 00768 refTime = 0.; 00769 period = 1.; 00770 sinAmplitude = 0.; 00771 cosAmplitude = 0.; 00772 }; 00773 00775 MlstHarmonics(double time_in, double period_in, 00776 double sinAmp_in, double cosAmp_in) 00777 { 00778 refTime = time_in; 00779 period = period_in; 00780 sinAmplitude = sinAmp_in; 00781 cosAmplitude = cosAmp_in; 00782 } 00783 }; 00784 00788 class MlstNonlinearDrift 00789 { 00790 public: 00791 00792 //Attributes 00793 long linearApproxValidity; 00794 double quadraticTerm; 00795 vector<MlstHarmonics> mlstHarmonics; 00796 00798 MlstNonlinearDrift() 00799 { 00800 long i; 00801 00802 linearApproxValidity = 99999; 00803 quadraticTerm = 0.; 00804 for (i = 0 ; i < 2 ; i ++ ) 00805 { 00806 mlstHarmonics.push_back(MlstHarmonics()); 00807 } 00808 }; 00809 00811 MlstNonlinearDrift(long linApprox, double quadratic, const vector<MlstHarmonics> &harmonics) 00812 { 00813 linearApproxValidity = linApprox; 00814 quadraticTerm = quadratic; 00815 mlstHarmonics = harmonics; 00816 } 00817 }; 00818 00822 class ParamModel 00823 { 00824 public: 00825 00826 //Attributes 00827 long model; 00828 vector<double> modelParam; 00829 00831 ParamModel(){}; 00832 00834 ParamModel( const long mod, vector<double> &modParam) 00835 { 00836 model = mod; 00837 modelParam = modParam; 00838 } 00839 }; 00840 00844 class SwathGeometry 00845 { 00846 public: 00847 00848 //Attributes 00849 long geometryType; 00850 double azimuth; 00851 double elevation; 00852 double altitude; 00853 double distance; 00854 00856 SwathGeometry(){}; 00857 00859 SwathGeometry( long geomType, double azim, double elevat, 00860 double alt, double dist) 00861 { 00862 geometryType = geomType; 00863 azimuth = azim; 00864 elevation = elevat; 00865 altitude = alt; 00866 distance = dist; 00867 } 00868 }; 00869 00873 class TrackerLimits 00874 { 00875 public: 00876 00877 //Attributes 00878 double maxPenalty; 00879 double normThr; 00880 double maxGap; 00881 00883 TrackerLimits(){}; 00884 00886 TrackerLimits( double maxPenal,double normThreshold, double maximumGap) 00887 { 00888 maxPenalty = maxPenal; 00889 normThr = normThreshold; 00890 maxGap = maximumGap; 00891 } 00892 }; 00893 00897 class StfPt 00898 { 00899 public: 00900 00901 //Attributes 00902 double lon; 00903 double lat; 00904 00906 StfPt(){}; 00907 00909 StfPt( double longitude, double latitude ) 00910 { 00911 lon = longitude; 00912 lat = latitude; 00913 } 00914 }; 00915 00919 class StfVhr 00920 { 00921 public: 00922 00923 //Attributes 00924 string stfName; 00925 string ReferenceOSF; 00926 string ReferenceSDF; 00927 long swathType; 00928 long swathPointType; 00929 00930 double timeStep; 00931 long refractionMode; 00932 double frequency; 00933 00934 long numPoints; 00935 vector<double> altitude; 00936 00937 bool geometryFlag; 00938 00939 long repCycle; 00940 long cycleLength; 00941 double mlstDrift; 00942 00943 long absOrbit; 00944 long orbitStart; 00945 long orbitStop; 00946 00947 double position[3]; 00948 double velocity[3]; 00949 00951 StfVhr(); 00952 00954 StfVhr( string stfNam, 00955 string refOSF, 00956 string refSDF, 00957 long swathTyp, 00958 long swathPointTyp, 00959 double timStep, 00960 long refrMode, 00961 double freq, 00962 long numP, 00963 const vector<double> &alt, 00964 bool geomFlag, 00965 long repCycl, 00966 long cyclLength, 00967 double meanlstDrift, 00968 long absOrb, 00969 long orbit0, 00970 long orbit1, 00971 double *pos, 00972 double *vel 00973 ); 00974 00976 StfVhr( const StfVhr &stfVhr ); 00977 00979 ~StfVhr(); 00980 00982 void operator=( const StfVhr &stfVhr ); 00983 00984 };//class StfVhr 00985 00989 class ZonePoint 00990 { 00991 public: 00992 00993 //Attributes 00994 double ptLong; 00995 double ptLat; 00996 00998 ZonePoint(){}; 00999 01001 ZonePoint( double ptLongitude, double ptLatitude) 01002 { 01003 ptLong = ptLongitude; 01004 ptLat = ptLatitude; 01005 } 01006 }; 01007 01011 class AttitudeModel 01012 { 01013 public: 01014 //Attributes 01015 long attitudeModel; 01016 long AOCS; 01017 ParamModel *paramModel; 01018 HarmonicModel *harmonicModel; 01019 FileModel *fileModel; 01020 AngleModel *angleModel; 01021 MatrixModel *matrixModel; 01022 01024 AttitudeModel(); 01025 01027 AttitudeModel( long attModel, 01028 long AOCSModel, 01029 ParamModel &parMod, 01030 HarmonicModel &harmMod, 01031 FileModel &fileMod, 01032 AngleModel &angleMod, 01033 MatrixModel &matrixMod 01034 ); 01035 01037 AttitudeModel( const AttitudeModel &attModel ); 01038 01040 ~AttitudeModel(); 01041 01043 void operator=( const AttitudeModel &attModel ); 01044 01045 protected: 01046 01047 private: 01049 void eraseAttitude(); 01050 }; 01051 01052 }//end EECFI 01053 01054 #endif