![]() |
Earth Observation Mission CFI Software DataHandling Software User Manual |
![]() |
00001 //-------------------------------------------------------------------- 00002 // CVS Info: $Id: DataHandlingData.h,v 1.10 2010/04/08 11:24:41 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 = 1, 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_SCF_DRAW_SOLID, 00162 XDCFI_SCF_DRAW_DASHED, 00163 XDCFI_SCF_DRAW_DOTTED, 00164 XDCFI_SCF_DRAW_TIMELINE 00165 } SCFDrawModesEnum; 00166 00168 typedef enum 00169 { 00170 XDCFI_SCF_FILL_SOLID, 00171 XDCFI_SCF_FILL_HOLLOW 00172 } SCFFillModesEnum; 00173 00175 typedef enum 00176 { 00177 XDCFI_TIME_UNDEF = -1, 00178 XDCFI_TIME_TAI, 00179 XDCFI_TIME_UTC, 00180 XDCFI_TIME_UT1, 00181 XDCFI_TIME_GPS 00182 } TimeRefDataHandlingEnum; 00183 00185 typedef enum 00186 { 00187 XDCFI_READ_DB = 0, 00188 XDCFI_GNOMONIC = 1, 00189 XDCFI_RECTANGULAR = 2 00190 } ProjectionEnum; 00191 00193 typedef enum 00194 { 00195 XDCFI_ATT_NONE = 0, 00196 XDCFI_ATT_AOCS, 00197 XDCFI_ATT_PARAM, 00198 XDCFI_ATT_HARMONIC, 00199 XDCFI_ATT_FILE, 00200 XDCFI_ATT_ANGLE, 00201 XDCFI_ATT_MATRIX 00202 } AttModelEnum; 00203 00205 typedef enum 00206 { 00207 XDCFI_OSF_FILE, 00208 XDCFI_ORBIT_FILE, 00209 XDCFI_POF_FILE, 00210 XDCFI_ROF_FILE, 00211 XDCFI_DORIS_FILE, 00212 XDCFI_SDF_FILE, 00213 XDCFI_STF_FILE, 00214 XDCFI_ATTITUDE_FILE, 00215 XDCFI_DEM_CONF_FILE, 00216 XDCFI_DEM_FILE, 00217 XDCFI_ZONE_FILE, 00218 XDCFI_STATION_FILE, 00219 XDCFI_STAR_FILE, 00220 XDCFI_ATT_STAR_TRACKER_CONF_FILE, 00221 XDCFI_ATT_STAR_TRACKER_FILE, 00222 XDCFI_IERS_B_FILE, 00223 XDCFI_TLE_FILE 00224 } FileEnum; 00225 00227 typedef enum 00228 { 00229 XDCFI_UNKNOWN_TYPE = -1, 00230 XDCFI_AUTO, 00231 XDCFI_ORBIT_CHANGE, 00232 XDCFI_STATE_VECTOR, 00233 XDCFI_OSF_TYPE, 00234 XDCFI_POF_TYPE, 00235 XDCFI_ROF_TYPE, 00236 XDCFI_DORIS_TYPE, 00237 XDCFI_POF_N_DORIS_TYPE, 00238 XDCFI_OEF_OSF_TYPE, 00239 XDCFI_OEF_POF_TYPE, 00240 XDCFI_IERS_B_TYPE, 00241 XDCFI_TLE_TYPE, 00242 XDCFI_MAX_VALUE 00243 } FileTypeEnum; 00244 00246 typedef enum 00247 { 00248 XDCFI_DEM_ACE_MODEL = 0 00249 } DemModelEnum; 00250 00252 typedef enum 00253 { 00254 XDCFI_CFI_READ_ATT_INIT_PARSER_ERR = 0, 00255 XDCFI_CFI_READ_ATT_READ_PARAM_ERR, 00256 XDCFI_CFI_READ_ATT_WRONG_FILE_TYPE_ERR, 00257 XDCFI_CFI_READ_XML_ATT_NAVIGATION_ERR, 00258 XDCFI_CFI_READ_ATT_WRONG_DATA_TYPE_ERR, 00259 XDCFI_CFI_READ_ATT_INCONSISTENT_DATA_TYPE_ERR, 00260 XDCFI_CFI_READ_ATT_XML_DATA_BLOCK_SIZE_ERR, 00261 XDCFI_CFI_READ_ATT_WRONG_REF_FRAME_ERR, 00262 XDCFI_CFI_READ_ATT_READ_LIST_ERR, 00263 XDCFI_CFI_READ_ATT_TIME_CONV_ERR, 00264 XDCFI_CFI_READ_ATT_MEMORY_ERR, 00265 XDCFI_CFI_READ_ATT_CLEANUP_PARSER_ERR, 00266 XDCFI_CFI_READ_ATT_WRONG_TIME_REF_ERR, 00267 XDCFI_CFI_READ_ATT_WRONG_QUATERNION_ERR, 00268 XDCFI_CFI_READ_ATT_WRONG_ANGLE_ERR, 00269 XDCFI_CFI_READ_ATT_MAX_GAP_ERR 00270 } ReadAttErrEnum; 00271 00273 typedef enum 00274 { 00275 XDCFI_DEFAULT_VALUES = 0, 00276 XDCFI_USER_VALUES = 1 00277 } PrecisePropagUserFlagEnum; 00278 00280 typedef enum 00281 { 00282 XDCFI_NOT_SELECT = 0, 00283 XDCFI_SELECT = 1 00284 } PrecisePropagSelectionFlagEnum; 00285 00287 typedef enum 00288 { 00289 XDCFI_SGA_USE_PARAMETERS = 0, 00290 XDCFI_SGA_READ_VALUES_FROM_FILE = 1 00291 } PrecisePropagSgaFlagEnum; 00292 00293 //------------------------------------------------------ 00294 // DATA STRUCTURES 00295 //------------------------------------------------------ 00296 00300 class AngleModel 00301 { 00302 public: 00303 00304 //Attributes 00305 double angles[3]; 00306 double offsets[3]; 00307 00309 AngleModel(){}; 00310 00312 AngleModel( double *angle, double *offset) 00313 { 00314 for ( int i = 0 ; i < 3 ; ++i) 00315 { 00316 angles[i] = angle[i]; 00317 offsets[i] = offset[i]; 00318 }// end for i 00319 } 00320 }; 00321 00325 class Asar 00326 { 00327 public: 00328 //Attributes 00329 long asarType; 00330 double slantRangeLeft; 00331 double slantRangeRight; 00332 00334 Asar(){}; 00335 00340 Asar( const long asarTyp, double slantLeft, double slantRight) 00341 { 00342 asarType = asarTyp; 00343 slantRangeLeft = slantLeft; 00344 slantRangeRight = slantRight; 00345 } 00346 };//class Asar 00347 00348 00352 class BulbTable 00353 { 00354 public: 00355 double day; 00356 double ut1Utc; 00357 double ut1Tai; 00358 00360 BulbTable(){}; 00361 00363 BulbTable(double dayUtc, double diffUt1Utc, double diffUt1Tai) 00364 { 00365 day = dayUtc; 00366 ut1Utc = diffUt1Utc; 00367 ut1Tai = diffUt1Tai; 00368 } 00369 00370 }; 00371 00375 class DemPoint 00376 { 00377 public: 00378 00379 //Attributes 00380 double lon; 00381 double lat; 00382 double alt; 00383 00385 DemPoint(){}; 00386 00388 DemPoint( double longitude, double latitude, double altitude) 00389 { 00390 lon = longitude; 00391 lat = latitude; 00392 alt = altitude; 00393 } 00394 }; 00395 00399 class DorisHeader 00400 { 00401 public: 00402 //Atributtes 00403 string fileName; 00404 string sensingStart; // UTC 00405 string sensingStop; // UTC 00406 long relOrbit; 00407 long absOrbit; 00408 double deltaUt1; 00409 string leapUtc; 00410 int leapSign; 00411 int leapErr; 00412 long numDsd; 00413 long dsOffset; 00414 long numDsr; 00415 00416 // extra data: the following values are not read from the file. 00417 // but it must be provided for the writing function 00418 //MPH 00419 string procStageCode; 00420 string refDoc; 00421 string procTime; 00422 string softwareVersion; 00423 string phase; 00424 long cycle; 00425 string stateVectorTime; 00426 double xPosition; 00427 double yPosition; 00428 double zPosition; 00429 double xVelocity; 00430 double yVelocity; 00431 double zVelocity; 00432 string stateVectorSource; 00433 string productErr; 00434 long totSize; 00435 long numDataSets; 00436 00437 //SPH 00438 string sphDescriptor; 00439 string sensingStartTai; // TAI 00440 long absOrbitStart; 00441 double relTimeAscNodeStart; 00442 string sensingStopTai; // TAI 00443 long absOrbitStop; 00444 double relTimeAscNodeStop; 00445 string equatorCrossTime; 00446 long equatorCrossLong; 00447 string ascendingFlag; 00448 long startLat; 00449 long startLong; 00450 long stopLat; 00451 long stopLong; 00452 long numIsps; 00453 long numMissingIsps; 00454 long numErrorIsps; 00455 long numDiscardedIsps; 00456 long numRsIsps; 00457 long numRsCorrections; 00458 long dsrSize; 00459 00461 DorisHeader(); 00462 00464 DorisHeader(string fileNam, 00465 string senStart, 00466 string sensStop, 00467 long relOrbi, 00468 long absOrbi, 00469 double delta_Ut1, 00470 string leap_Utc, 00471 int leap_Sign, 00472 int leap_Err, 00473 long num_Dsd, 00474 long ds_Offset, 00475 long num_Dsr); 00476 00478 DorisHeader(string fileNam, 00479 string sensStart, 00480 string sensStop, 00481 long relOrbi, 00482 long absOrbi, 00483 double delta_Ut1, 00484 string leap_Utc, 00485 int leap_Sign, 00486 int leap_Err, 00487 long num_Dsd, 00488 long ds_Offset, 00489 long num_Dsr, 00490 string procStageCod, 00491 string ref_Doc, 00492 string procTim, 00493 string softVersion, 00494 string phaseIn, 00495 long cycleIn, 00496 string stateVectorTim, 00497 double xPos, 00498 double yPos, 00499 double zPos, 00500 double xVel, 00501 double yVel, 00502 double zVel, 00503 string stateVectSource, 00504 string prodErr, 00505 long tot_Size, 00506 long numDataSet, 00507 string sphDesc, 00508 string sensStartTai, 00509 long absOrbStart, 00510 double relTimAscNodeStart, 00511 string sensStopTai, 00512 long absOrbStop, 00513 double relTimAscNodeStop, 00514 string equator_CrossTime, 00515 long equator_CrossLong, 00516 string ascendFlag, 00517 long start_Lat, 00518 long start_Long, 00519 long stop_Lat, 00520 long stop_Long, 00521 long num_Isps, 00522 long numMissIsps, 00523 long numErrIsps, 00524 long numDiscardIsps, 00525 long num_RsIsps, 00526 long num_RsCorrections, 00527 long dsr_Size 00528 ); 00529 00530 }; 00531 00535 class FileModel 00536 { 00537 public: 00538 00539 //Attributes 00540 vector<string> files; 00541 string auxFile; 00542 long timeRef; 00543 double time0; 00544 double time1; 00545 00547 FileModel(){}; 00548 00550 FileModel( vector<string> &fileNames, 00551 const string auxiliaryFile, 00552 const long timeReference, 00553 const double timeZero, 00554 const double timeOne ) 00555 { 00556 files = fileNames; 00557 auxFile = auxiliaryFile; 00558 timeRef = timeReference; 00559 time0 = timeZero; 00560 time1 = timeOne; 00561 } 00562 00563 }; 00564 00568 class HarmonicData 00569 { 00570 public: 00571 00572 //Attributes 00573 vector<long> harmonicTypePitch; 00574 vector<long> harmonicTypeRoll; 00575 vector<long> harmonicTypeYaw; 00576 vector<double> harmonicCoeffPitch; 00577 vector<double> harmonicCoeffRoll; 00578 vector<double> harmonicCoeffYaw; 00579 00581 HarmonicData(){}; 00582 00584 HarmonicData( vector<long> &harmonicTypPitch, 00585 vector<long> &harmonicTypRoll, 00586 vector<long> &harmonicTypYaw, 00587 vector<double> &harmonicCoefPitch, 00588 vector<double> &harmonicCoefRoll, 00589 vector<double> &harmonicCoefYaw ) 00590 { 00591 harmonicTypePitch = harmonicTypPitch; 00592 harmonicTypeRoll = harmonicTypRoll; 00593 harmonicTypeYaw = harmonicTypYaw; 00594 harmonicCoeffPitch = harmonicCoefPitch; 00595 harmonicCoeffRoll = harmonicCoefRoll; 00596 harmonicCoeffYaw = harmonicCoefYaw; 00597 } 00598 00599 }; 00600 00604 class HarmonicModel 00605 { 00606 public: 00607 00608 //Attributes 00609 long angleType; 00610 HarmonicData harmonicData; 00611 double offsets[3]; 00612 00614 HarmonicModel(){}; 00615 00617 HarmonicModel( const long angleTyp, HarmonicData &harmonicDat, double *offset) 00618 { 00619 angleType = angleTyp; 00620 harmonicData = harmonicDat; 00621 00622 for ( int i = 0 ; i < 3 ; ++i ) 00623 { 00624 offsets[i] = offset[i]; 00625 } 00626 } 00627 }; 00628 00632 class MatrixModel 00633 { 00634 public: 00635 00636 //Attributes 00637 double attMatrix[3][3]; 00638 double offsets[3]; 00639 00641 MatrixModel(){}; 00642 00644 MatrixModel( double **matrix, double *offset ) 00645 { 00646 for ( int i = 0 ; i < 3 ; ++i) 00647 { 00648 for ( int j = 0 ; j < 3 ; ++j ) 00649 { 00650 attMatrix[i][j] = matrix[i][j]; 00651 }// end for j 00652 offsets[i] = offset[i]; 00653 }// end for i 00654 } 00655 }; 00656 00660 class ParamModel 00661 { 00662 public: 00663 00664 //Attributes 00665 long model; 00666 vector<double> modelParam; 00667 00669 ParamModel(){}; 00670 00672 ParamModel( const long mod, vector<double> &modParam) 00673 { 00674 model = mod; 00675 modelParam = modParam; 00676 } 00677 }; 00678 00682 class SwathGeometry 00683 { 00684 public: 00685 00686 //Attributes 00687 long geometryType; 00688 double azimuth; 00689 double elevation; 00690 double altitude; 00691 double distance; 00692 00694 SwathGeometry(){}; 00695 00697 SwathGeometry( long geomType, double azim, double elevat, 00698 double alt, double dist) 00699 { 00700 geometryType = geomType; 00701 azimuth = azim; 00702 elevation = elevat; 00703 altitude = alt; 00704 distance = dist; 00705 } 00706 }; 00707 00711 class TrackerLimits 00712 { 00713 public: 00714 00715 //Attributes 00716 double maxPenalty; 00717 double normThr; 00718 double maxGap; 00719 00721 TrackerLimits(){}; 00722 00724 TrackerLimits( double maxPenal,double normThreshold, double maximumGap) 00725 { 00726 maxPenalty = maxPenal; 00727 normThr = normThreshold; 00728 maxGap = maximumGap; 00729 } 00730 }; 00731 00735 class StfPt 00736 { 00737 public: 00738 00739 //Attributes 00740 double lon; 00741 double lat; 00742 00744 StfPt(){}; 00745 00747 StfPt( double longitude, double latitude ) 00748 { 00749 lon = longitude; 00750 lat = latitude; 00751 } 00752 }; 00753 00757 class StfVhr 00758 { 00759 public: 00760 00761 //Attributes 00762 string stfName; 00763 string sdfName; 00764 long swathType; 00765 long swathPointType; 00766 00767 double timeStep; 00768 long refractionMode; 00769 double frequency; 00770 00771 long numPoints; 00772 vector<double> altitude; 00773 00774 bool geometryFlag; 00775 00776 long repCycle; 00777 long cycleLength; 00778 double mlstDrift; 00779 00780 long absOrbit; 00781 double position[3]; 00782 double velocity[3]; 00783 00785 StfVhr(); 00786 00788 StfVhr( string stfNam, 00789 string sdfNam, 00790 long swathTyp, 00791 long swathPointTyp, 00792 double timStep, 00793 long refrMode, 00794 double freq, 00795 long numP, 00796 const vector<double> &alt, 00797 bool geomFlag, 00798 long repCycl, 00799 long cyclLength, 00800 double meanlstDrift, 00801 long absOrb, 00802 double *pos, 00803 double *vel 00804 ); 00805 00807 StfVhr( const StfVhr &stfVhr ); 00808 00810 ~StfVhr(); 00811 00813 void operator=( const StfVhr &stfVhr ); 00814 00815 };//class StfVhr 00816 00820 class ZonePoint 00821 { 00822 public: 00823 00824 //Attributes 00825 double ptLong; 00826 double ptLat; 00827 00829 ZonePoint(){}; 00830 00832 ZonePoint( double ptLongitude, double ptLatitude) 00833 { 00834 ptLong = ptLongitude; 00835 ptLat = ptLatitude; 00836 } 00837 }; 00838 00842 class AttitudeModel 00843 { 00844 public: 00845 //Attributes 00846 long attitudeModel; 00847 long AOCS; 00848 ParamModel *paramModel; 00849 HarmonicModel *harmonicModel; 00850 FileModel *fileModel; 00851 AngleModel *angleModel; 00852 MatrixModel *matrixModel; 00853 00855 AttitudeModel(); 00856 00858 AttitudeModel( long attModel, 00859 long AOCSModel, 00860 ParamModel &parMod, 00861 HarmonicModel &harmMod, 00862 FileModel &fileMod, 00863 AngleModel &angleMod, 00864 MatrixModel &matrixMod 00865 ); 00866 00868 AttitudeModel( const AttitudeModel &attModel ); 00869 00871 ~AttitudeModel(); 00872 00874 void operator=( const AttitudeModel &attModel ); 00875 00876 protected: 00877 00878 private: 00880 void eraseAttitude(); 00881 }; 00882 00883 }//end EECFI 00884 00885 #endif