00001 #pragma ident "$Id: DeltaOp.cpp 2619 2011-05-26 03:36:15Z yanweignss $"
00002
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include "DeltaOp.hpp"
00033
00034
00035 namespace gpstk
00036 {
00037
00038
00039 int DeltaOp::classIndex = 7000000;
00040
00041
00042
00043 int DeltaOp::getIndex() const
00044 { return index; }
00045
00046
00047
00048 std::string DeltaOp::getClassName() const
00049 { return "DeltaOp"; }
00050
00051
00052
00053
00054
00055
00056
00057
00058 DeltaOp& DeltaOp::addDiffTypeSet(const TypeIDSet& diffSet)
00059 {
00060
00061
00062 TypeIDSet::const_iterator pos;
00063 for (pos = diffSet.begin(); pos != diffSet.end(); ++pos)
00064 {
00065 diffTypes.insert(*pos);
00066 }
00067
00068 return (*this);
00069
00070 }
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 satTypeValueMap& DeltaOp::Process(satTypeValueMap& gData)
00081 throw(ProcessingException)
00082 {
00083
00084 try
00085 {
00086
00087 SatIDSet satRejectedSet;
00088
00089
00090 satTypeValueMap::iterator it;
00091 for (it = gData.begin(); it != gData.end(); ++it)
00092 {
00093
00094
00095 satTypeValueMap::const_iterator itref;
00096 itref = refData.find((*it).first);
00097
00098
00099 if (itref != refData.end())
00100 {
00101
00102
00103
00104 TypeIDSet::const_iterator itType;
00105 for( itType = diffTypes.begin();
00106 itType != diffTypes.end();
00107 ++itType )
00108 {
00109
00110 double value1(0.0);
00111 double value2(0.0);
00112
00113 try
00114 {
00115
00116
00117 value1 = gData((*it).first)(*itType);
00118 value2 = refData((*it).first)(*itType);
00119
00120
00121 gData((*it).first)((*itType)) = value1 - value2;
00122
00123 }
00124 catch(...)
00125 {
00126
00127
00128
00129 satRejectedSet.insert( (*it).first );
00130
00131
00132 continue;
00133
00134 }
00135
00136 }
00137
00138
00139 if(updateCSFlag)
00140 {
00141 double CSValue1 = gData[it->first][TypeID::CSL1]
00142 +refData[it->first][TypeID::CSL1];
00143 double CSValue2 = gData[it->first][TypeID::CSL2]
00144 +refData[it->first][TypeID::CSL2];
00145
00146
00147 gData[it->first][TypeID::CSL1] = (CSValue1 > 0.0) ? 1.0 : 0.0;
00148
00149 gData[it->first][TypeID::CSL2] = (CSValue2 > 0.0) ? 1.0 : 0.0;
00150
00151 }
00152
00153 }
00154 else
00155 {
00156
00157
00158
00159 satRejectedSet.insert( (*it).first );
00160
00161 continue;
00162
00163 }
00164
00165 }
00166
00167
00168 if (deleteMissingSats)
00169 {
00170 gData.removeSatID(satRejectedSet);
00171 }
00172
00173 return gData;
00174
00175 }
00176 catch(Exception& u)
00177 {
00178
00179 ProcessingException e( getClassName() + ":"
00180 + StringUtils::asString( getIndex() ) + ":"
00181 + u.what() );
00182
00183 GPSTK_THROW(e);
00184
00185 }
00186
00187 }
00188
00189
00190
00191 }