source: trunk/src/Scantable.h@ 2030

Last change on this file since 2030 was 2012, checked in by WataruKawasaki, 14 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.