00001 #pragma ident "$Id: NablaOp.cpp 3140 2012-06-18 15:03:02Z susancummins $"
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 "NablaOp.hpp"
00033
00034
00035 namespace gpstk
00036 {
00037
00038
00039 std::string NablaOp::getClassName() const
00040 { return "NablaOp"; }
00041
00042
00043
00044
00045
00046
00047
00048
00049 NablaOp::NablaOp()
00050 : lookReferenceSat(true)
00051 {
00052
00053
00054 diffTypes.insert(TypeID::prefitC);
00055 diffTypes.insert(TypeID::dx);
00056 diffTypes.insert(TypeID::dy);
00057 diffTypes.insert(TypeID::dz);
00058
00059 }
00060
00061
00062
00063
00064
00065
00066
00067
00068 NablaOp::NablaOp(const SatID& rSat)
00069 : refSat(rSat), lookReferenceSat(false)
00070 {
00071
00072
00073 diffTypes.insert(TypeID::prefitC);
00074 diffTypes.insert(TypeID::dx);
00075 diffTypes.insert(TypeID::dy);
00076 diffTypes.insert(TypeID::dz);
00077
00078 }
00079
00080
00081
00082
00083
00084
00085
00086
00087 NablaOp& NablaOp::addDiffTypeSet(const TypeIDSet& diffSet)
00088 {
00089
00090
00091 TypeIDSet::const_iterator pos;
00092 for(pos = diffSet.begin(); pos != diffSet.end(); ++pos)
00093 {
00094 diffTypes.insert(*pos);
00095 }
00096
00097 return (*this);
00098
00099 }
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109 satTypeValueMap& NablaOp::Process(satTypeValueMap& gData)
00110 throw(ProcessingException)
00111 {
00112
00113 try
00114 {
00115
00116 double maxElevation(0.0);
00117
00118
00119
00120 if (lookReferenceSat)
00121 {
00122
00123
00124
00125 satTypeValueMap::iterator it;
00126 for (it = gData.begin(); it != gData.end(); ++it)
00127 {
00128
00129
00130
00131 if ( gData((*it).first)(TypeID::elevation) > maxElevation )
00132 {
00133
00134 refSat = (*it).first;
00135 maxElevation = gData((*it).first)(TypeID::elevation);
00136
00137 }
00138
00139 }
00140
00141 }
00142
00143
00144
00145 satTypeValueMap refData(gData.extractSatID(refSat));
00146
00147
00148 gData.removeSatID(refSat);
00149
00150
00151 SatIDSet satRejectedSet;
00152
00153
00154
00155 satTypeValueMap::iterator it;
00156 for (it = gData.begin(); it != gData.end(); ++it)
00157 {
00158
00159
00160
00161 TypeIDSet::const_iterator itType;
00162 for(itType = diffTypes.begin(); itType != diffTypes.end(); ++itType)
00163 {
00164
00165 double value1(0.0);
00166 double value2(0.0);
00167
00168 try
00169 {
00170
00171
00172 value1 = gData((*it).first)(*itType);
00173 value2 = refData(refSat)(*itType);
00174
00175
00176 gData((*it).first)((*itType)) = value1 - value2;
00177
00178 }
00179 catch(...)
00180 {
00181
00182
00183
00184 satRejectedSet.insert( (*it).first );
00185
00186 continue;
00187
00188 }
00189
00190 }
00191
00192 }
00193
00194
00195
00196 gData.removeSatID(satRejectedSet);
00197
00198 return gData;
00199
00200 }
00201 catch(Exception& u)
00202 {
00203
00204 ProcessingException e( getClassName() + ":"
00205 + u.what() );
00206
00207 GPSTK_THROW(e);
00208
00209 }
00210
00211 }
00212
00213
00214
00215 }