Changeset 2126 for branches/casa-prerelease/pre-asap/src/STMath.cpp
- Timestamp:
- 04/08/11 21:06:20 (13 years ago)
- Location:
- branches/casa-prerelease/pre-asap
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/casa-prerelease/pre-asap
-
branches/casa-prerelease/pre-asap/src
- Property svn:mergeinfo changed
/trunk/src merged: 2125
- Property svn:mergeinfo changed
-
branches/casa-prerelease/pre-asap/src/STMath.cpp
r2103 r2126 207 207 ROScalarColumn<Double> tmp(tin, "TIME"); 208 208 Double td;tmp.get(0,td); 209 Table basesubt = tin( tin.col("BEAMNO") == Int(rec.asuInt("BEAMNO"))210 && tin.col("IFNO") == Int(rec.asuInt("IFNO"))211 && tin.col("POLNO") == Int(rec.asuInt("POLNO")) );209 Table basesubt = tin( tin.col("BEAMNO") == Int(rec.asuInt("BEAMNO")) 210 && tin.col("IFNO") == Int(rec.asuInt("IFNO")) 211 && tin.col("POLNO") == Int(rec.asuInt("POLNO")) ); 212 212 Table subt; 213 213 if ( avmode == "SOURCE") { 214 subt = basesubt( basesubt.col("SRCNAME") == rec.asString("SRCNAME") 214 subt = basesubt( basesubt.col("SRCNAME") == rec.asString("SRCNAME")); 215 215 } else if (avmode == "SCAN") { 216 //subt = basesubt( basesubt.col("SCANNO") == Int(rec.asuInt("SCANNO")) ); 217 subt = basesubt( basesubt.col("SCANNO") == Int(rec.asuInt("SCANNO")) 218 && basesubt.col("SRCNAME") == rec.asString("SRCNAME") ); 216 subt = basesubt( basesubt.col("SRCNAME") == rec.asString("SRCNAME") 217 && basesubt.col("SCANNO") == Int(rec.asuInt("SCANNO")) ); 219 218 } else { 220 219 subt = basesubt; … … 266 265 acc.add(spec, !bflag, tsys, inter, time); 267 266 } 267 268 // If there exists a channel at which all the input spectra are masked, 269 // spec has 'nan' values for that channel and it may affect the following 270 // processes. To avoid this, replacing 'nan' values in spec with 271 // weighted-mean of all spectra in the following line. 272 // (done for CAS-2776, 2011/04/07 by Wataru Kawasaki) 273 acc.replaceNaN(); 268 274 } 269 275 const Vector<Bool>& msk = acc.getMask(); … … 278 284 Vector<uChar> flg(msk.shape()); 279 285 convertArray(flg, !msk); 286 for (uInt k = 0; k < flg.nelements(); ++k) { 287 uChar userFlag = 1 << 7; 288 if (msk[k]==True) userFlag = 0 << 7; 289 flg(k) = userFlag; 290 } 291 280 292 flagColOut.put(i, flg); 281 293 specColOut.put(i, acc.getSpectrum()); … … 627 639 // check if vector size is equal to nrow 628 640 Vector<Float> fact( val ) ; 629 if ( fact.nelements() != in->nrow()) {641 if (fact.nelements() != uInt(in->nrow())) { 630 642 throw( AipsError("Vector size must be 1 or be same as number of row.") ) ; 631 643 } … … 688 700 // some checks 689 701 vector<uInt> nchans; 690 for ( uInt i = 0 ; i < in->nrow() ; i++) {691 nchans.push_back( (in->getSpectrum( i )).size() );702 for (Int i = 0 ; i < in->nrow() ; i++) { 703 nchans.push_back((in->getSpectrum(i)).size()); 692 704 } 693 705 //Vector<uInt> mchans( nchans ) ; … … 2248 2260 Table outtab = out->table(); 2249 2261 2250 const uInt ntau = uInt(tau.size());2262 const Int ntau = uInt(tau.size()); 2251 2263 std::vector<float>::const_iterator tauit = tau.begin(); 2252 2264 AlwaysAssert((ntau == 1 || ntau == in->nif() || ntau == in->nif() * in->npol()), … … 2292 2304 { 2293 2305 CountedPtr< Scantable > out = getScantable(in, false); 2294 Table& table = out->table(); 2295 ArrayColumn<Float> specCol(table, "SPECTRA"); 2296 ArrayColumn<uChar> flagCol(table, "FLAGTRA"); 2297 Vector<Float> spec; 2298 Vector<uChar> flag; 2299 for ( uInt i=0; i<table.nrow(); ++i) { 2300 specCol.get(i, spec); 2301 flagCol.get(i, flag); 2302 Vector<Bool> mask(flag.nelements()); 2303 convertArray(mask, flag); 2304 Vector<Float> specout; 2305 Vector<Bool> maskout; 2306 if ( kernel == "hanning" ) { 2307 mathutil::hanning(specout, maskout, spec , !mask); 2308 convertArray(flag, !maskout); 2309 } else if ( kernel == "rmedian" ) { 2310 mathutil::runningMedian(specout, maskout, spec , mask, width); 2311 convertArray(flag, maskout); 2312 } else if ( kernel == "poly" ) { 2313 mathutil::polyfit(specout, maskout, spec, !mask, width, order); 2314 convertArray(flag, !maskout); 2315 } 2316 flagCol.put(i, flag); 2317 specCol.put(i, specout); 2306 Table table = out->table(); 2307 2308 TableIterator iter(table, "IFNO"); 2309 while (!iter.pastEnd()) { 2310 Table tab = iter.table(); 2311 ArrayColumn<Float> specCol(tab, "SPECTRA"); 2312 ArrayColumn<uChar> flagCol(tab, "FLAGTRA"); 2313 Vector<Float> spec; 2314 Vector<uChar> flag; 2315 for (uInt i = 0; i < tab.nrow(); ++i) { 2316 specCol.get(i, spec); 2317 flagCol.get(i, flag); 2318 Vector<Bool> mask(flag.nelements()); 2319 convertArray(mask, flag); 2320 Vector<Float> specout; 2321 Vector<Bool> maskout; 2322 if (kernel == "hanning") { 2323 mathutil::hanning(specout, maskout, spec, !mask); 2324 convertArray(flag, !maskout); 2325 } else if (kernel == "rmedian") { 2326 mathutil::runningMedian(specout, maskout, spec , mask, width); 2327 convertArray(flag, maskout); 2328 } else if (kernel == "poly") { 2329 mathutil::polyfit(specout, maskout, spec, !mask, width, order); 2330 convertArray(flag, !maskout); 2331 } 2332 2333 for (uInt j = 0; j < flag.nelements(); ++j) { 2334 uChar userFlag = 1 << 7; 2335 if (maskout[j]==True) userFlag = 0 << 7; 2336 flag(j) = userFlag; 2337 } 2338 2339 flagCol.put(i, flag); 2340 specCol.put(i, specout); 2341 } 2342 ++iter; 2318 2343 } 2319 2344 return out; … … 2822 2847 if (fstart-1 > 0 ) { 2823 2848 interp = spec[fstart-1]; 2824 if (fend+1 < spec.nelements()) {2849 if (fend+1 < Int(spec.nelements())) { 2825 2850 interp = (interp+spec[fend+1])/2.0; 2826 2851 }
Note: See TracChangeset
for help on using the changeset viewer.