00001 #pragma ident "$Id: Antenna.hpp 1769 2009-03-04 08:03:19Z architest $"
00002
00008 #ifndef GPSTK_ANTENNA_HPP
00009 #define GPSTK_ANTENNA_HPP
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include <cmath>
00035 #include <vector>
00036 #include <map>
00037 #include <string>
00038
00039 #include "Exception.hpp"
00040 #include "DayTime.hpp"
00041 #include "Triple.hpp"
00042
00043
00044
00045 namespace gpstk
00046 {
00047
00050
00113 class Antenna
00114 {
00115 public:
00116
00118 enum frequencyType
00119 {
00120 G01,
00121 G02,
00122 G05,
00123 R01,
00124 R02,
00125 E01,
00126 E05,
00127 E07,
00128 E08,
00129 E06
00130 };
00131
00132
00134 enum AntennaDataType
00135 {
00136 antennaType,
00137 antennaRadome,
00138 serial,
00139 cnnn,
00140 cosparID,
00141 calMethod,
00142 agency,
00143 numAntennas,
00144 date,
00145 sinexCode
00146 };
00147
00148
00149
00150
00152 typedef std::map< AntennaDataType, std::string > AntennaDataMap;
00153
00155 typedef std::map< frequencyType, Triple > AntennaEccDataMap;
00156
00158 typedef std::map< frequencyType, std::vector<double> > NoAziDataMap;
00159
00161 typedef std::map< double, std::vector<double> > AzimuthDataMap;
00162
00164 typedef std::map< frequencyType, AzimuthDataMap > PCDataMap;
00165
00166
00167
00169 Antenna() {};
00170
00171
00177 Antenna( const Triple& eccL1,
00178 const Triple& eccL2 );
00179
00180
00190 Antenna( double NorthEccL1,
00191 double EastEccL1,
00192 double UpEccL1,
00193 double NorthEccL2,
00194 double EastEccL2,
00195 double UpEccL2 );
00196
00197
00205 Triple getAntennaEccentricity( frequencyType freq ) const
00206 throw(InvalidRequest);
00207
00208
00220 Triple getAntennaPCVariation( frequencyType freq,
00221 double elevation ) const
00222 throw(InvalidRequest);
00223
00224
00236 Triple getAntennaPCVariation( frequencyType freq,
00237 double elevation,
00238 double azimuth ) const
00239 throw(InvalidRequest);
00240
00241
00246 std::string getAntennaData( AntennaDataType dataType ) const
00247 throw(InvalidRequest);
00248
00249
00255 Antenna setAntennaData( AntennaDataType dataType,
00256 const std::string& data )
00257 { antennaData[dataType] = data; return (*this); };
00258
00259
00261 std::string getAntennaType() const
00262 throw(InvalidRequest)
00263 { return getAntennaData( antennaType ); };
00264
00265
00270 Antenna setAntennaType( const std::string& type )
00271 { return setAntennaData( antennaType, type ); };
00272
00273
00275 std::string getAntennaRadome() const
00276 throw(InvalidRequest)
00277 { return getAntennaData( antennaRadome ); };
00278
00279
00284 Antenna setAntennaRadome( const std::string& radome )
00285 { return setAntennaData( antennaRadome, radome ); };
00286
00287
00289 std::string getAntennaSerial() const
00290 throw(InvalidRequest)
00291 { return getAntennaData(serial); };
00292
00293
00298 Antenna setAntennaSerial( const std::string& sn )
00299 { return setAntennaData( serial, sn ); };
00300
00301
00303 std::string getAntennaCalMethod() const
00304 throw(InvalidRequest)
00305 { return getAntennaData(calMethod); };
00306
00307
00312 Antenna setAntennaCalMethod( const std::string& method )
00313 { return setAntennaData( calMethod, method ); };
00314
00315
00317 DayTime getAntennaValidFrom() const
00318 { return validFrom; };
00319
00320
00325 Antenna setAntennaValidFrom( const DayTime& valFrom )
00326 { validFrom = valFrom; return (*this); };
00327
00328
00330 DayTime getAntennaValidUntil() const
00331 { return validUntil; };
00332
00333
00338 Antenna setAntennaValidUntil( const DayTime& valUntil )
00339 { validUntil = valUntil; return (*this); };
00340
00341
00343 double getDazi() const
00344 { return dazi; };
00345
00346
00351 Antenna setDazi( double daz )
00352 { dazi = daz; return (*this); };
00353
00354
00356 double getZen1() const
00357 { return zen1; };
00358
00359
00364 Antenna setZen1( double z1 )
00365 { zen1 = z1; return (*this); };
00366
00367
00369 double getZen2() const
00370 { return zen2; };
00371
00372
00377 Antenna setZen2( double z2 )
00378 { zen2 = z2; return (*this); };
00379
00380
00382 double getDzen() const
00383 { return dzen; };
00384
00385
00390 Antenna setDzen( double dz )
00391 { dzen = dz; return (*this); };
00392
00393
00395 int getNumFreq() const
00396 { return numFreq; };
00397
00398
00403 Antenna setNumFreq( int nFreq )
00404 { numFreq = nFreq; return (*this); };
00405
00406
00408 AntennaDataMap getAntennaDataMap() const
00409 { return antennaData; };
00410
00411
00416 Antenna setAntennaDataMap( const AntennaDataMap& dataMap )
00417 { antennaData = dataMap; return (*this); };
00418
00419
00421 std::vector<std::string> getAntennaComments() const
00422 { return commentList; };
00423
00424
00429 Antenna setAntennaComments( const std::vector<std::string>& comments )
00430 { commentList = comments; return (*this); };
00431
00432
00437 Antenna addAntennaComments( std::string comments )
00438 { commentList.push_back(comments); return (*this); };
00439
00440
00442 AntennaEccDataMap getAntennaEccMap() const
00443 { return antennaEccMap; };
00444
00445
00450 Antenna setAntennaEccMap( const AntennaEccDataMap& eccMap )
00451 { antennaEccMap = eccMap; return (*this); };
00452
00453
00459 Antenna addAntennaEcc( frequencyType freq,
00460 const Triple& trEcc )
00461 { antennaEccMap[freq] = trEcc; return (*this); };
00462
00463
00471 Antenna addAntennaEcc( frequencyType freq,
00472 double northEcc,
00473 double eastEcc,
00474 double upEcc );
00475
00476
00478 AntennaEccDataMap getAntennaRMSEccMap() const
00479 { return antennaRMSEccMap; };
00480
00481
00487 Antenna setAntennaRMSEccMap(const AntennaEccDataMap& eccRMSMap)
00488 { antennaRMSEccMap = eccRMSMap; return (*this); };
00489
00490
00498 Antenna addAntennaRMSEcc( frequencyType freq,
00499 double northRMS,
00500 double eastRMS,
00501 double upRMS );
00502
00503
00505 NoAziDataMap getAntennaNoAziMap() const
00506 { return noAziMap; };
00507
00508
00513 Antenna setAntennaNoAziMap( const NoAziDataMap& naMap )
00514 { noAziMap = naMap; return (*this); };
00515
00516
00522 Antenna addAntennaNoAziPattern( frequencyType freq,
00523 const std::vector<double>& pcVec )
00524 { noAziMap[freq] = pcVec; return (*this); };
00525
00526
00528 PCDataMap getAntennaPCMap() const
00529 { return pcMap; };
00530
00531
00536 Antenna setAntennaPCMap( const PCDataMap& pMap )
00537 { pcMap = pMap; return (*this); };
00538
00539
00546 Antenna addAntennaPattern( frequencyType freq,
00547 double azi,
00548 const std::vector<double>& pcVec )
00549 { pcMap[freq][azi] = pcVec; return (*this); };
00550
00551
00553 NoAziDataMap getAntennaNoAziRMSMap() const
00554 { return noAziRMSMap; };
00555
00556
00561 Antenna setAntennaNoAziRMSMap( const NoAziDataMap& naRMSMap )
00562 { noAziRMSMap = naRMSMap; return (*this); };
00563
00564
00570 Antenna addAntennaNoAziRMS( frequencyType freq,
00571 const std::vector<double>& pcRMS )
00572 { noAziRMSMap[freq] = pcRMS; return (*this); };
00573
00574
00576 PCDataMap getAntennaPCRMSMap() const
00577 { return pcRMSMap; };
00578
00579
00584 Antenna setAntennaPCRMSMap( const PCDataMap& pRMSMap )
00585 { pcRMSMap = pRMSMap; return (*this); };
00586
00587
00594 Antenna addAntennaPatternRMS( frequencyType freq,
00595 double azi,
00596 const std::vector<double>& pcRMSVec )
00597 { pcRMSMap[freq][azi] = pcRMSVec; return (*this); };
00598
00599
00601 int getAntennaDataSize() const
00602 { return antennaData.size(); };
00603
00604
00606 int getAntennaEccMapSize() const
00607 { return antennaEccMap.size(); };
00608
00609
00611 int getNoAziMapSize() const
00612 { return noAziMap.size(); };
00613
00614
00616 int getPCMapSize() const
00617 { return pcMap.size(); };
00618
00619
00622 bool isValid() const;
00623
00624
00626 virtual ~Antenna() {};
00627
00628
00629 private:
00630
00631
00633 AntennaDataMap antennaData;
00634
00635
00636 double dazi;
00637
00638 double zen1;
00639 double zen2;
00640 double dzen;
00641
00642 int numFreq;
00643
00644 DayTime validFrom;
00645 DayTime validUntil;
00646
00647 std::vector<std::string> commentList;
00648
00649
00651 AntennaEccDataMap antennaEccMap;
00652
00653
00655 NoAziDataMap noAziMap;
00656
00657
00659 PCDataMap pcMap;
00660
00661
00663 AntennaEccDataMap antennaRMSEccMap;
00664
00665
00667 NoAziDataMap noAziRMSMap;
00668
00669
00671 PCDataMap pcRMSMap;
00672
00673
00682 double linearInterpol( const std::vector<double>& dataVector,
00683 double normalizedAngle ) const;
00684
00685
00686 };
00687
00688
00690
00691 }
00692
00693 #endif // GPSTK_ANTENNA_HPP