Changeset 2186 for trunk/src/MathUtils.cpp
- Timestamp:
- 06/07/11 23:49:53 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/MathUtils.cpp
r2163 r2186 248 248 } 249 249 } 250 251 void mathutil::doZeroOrderInterpolation(casa::Vector<casa::Float>& data, 252 std::vector<bool>& mask) { 253 int fstart = -1; 254 int fend = -1; 255 for (uInt i = 0; i < mask.size(); ++i) { 256 if (!mask[i]) { 257 fstart = i; 258 while (!mask[i] && i < mask.size()) { 259 fend = i; 260 i++; 261 } 262 } 263 264 // execute interpolation as the following criteria: 265 // (1) for a masked region inside the spectrum, replace the spectral 266 // values with the mean of those at the two channels just outside 267 // the both edges of the masked region. 268 // (2) for a masked region at the spectral edge, replace the values 269 // with the one at the nearest non-masked channel. 270 // (ZOH, but bilateral) 271 Float interp = 0.0; 272 if (fstart-1 > 0) { 273 interp = data[fstart-1]; 274 if (fend+1 < Int(data.nelements())) { 275 interp = (interp + data[fend+1]) / 2.0; 276 } 277 } else { 278 interp = data[fend+1]; 279 } 280 if (fstart > -1 && fend > -1) { 281 for (int j = fstart; j <= fend; ++j) { 282 data[j] = interp; 283 } 284 } 285 286 fstart = -1; 287 fend = -1; 288 } 289 }
Note: See TracChangeset
for help on using the changeset viewer.