Changeset 1192 for trunk/src


Ignore:
Timestamp:
08/28/06 16:33:58 (18 years ago)
Author:
mar637
Message:

added lag_flag - flagging of frequencies in fft space

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/STMath.cpp

    r1145 r1192  
    3131#include <tables/Tables/TableIter.h>
    3232#include <tables/Tables/TableCopy.h>
     33#include <scimath/Mathematics/FFTServer.h>
    3334
    3435#include <lattices/Lattices/LatticeUtilities.h>
     
    13771378  return out;
    13781379}
     1380
     1381CountedPtr< Scantable >
     1382  asap::STMath::lagFlag( const CountedPtr< Scantable > & in,
     1383                          double frequency, int width )
     1384{
     1385  CountedPtr< Scantable > out = getScantable(in, false);
     1386  Table& tout = out->table();
     1387  TableIterator iter(tout, "FREQ_ID");
     1388  FFTServer<Float,Complex> ffts;
     1389  while ( !iter.pastEnd() ) {
     1390    Table tab = iter.table();
     1391    Double rp,rv,inc;
     1392    ROTableRow row(tab);
     1393    const TableRecord& rec = row.get(0);
     1394    uInt freqid = rec.asuInt("FREQ_ID");
     1395    out->frequencies().getEntry(rp, rv, inc, freqid);
     1396    ArrayColumn<Float> specCol(tab, "SPECTRA");
     1397    ArrayColumn<uChar> flagCol(tab, "FLAGTRA");
     1398    for (int i=0; i<int(tab.nrow()); ++i) {
     1399      Vector<Float> spec = specCol(i);
     1400      Vector<uChar> flag = flagCol(i);
     1401      Int lag = Int(spec.nelements()*abs(inc)/frequency);
     1402      for (int k=0; k < flag.nelements(); ++k ) {
     1403        if (flag[k] > 0) {
     1404          spec[k] = 0.0;
     1405        }
     1406      }
     1407      Vector<Complex> lags;
     1408      ffts.fft(lags, spec);
     1409      Int start =  max(0, lag-width);
     1410      Int end =  min(Int(lags.nelements()-1), lag+width);
     1411      if (start == end) {
     1412        lags[start] = Complex(0.0);
     1413      } else {
     1414        for (int j=start; j <=end ;++j) {
     1415          lags[j] = Complex(0.0);
     1416        }
     1417      }
     1418      ffts.fft(spec, lags);
     1419      specCol.put(i, spec);
     1420    }
     1421    ++iter;
     1422  }
     1423  return out;
     1424}
  • trunk/src/STMath.h

    r1145 r1192  
    184184               const std::string& srctype = "on");
    185185
     186  /**
     187   * "hard" flag the data, this flags everything selected in setSelection()
     188   * @param frequency the frequency to remove
     189   * @param width the number of lags to flag left to the side of the frequency
     190   */
     191  casa::CountedPtr<Scantable>
     192    lagFlag( const casa::CountedPtr<Scantable>& in, double frequency,
     193              int width);
     194
    186195private:
    187196  casa::CountedPtr<Scantable>  applyToPol( const casa::CountedPtr<Scantable>& in,
  • trunk/src/STMathWrapper.h

    r1145 r1192  
    156156  { return ScantableWrapper(STMath::mxExtract(in.getCP(),scantype)); }
    157157
     158  ScantableWrapper lagFlag( const ScantableWrapper& in,
     159                            double frequency, int width )
     160  { return ScantableWrapper(STMath::lagFlag(in.getCP(), frequency, width)); }
     161
    158162};
    159163
  • trunk/src/python_STMath.cpp

    r1145 r1192  
    6767        .def("_freq_align", &STMathWrapper::frequencyAlign)
    6868        .def("_mx_extract", &STMathWrapper::mxExtract)
     69        .def("_lag_flag", &STMathWrapper::lagFlag)
    6970          ;
    7071    };
Note: See TracChangeset for help on using the changeset viewer.