Line data Source code
1 : //# BaselineTable.cc: this code defines baseline table
2 : //# Copyright (C) 2015
3 : //# National Astronomical Observatory of Japan
4 : //#
5 : //# This library is free software; you can redistribute it and/or modify it
6 : //# under the terms of the GNU Library General Public License as published by
7 : //# the Free Software Foundation; either version 2 of the License, or (at your
8 : //# option) any later version.
9 : //#
10 : //# This library is distributed in the hope that it will be useful, but WITHOUT
11 : //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 : //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13 : //# License for more details.
14 : //#
15 : //# You should have received a copy of the GNU Library General Public License
16 : //# along with this library; if not, write to the Free Software Foundation,
17 : //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18 : //#
19 : //# Correspondence concerning AIPS++ should be addressed as follows:
20 : //# Internet email: casa-feedback@nrao.edu.
21 : //# Postal address: AIPS++ Project Office
22 : //# National Radio Astronomy Observatory
23 : //# 520 Edgemont Road
24 : //# Charlottesville, VA 22903-2475 USA
25 : //#
26 : //# $Id$
27 : #ifndef SD_BASELINETABLE_H
28 : #define SD_BASELINETABLE_H
29 :
30 : #include <casacore/casa/aips.h>
31 : #include <casacore/casa/Arrays/Vector.h>
32 : #include <casacore/casa/Logging/LogIO.h>
33 : #include <casacore/measures/Measures/MEpoch.h>
34 : #include <casacore/measures/TableMeasures/ScalarMeasColumn.h>
35 : #include <casacore/ms/MeasurementSets/MeasurementSet.h>
36 : #include <casacore/tables/Tables/Table.h>
37 : #include <casacore/tables/Tables/ScalarColumn.h>
38 : #include <casacore/tables/Tables/ArrayColumn.h>
39 : #include <libsakura/sakura.h>
40 :
41 : #define BaselineType_kPolynomial 0
42 : #define BaselineType_kChebyshev 1
43 : #define BaselineType_kCubicSpline 2
44 : #define BaselineType_kSinusoid 3
45 : #define BaselineType_kNumElements 4
46 :
47 : namespace casa {
48 :
49 : class BaselineTable {
50 : public:
51 : BaselineTable() {;}
52 : BaselineTable(const casacore::MeasurementSet& parent);
53 : BaselineTable(const casacore::String &name);
54 :
55 : virtual ~BaselineTable();
56 :
57 : void setup();
58 : const casacore::String& name() const {return name_;};
59 :
60 : const casacore::Table& table() const { return table_; }
61 : casacore::Table table() { return table_; }
62 : void attach();
63 : void attachBaseColumns();
64 : void attachOptionalColumns();
65 :
66 0 : casacore::uInt nrow() {return table_.nrow();}
67 :
68 0 : casacore::uInt getScan(casacore::uInt irow) const {return scanCol_.get(irow);}
69 0 : casacore::uInt getBeam(casacore::uInt irow) const {return beamCol_.get(irow);}
70 0 : casacore::uInt getAntenna(casacore::uInt irow) const {return antCol_.get(irow);}
71 0 : uint getSpw(casacore::uInt irow) const {return static_cast<uint>(ifCol_.get(irow));}
72 0 : double getTime(casacore::uInt irow) const {return static_cast<double>(timeCol_.get(irow));}
73 :
74 : bool getApply(casacore::uInt irow, casacore::uInt ipol) const;
75 : std::vector<bool> getMask(casacore::uInt irow, casacore::uInt ipol);
76 : uint getBaselineType(casacore::uInt irow, casacore::uInt ipol) const;
77 : int getFPar(casacore::uInt irow, casacore::uInt ipol) const;
78 :
79 : void setdata(casacore::uInt irow, casacore::uInt scanno, casacore::uInt beamno,
80 : casacore::uInt antno, casacore::uInt ifno,
81 : casacore::uInt freqid, casacore::Double time,
82 : casacore::Array<casacore::Bool> apply,
83 : casacore::Array<casacore::uInt> ftype,
84 : casacore::Array<casacore::Int> fpar,
85 : casacore::Array<casacore::Float> ffpar,
86 : casacore::Array<casacore::uInt> mask,
87 : casacore::Array<casacore::Float> res,
88 : casacore::Array<casacore::Float> rms,
89 : casacore::uInt nchan,
90 : casacore::Array<casacore::Float> cthres,
91 : casacore::Array<casacore::uInt> citer,
92 : casacore::Array<casacore::Bool> uself,
93 : casacore::Array<casacore::Float> lfthres,
94 : casacore::Array<casacore::uInt> lfavg,
95 : casacore::Array<casacore::uInt> lfedge);
96 : void appenddata(casacore::uInt scanno, casacore::uInt beamno,
97 : casacore::uInt antno, casacore::uInt ifno,
98 : casacore::uInt freqid, casacore::Double time,
99 : casacore::Array<casacore::Bool> apply,
100 : casacore::Array<casacore::uInt> ftype,
101 : casacore::Array<casacore::Int> fpar,
102 : casacore::Array<casacore::Float> ffpar,
103 : casacore::Array<casacore::uInt> mask,
104 : casacore::Array<casacore::Float> res,
105 : casacore::Array<casacore::Float> rms,
106 : casacore::uInt nchan,
107 : casacore::Array<casacore::Float> cthres,
108 : casacore::Array<casacore::uInt> citer,
109 : casacore::Array<casacore::Bool> uself,
110 : casacore::Array<casacore::Float> lfthres,
111 : casacore::Array<casacore::uInt> lfavg,
112 : casacore::Array<casacore::uInt> lfedge);
113 : void appendbasedata(int scanno, int beamno, int antno, int ifno,
114 : int freqid, casacore::Double time);
115 : void setresult(casacore::uInt irow,
116 : casacore::Vector<casacore::Float> res,
117 : casacore::Array<casacore::Float> rms);
118 : void save(const std::string &filename);
119 : casacore::uInt nchan(casacore::uInt ifno);
120 :
121 : casacore::Matrix<casacore::Bool> getApply() {return applyCol_.getColumn();}
122 : void setApply(int irow, int ipol, bool apply);
123 : casacore::Matrix<casacore::Int> getFuncParam() {return fparCol_.getColumn();}
124 0 : casacore::Matrix<casacore::Int> getFuncParam(casacore::uInt irow) {return fparCol_.get(irow);}
125 : casacore::Matrix<casacore::Float> getFuncFParam() {return ffparCol_.getColumn();}
126 0 : casacore::Matrix<casacore::Float> getFuncFParam(casacore::uInt irow) {return ffparCol_.get(irow);}
127 : casacore::Matrix<casacore::uInt> getMaskList() {return maskCol_.getColumn();}
128 : casacore::Matrix<casacore::uInt> getMaskList(casacore::uInt irow) {return maskCol_.get(irow);}
129 : casacore::Matrix<casacore::Float> getResult() {return resCol_.getColumn();}
130 0 : casacore::Matrix<casacore::Float> getResult(casacore::uInt irow) {return resCol_.get(irow);}
131 : casacore::Matrix<casacore::Float> getRms() {return rmsCol_.getColumn();}
132 : casacore::Vector<casacore::uInt> getNChan() {return nchanCol_.getColumn();}
133 : casacore::uInt getNChan(int irow);
134 : casacore::Matrix<casacore::Float> getClipThreshold() {return cthresCol_.getColumn();}
135 : casacore::Matrix<casacore::uInt> getClipIteration() {return citerCol_.getColumn();}
136 : casacore::Matrix<casacore::Bool> getUseLineFinder() {return uselfCol_.getColumn();}
137 : casacore::Matrix<casacore::Float> getLineFinderThreshold() {return lfthresCol_.getColumn();}
138 : casacore::Matrix<casacore::uInt> getLineFinderChanAvg() {return lfavgCol_.getColumn();}
139 : casacore::Matrix<casacore::uInt> getLineFinderEdge() {return lfedgeCol_.getColumn();}
140 :
141 : private:
142 : void setbasedata(casacore::uInt irow, casacore::uInt scanno, casacore::uInt beamno, casacore::uInt antno,
143 : casacore::uInt ifno, casacore::uInt freqid, casacore::Double time);
144 : casacore::Table table_, originaltable_;
145 : casacore::ScalarColumn<casacore::uInt> scanCol_, beamCol_, antCol_, ifCol_, freqidCol_;
146 : casacore::ScalarColumn<casacore::Double> timeCol_;
147 : casacore::MEpoch::ScalarColumn timeMeasCol_;
148 : static const casacore::String name_;
149 :
150 : casacore::ArrayColumn<casacore::Bool> applyCol_;
151 : casacore::ArrayColumn<casacore::uInt> ftypeCol_;
152 : casacore::ArrayColumn<casacore::Int> fparCol_;
153 : casacore::ArrayColumn<casacore::Float> ffparCol_;
154 : casacore::ArrayColumn<casacore::uInt> maskCol_;
155 : casacore::ArrayColumn<casacore::Float> resCol_;
156 : casacore::ArrayColumn<casacore::Float> rmsCol_;
157 : casacore::ScalarColumn<casacore::uInt> nchanCol_;
158 : casacore::ArrayColumn<casacore::Float> cthresCol_;
159 : casacore::ArrayColumn<casacore::uInt> citerCol_;
160 : casacore::ArrayColumn<casacore::Bool> uselfCol_;
161 : casacore::ArrayColumn<casacore::Float> lfthresCol_;
162 : casacore::ArrayColumn<casacore::uInt> lfavgCol_;
163 : casacore::ArrayColumn<casacore::uInt> lfedgeCol_;
164 :
165 : std::vector<bool> getMaskFromMaskList(casacore::uInt const nchan, casacore::Vector<casacore::uInt> const& masklist);
166 : };
167 :
168 : }
169 :
170 : #endif
|