Antenna.hpp

Go to the documentation of this file.
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 //  This file is part of GPSTk, the GPS Toolkit.
00014 //
00015 //  The GPSTk is free software; you can redistribute it and/or modify
00016 //  it under the terms of the GNU Lesser General Public License as published
00017 //  by the Free Software Foundation; either version 2.1 of the License, or
00018 //  any later version.
00019 //
00020 //  The GPSTk is distributed in the hope that it will be useful,
00021 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
00022 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00023 //  GNU Lesser General Public License for more details.
00024 //
00025 //  You should have received a copy of the GNU Lesser General Public
00026 //  License along with GPSTk; if not, write to the Free Software Foundation,
00027 //  Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00028 //
00029 //  Dagoberto Salazar - gAGE ( http://www.gage.es ). 2009
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          // Handy type definitions
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    }; // End of class 'Antenna'
00687 
00688 
00690 
00691 }  // End of namespace gpstk
00692 
00693 #endif   // GPSTK_ANTENNA_HPP

Generated on Wed Feb 8 03:30:57 2012 for GPS ToolKit Software Library by  doxygen 1.3.9.1