Ignore:
Timestamp:
08/26/10 19:46:26 (14 years ago)
Author:
WataruKawasaki
Message:

New Development: No

JIRA Issue: Yes CAS-1937,CAS-2373

Ready to Release: Yes

Interface Changes: Yes

What Interface Changed: A new parameter 'batch' was added to

sd.scantable.poly_baseline(), while
'uselin' was removed.

Test Programs:

Put in Release Notes: Yes

Module(s): sdbaseline

Description: A faster version of sd.scantable.poly_baseline().


File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/Scantable.cpp

    r1881 r1907  
    17121712}
    17131713
     1714bool Scantable::getFlagtraFast(int whichrow)
     1715{
     1716  uChar flag;
     1717  Vector<uChar> flags;
     1718  flagsCol_.get(uInt(whichrow), flags);
     1719  for (int i = 0; i < flags.size(); i++) {
     1720    if (i==0) {
     1721      flag = flags[i];
     1722    }
     1723    else {
     1724      flag &= flags[i];
     1725    }
     1726    return ((flag >> 7) == 1);
     1727   }
     1728}
     1729
     1730void Scantable::doPolyBaseline(const std::vector<bool>& mask, int order, int rowno, Fitter& fitter)
     1731{
     1732  fitter.setExpression("poly", order);
     1733
     1734  std::vector<double> abcsd = getAbcissa(rowno);
     1735  std::vector<float> abcs;
     1736  for (int i = 0; i < abcsd.size(); i++) {
     1737    abcs.push_back((float)abcsd[i]);
     1738  }
     1739  std::vector<float> spec = getSpectrum(rowno);
     1740  std::vector<bool> fmask = getMask(rowno);
     1741  for (int i = 0; i < fmask.size(); i++) {
     1742    fmask[i] = fmask[i] && mask[i];
     1743  }
     1744  fitter.setData(abcs, spec, fmask);
     1745
     1746  fitter.lfit();
     1747}
     1748
     1749void Scantable::polyBaseline(const std::vector<bool>& mask, int order, int rowno)
     1750{
     1751  Fitter fitter = Fitter();
     1752  doPolyBaseline(mask, order, rowno, fitter);
     1753  setSpectrum(fitter.getResidual(), rowno);
     1754}
     1755
     1756void Scantable::polyBaseline(const std::vector<bool>& mask, int order, int rowno, int pars_ptr, int pars_size, int errs_ptr, int errs_size, int fmask_ptr, int fmask_size)
     1757{
     1758  Fitter fitter = Fitter();
     1759  doPolyBaseline(mask, order, rowno, fitter);
     1760  setSpectrum(fitter.getResidual(), rowno);
     1761
     1762  std::vector<float> pars = fitter.getParameters();
     1763  if (pars_size != pars.size()) {
     1764    throw(AipsError("wrong pars size"));
     1765  }
     1766  float *ppars = reinterpret_cast<float*>(pars_ptr);
     1767  for (int i = 0; i < pars_size; i++) {
     1768    ppars[i] = pars[i];
     1769  }
     1770
     1771  std::vector<float> errs = fitter.getErrors();
     1772  if (errs_size != errs.size()) {
     1773    throw(AipsError("wrong errors size"));
     1774  }
     1775  float *perrs = reinterpret_cast<float*>(errs_ptr);
     1776  for (int i = 0; i < errs_size; i++) {
     1777    perrs[i] = errs[i];
     1778  }
     1779
     1780  if (fmask_size != fmask.size()) {
     1781    throw(AipsError("wrong fmask size"));
     1782  }
     1783  int *pfmask = reinterpret_cast<int*>(fmask_ptr);
     1784  for (int i = 0; i < fmask_size; i++) {
     1785    pfmask[i] = (fmask[i] ? 1 : 0);
     1786  }
     1787}
     1788
    17141789}
    17151790//namespace asap
Note: See TracChangeset for help on using the changeset viewer.