00001 #pragma ident "$Id: ExtractData.hpp 1889 2009-05-11 15:47:23Z afarris $"
00002
00008 #ifndef ExtractData_GPSTK
00009 #define ExtractData_GPSTK
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
00035 #include "Exception.hpp"
00036 #include "RinexObsHeader.hpp"
00037 #include "RinexObsData.hpp"
00038 #include "CheckPRData.hpp"
00039 #include "Vector.hpp"
00040
00041
00042 namespace gpstk
00043 {
00046 NEW_EXCEPTION_CLASS(InvalidData, gpstk::Exception);
00047
00048
00051
00052
00054 class ExtractData
00055 {
00056 public:
00057
00059 inline bool isValid(void)
00060 { return valid; }
00061
00062
00064 int numSV;
00065
00066
00068 Vector<SatID> availableSV;
00069
00070
00072 Vector<double> obsData;
00073
00074
00076 ExtractData() throw(InvalidData) : checkData(true), valid(false), minPRange(15000000.0), maxPRange(30000000.0) {};
00077
00078
00086 inline virtual int getData(const RinexObsData& rinexData, RinexObsHeader::RinexObsType typeObs) throw(InvalidData)
00087 {
00088 try {
00089
00090 availableSV.resize(0);
00091 obsData.resize(0);
00092
00093
00094 CheckPRData checker(minPRange, maxPRange);
00095
00096
00097
00098
00099 RinexObsData::RinexSatMap::const_iterator it;
00100 for (it = rinexData.obs.begin(); it!= rinexData.obs.end(); it++)
00101 {
00102
00103
00104 RinexObsData::RinexObsTypeMap otmap;
00105
00106 RinexObsData::RinexObsTypeMap::const_iterator itObs1;
00107
00108 otmap = (*it).second;
00109
00110
00111 itObs1 = otmap.find(typeObs);
00112
00113
00114 if ( (itObs1!=otmap.end()) && ( (checker.check((*itObs1).second.data)) || !(checkData) ) )
00115 {
00116
00117 availableSV = availableSV && (*it).first;
00118 obsData = obsData && (*itObs1).second.data;
00119 }
00120 }
00121 }
00122 catch(...) {
00123 InvalidData e("Unable to get data from RinexObsData object");
00124 GPSTK_THROW(e);
00125 }
00126
00127
00128 numSV = (int)obsData.size();
00129
00130
00131 valid = true;
00132
00133 return numSV;
00134
00135 };
00136
00137
00139 bool checkData;
00140
00142 virtual void setMinPRange(const double minPR) { minPRange = minPR; };
00143
00145 virtual double getMinPRange(void) { return minPRange; };
00146
00148 virtual void setMaxPRange(const double maxPR) { maxPRange = maxPR; };
00149
00151 virtual double getMaxPRange(void) { return maxPRange; };
00152
00153
00155 inline virtual ~ExtractData() {};
00156
00157
00158 protected:
00160 bool valid;
00161
00163 double minPRange;
00164
00166 double maxPRange;
00167
00168
00169 };
00170
00171
00173
00174 }
00175
00176 #endif