00001 #pragma ident "$Id: ComputeIonoModel.hpp 2526 2011-03-09 17:46:16Z yanweignss $"
00002
00009 #ifndef GPSTK_COMPUTE_IONO_MODEL_HPP
00010 #define GPSTK_COMPUTE_IONO_MODEL_HPP
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "ProcessingClass.hpp"
00037 #include "IonexStore.hpp"
00038 #include "IonoModelStore.hpp"
00039
00040
00041 namespace gpstk
00042 {
00043
00046
00087 class ComputeIonoModel : public ProcessingClass
00088 {
00089 public:
00090 enum IonoModelType
00091 {
00092 Zero = 0,
00093 Klobuchar,
00094 Ionex,
00095 DualFreq
00096 };
00097
00098 public:
00099
00101 ComputeIonoModel()
00102 : ionoType(Zero), nominalPos(0.0,0.0,0.0)
00103 { setIndex(); };
00104
00105
00110 ComputeIonoModel(const Position& stapos)
00111 : ionoType(Zero), nominalPos(stapos)
00112 { setIndex(); };
00113
00114
00121 virtual satTypeValueMap& Process( const DayTime& time,
00122 satTypeValueMap& gData )
00123 throw(ProcessingException);
00124
00125
00131 virtual gnssSatTypeValue& Process(gnssSatTypeValue& gData)
00132 throw(ProcessingException)
00133 { Process(gData.header.epoch, gData.body); return gData; };
00134
00135
00141 virtual gnssRinex& Process(gnssRinex& gData)
00142 throw(ProcessingException)
00143 { Process(gData.header.epoch, gData.body); return gData; };
00144
00145
00146 virtual ComputeIonoModel& setZeroModel()
00147 { ionoType = Zero; return (*this); }
00148
00150 virtual ComputeIonoModel& setKlobucharModel(const double a[4],
00151 const double b[4]);
00152
00154 virtual ComputeIonoModel& setKlobucharModel(const IonoModel& im);
00155
00156
00158 virtual ComputeIonoModel& setklobucharModel(const std::string& brdcFile);
00159
00160
00162 virtual ComputeIonoModel& setIonosphereMap(const std::string& ionexFile);
00163
00165 virtual ComputeIonoModel& setDualFreqModel()
00166 { ionoType=DualFreq; return (*this); }
00167
00169 virtual Position getNominalPosition(void) const
00170 { return nominalPos; };
00171
00172
00176 virtual ComputeIonoModel& setNominalPosition(const Position& stapos)
00177 { nominalPos = stapos; return (*this); };
00178
00180 virtual int getIndex(void) const;
00181
00182
00184 virtual std::string getClassName(void) const;
00185
00186
00188 virtual ~ComputeIonoModel() {};
00189
00190
00191 private:
00192
00193 IonoModelType ionoType;
00194
00196 IonoModelStore klbStore;
00197
00199 IonexStore gridStore;
00200
00202 Position nominalPos;
00203
00204
00206 static int classIndex;
00207
00208
00210 int index;
00211
00212
00214 void setIndex(void)
00215 { index = classIndex++; };
00216
00217
00218 };
00219
00221
00222 }
00223
00224 #endif // GPSTK_COMPUTE_IONO_MODEL_HPP