Earth Explorer Mission CFI Software DataHandling Software User Manual |
00001 //-------------------------------------------------------------------- 00002 // CVS Info: $Id: DataHandlingData.h,v 1.6 2009/04/13 14:06:19 expcfi Exp $ 00003 //-------------------------------------------------------------------- 00004 00006 // This file contais generic data that can be used as input/output in 00007 // the classes of EXPCFI DataHandling library 00009 00010 #ifndef __EECFI_DATAHANDLINGDATA__ 00011 #define __EECFI_DATAHANDLINGDATA__ 00012 00013 //--INCLUDE----------------------------------------------------------- 00014 #include <string> 00015 #include <vector> 00016 00017 //--NAMESPACES-------------------------------------------------------- 00018 using namespace std; 00019 00020 namespace EECFI 00021 { 00022 //------------------------------------------------------ 00023 // CONSTANT DATA 00024 //------------------------------------------------------ 00025 00026 //------------------------------------------------------ 00027 // DATA ENUMERATION 00028 //------------------------------------------------------ 00029 00031 typedef enum 00032 { 00033 XDCFI_ATT_QUATERNIONS = 0, 00034 XDCFI_ATT_ANGLES 00035 } AttitudeDataTypeEnum; 00036 00038 typedef enum 00039 { 00040 XDCFI_LINE_GEOM = 0, 00041 XDCFI_POINT_GEOM, 00042 XDCFI_LIMB_GEOM, 00043 XDCFI_DISTANCE_GEOM 00044 } GeomTypeEnum; 00045 00047 typedef enum 00048 { 00049 XDCFI_NO_ASAR = 0, 00050 XDCFI_NARROW_ASAR, 00051 XDCFI_WIDE_ASAR 00052 } AsarTypeEnum; 00053 00055 typedef enum 00056 { 00057 XDCFI_NO_REF = 0, 00058 XDCFI_STD_REF, 00059 XDCFI_USER_REF, 00060 XDCFI_PRED_REF, 00061 XDCFI_STD_REF_N = 10, 00062 XDCFI_USER_REF_N = 20, 00063 XDCFI_PRED_REF_N = 30, 00064 XDCFI_US76_REF = 300, 00065 XDCFI_TROPIC_REF, 00066 XDCFI_MID_SUM_REF, 00067 XDCFI_MID_WIN_REF, 00068 XDCFI_SUBAR_SUM_REF, 00069 XDCFI_SUBAR_WIN_REF, 00070 XDCFI_LUT_REF = 400, 00071 XDCFI_US76_REF_N = 3000, 00072 XDCFI_TROPIC_REF_N, 00073 XDCFI_MID_SUM_REF_N, 00074 XDCFI_MID_WIN_REF_N, 00075 XDCFI_SUBAR_SUM_REF_N, 00076 XDCFI_SUBAR_WIN_REF_N, 00077 XDCFI_LUT_REF_N = 4000 00078 } TargetRayEnum; 00079 00081 typedef enum 00082 { 00083 XDCFI_OPEN_SWATH, 00084 XDCFI_CLOSED_SWATH 00085 } SwathTypecEnum; 00086 00088 typedef enum 00089 { 00090 XDCFI_GEODETIC_SWATH_TYPE, 00091 XDCFI_INERTIAL_SWATH_TYPE 00092 } SwathPointTypeEnum; 00093 00095 typedef enum 00096 { 00097 XDCFI_SWATH_POINTING_GEOM = 0, /* Algorithms of calculation of Swaths */ 00098 XDCFI_SWATH_DISTANCE_GEOM, 00099 XDCFI_SWATH_LIMB_GEOM, 00100 XDCFI_SWATH_INERTIAL_GEOM, 00101 XDCFI_SWATH_SUBSATELLITE_GEOM, 00102 XDCFI_SWATH_ASAR_GEOM 00103 00104 } SwathGeomEnum; 00105 00107 typedef enum 00108 { 00109 XDCFI_NOT_DEFINED = -1, 00110 XDCFI_POINT = 0, 00111 XDCFI_CIRCLE = 1, 00112 XDCFI_SEGMENT = 2, 00113 XDCFI_POLYGON = 3 00114 } ZoneTypeEnum; 00115 00117 typedef enum 00118 { 00119 XDCFI_SAT_ORBITAL_REF = 0, 00120 XDCFI_SAT_NOMINAL_ATT, 00121 XDCFI_SAT_ATT, 00122 XDCFI_INSTR_ATT 00123 } AttitudeFrameEnum; 00124 00126 typedef enum 00127 { 00128 XDCFI_BAR_MEAN_2000, 00129 XDCFI_HEL_MEAN_2000, 00130 XDCFI_GEO_MEAN_2000, 00131 XDCFI_MEAN_DATE, 00132 XDCFI_TRUE_DATE, 00133 XDCFI_EARTH_FIXED, 00134 XDCFI_BAR_MEAN_1950, 00135 XDCFI_GALACTIC, 00136 XDCFI_SAT_ACT_REF, 00137 XDCFI_QUASI_MEAN_DATE, 00138 XDCFI_PSE_TRUE_DATE, 00139 XDCFI_QUASI_TRUE_DATE, 00140 XDCFI_TOPOCENTRIC, 00141 XDCFI_SAT_REF, 00142 XDCFI_SAT_REL_REF 00143 } CoordinateSystemsEnum; 00144 00146 typedef enum 00147 { 00148 XDCFI_3_ADJUST_NOMI = 1, 00149 XDCFI_4_ADJUST_DMAN, 00150 XDCFI_5_INTERP_DGAP, 00151 XDCFI_6_EXTRAP_LT1D, 00152 XDCFI_7_EXTRAP_1D2D, 00153 XDCFI_8_EXTRAP_GT2D, 00154 XDCFI_8_EXTRAP_AMAN, 00155 XDCFI_Q_INDEX_MAX_ENUM 00156 } QualityIndexEnum; 00157 00159 typedef enum 00160 { 00161 XDCFI_TIME_UNDEF = -1, 00162 XDCFI_TIME_TAI, 00163 XDCFI_TIME_UTC, 00164 XDCFI_TIME_UT1, 00165 XDCFI_TIME_GPS 00166 } TimeRefDataHandlingEnum; 00167 00169 typedef enum 00170 { 00171 XDCFI_READ_DB = 0, 00172 XDCFI_GNOMONIC = 1, 00173 XDCFI_RECTANGULAR = 2 00174 } ProjectionEnum; 00175 00177 typedef enum 00178 { 00179 XDCFI_ATT_NONE = 0, 00180 XDCFI_ATT_AOCS, 00181 XDCFI_ATT_PARAM, 00182 XDCFI_ATT_HARMONIC, 00183 XDCFI_ATT_FILE, 00184 XDCFI_ATT_ANGLE, 00185 XDCFI_ATT_MATRIX 00186 } AttModelEnum; 00187 00189 typedef enum 00190 { 00191 XDCFI_OSF_FILE, 00192 XDCFI_ORBIT_FILE, 00193 XDCFI_POF_FILE, 00194 XDCFI_ROF_FILE, 00195 XDCFI_DORIS_FILE, 00196 XDCFI_SDF_FILE, 00197 XDCFI_STF_FILE, 00198 XDCFI_ATTITUDE_FILE, 00199 XDCFI_DEM_CONF_FILE, 00200 XDCFI_DEM_FILE, 00201 XDCFI_ZONE_FILE, 00202 XDCFI_STATION_FILE, 00203 XDCFI_STAR_FILE, 00204 XDCFI_ATT_STAR_TRACKER_CONF_FILE, 00205 XDCFI_ATT_STAR_TRACKER_FILE, 00206 XDCFI_IERS_B_FILE, 00207 XDCFI_TLE_FILE 00208 } FileEnum; 00209 00211 typedef enum 00212 { 00213 XDCFI_UNKNOWN_TYPE = -1, 00214 XDCFI_AUTO, 00215 XDCFI_ORBIT_CHANGE, 00216 XDCFI_STATE_VECTOR, 00217 XDCFI_OSF_TYPE, 00218 XDCFI_POF_TYPE, 00219 XDCFI_ROF_TYPE, 00220 XDCFI_DORIS_TYPE, 00221 XDCFI_POF_N_DORIS_TYPE, 00222 XDCFI_OEF_OSF_TYPE, 00223 XDCFI_OEF_POF_TYPE, 00224 XDCFI_IERS_B_TYPE, 00225 XDCFI_TLE_TYPE, 00226 XDCFI_MAX_VALUE 00227 } FileTypeEnum; 00228 00230 typedef enum 00231 { 00232 XDCFI_DEM_ACE_MODEL = 0 00233 } DemModelEnum; 00234 00236 typedef enum 00237 { 00238 XDCFI_CFI_READ_ATT_INIT_PARSER_ERR = 0, 00239 XDCFI_CFI_READ_ATT_READ_PARAM_ERR, 00240 XDCFI_CFI_READ_ATT_WRONG_FILE_TYPE_ERR, 00241 XDCFI_CFI_READ_XML_ATT_NAVIGATION_ERR, 00242 XDCFI_CFI_READ_ATT_WRONG_DATA_TYPE_ERR, 00243 XDCFI_CFI_READ_ATT_INCONSISTENT_DATA_TYPE_ERR, 00244 XDCFI_CFI_READ_ATT_XML_DATA_BLOCK_SIZE_ERR, 00245 XDCFI_CFI_READ_ATT_WRONG_REF_FRAME_ERR, 00246 XDCFI_CFI_READ_ATT_READ_LIST_ERR, 00247 XDCFI_CFI_READ_ATT_TIME_CONV_ERR, 00248 XDCFI_CFI_READ_ATT_MEMORY_ERR, 00249 XDCFI_CFI_READ_ATT_CLEANUP_PARSER_ERR, 00250 XDCFI_CFI_READ_ATT_WRONG_TIME_REF_ERR, 00251 XDCFI_CFI_READ_ATT_WRONG_QUATERNION_ERR, 00252 XDCFI_CFI_READ_ATT_WRONG_ANGLE_ERR, 00253 XDCFI_CFI_READ_ATT_MAX_GAP_ERR 00254 } ReadAttErrEnum; 00255 00256 //------------------------------------------------------ 00257 // DATA STRUCTURES 00258 //------------------------------------------------------ 00259 00263 class AngleModel 00264 { 00265 public: 00266 00267 //Attributes 00268 double angles[3]; 00269 double offsets[3]; 00270 00272 AngleModel(){}; 00273 00275 AngleModel( double *angle, double *offset) 00276 { 00277 for ( int i = 0 ; i < 3 ; ++i) 00278 { 00279 angles[i] = angle[i]; 00280 offsets[i] = offset[i]; 00281 }// end for i 00282 } 00283 }; 00284 00288 class Asar 00289 { 00290 public: 00291 //Attributes 00292 long asarType; 00293 double slantRangeLeft; 00294 double slantRangeRight; 00295 00297 Asar(){}; 00298 00303 Asar( const long asarTyp, double slantLeft, double slantRight) 00304 { 00305 asarType = asarTyp; 00306 slantRangeLeft = slantLeft; 00307 slantRangeRight = slantRight; 00308 } 00309 };//class Asar 00310 00311 00315 class BulbTable 00316 { 00317 public: 00318 double day; 00319 double ut1Utc; 00320 double ut1Tai; 00321 00323 BulbTable(){}; 00324 00326 BulbTable(double dayUtc, double diffUt1Utc, double diffUt1Tai) 00327 { 00328 day = dayUtc; 00329 ut1Utc = diffUt1Utc; 00330 ut1Tai = diffUt1Tai; 00331 } 00332 00333 }; 00334 00338 class DemPoint 00339 { 00340 public: 00341 00342 //Attributes 00343 double lon; 00344 double lat; 00345 double alt; 00346 00348 DemPoint(){}; 00349 00351 DemPoint( double longitude, double latitude, double altitude) 00352 { 00353 lon = longitude; 00354 lat = latitude; 00355 alt = altitude; 00356 } 00357 }; 00358 00362 class DorisHeader 00363 { 00364 public: 00365 //Atributtes 00366 string fileName; 00367 string sensingStart; // UTC 00368 string sensingStop; // UTC 00369 long relOrbit; 00370 long absOrbit; 00371 double deltaUt1; 00372 string leapUtc; 00373 int leapSign; 00374 int leapErr; 00375 long numDsd; 00376 long dsOffset; 00377 long numDsr; 00378 00379 // extra data: the following values are not read from the file. 00380 // but it must be provided for the writing function 00381 //MPH 00382 string procStageCode; 00383 string refDoc; 00384 string procTime; 00385 string softwareVersion; 00386 string phase; 00387 long cycle; 00388 string stateVectorTime; 00389 double xPosition; 00390 double yPosition; 00391 double zPosition; 00392 double xVelocity; 00393 double yVelocity; 00394 double zVelocity; 00395 string stateVectorSource; 00396 string productErr; 00397 long totSize; 00398 long numDataSets; 00399 00400 //SPH 00401 string sphDescriptor; 00402 string sensingStartTai; // TAI 00403 long absOrbitStart; 00404 double relTimeAscNodeStart; 00405 string sensingStopTai; // TAI 00406 long absOrbitStop; 00407 double relTimeAscNodeStop; 00408 string equatorCrossTime; 00409 long equatorCrossLong; 00410 string ascendingFlag; 00411 long startLat; 00412 long startLong; 00413 long stopLat; 00414 long stopLong; 00415 long numIsps; 00416 long numMissingIsps; 00417 long numErrorIsps; 00418 long numDiscardedIsps; 00419 long numRsIsps; 00420 long numRsCorrections; 00421 long dsrSize; 00422 00424 DorisHeader(); 00425 00427 DorisHeader(string fileNam, 00428 string senStart, 00429 string sensStop, 00430 long relOrbi, 00431 long absOrbi, 00432 double delta_Ut1, 00433 string leap_Utc, 00434 int leap_Sign, 00435 int leap_Err, 00436 long num_Dsd, 00437 long ds_Offset, 00438 long num_Dsr); 00440 DorisHeader(string fileNam, 00441 string sensStart, 00442 string sensStop, 00443 long relOrbi, 00444 long absOrbi, 00445 double delta_Ut1, 00446 string leap_Utc, 00447 int leap_Sign, 00448 int leap_Err, 00449 long num_Dsd, 00450 long ds_Offset, 00451 long num_Dsr, 00452 string procStageCod, 00453 string ref_Doc, 00454 string procTim, 00455 string softVersion, 00456 string phaseIn, 00457 long cycleIn, 00458 string stateVectorTim, 00459 double xPos, 00460 double yPos, 00461 double zPos, 00462 double xVel, 00463 double yVel, 00464 double zVel, 00465 string stateVectSource, 00466 string prodErr, 00467 long tot_Size, 00468 long numDataSet, 00469 string sphDesc, 00470 string sensStartTai, 00471 long absOrbStart, 00472 double relTimAscNodeStart, 00473 string sensStopTai, 00474 long absOrbStop, 00475 double relTimAscNodeStop, 00476 string equator_CrossTime, 00477 long equator_CrossLong, 00478 string ascendFlag, 00479 long start_Lat, 00480 long start_Long, 00481 long stop_Lat, 00482 long stop_Long, 00483 long num_Isps, 00484 long numMissIsps, 00485 long numErrIsps, 00486 long numDiscardIsps, 00487 long num_RsIsps, 00488 long num_RsCorrections, 00489 long dsr_Size 00490 ); 00491 }; 00492 00496 class FileModel 00497 { 00498 public: 00499 00500 //Attributes 00501 vector<string> files; 00502 string auxFile; 00503 long timeRef; 00504 double time0; 00505 double time1; 00506 00508 FileModel(){}; 00509 00511 FileModel( vector<string> &fileNames, 00512 const string auxiliaryFile, 00513 const long timeReference, 00514 const double timeZero, 00515 const double timeOne ) 00516 { 00517 files = fileNames; 00518 auxFile = auxiliaryFile; 00519 timeRef = timeReference; 00520 time0 = timeZero; 00521 time1 = timeOne; 00522 } 00523 00524 }; 00525 00529 class HarmonicData 00530 { 00531 public: 00532 00533 //Attributes 00534 vector<long> harmonicTypePitch; 00535 vector<long> harmonicTypeRoll; 00536 vector<long> harmonicTypeYaw; 00537 vector<double> harmonicCoeffPitch; 00538 vector<double> harmonicCoeffRoll; 00539 vector<double> harmonicCoeffYaw; 00540 00542 HarmonicData(){}; 00543 00545 HarmonicData( vector<long> &harmonicTypPitch, 00546 vector<long> &harmonicTypRoll, 00547 vector<long> &harmonicTypYaw, 00548 vector<double> &harmonicCoefPitch, 00549 vector<double> &harmonicCoefRoll, 00550 vector<double> &harmonicCoefYaw ) 00551 { 00552 harmonicTypePitch = harmonicTypPitch; 00553 harmonicTypeRoll = harmonicTypRoll; 00554 harmonicTypeYaw = harmonicTypYaw; 00555 harmonicCoeffPitch = harmonicCoefPitch; 00556 harmonicCoeffRoll = harmonicCoefRoll; 00557 harmonicCoeffYaw = harmonicCoefYaw; 00558 } 00559 00560 }; 00561 00565 class HarmonicModel 00566 { 00567 public: 00568 00569 //Attributes 00570 long angleType; 00571 HarmonicData harmonicData; 00572 double offsets[3]; 00573 00575 HarmonicModel(){}; 00576 00578 HarmonicModel( const long angleTyp, HarmonicData &harmonicDat, double *offset) 00579 { 00580 angleType = angleTyp; 00581 harmonicData = harmonicDat; 00582 00583 for ( int i = 0 ; i < 3 ; ++i ) 00584 { 00585 offsets[i] = offset[i]; 00586 } 00587 } 00588 }; 00589 00593 class MatrixModel 00594 { 00595 public: 00596 00597 //Attributes 00598 double attMatrix[3][3]; 00599 double offsets[3]; 00600 00602 MatrixModel(){}; 00603 00605 MatrixModel( double **matrix, double *offset ) 00606 { 00607 for ( int i = 0 ; i < 3 ; ++i) 00608 { 00609 for ( int j = 0 ; j < 3 ; ++j ) 00610 { 00611 attMatrix[i][j] = matrix[i][j]; 00612 }// end for j 00613 offsets[i] = offset[i]; 00614 }// end for i 00615 } 00616 }; 00617 00621 class ParamModel 00622 { 00623 public: 00624 00625 //Attributes 00626 long model; 00627 vector<double> modelParam; 00628 00630 ParamModel(){}; 00631 00633 ParamModel( const long mod, vector<double> &modParam) 00634 { 00635 model = mod; 00636 modelParam = modParam; 00637 } 00638 }; 00639 00643 class SwathGeometry 00644 { 00645 public: 00646 00647 //Attributes 00648 long geometryType; 00649 double azimuth; 00650 double elevation; 00651 double altitude; 00652 double distance; 00653 00655 SwathGeometry(){}; 00656 00658 SwathGeometry( long geomType, double azim, double elevat, 00659 double alt, double dist) 00660 { 00661 geometryType = geomType; 00662 azimuth = azim; 00663 elevation = elevat; 00664 altitude = alt; 00665 distance = dist; 00666 } 00667 }; 00668 00672 class TrackerLimits 00673 { 00674 public: 00675 00676 //Attributes 00677 double maxPenalty; 00678 double normThr; 00679 double maxGap; 00680 00682 TrackerLimits(){}; 00683 00685 TrackerLimits( double maxPenal,double normThreshold, double maximumGap) 00686 { 00687 maxPenalty = maxPenal; 00688 normThr = normThreshold; 00689 maxGap = maximumGap; 00690 } 00691 }; 00692 00696 class StfPt 00697 { 00698 public: 00699 00700 //Attributes 00701 double lon; 00702 double lat; 00703 00705 StfPt(){}; 00706 00708 StfPt( double longitude, double latitude ) 00709 { 00710 lon = longitude; 00711 lat = latitude; 00712 } 00713 }; 00714 00718 class StfVhr 00719 { 00720 public: 00721 00722 //Attributes 00723 string stfName; 00724 string sdfName; 00725 long swathType; 00726 long swathPointType; 00727 00728 double timeStep; 00729 long refractionMode; 00730 double frequency; 00731 00732 long numPoints; 00733 vector<double> altitude; 00734 00735 bool geometryFlag; 00736 00737 long repCycle; 00738 long cycleLength; 00739 double mlstDrift; 00740 00741 long absOrbit; 00742 double position[3]; 00743 double velocity[3]; 00744 00746 StfVhr(); 00747 00749 StfVhr( string stfNam, 00750 string sdfNam, 00751 long swathTyp, 00752 long swathPointTyp, 00753 double timStep, 00754 long refrMode, 00755 double freq, 00756 long numP, 00757 const vector<double> &alt, 00758 bool geomFlag, 00759 long repCycl, 00760 long cyclLength, 00761 double meanlstDrift, 00762 long absOrb, 00763 double *pos, 00764 double *vel 00765 ); 00766 00768 StfVhr( const StfVhr &stfVhr ); 00769 00771 ~StfVhr(); 00772 00774 void operator=( const StfVhr &stfVhr ); 00775 00776 };//class StfVhr 00777 00781 class ZonePoint 00782 { 00783 public: 00784 00785 //Attributes 00786 double ptLong; 00787 double ptLat; 00788 00790 ZonePoint(){}; 00791 00793 ZonePoint( double ptLongitude, double ptLatitude) 00794 { 00795 ptLong = ptLongitude; 00796 ptLat = ptLatitude; 00797 } 00798 }; 00799 00803 class AttitudeModel 00804 { 00805 public: 00806 //Attributes 00807 long attitudeModel; 00808 long AOCS; 00809 ParamModel *paramModel; 00810 HarmonicModel *harmonicModel; 00811 FileModel *fileModel; 00812 AngleModel *angleModel; 00813 MatrixModel *matrixModel; 00814 00816 AttitudeModel(); 00817 00819 AttitudeModel( long attModel, 00820 long AOCSModel, 00821 ParamModel &parMod, 00822 HarmonicModel &harmMod, 00823 FileModel &fileMod, 00824 AngleModel &angleMod, 00825 MatrixModel &matrixMod 00826 ); 00827 00829 AttitudeModel( const AttitudeModel &attModel ); 00830 00832 ~AttitudeModel(); 00833 00835 void operator=( const AttitudeModel &attModel ); 00836 00837 protected: 00838 00839 private: 00841 void eraseAttitude(); 00842 }; 00843 00844 }//end EECFI 00845 00846 #endif