Line data Source code
1 : //# CalMainColumns.cc: Implementation of CalMainColumns.h
2 : //# Copyright (C) 1996,1997,1998,2001,2002,2003
3 : //# Associated Universities, Inc. Washington DC, USA.
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: aips2-request@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 : //----------------------------------------------------------------------------
28 :
29 : #include <synthesis/CalTables/ROCalMainColumns2.h>
30 :
31 : namespace casa { //# NAMESPACE CASA - BEGIN
32 :
33 : //----------------------------------------------------------------------------
34 :
35 : template<class T>
36 0 : ROCalMainColumns2<T>::ROCalMainColumns2(const CalTable2& calTable)
37 : {
38 : // Construct from a calibration table
39 : // casacore::Input:
40 : // calTable const CalTable& Calibration table
41 : // Output to private data:
42 : // time_p casacore::ScalarColumn<casacore::Double>& Time
43 : // timeMeas_p casacore::ROScalarMeasColumn<casacore::MEpoch>& casacore::Time as a Measure
44 : // timeEP_p casacore::ScalarColumn<casacore::Double>& Extended precision time
45 : // timeEPQuant_p casacore::ROScalarQuantColumn<casacore::Double>& EP time as Quantum
46 : // interval_p casacore::ScalarColumn<casacore::Double>& casacore::Time interval
47 : // intervalQuant_p casacore::ROScalarQuantColumn<casacore::Double>& casacore::Time interval as Quantum
48 : // antenna1_p casacore::ScalarColumn<casacore::Int>& Antenna 1
49 : // feed1_p casacore::ScalarColumn<casacore::Int>& Feed 1
50 : // fieldId_p casacore::ScalarColumn<casacore::Int>& Field id.
51 : // arrayId_p casacore::ScalarColumn<casacore::Int>& casacore::Array id.
52 : // obsId_p casacore::ScalarColumn<casacore::Int>& Observation id.
53 : // scanNo_p casacore::ScalarColumn<casacore::Int>& Scan no.
54 : // processorId_p casacore::ScalarColumn<casacore::Int>& Processor id.
55 : // stateId_p casacore::ScalarColumn<casacore::Int>& State id.
56 : // phaseId_p casacore::ScalarColumn<casacore::Int>& Phase id.
57 : // pulsarBin_p casacore::ScalarColumn<casacore::Int>& Pulsar bin
58 : // pulsarGateId_p casacore::ScalarColumn<casacore::Int>& Pulsar gate id.
59 : // freqGrp_p casacore::ScalarColumn<casacore::Int>& Frequency group
60 : // freqGrpName_p casacore::ScalarColumn<casacore::String>& Frequency group name
61 : // fieldName_p casacore::ScalarColumn<casacore::String>& Field name
62 : // fieldCode_p casacore::ScalarColumn<casacore::String>& Field code
63 : // sourceName_p casacore::ScalarColumn<casacore::String>& Source name
64 : // sourceCode_p casacore::ScalarColumn<casacore::String>& Source code
65 : // calGrp_p casacore::ScalarColumn<casacore::Int>& Calibration group
66 : // gain_p casacore::ArrayColumn<casacore::Complex>& Gain
67 : // refAnt_p casacore::ArrayColumn<casacore::Int>& Reference antenna
68 : // refFeed_p casacore::ArrayColumn<casacore::Int>& Reference feed
69 : // refReceptor_p casacore::ArrayColumn<casacore::Int>& Reference receptor
70 : // refFreq_p casacore::ArrayColumn<casacore::Double>& Reference frequency
71 : // refFreqMeas_p casacore::ROArrayMeasColumn<casacore::MFrequency>& Ref. freq. as Measure
72 : // measFreqRef_p casacore::ScalarColumn<casacore::Int>& Frequency measures ref.
73 : // refDir_p casacore::ArrayColumn<casacore::Double>& Reference direction
74 : // refDirMeas_p casacore::ROArrayMeasColumn<casacore::MDirection>& Ref. dir. as Measure
75 : // measDirRef_p casacore::ScalarColumn<casacore::Int>& Direction measures ref.
76 : // calDescId_p casacore::ScalarColumn<casacore::Int>& CAL_DESC id.
77 : // calHistoryId_p casacore::ScalarColumn<casacore::Int>& CAL_HISTORY id.
78 : //
79 : // Attach all the column accessors (including required and
80 : // optional columns)
81 0 : attach (calTable, time_p, MSC::TIME);
82 0 : attach (calTable, timeMeas_p, MSC::TIME);
83 0 : attach (calTable, timeEP_p, MSC::TIME_EXTRA_PREC, true);
84 0 : attach (calTable, timeEPQuant_p, MSC::TIME_EXTRA_PREC, true);
85 0 : attach (calTable, interval_p, MSC::INTERVAL);
86 0 : attach (calTable, intervalQuant_p, MSC::INTERVAL);
87 0 : attach (calTable, antenna1_p, MSC::ANTENNA1);
88 0 : attach (calTable, feed1_p, MSC::FEED1);
89 0 : attach (calTable, fieldId_p, MSC::FIELD_ID);
90 0 : attach (calTable, arrayId_p, MSC::ARRAY_ID);
91 0 : attach (calTable, obsId_p, MSC::OBSERVATION_ID);
92 0 : attach (calTable, scanNo_p, MSC::SCAN_NUMBER);
93 0 : attach (calTable, processorId_p, MSC::PROCESSOR_ID);
94 0 : attach (calTable, stateId_p, MSC::STATE_ID);
95 0 : attach (calTable, phaseId_p, MSC::PHASE_ID, true);
96 0 : attach (calTable, pulsarBin_p, MSC::PULSAR_BIN, true);
97 0 : attach (calTable, pulsarGateId_p, MSC::PULSAR_GATE_ID, true);
98 0 : attach (calTable, freqGrp_p, MSC::FREQ_GROUP);
99 0 : attach (calTable, freqGrpName_p, MSC::FREQ_GROUP_NAME);
100 0 : attach (calTable, fieldName_p, MSC::FIELD_NAME);
101 0 : attach (calTable, fieldCode_p, MSC::FIELD_CODE);
102 0 : attach (calTable, sourceName_p, MSC::SOURCE_NAME);
103 0 : attach (calTable, sourceCode_p, MSC::SOURCE_CODE);
104 0 : attach (calTable, calGrp_p, MSC::CALIBRATION_GROUP);
105 0 : attach (calTable, gain_p, MSC::GAIN);
106 0 : attach (calTable, refAnt_p, MSC::REF_ANT);
107 0 : attach (calTable, refFeed_p, MSC::REF_FEED);
108 0 : attach (calTable, refReceptor_p, MSC::REF_RECEPTOR);
109 0 : attach (calTable, pulsarBin_p, MSC::PULSAR_BIN);
110 0 : attach (calTable, pulsarGateId_p, MSC::PULSAR_GATE_ID);
111 0 : attach (calTable, freqGrp_p, MSC::FREQ_GROUP);
112 0 : attach (calTable, freqGrpName_p, MSC::FREQ_GROUP_NAME);
113 0 : attach (calTable, fieldName_p, MSC::FIELD_NAME);
114 0 : attach (calTable, fieldCode_p, MSC::FIELD_CODE);
115 0 : attach (calTable, sourceName_p, MSC::SOURCE_NAME);
116 0 : attach (calTable, sourceCode_p, MSC::SOURCE_CODE);
117 0 : attach (calTable, calGrp_p, MSC::CALIBRATION_GROUP);
118 : // casacore::Int pType = ((CalTable2)calTable).parType();
119 : // if (pType == 0) attach (calTable, gain_p, MSC::GAIN);
120 : // else attach (calTable, solvePar_p, MSC::SOLVE_PAR);
121 0 : attach (calTable, gain_p, MSC::GAIN);
122 0 : attach (calTable, refAnt_p, MSC::REF_ANT);
123 0 : attach (calTable, refFeed_p, MSC::REF_FEED);
124 0 : attach (calTable, refReceptor_p, MSC::REF_RECEPTOR);
125 0 : attach (calTable, refFreq_p, MSC::REF_FREQUENCY);
126 0 : attach (calTable, refFreqMeas_p, MSC::REF_FREQUENCY);
127 0 : attach (calTable, measFreqRef_p, MSC::MEAS_FREQ_REF);
128 0 : attach (calTable, refDir_p, MSC::REF_DIRECTION);
129 0 : attach (calTable, refDirMeas_p, MSC::REF_DIRECTION);
130 0 : attach (calTable, measDirRef_p, MSC::MEAS_DIR_REF);
131 0 : attach (calTable, calDescId_p, MSC::CAL_DESC_ID);
132 0 : attach (calTable, calHistoryId_p, MSC::CAL_HISTORY_ID);
133 0 : };
134 :
135 : //----------------------------------------------------------------------------
136 :
137 : template<class T>
138 0 : void ROCalMainColumns2<T>::attach (const CalTable2& calTable,
139 : casacore::TableColumn& tabCol,
140 : MSCalEnums::colDef colEnum,
141 : const casacore::Bool& optional)
142 : {
143 : // Attach a column accessor to the calibration table
144 : // casacore::Input:
145 : // calTable const CalTable& Calibration table
146 : // tabCol casacore::TableColumn& casacore::Table column accessor
147 : // colEnum MSCalEnums::colDef Column enum
148 : // optional const casacore::Bool& true if optional column
149 : // Output to private data:
150 : //
151 : // Convert to column name
152 0 : casacore::String colName = MSC::fieldName (colEnum);
153 :
154 : // Check if an optional column
155 0 : if (optional) {
156 0 : if (asTable(calTable).tableDesc().isColumn(colName)) {
157 0 : tabCol.attach (asTable(calTable), colName);
158 : };
159 : } else {
160 0 : tabCol.attach (asTable(calTable), colName);
161 : };
162 0 : };
163 :
164 : //----------------------------------------------------------------------------
165 :
166 : template<class T>
167 0 : void ROCalMainColumns2<T>::attach (const CalTable2& calTable,
168 : casacore::ROArrayMeasColumn<casacore::MFrequency>& tabCol,
169 : MSCalEnums::colDef colEnum,
170 : const casacore::Bool& optional)
171 : {
172 : // Attach a column accessor to the calibration table
173 : // casacore::Input:
174 : // calTable const CalTable& Calibration table
175 : // tabCol casacore::ROArrayMeasColumn<casacore::MFrequency>& casacore::Table measures
176 : // column accessor
177 : // colEnum MSCalEnums::colDef Column enum
178 : // optional const casacore::Bool& true if optional column
179 : // Output to private data:
180 : //
181 : // Convert to column name
182 0 : casacore::String colName = MSC::fieldName (colEnum);
183 :
184 : // Check if an optional column
185 0 : if (optional) {
186 0 : if (asTable(calTable).tableDesc().isColumn(colName)) {
187 0 : tabCol.attach (asTable(calTable), colName);
188 : };
189 : } else {
190 0 : tabCol.attach (asTable(calTable), colName);
191 : };
192 0 : };
193 :
194 : //----------------------------------------------------------------------------
195 :
196 : template<class T>
197 : void ROCalMainColumns2<T>::attach (const CalTable2& calTable,
198 : casacore::ROArrayMeasColumn<casacore::MEpoch>& tabCol,
199 : MSCalEnums::colDef colEnum,
200 : const casacore::Bool& optional)
201 : {
202 : // Attach a column accessor to the calibration table
203 : // casacore::Input:
204 : // calTable const CalTable& Calibration table
205 : // tabCol casacore::ROArrayMeasColumn<casacore::MEpoch>& casacore::Table measures
206 : // column accessor
207 : // colEnum MSCalEnums::colDef Column enum
208 : // optional const casacore::Bool& true if optional column
209 : // Output to private data:
210 : //
211 : // Convert to column name
212 : casacore::String colName = MSC::fieldName (colEnum);
213 :
214 : // Check if an optional column
215 : if (optional) {
216 : if (asTable(calTable).tableDesc().isColumn(colName)) {
217 : tabCol.attach (asTable(calTable), colName);
218 : };
219 : } else {
220 : tabCol.attach (asTable(calTable), colName);
221 : };
222 : };
223 :
224 : //----------------------------------------------------------------------------
225 :
226 : template<class T>
227 0 : void ROCalMainColumns2<T>::attach (const CalTable2& calTable,
228 : casacore::ROArrayMeasColumn<casacore::MDirection>& tabCol,
229 : MSCalEnums::colDef colEnum,
230 : const casacore::Bool& optional)
231 : {
232 : // Attach a column accessor to the calibration table
233 : // casacore::Input:
234 : // calTable const CalTable& Calibration table
235 : // tabCol casacore::ROArrayMeasColumn<casacore::MDirection>& casacore::Table measures
236 : // column accessor
237 : // colEnum MSCalEnums::colDef Column enum
238 : // optional const casacore::Bool& true if optional column
239 : // Output to private data:
240 : //
241 : // Convert to column name
242 0 : casacore::String colName = MSC::fieldName (colEnum);
243 :
244 : // Check if an optional column
245 0 : if (optional) {
246 0 : if (asTable(calTable).tableDesc().isColumn(colName)) {
247 0 : tabCol.attach (asTable(calTable), colName);
248 : };
249 : } else {
250 0 : tabCol.attach (asTable(calTable), colName);
251 : };
252 0 : };
253 :
254 : //----------------------------------------------------------------------------
255 :
256 : template<class T>
257 0 : void ROCalMainColumns2<T>::attach (const CalTable2& calTable,
258 : casacore::ROScalarMeasColumn<casacore::MEpoch>& tabCol,
259 : MSCalEnums::colDef colEnum,
260 : const casacore::Bool& optional)
261 : {
262 : // Attach a column accessor to the calibration table
263 : // casacore::Input:
264 : // calTable const CalTable& Calibration table
265 : // tabCol casacore::ROScalarMeasColumn<casacore::MEpoch>& casacore::Table measures column
266 : // accessor
267 : // colEnum MSCalEnums::colDef Column enum
268 : // optional const casacore::Bool& true if optional column
269 : // Output to private data:
270 : //
271 : // Convert to column name
272 0 : casacore::String colName = MSC::fieldName (colEnum);
273 :
274 : // Check if an optional column
275 0 : if (optional) {
276 0 : if (asTable(calTable).tableDesc().isColumn(colName)) {
277 0 : tabCol.attach (asTable(calTable), colName);
278 : };
279 : } else {
280 0 : tabCol.attach (asTable(calTable), colName);
281 : };
282 0 : };
283 :
284 : //----------------------------------------------------------------------------
285 :
286 : template<class T>
287 0 : void ROCalMainColumns2<T>::attach (const CalTable2& calTable,
288 : casacore::ROScalarQuantColumn<casacore::Double>& tabCol,
289 : MSCalEnums::colDef colEnum,
290 : const casacore::Bool& optional)
291 : {
292 : // Attach a column accessor to the calibration table
293 : // casacore::Input:
294 : // calTable const CalTable& Calibration table
295 : // tabCol casacore::ROScalarQuantColumn<casacore::Double>& Scalar quantum column accessor
296 : // colEnum MSCalEnums::colDef Column enum
297 : // optional const casacore::Bool& true if optional column
298 : // Output to private data:
299 : //
300 : // Convert to column name
301 0 : casacore::String colName = MSC::fieldName (colEnum);
302 :
303 : // Check if an optional column
304 0 : if (optional) {
305 0 : if (asTable(calTable).tableDesc().isColumn(colName)) {
306 0 : tabCol.attach (asTable(calTable), colName);
307 : };
308 : } else {
309 0 : tabCol.attach (asTable(calTable), colName);
310 : };
311 0 : };
312 : };
|