source: trunk/src/ScantableWrapper.h @ 2022

Last change on this file since 2022 was 2012, checked in by WataruKawasaki, 13 years ago

New Development: Yes

JIRA Issue: Yes (CAS-2373, CAS-2620)

Ready for Test: Yes

Interface Changes: Yes

What Interface Changed: For Scantable::polyBaseline(), parameters and return value have been changed.

Test Programs:

Put in Release Notes: Yes

Module(s): sdbaseline, sd.linefinder

Description: (1) CAS-2373-related:

(1.1) Modified Scantable::polyBaseline() to have the row-based loop inside.

Now it fits and subtracts baseline for all rows and also output info
about the fitting result to logger and text file, while in the
previous version this method just did baseline fitting/subtraction
for one row only and had to be put inside a row-based loop at the
python side ("poly_baseline()" in scantable.py) and result output had
also to be controlled at the python side. Using a test data from NRO
45m telescope (348,000 rows, 512 channels), the processing time of
scantable.poly_baseline() has reduced from 130 minutes to 5-6 minutes.

(1.2) For accelerating the another polynomial fitting function, namely

scantable.auto_poly_baseline(), added a method
Scantable::autoPolyBaseline(). This basically does the same thing
with Scantable::polyBaseline(), but uses linefinfer also to
automatically flag the line regions.

(1.3) To make linefinder usable in Scantable class, added a method

linefinder.setdata(). This makes it possible to apply linefinder
for a float-list data given as a parameter, without setting scantable,
while it was indispensable to set scantable to use linefinger previously.

(2) CAS-2620-related:

Added Scantable::cubicSplineBaseline() and autoCubicSplineBaseline() for
fit baseline using the cubic spline function. Parameters include npiece
(number of polynomial pieces), clipthresh (clipping threshold), and
clipniter (maximum iteration number).



  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 10.0 KB
RevLine 
[847]1//
2// C++ Interface: Scantable
3//
4// Description:
5//
6//
7// Author: Malte Marquarding <asap@atnf.csiro.au>, (C) 2006
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
12#ifndef ASAPSCANTABLEWRAPPER_H
13#define ASAPSCANTABLEWRAPPER_H
[2]14
15#include <vector>
16#include <string>
[380]17#include <casa/Arrays/Vector.h>
[2]18
[465]19#include "MathUtils.h"
[901]20#include "STFit.h"
[1931]21#include "STFitEntry.h"
[847]22#include "Scantable.h"
[1598]23#include "STCoordinate.h"
[2]24
[83]25namespace asap {
[847]26/**
27  * This class contains and wraps a CountedPtr<Scantable>, as the CountedPtr
28  * class does not provide the dor operator which is need for references
29  * in boost::python
30  * see Scantable for interfce description
31  *
32  * @brief The main ASAP data container wrapper
33  * @author Malte Marquarding
34  * @date 2006-02-23
35  * @version 2.0a
36*/
37class ScantableWrapper {
[2]38
39public:
[1385]40  explicit ScantableWrapper( const std::string& name,
[1077]41                    int type=0)
[864]42  {
43    casa::Table::TableType tp = casa::Table::Memory;
[1077]44    if ( type == 1 ) tp = casa::Table::Plain;
[864]45    table_ = new Scantable(name, tp);
46  }
[90]47
[1350]48  explicit ScantableWrapper(int type=0)
[864]49  {
50    casa::Table::TableType tp = casa::Table::Memory;
[1077]51    if ( type == 1) tp = casa::Table::Plain;
[864]52    table_= new Scantable(tp);
53  }
[90]54
[1350]55  explicit ScantableWrapper(casa::CountedPtr<Scantable> cp) : table_(cp) {;}
[90]56
[847]57  ScantableWrapper(const ScantableWrapper& mt) :
58    table_(mt.getCP()) {;}
[90]59
[868]60  void assign(const ScantableWrapper& mt)
61    { table_= mt.getCP(); }
62
[847]63  ScantableWrapper copy() {
64    return ScantableWrapper(new Scantable(*(this->getCP()), false));
[80]65  }
[868]66
[896]67  std::vector<float> getSpectrum( int whichrow=0,
[905]68                                  const std::string& poltype="" ) const {
[896]69    return table_->getSpectrum(whichrow, poltype);
[2]70  }
[527]71  //  std::string getPolarizationLabel(bool linear, bool stokes, bool linPol, int polIdx) const {
72  // Boost fails with 4 arguments.
[902]73  std::string getPolarizationLabel(int index, const std::string& ptype) const {
74    return table_->getPolarizationLabel(index, ptype);
[494]75  }
[527]76
[896]77  std::vector<double> getAbcissa(int whichrow=0) const
78    { return table_->getAbcissa(whichrow); }
[41]79
[896]80  std::string getAbcissaLabel(int whichrow=0) const
81    { return table_->getAbcissaLabel(whichrow); }
[157]82
[896]83  float getTsys(int whichrow=0) const
84    { return table_->getTsys(whichrow); }
[2]85
[1947]86  //std::string getTime(int whichrow=0) const
87  //  { return table_->getTime(whichrow); }
88  std::string getTime(int whichrow=0, int prec = 0) const
89    { return table_->getTime(whichrow, true, casa::uInt(prec)); }
[207]90
[1350]91  double getIntTime(int whichrow=0) const
92    { return table_->getIntTime(whichrow); }
93
[1068]94  std::string getDirectionString(int whichrow=0) const
95    { return table_->getDirectionString(whichrow); }
96
[864]97  std::string getFluxUnit() const { return table_->getFluxUnit(); }
98
99  void setFluxUnit(const std::string& unit) { table_->setFluxUnit(unit); }
100
[238]101  void setInstrument(const std::string& name) {table_->setInstrument(name);}
[1189]102  void setFeedType(const std::string& ftype) {table_->setFeedType(ftype);}
[238]103
[896]104  std::vector<bool> getMask(int whichrow=0) const
105    { return table_->getMask(whichrow); }
[2]106
[1430]107  /**
[1000]108  void flag(const std::vector<bool>& msk=std::vector<bool>())
109    { table_->flag(msk); }
[1430]110  **/
[1994]111  /**
[1430]112  void flag(const std::vector<bool>& msk=std::vector<bool>(), bool unflag=false)
113    { table_->flag(msk, unflag); }
[1994]114  **/
115  void flag(int whichrow=-1, const std::vector<bool>& msk=std::vector<bool>(), bool unflag=false)
116    { table_->flag(whichrow, msk, unflag); }
[2]117
[1819]118  void flagRow(const std::vector<casa::uInt>& rows=std::vector<casa::uInt>(), bool unflag=false)
119    { table_->flagRow(rows, unflag); }
120
121  bool getFlagRow(int whichrow=0) const
122    { return table_->getFlagRow(whichrow); }
123
124  void clip(const casa::Float uthres, const casa::Float dthres, bool clipoutside=true, bool unflag=false)
125    { table_->clip(uthres, dthres, clipoutside, unflag); }
126
127  std::vector<bool> getClipMask(int whichrow, const casa::Float uthres, const casa::Float dthres, bool clipoutside, bool unflag) const
128    { return table_->getClipMask(whichrow, uthres, dthres, clipoutside, unflag); }
129
[896]130  std::string getSourceName(int whichrow=0) const
131    { return table_->getSourceName(whichrow); }
[794]132
[896]133  float getElevation(int whichrow=0) const
134    { return table_->getElevation(whichrow); }
[90]135
[896]136  float getAzimuth(int whichrow=0) const
137    { return table_->getAzimuth(whichrow); }
[2]138
[896]139  float getParAngle(int whichrow=0) const
140    { return table_->getParAngle(whichrow); }
[2]141
[864]142
[884]143  void setSpectrum(std::vector<float> spectrum, int whichrow=0)
144    { table_->setSpectrum(spectrum, whichrow); }
[868]145
[1111]146  std::vector<uint> getIFNos() { return table_->getIFNos(); }
[864]147  int getIF(int whichrow) const {return table_->getIF(whichrow);}
[1111]148  std::vector<uint> getBeamNos() { return table_->getBeamNos(); }
[864]149  int getBeam(int whichrow) const {return table_->getBeam(whichrow);}
[1111]150  std::vector<uint> getPolNos() { return table_->getPolNos(); }
[864]151  int getPol(int whichrow) const {return table_->getPol(whichrow);}
[868]152  int getCycle(int whichrow) const {return table_->getCycle(whichrow);}
[1111]153  std::vector<uint> getScanNos() { return table_->getScanNos(); }
[868]154  int getScan(int whichrow) const {return table_->getScan(whichrow);}
[1819]155  std::vector<uint> getMolNos() { return table_->getMolNos();}
[864]156
157  STSelector getSelection() const { return table_->getSelection(); }
[868]158  void setSelection(const STSelector& sts)
159    { return table_->setSelection(sts);}
[864]160
[896]161  std::string getPolType() const { return table_->getPolType(); }
162
[864]163  int nif(int scanno=-1) const {return table_->nif(scanno);}
164  int nbeam(int scanno=-1) const {return table_->nbeam(scanno);}
165  int npol(int scanno=-1) const {return table_->npol(scanno);}
166  int nchan(int ifno=-1) const {return table_->nchan(ifno);}
167  int nscan() const {return table_->nscan();}
168  int nrow() const {return table_->nrow();}
[902]169  int ncycle(int scanno) const {return table_->ncycle(scanno);}
[2]170
[864]171  void makePersistent(const std::string& fname)
172    { table_->makePersistent(fname); }
[90]173
[1068]174  void setSourceType(int stype)
175    { table_->setSourceType(stype); }
176
[1360]177  void shift(int npix)
178  { table_->shift(npix); }
179
[1819]180/**
181  commented out by TT
[1170]182  void setRestFrequencies(double rf, const std::string& name,
183                          const std::string& unit)
184    { table_->setRestFrequencies(rf, name, unit); }
[1819]185**/
186  void setRestFrequencies(vector<double> rf, const vector<std::string>& name,
187                          const std::string& unit)
188    { table_->setRestFrequencies(rf, name, unit); }
189
[925]190/*
[868]191  void setRestFrequencies(const std::string& name) {
192    table_->setRestFrequencies(name);
[847]193  }
[925]194*/
[745]195
[1819]196/*
[864]197  std::vector<double> getRestFrequencies() const
198    { return table_->getRestFrequencies(); }
[1819]199*/
200  std::vector<double> getRestFrequency(int id) const
201    { return table_->getRestFrequency(id); }
[251]202
[105]203  void setCoordInfo(std::vector<string> theinfo) {
204    table_->setCoordInfo(theinfo);
205  }
206  std::vector<string> getCoordInfo() const {
207    return table_->getCoordInfo();
208  }
[90]209
[987]210  void setDirection(const std::string& refstr="")
211    { table_->setDirectionRefString(refstr); }
212
[847]213  casa::CountedPtr<Scantable> getCP() const {return table_;}
214  Scantable* getPtr() {return &(*table_);}
[380]215
[745]216  std::string summary(bool verbose=false) const {
217    return table_->summary(verbose);
[380]218  }
[745]219
[864]220  std::vector<std::string> getHistory()const
221    { return table_->getHistory(); }
[207]222
[864]223  void addHistory(const std::string& hist)
224    { table_->addHistory(hist); }
[745]225
[972]226  void addFit(const STFitEntry& fit, int row)
227    { table_->addFit(fit, row); }
228
229  STFitEntry getFit(int whichrow) const
230  { return table_->getFit(whichrow); }
231
[2012]232  void calculateAZEL() { table_->calculateAZEL(); }
[465]233
[1003]234  std::vector<std::string> columnNames() const
235    { return table_->columnNames(); }
236
[1391]237  std::string getAntennaName() const
238    { return table_->getAntennaName(); }
239
240  int checkScanInfo(const vector<int>& scanlist) const
241    { return table_->checkScanInfo(scanlist); }
[1819]242 
[1730]243  std::vector<double> getDirectionVector(int whichrow) const
[1391]244    { return table_->getDirectionVector(whichrow); }
245
[1586]246  void parallactify(bool flag)
247    { table_->parallactify(flag); }
248
[1598]249  STCoordinate getCoordinate(int row) {
250    return STCoordinate(table_->getSpectralCoordinate(row));
251  }
252
[1730]253  std::vector<float> getWeather(int whichrow) const
254    { return table_->getWeather(whichrow); }
255
[1819]256  void reshapeSpectrum( int nmin, int nmax )
257  { table_->reshapeSpectrum( nmin, nmax ); }
258
[2012]259  void polyBaseline(const std::vector<bool>& mask, int order, bool outlog=false, const std::string& blfile="")
260  { table_->polyBaseline(mask, order, outlog, blfile); }
[1907]261
[2012]262  void autoPolyBaseline(const std::vector<bool>& mask, int order, const std::vector<int>& edge, float threshold=5.0, int chan_avg_limit=1, bool outlog=false, const std::string& blfile="")
263  { table_->autoPolyBaseline(mask, order, edge, threshold, chan_avg_limit, outlog, blfile); }
[1907]264
[2012]265  void cubicSplineBaseline(const std::vector<bool>& mask, int npiece, float clipthresh, int clipniter, bool outlog=false, const std::string& blfile="")
266  { table_->cubicSplineBaseline(mask, npiece, clipthresh, clipniter, outlog, blfile); }
267
268  void autoCubicSplineBaseline(const std::vector<bool>& mask, int npiece, float clipthresh, int clipniter, const std::vector<int>& edge, float threshold=5.0, int chan_avg_limit=1, bool outlog=false, const std::string& blfile="")
269  { table_->autoCubicSplineBaseline(mask, npiece, clipthresh, clipniter, edge, threshold, chan_avg_limit, outlog, blfile); }
270
271  float getRms(const std::vector<bool>& mask, int whichrow)
272  { return table_->getRms(mask, whichrow); }
273
274  std::string formatBaselineParams(const std::vector<float>& params, const std::vector<bool>& fixed, float rms, const std::string& masklist, int whichrow, bool verbose=false)
275  { return table_->formatBaselineParams(params, fixed, rms, masklist, whichrow, verbose); }
276
277  std::string formatPiecewiseBaselineParams(const std::vector<int>& ranges, const std::vector<float>& params, const std::vector<bool>& fixed, float rms, const std::string& masklist, int whichrow, bool verbose=false)
278  { return table_->formatPiecewiseBaselineParams(ranges, params, fixed, rms, masklist, whichrow, verbose); }
279
[1907]280  bool getFlagtraFast(int whichrow=0) const
[2012]281  { return table_->getFlagtraFast(whichrow); }
[1907]282
283
[2012]284
[2]285private:
[847]286  casa::CountedPtr<Scantable> table_;
[2]287};
288
289} // namespace
290#endif
[1819]291
Note: See TracBrowser for help on using the repository browser.