source: trunk/src/Scantable.h @ 2012

Last change on this file since 2012 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: 19.9 KB
RevLine 
[824]1//
2// C++ Interface: Scantable
3//
4// Description:
5//
6//
7// Author: Malte Marquarding <asap@atnf.csiro.au>, (C) 2005
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
12#ifndef ASAPSCANTABLE_H
13#define ASAPSCANTABLE_H
[2]14
15// STL
16#include <string>
17#include <vector>
[2012]18#include <iostream>
19#include <fstream>
[2]20// AIPS++
[455]21#include <casa/aips.h>
[1931]22#include <casa/Containers/Record.h>
[322]23#include <casa/Arrays/MaskedArray.h>
[80]24#include <casa/BasicSL/String.h>
[824]25#include <casa/Utilities/CountedPtr.h>
26
[80]27#include <tables/Tables/Table.h>
[322]28#include <tables/Tables/ArrayColumn.h>
29#include <tables/Tables/ScalarColumn.h>
30
[824]31#include <measures/TableMeasures/ScalarMeasColumn.h>
32
[1598]33#include <coordinates/Coordinates/SpectralCoordinate.h>
34
[1819]35#include <casa/Arrays/Vector.h>
36#include <casa/Quanta/Quantum.h>
37
38#include <casa/Exceptions/Error.h>
39
[894]40#include "Logger.h"
[901]41#include "STHeader.h"
[824]42#include "STFrequencies.h"
43#include "STWeather.h"
44#include "STFocus.h"
45#include "STTcal.h"
46#include "STMolecules.h"
47#include "STSelector.h"
[860]48#include "STHistory.h"
[896]49#include "STPol.h"
[960]50#include "STFit.h"
[972]51#include "STFitEntry.h"
[1907]52#include "STFitter.h"
[2]53
[824]54namespace asap {
[2]55
[824]56/**
57  * This class contains and wraps a casa::Table, which is used to store
58  * all the information. This can be either a MemoryTable or a
59  * disk based Table.
60  * It provides access functions to the underlying table
61  * It contains n subtables:
62  * @li weather
63  * @li frequencies
64  * @li molecules
65  * @li tcal
66  * @li focus
67  * @li fits
68  *
69  * @brief The main ASAP data container
70  * @author Malte Marquarding
71  * @date
72  * @version
73*/
[890]74class Scantable : private Logger
[824]75{
[902]76
77friend class STMath;
78
[2]79public:
[824]80  /**
81   * Default constructor
82   */
[1350]83  explicit Scantable(casa::Table::TableType ttype = casa::Table::Memory);
[19]84
[824]85  /**
86   * Create a Scantable object form an existing table on disk
87   * @param[in] name the name of the existing Scantable
88   */
[1385]89  explicit Scantable(const std::string& name, casa::Table::TableType ttype = casa::Table::Memory);
[2]90
[824]91  /// @fixme this is only sensible for MemoryTables....
92  Scantable(const Scantable& other, bool clear=true);
[161]93
[824]94  /**
95   * Destructor
96   */
97  virtual ~Scantable();
[745]98
[824]99  /**
100   * get a const reference to the underlying casa::Table
[1104]101   * @return const \ref casa::Table reference
[824]102   */
103  const casa::Table& table() const;
[19]104
[824]105  /**
106   * get a reference to the underlying casa::Table with the Selection
107   * object applied if set
108   * @return casa::Table reference
109   */
110  casa::Table& table();
[21]111
[845]112
113  /**
114   * Get a handle to the selection object
115   * @return constant STSelector reference
116   */
117  const STSelector& getSelection() const { return selector_; }
118
119  /**
120   * Set the data to be a subset as defined by the STSelector
121   * @param selection a STSelector object
122   */
[824]123  void setSelection(const STSelector& selection);
[845]124
125  /**
126   * unset the selection of the data
127   */
[824]128  void unsetSelection();
129  /**
130   * set the header
[1295]131   * @param[in] sth an STHeader object
[824]132   */
[901]133  void setHeader( const STHeader& sth );
[386]134
[824]135  /**
136   * get the header information
[901]137   * @return an STHeader object
[824]138   */
[901]139  STHeader getHeader( ) const;
[1068]140
[824]141  /**
142   * Checks if the "other" Scantable is conformant with this,
143   * i.e. if  header values are the same.
144   * @param[in] other another Scantable
145   * @return true or false
146   */
147  bool conformant( const Scantable& other);
[430]148
[824]149  /**
[1068]150   *
151   * @param stype The type of the source, 0 = on, 1 = off
152   */
153  void setSourceType(int stype);
154
155
156  /**
[1104]157   * The number of scans in the table
[824]158   * @return number of scans in the table
159   */
[845]160  int nscan() const;
[490]161
[915]162  casa::MEpoch::Types getTimeReference() const;
[21]163
[1411]164
165  casa::MEpoch getEpoch(int whichrow) const;
166
[824]167  /**
168   * Get global antenna position
[845]169   * @return casa::MPosition
[824]170   */
171  casa::MPosition getAntennaPosition() const;
[490]172
[1441]173  /**
174   * the @ref casa::MDirection for a specific row
175   * @param[in] whichrow the row number
176   * return casa::MDirection
177   */
[987]178  casa::MDirection getDirection( int whichrow ) const;
[1598]179
[1441]180  /**
181   * get the direction type as a string, e.g. "J2000"
182   * @param[in] whichrow the row number
183   * return the direction string
184   */
[1068]185  std::string getDirectionString( int whichrow ) const;
186
[1441]187  /**
188   * set the direction type as a string, e.g. "J2000"
189   * @param[in] refstr the direction type
190   */
[987]191  void setDirectionRefString(const std::string& refstr="");
[1441]192
[1104]193  /**
194   * get the direction reference string
195   * @return a string describing the direction reference
196   */
[1598]197  std::string getDirectionRefString() const;
[987]198
[824]199  /**
[845]200   *  Return the Flux unit of the data, e.g. "Jy" or "K"
201   * @return string
[824]202   */
203  std::string getFluxUnit() const;
[472]204
[824]205  /**
[845]206   * Set the Flux unit of the data
207   * @param unit a string representing the unit, e.g "Jy" or "K"
[824]208   */
209  void setFluxUnit( const std::string& unit );
[472]210
[824]211  /**
[1189]212   * Set the Stokes type of the data
[1295]213   * @param feedtype a string representing the type, e.g "circular" or "linear"
[1189]214   */
215  void setFeedType( const std::string& feedtype );
216
217  /**
[824]218   *
[845]219   * @param instrument a string representing an insturment. see xxx
[824]220   */
221  void setInstrument( const std::string& instrument );
[2]222
[845]223  /**
224   * (Re)calculate the azimuth and elevationnfor all rows
225   */
[824]226  void calculateAZEL();
[745]227
[824]228  /**
[845]229   * "hard" flag the data, this flags everything selected in setSelection()
[1104]230   * param[in] msk a boolean mask of length nchan describing the points to
231   * to be flagged
[824]232   */
[1430]233  //void flag( const std::vector<bool>& msk = std::vector<bool>());
[1994]234  //void flag( const std::vector<bool>& msk = std::vector<bool>(), bool unflag=false);
[455]235
[1994]236  void flag( int whichrow = -1, const std::vector<bool>& msk = std::vector<bool>(), bool unflag=false);
237
[852]238  /**
[1819]239   * Flag the data in a row-based manner. (CAS-1433 Wataru Kawasaki)
240   * param[in] rows    list of row numbers to be flagged
241   */
242  void flagRow( const std::vector<casa::uInt>& rows = std::vector<casa::uInt>(), bool unflag=false);
243
244  /**
245   * Get flagRow info at the specified row. If true, the whole data
246   * at the row should be flagged.
247   */
248  bool getFlagRow(int whichrow) const
249    { return (flagrowCol_(whichrow) > 0); }
250
251  /**
252   * Flag the data outside a specified range (in a channel-based manner).
253   * (CAS-1807 Wataru Kawasaki)
254   */
255  void clip(const casa::Float uthres, const casa::Float dthres, bool clipoutside, bool unflag);
256
257  /**
258   * Return a list of booleans with the size of nchan for a specified row, to get info
259   * about which channel is clipped.
260   */
261  std::vector<bool> getClipMask(int whichrow, const casa::Float uthres, const casa::Float dthres, bool clipoutside, bool unflag);
262  void srchChannelsToClip(casa::uInt whichrow, const casa::Float uthres, const casa::Float dthres, bool clipoutside, bool unflag,
263                          casa::Vector<casa::uChar> flgs);
264
265  /**
[852]266   * Return a list of row numbers with respect to the original table.
[902]267   * @return a list of unsigned ints
[852]268   */
269  std::vector<unsigned int> rownumbers() const;
[845]270
[852]271
[845]272  /**
273   * Get the number of beams in the data or a specific scan
274   * @param scanno the scan number to get the number of beams for.
275   * If scanno<0 the number is retrieved from the header.
276   * @return an integer number
277   */
[824]278  int nbeam(int scanno=-1) const;
[845]279  /**
280   * Get the number of IFs in the data or a specific scan
281   * @param scanno the scan number to get the number of IFs for.
282   * If scanno<0 the number is retrieved from the header.
283   * @return an integer number
284   */
[824]285  int nif(int scanno=-1) const;
[845]286  /**
287   * Get the number of polarizations in the data or a specific scan
288   * @param scanno the scan number to get the number of polarizations for.
289   * If scanno<0 the number is retrieved from the header.
290   * @return an integer number
291   */
[824]292  int npol(int scanno=-1) const;
[794]293
[896]294  std::string getPolType() const;
295
[845]296
297  /**
298   * Get the number of integartion cycles
299   * @param scanno the scan number to get the number of rows for.
300   * If scanno<0 the number is retrieved from the header.
[1104]301   * @return the number of rows (for the specified scanno)
[845]302   */
[824]303  int nrow(int scanno=-1) const;
[794]304
[1111]305  int getBeam(int whichrow) const;
[1694]306  std::vector<uint> getBeamNos() const { return getNumbers(beamCol_); }
[50]307
[847]308  int getIF(int whichrow) const;
[1694]309  std::vector<uint> getIFNos() const { return getNumbers(ifCol_); }
[1111]310
[847]311  int getPol(int whichrow) const;
[1694]312  std::vector<uint> getPolNos() const { return getNumbers(polCol_); }
[1111]313
[1694]314  std::vector<uint> getScanNos() const { return getNumbers(scanCol_); }
[865]315  int getScan(int whichrow) const { return scanCol_(whichrow); }
[1111]316
[1819]317  //TT addition
318  std::vector<uint> getMolNos() {return getNumbers(mmolidCol_); }
319
[1111]320  /**
321   * Get the number of channels in the data or a specific IF. This currently
322   * varies only with IF number
323   * @param ifno the IF number to get the number of channels for.
324   * If ifno<0 the number is retrieved from the header.
325   * @return an integer number
326   */
327  int nchan(int ifno=-1) const;
[923]328  int getChannels(int whichrow) const;
[206]329
[1111]330  int ncycle(int scanno=-1) const;
331  int getCycle(int whichrow) const { return cycleCol_(whichrow); }
332
[847]333  double getInterval(int whichrow) const
334    { return integrCol_(whichrow); }
[845]335
[865]336  float getTsys(int whichrow) const
337    { return casa::Vector<casa::Float>(tsysCol_(whichrow))(0); }
[847]338  float getElevation(int whichrow) const
339    { return elCol_(whichrow); }
340  float getAzimuth(int whichrow) const
341    { return azCol_(whichrow); }
[865]342  float getParAngle(int whichrow) const
[1819]343    { return focus().getParAngle(mfocusidCol_(whichrow)); }
344  int getTcalId(int whichrow) const
345    { return mtcalidCol_(whichrow); }
[386]346
[865]347  std::string getSourceName(int whichrow) const
348    { return srcnCol_(whichrow); }
349
[847]350  std::vector<bool> getMask(int whichrow) const;
[896]351  std::vector<float> getSpectrum(int whichrow,
[905]352                                 const std::string& poltype = "" ) const;
[847]353
[884]354  void setSpectrum(const std::vector<float>& spec, int whichrow);
355
[902]356  std::string getPolarizationLabel(int index, const std::string& ptype) const
357    { return STPol::getPolLabel(index, ptype ); }
[401]358
[845]359  /**
360   * Write the Scantable to disk
361   * @param filename the output file name
362   */
[824]363  void makePersistent(const std::string& filename);
[745]364
[860]365  std::vector<std::string> getHistory() const
366    { return historyTable_.getHistory(); };
[483]367
[860]368  void addHistory(const std::string& hist) { historyTable_.addEntry(hist); }
[488]369
[860]370  void appendToHistoryTable(const STHistory& otherhist)
371    { historyTable_.append(otherhist); }
372
[824]373  std::string summary(bool verbose=false);
[1947]374  //std::string getTime(int whichrow=-1, bool showdate=true) const;
375  std::string getTime(int whichrow=-1, bool showdate=true, casa::uInt prec=0) const;
[1350]376  double getIntTime(int whichrow) const { return integrCol_(whichrow); }
[19]377
[847]378  // returns unit, conversion frame, doppler, base-frame
[18]379
[847]380  /**
381   * Get the frequency set up
382   * This is forwarded to the STFrequencies subtable
383   * @return unit, frame, doppler
384   */
385  std::vector<std::string> getCoordInfo() const
386    { return freqTable_.getInfo(); };
387
388  void setCoordInfo(std::vector<string> theinfo)
389    { return freqTable_.setInfo(theinfo); };
390
[865]391
392  std::vector<double> getAbcissa(int whichrow) const;
393
[1730]394  std::vector<float> getWeather(int whichrow) const;
395
[847]396  std::string getAbcissaLabel(int whichrow) const;
397  std::vector<double> getRestFrequencies() const
398    { return moleculeTable_.getRestFrequencies(); }
[1819]399  std::vector<double> getRestFrequency(int id) const
400    { return moleculeTable_.getRestFrequency(id); }
[847]401
[1819]402  /**
[1170]403  void setRestFrequencies(double rf, const std::string& name = "",
404                          const std::string& = "Hz");
[1819]405  **/
406  // Modified by Takeshi Nakazato 05/09/2008
407  /***
408  void setRestFrequencies(vector<double> rf, const vector<std::string>& name = "",
409                          const std::string& = "Hz");
410  ***/
411  void setRestFrequencies(vector<double> rf,
412                          const vector<std::string>& name = vector<std::string>(1,""),
413                          const std::string& = "Hz");
[847]414
[1819]415  //void setRestFrequencies(const std::string& name);
416  void setRestFrequencies(const vector<std::string>& name);
417
[1360]418  void shift(int npix);
419
[1598]420  casa::SpectralCoordinate getSpectralCoordinate(int whichrow) const;
421
[987]422  void convertDirection(const std::string& newframe);
423
[824]424  STFrequencies& frequencies() { return freqTable_; }
[1375]425  const STFrequencies& frequencies() const { return freqTable_; }
[824]426  STWeather& weather() { return weatherTable_; }
[1375]427  const STWeather& weather() const { return weatherTable_; }
[824]428  STFocus& focus() { return focusTable_; }
[1375]429  const STFocus& focus() const { return focusTable_; }
[824]430  STTcal& tcal() { return tcalTable_; }
[1375]431  const STTcal& tcal() const { return tcalTable_; }
[824]432  STMolecules& molecules() { return moleculeTable_; }
[1375]433  const STMolecules& molecules() const { return moleculeTable_; }
[860]434  STHistory& history() { return historyTable_; }
[1375]435  const STHistory& history() const { return historyTable_; }
[972]436  STFit& fit() { return fitTable_; }
[1375]437  const STFit& fit() const { return fitTable_; }
[2]438
[902]439  std::vector<std::string> columnNames() const;
[896]440
[972]441  void addFit(const STFitEntry& fit, int row);
442  STFitEntry getFit(int row) const
443    { STFitEntry fe; fitTable_.getEntry(fe, mfitidCol_(row)); return fe; }
444
[1391]445  //Added by TT
446  /**
447   * Get the antenna name
448   * @return antenna name string
449   */
[1819]450  casa::String getAntennaName() const;
[1391]451
452  /**
453   * For GBT MS data only. check a scan list
454   * against the information found in GBT_GO table for
455   * scan number orders to get correct pairs.
456   * @param[in] scan list
457   * @return status
458   */
459  int checkScanInfo(const std::vector<int>& scanlist) const;
460
461  /**
462   * Get the direction as a vector, for a specific row
463   * @param[in] whichrow the row numbyyer
464   * @return the direction in a vector
465   */
466  std::vector<double> getDirectionVector(int whichrow) const;
467
[1586]468  /**
469   * Set a flag indicating whether the data was parallactified
470   * @param[in] flag true or false
471   */
[1598]472  void parallactify(bool flag)
[1727]473    { focus().setParallactify(flag); }
474
[1819]475  /**
476   * Reshape spectrum
477   * @param[in] nmin, nmax minimum and maximum channel
478   * @param[in] irow       row number
479   *
480   * 30/07/2008 Takeshi Nakazato
481   **/
482  void reshapeSpectrum( int nmin, int nmax ) throw( casa::AipsError );
483  void reshapeSpectrum( int nmin, int nmax, int irow ) ;
484
485  /**
486   * Change channel number under fixed bandwidth
487   * @param[in] nchan, dnu new channel number and spectral resolution
488   * @param[in] irow       row number
489   *
490   * 27/08/2008 Takeshi Nakazato
491   **/
492  void regridChannel( int nchan, double dnu ) ;
493  void regridChannel( int nchan, double dnu, int irow ) ;
494
[1907]495  bool getFlagtraFast(int whichrow);
[1819]496
[2012]497  void polyBaseline(const std::vector<bool>& mask,
498                    int order,
499                    bool outLogger=false,
500                    const std::string& blfile="");
501  void autoPolyBaseline(const std::vector<bool>& mask,
502                        int order,
503                        const std::vector<int>& edge,
504                        float threshold=3.0,
505                        int chanAvgLimit=1,
506                        bool outLogger=false,
507                        const std::string& blfile="");
508  void cubicSplineBaseline(const std::vector<bool>& mask,
509                           int nPiece,
510                           float thresClip,
511                           int nIterClip,
512                           bool outLogger=false,
513                           const std::string& blfile="");
514  void autoCubicSplineBaseline(const std::vector<bool>& mask,
515                               int nPiece,
516                               float thresClip,
517                               int nIterClip,
518                               const std::vector<int>& edge,
519                               float threshold=3.0,
520                               int chanAvgLimit=1,
521                               bool outLogger=false,
522                               const std::string& blfile="");
523  float getRms(const std::vector<bool>& mask, int whichrow);
524  std::string formatBaselineParams(const std::vector<float>& params,
525                                   const std::vector<bool>& fixed,
526                                   float rms,
527                                   const std::string& masklist,
528                                   int whichrow,
529                                   bool verbose=false) const;
530  std::string formatPiecewiseBaselineParams(const std::vector<int>& ranges,
531                                            const std::vector<float>& params,
532                                            const std::vector<bool>& fixed,
533                                            float rms,
534                                            const std::string& masklist,
535                                            int whichrow,
536                                            bool verbose=false) const;
[1907]537
[2012]538
[824]539private:
[896]540
541  casa::Matrix<casa::Float> getPolMatrix( casa::uInt whichrow ) const;
542
[824]543  /**
[2005]544   * Turns a time value into a formatted string
[824]545   * @param x
546   * @return
547   */
548  std::string formatSec(casa::Double x) const;
[18]549
[824]550  std::string formatTime(const casa::MEpoch& me, bool showdate)const;
[1947]551  std::string formatTime(const casa::MEpoch& me, bool showdate, casa::uInt prec)const;
[22]552
[824]553  /**
554   *  Turns a casa::MDirection into a nicely formatted string
555   * @param md an casa::MDirection
556   * @return
557   */
558  std::string formatDirection(const casa::MDirection& md) const;
[19]559
[824]560  /**
561   * Create a unique file name for the paged (temporary) table
562   * @return just the name
563   */
564  static casa::String generateName();
[286]565
[824]566  /**
567   * attach to cached columns
568   */
569  void attach();
[50]570
[824]571  /**
572   * Set up the main casa::Table
573   */
574  void setupMainTable();
[88]575
[859]576  void attachSubtables();
[865]577  void copySubtables(const Scantable& other);
578
[824]579  /**
580   * Convert an "old" asap1 style row index into a new index
581   * @param[in] therow
582   * @return and index into @table_
583   */
584  int rowToScanIndex(int therow);
[212]585
[1694]586  std::vector<uint> getNumbers(const casa::ScalarColumn<casa::uInt>& col) const;
[1111]587
[1586]588  static const casa::uInt version_ = 3;
[286]589
[824]590  STSelector selector_;
[236]591
[824]592  casa::Table::TableType type_;
[465]593
[824]594  // the actual data
595  casa::Table table_;
596  casa::Table originalTable_;
[745]597
[824]598  STTcal tcalTable_;
599  STFrequencies freqTable_;
600  STWeather weatherTable_;
601  STFocus focusTable_;
602  STMolecules moleculeTable_;
[860]603  STHistory historyTable_;
[960]604  STFit fitTable_;
[860]605
[824]606  // Cached Columns to avoid reconstructing them for each row get/put
[847]607  casa::ScalarColumn<casa::Double> integrCol_;
[824]608  casa::MDirection::ScalarColumn dirCol_;
[847]609  casa::MEpoch::ScalarColumn timeCol_;
[923]610  casa::ScalarColumn<casa::Float> azCol_;
611  casa::ScalarColumn<casa::Float> elCol_;
[824]612  casa::ScalarColumn<casa::String> srcnCol_, fldnCol_;
[1819]613  casa::ScalarColumn<casa::uInt> scanCol_, beamCol_, ifCol_, polCol_, cycleCol_, flagrowCol_;
[1068]614  casa::ScalarColumn<casa::Int> rbeamCol_, srctCol_;
[865]615  casa::ArrayColumn<casa::Float> specCol_, tsysCol_;
[824]616  casa::ArrayColumn<casa::uChar> flagsCol_;
[430]617
[824]618  // id in frequencies table
619  casa::ScalarColumn<casa::uInt> mfreqidCol_;
620  // id in tcal table
621  casa::ScalarColumn<casa::uInt> mtcalidCol_;
[430]622
[824]623  casa::ArrayColumn<casa::String> histitemCol_;
[972]624  casa::ScalarColumn<casa::Int> mfitidCol_;
[824]625  casa::ScalarColumn<casa::uInt> mweatheridCol_;
[322]626
[824]627  casa::ScalarColumn<casa::uInt> mfocusidCol_;
628
629  casa::ScalarColumn<casa::uInt> mmolidCol_;
630
[896]631  static std::map<std::string, STPol::STPolFactory *> factories_;
632  void initFactories();
633
[1819]634  /**
635   * Add an auxiliary column to the main table and attach it to a
636   * cached column. Use for adding new columns that the original asap2
637   * tables do not have.
638   * @param[in] col      reference to the cached column to be attached
639   * @param[in] colName  column name in asap table
640   * @param[in] defValue default value to fill in the column
641   *
642   * 25/10/2009 Wataru Kawasaki
643   */
644  template<class T, class T2> void attachAuxColumnDef(casa::ScalarColumn<T>&,
645                                                       const casa::String&,
646                                                       const T2&);
647  template<class T, class T2> void attachAuxColumnDef(casa::ArrayColumn<T>&,
648                                                      const casa::String&,
649                                                      const casa::Array<T2>&);
[1907]650
[2012]651  void fitBaseline(const std::vector<bool>& mask, int whichrow, Fitter& fitter);
652  std::vector<float> doCubicSplineFitting(const std::vector<float>& data,
653                                          const std::vector<bool>& mask,
654                                          std::vector<int>& sectionRanges,
655                                          std::vector<float>& params,
656                                          int nPiece=2,
657                                          float thresClip=3.0,
658                                          int nIterClip=1);
659  bool hasSameNchanOverIFs();
660  std::string getMaskRangeList(const std::vector<bool>& mask,
661                                int whichrow,
662                                const casa::String& coordInfo,
663                                bool hasSameNchan,
664                                int firstIF,
665                                bool silent=false);
666  std::vector<int> getMaskEdgeIndices(const std::vector<bool>& mask, bool getStartIndices=true);
667  std::string formatBaselineParamsHeader(int whichrow, const std::string& masklist, bool verbose) const;
668  std::string formatBaselineParamsFooter(float rms, bool verbose) const;
669  std::vector<bool> getCompositeChanMask(int whichrow, const std::vector<bool>& inMask);
670  //std::vector<bool> getCompositeChanMask(int whichrow, const std::vector<bool>& inMask, const std::vector<int>& edge, const int minEdgeSize, STLineFinder& lineFinder);
[1994]671
672  void applyChanFlag( casa::uInt whichrow, const std::vector<bool>& msk, casa::uChar flagval);
673
674
[2]675};
676
[824]677} // namespace
678
[2]679#endif
Note: See TracBrowser for help on using the repository browser.