Line data Source code
1 : //# CalMainColumns.h: Calibration table cal_main column access 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 adressed 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 : //# 27 : //# $Id$ 28 : 29 : #ifndef CALIBRATION_CALMAINCOLUMNS_H 30 : #define CALIBRATION_CALMAINCOLUMNS_H 31 : 32 : #include <casacore/casa/aips.h> 33 : #include <casacore/measures/Measures/MEpoch.h> 34 : #include <casacore/measures/Measures/MFrequency.h> 35 : #include <casacore/measures/Measures/MDirection.h> 36 : #include <casacore/tables/Tables/TableColumn.h> 37 : #include <casacore/tables/Tables/ScalarColumn.h> 38 : #include <casacore/tables/Tables/ArrayColumn.h> 39 : #include <casacore/measures/TableMeasures/TableMeasColumn.h> 40 : #include <casacore/measures/TableMeasures/ScalarMeasColumn.h> 41 : #include <casacore/measures/TableMeasures/ArrayMeasColumn.h> 42 : #include <casacore/measures/TableMeasures/ScalarQuantColumn.h> 43 : #include <synthesis/CalTables/CalTable.h> 44 : #include <msvis/MSVis/MSCalEnums.h> 45 : 46 : namespace casa { //# NAMESPACE CASA - BEGIN 47 : 48 : // <summary> 49 : // ROCalMainColumns: Read-only cal_main calibration table column access 50 : // </summary> 51 : 52 : // <use visibility=export> 53 : 54 : // <reviewed reviewer="" date="" tests="" demos=""> 55 : 56 : // <prerequisite> 57 : // <li> <linkto class="CalTable">CalTable</linkto> module 58 : // </prerequisite> 59 : // 60 : // <etymology> 61 : // From "read-only", "calibration main table" and "columns". 62 : // </etymology> 63 : // 64 : // <synopsis> 65 : // The ROCalMainColumns class allows read-only access to columns 66 : // in the main calibration table. Specializations for baseline-based, 67 : // time-variable and solvable VisJones calibration table record types 68 : // are provided through inheritance. 69 : // </etymology> 70 : // 71 : // <example> 72 : // <srcblock> 73 : // </srcblock> 74 : // </example> 75 : // 76 : // <motivation> 77 : // Encapsulate access to calibration table columns. 78 : // </motivation> 79 : // 80 : // <todo asof="01/07/01"> 81 : // (i) Deal with non-standard columns. 82 : // </todo> 83 : 84 : class ROCalMainColumns 85 : { 86 : public: 87 : // Construct from a calibration table 88 : ROCalMainColumns (const CalTable& calTable); 89 : 90 : // Default destructor 91 0 : virtual ~ROCalMainColumns() {}; 92 : 93 : // Read-only column accessors 94 0 : const casacore::ScalarColumn<casacore::Double>& time() const {return time_p;}; 95 : const casacore::ROScalarMeasColumn<casacore::MEpoch>& timeMeas() const {return timeMeas_p;}; 96 : const casacore::ScalarColumn<casacore::Double>& timeEP() const {return timeEP_p;}; 97 : const casacore::ROScalarQuantColumn<casacore::Double>& timeEPQuant() const 98 : {return timeEPQuant_p;}; 99 : const casacore::ScalarColumn<casacore::Double>& interval() const {return interval_p;}; 100 : const casacore::ROScalarQuantColumn<casacore::Double>& intervalQuant() const 101 : {return intervalQuant_p;}; 102 0 : const casacore::ScalarColumn<casacore::Int>& antenna1() const {return antenna1_p;}; 103 : const casacore::ScalarColumn<casacore::Int>& feed1() const {return feed1_p;}; 104 0 : const casacore::ScalarColumn<casacore::Int>& fieldId() const {return fieldId_p;}; 105 : const casacore::ScalarColumn<casacore::Int>& arrayId() const {return arrayId_p;}; 106 0 : const casacore::ScalarColumn<casacore::Int>& obsId() const {return obsId_p;}; 107 : const casacore::ScalarColumn<casacore::Int>& scanNo() const {return scanNo_p;}; 108 : const casacore::ScalarColumn<casacore::Int>& processorId() const {return processorId_p;}; 109 : const casacore::ScalarColumn<casacore::Int>& stateId() const {return stateId_p;}; 110 : const casacore::ScalarColumn<casacore::Int>& phaseId() const {return phaseId_p;}; 111 : const casacore::ScalarColumn<casacore::Int>& pulsarBin() const {return pulsarBin_p;}; 112 : const casacore::ScalarColumn<casacore::Int>& pulsarGateId() const {return pulsarGateId_p;}; 113 : const casacore::ScalarColumn<casacore::Int>& freqGrp() const {return freqGrp_p;}; 114 : const casacore::ScalarColumn<casacore::String>& freqGrpName() const {return freqGrpName_p;}; 115 : const casacore::ScalarColumn<casacore::String>& fieldName() const {return fieldName_p;}; 116 : const casacore::ScalarColumn<casacore::String>& fieldCode() const {return fieldCode_p;}; 117 : const casacore::ScalarColumn<casacore::String>& sourceName() const {return sourceName_p;}; 118 : const casacore::ScalarColumn<casacore::String>& sourceCode() const {return sourceCode_p;}; 119 : const casacore::ScalarColumn<casacore::Int>& calGrp() const {return calGrp_p;}; 120 : const casacore::ArrayColumn<casacore::Complex>& gain() const {return gain_p;}; 121 : const casacore::ArrayColumn<casacore::Int>& refAnt() const {return refAnt_p;}; 122 : const casacore::ArrayColumn<casacore::Int>& refFeed() const {return refFeed_p;}; 123 : const casacore::ArrayColumn<casacore::Int>& refReceptor() const {return refReceptor_p;}; 124 : const casacore::ArrayColumn<casacore::Double>& refFreq() const {return refFreq_p;}; 125 : const casacore::ROArrayMeasColumn<casacore::MFrequency>& refFreqMeas() const 126 : {return refFreqMeas_p;}; 127 : const casacore::ScalarColumn<casacore::Int>& measFreqRef() const {return measFreqRef_p;}; 128 : const casacore::ArrayColumn<casacore::Double>& refDir() const {return refDir_p;}; 129 : const casacore::ROArrayMeasColumn<casacore::MDirection>& refDirMeas() const 130 : {return refDirMeas_p;}; 131 : const casacore::ScalarColumn<casacore::Int>& measDirRef() const {return measDirRef_p;}; 132 : const casacore::ScalarColumn<casacore::Int>& calDescId() const {return calDescId_p;}; 133 : const casacore::ScalarColumn<casacore::Int>& calHistoryId() const {return calHistoryId_p;}; 134 : 135 : protected: 136 : // Prohibit public use of the null constructor, which 137 : // does not produce a usable object. 138 : ROCalMainColumns() {}; 139 : 140 : // Return a CalTable as a casacore::Table reference. Utilizes friendship 141 : // relationship with class CalTable. 142 0 : const casacore::Table& asTable(const CalTable& calTable) 143 0 : {return calTable.calMainAsTable();} 144 : 145 : // Attach a table column accessor 146 : void attach (const CalTable& calTable, casacore::TableColumn& tabCol, 147 : MSCalEnums::colDef colEnum, const casacore::Bool& optional = false); 148 : void attach (const CalTable& calTable, 149 : casacore::ROArrayMeasColumn<casacore::MEpoch>& tabCol, 150 : MSCalEnums::colDef colEnum, const casacore::Bool& optional = false); 151 : void attach (const CalTable& calTable, 152 : casacore::ROArrayMeasColumn<casacore::MFrequency>& tabCol, 153 : MSCalEnums::colDef colEnum, const casacore::Bool& optional = false); 154 : void attach (const CalTable& calTable, 155 : casacore::ROArrayMeasColumn<casacore::MDirection>& tabCol, 156 : MSCalEnums::colDef colEnum, const casacore::Bool& optional = false); 157 : void attach (const CalTable& calTable, casacore::ROScalarMeasColumn<casacore::MEpoch>& tabCol, 158 : MSCalEnums::colDef colEnum, const casacore::Bool& optional = false); 159 : void attach (const CalTable& calTable, casacore::ROScalarQuantColumn<casacore::Double>& tabCol, 160 : MSCalEnums::colDef colEnum, const casacore::Bool& optional = false); 161 : 162 : private: 163 : // Prohibit copy constructor and assignment operator 164 : ROCalMainColumns (const ROCalMainColumns&); 165 : ROCalMainColumns& operator= (const ROCalMainColumns&); 166 : 167 : // Private column accessors 168 : casacore::ScalarColumn<casacore::Double> time_p; 169 : casacore::ROScalarMeasColumn<casacore::MEpoch> timeMeas_p; 170 : casacore::ScalarColumn<casacore::Double> timeEP_p; 171 : casacore::ROScalarQuantColumn<casacore::Double> timeEPQuant_p; 172 : casacore::ScalarColumn<casacore::Double> interval_p; 173 : casacore::ROScalarQuantColumn<casacore::Double> intervalQuant_p; 174 : casacore::ScalarColumn<casacore::Int> antenna1_p; 175 : casacore::ScalarColumn<casacore::Int> feed1_p; 176 : casacore::ScalarColumn<casacore::Int> fieldId_p; 177 : casacore::ScalarColumn<casacore::Int> arrayId_p; 178 : casacore::ScalarColumn<casacore::Int> obsId_p; 179 : casacore::ScalarColumn<casacore::Int> scanNo_p; 180 : casacore::ScalarColumn<casacore::Int> processorId_p; 181 : casacore::ScalarColumn<casacore::Int> stateId_p; 182 : casacore::ScalarColumn<casacore::Int> phaseId_p; 183 : casacore::ScalarColumn<casacore::Int> pulsarBin_p; 184 : casacore::ScalarColumn<casacore::Int> pulsarGateId_p; 185 : casacore::ScalarColumn<casacore::Int> freqGrp_p; 186 : casacore::ScalarColumn<casacore::String> freqGrpName_p; 187 : casacore::ScalarColumn<casacore::String> fieldName_p; 188 : casacore::ScalarColumn<casacore::String> fieldCode_p; 189 : casacore::ScalarColumn<casacore::String> sourceName_p; 190 : casacore::ScalarColumn<casacore::String> sourceCode_p; 191 : casacore::ScalarColumn<casacore::Int> calGrp_p; 192 : casacore::ArrayColumn<casacore::Complex> gain_p; 193 : casacore::ArrayColumn<casacore::Int> refAnt_p; 194 : casacore::ArrayColumn<casacore::Int> refFeed_p; 195 : casacore::ArrayColumn<casacore::Int> refReceptor_p; 196 : casacore::ArrayColumn<casacore::Double> refFreq_p; 197 : casacore::ROArrayMeasColumn<casacore::MFrequency> refFreqMeas_p; 198 : casacore::ScalarColumn<casacore::Int> measFreqRef_p; 199 : casacore::ArrayColumn<casacore::Double> refDir_p; 200 : casacore::ROArrayMeasColumn<casacore::MDirection> refDirMeas_p; 201 : casacore::ScalarColumn<casacore::Int> measDirRef_p; 202 : casacore::ScalarColumn<casacore::Int> calDescId_p; 203 : casacore::ScalarColumn<casacore::Int> calHistoryId_p; 204 : }; 205 : 206 : // <summary> 207 : // CalMainColumns: Read-write cal_main calibration table column access 208 : // </summary> 209 : 210 : // <use visibility=export> 211 : 212 : // <reviewed reviewer="" date="" tests="" demos=""> 213 : 214 : // <prerequisite> 215 : // <li> <linkto class="CalTable">CalTable</linkto> module 216 : // </prerequisite> 217 : // 218 : // <etymology> 219 : // From "calibration main table" and "columns". 220 : // </etymology> 221 : // 222 : // <synopsis> 223 : // The CalMainColumns class allows read-write access to columns 224 : // in the main calibration table. Specializations for baseline-based, 225 : // time-variable and solvable VisJones calibration table record types 226 : // are provided through inheritance. 227 : // </etymology> 228 : // 229 : // <example> 230 : // <srcblock> 231 : // </srcblock> 232 : // </example> 233 : // 234 : // <motivation> 235 : // Encapsulate access to calibration table columns. 236 : // </motivation> 237 : // 238 : // <todo asof="01/07/01"> 239 : // (i) Deal with non-standard columns. 240 : // </todo> 241 : 242 : class CalMainColumns 243 : { 244 : public: 245 : // Construct from a calibration table 246 : CalMainColumns (CalTable& calTable); 247 : 248 : // Default destructor 249 4 : virtual ~CalMainColumns() {}; 250 : 251 : // Read-write column accessors 252 0 : casacore::ScalarColumn<casacore::Double>& time() {return time_p;}; 253 20 : casacore::ScalarMeasColumn<casacore::MEpoch>& timeMeas() {return timeMeas_p;}; 254 0 : casacore::ScalarColumn<casacore::Double>& timeEP() {return timeEP_p;}; 255 20 : casacore::ScalarQuantColumn<casacore::Double>& timeEPQuant() {return timeEPQuant_p;}; 256 0 : casacore::ScalarColumn<casacore::Double>& interval() {return interval_p;}; 257 20 : casacore::ScalarQuantColumn<casacore::Double>& intervalQuant() {return intervalQuant_p;}; 258 1 : casacore::ScalarColumn<casacore::Int>& antenna1() {return antenna1_p;}; 259 1 : casacore::ScalarColumn<casacore::Int>& feed1() {return feed1_p;}; 260 1 : casacore::ScalarColumn<casacore::Int>& fieldId() {return fieldId_p;}; 261 1 : casacore::ScalarColumn<casacore::Int>& arrayId() {return arrayId_p;}; 262 1 : casacore::ScalarColumn<casacore::Int>& obsId() {return obsId_p;}; 263 1 : casacore::ScalarColumn<casacore::Int>& scanNo() {return scanNo_p;}; 264 1 : casacore::ScalarColumn<casacore::Int>& processorId() {return processorId_p;}; 265 1 : casacore::ScalarColumn<casacore::Int>& stateId() {return stateId_p;}; 266 1 : casacore::ScalarColumn<casacore::Int>& phaseId() {return phaseId_p;}; 267 1 : casacore::ScalarColumn<casacore::Int>& pulsarBin() {return pulsarBin_p;}; 268 1 : casacore::ScalarColumn<casacore::Int>& pulsarGateId() {return pulsarGateId_p;}; 269 1 : casacore::ScalarColumn<casacore::Int>& freqGrp() {return freqGrp_p;}; 270 1 : casacore::ScalarColumn<casacore::String>& freqGrpName() {return freqGrpName_p;}; 271 1 : casacore::ScalarColumn<casacore::String>& fieldName() {return fieldName_p;}; 272 1 : casacore::ScalarColumn<casacore::String>& fieldCode() {return fieldCode_p;}; 273 1 : casacore::ScalarColumn<casacore::String>& sourceName() {return sourceName_p;}; 274 1 : casacore::ScalarColumn<casacore::String>& sourceCode() {return sourceCode_p;}; 275 1 : casacore::ScalarColumn<casacore::Int>& calGrp() {return calGrp_p;}; 276 1 : casacore::ArrayColumn<casacore::Complex>& gain() {return gain_p;}; 277 1 : casacore::ArrayColumn<casacore::Int>& refAnt() {return refAnt_p;}; 278 1 : casacore::ArrayColumn<casacore::Int>& refFeed() {return refFeed_p;}; 279 1 : casacore::ArrayColumn<casacore::Int>& refReceptor() {return refReceptor_p;}; 280 0 : casacore::ArrayColumn<casacore::Double>& refFreq() {return refFreq_p;}; 281 20 : casacore::ArrayMeasColumn<casacore::MFrequency>& refFreqMeas() {return refFreqMeas_p;}; 282 0 : casacore::ScalarColumn<casacore::Int>& measFreqRef() {return measFreqRef_p;}; 283 0 : casacore::ArrayColumn<casacore::Double>& refDir() {return refDir_p;}; 284 20 : casacore::ArrayMeasColumn<casacore::MDirection>& refDirMeas() {return refDirMeas_p;}; 285 0 : casacore::ScalarColumn<casacore::Int>& measDirRef() {return measDirRef_p;}; 286 1 : casacore::ScalarColumn<casacore::Int>& calDescId() {return calDescId_p;}; 287 1 : casacore::ScalarColumn<casacore::Int>& calHistoryId() {return calHistoryId_p;}; 288 : 289 : protected: 290 : // Prohibit public use of the null constructor, which 291 : // does not produce a usable object. 292 : CalMainColumns() {}; 293 : 294 : // Return a CalTable as a casacore::Table reference. Utilizes friendship 295 : // relationship with class CalTable. 296 274 : casacore::Table& asTable(CalTable& calTable) {return calTable.calMainAsTable();} 297 : 298 : // Attach a table column accessor 299 : void attach (CalTable& calTable, casacore::TableColumn& tabCol, 300 : MSCalEnums::colDef colEnum, const casacore::Bool& optional = false); 301 : void attach (CalTable& calTable, casacore::ArrayMeasColumn<casacore::MEpoch>& tabCol, 302 : MSCalEnums::colDef colEnum, const casacore::Bool& optional = false); 303 : void attach (CalTable& calTable, casacore::ArrayMeasColumn<casacore::MFrequency>& tabCol, 304 : MSCalEnums::colDef colEnum, const casacore::Bool& optional = false); 305 : void attach (CalTable& calTable, casacore::ArrayMeasColumn<casacore::MDirection>& tabCol, 306 : MSCalEnums::colDef colEnum, const casacore::Bool& optional = false); 307 : void attach (CalTable& calTable, casacore::ScalarMeasColumn<casacore::MEpoch>& tabCol, 308 : MSCalEnums::colDef colEnum, const casacore::Bool& optional = false); 309 : void attach (CalTable& calTable, casacore::ScalarQuantColumn<casacore::Double>& tabCol, 310 : MSCalEnums::colDef colEnum, const casacore::Bool& optional = false); 311 : 312 : private: 313 : // Prohibit copy constructor and assignment operator 314 : CalMainColumns (const CalMainColumns&); 315 : CalMainColumns& operator= (const CalMainColumns&); 316 : 317 : // Private column accessors 318 : casacore::ScalarColumn<casacore::Double> time_p; 319 : casacore::ScalarMeasColumn<casacore::MEpoch> timeMeas_p; 320 : casacore::ScalarColumn<casacore::Double> timeEP_p; 321 : casacore::ScalarQuantColumn<casacore::Double> timeEPQuant_p; 322 : casacore::ScalarColumn<casacore::Double> interval_p; 323 : casacore::ScalarQuantColumn<casacore::Double> intervalQuant_p; 324 : casacore::ScalarColumn<casacore::Int> antenna1_p; 325 : casacore::ScalarColumn<casacore::Int> feed1_p; 326 : casacore::ScalarColumn<casacore::Int> fieldId_p; 327 : casacore::ScalarColumn<casacore::Int> arrayId_p; 328 : casacore::ScalarColumn<casacore::Int> obsId_p; 329 : casacore::ScalarColumn<casacore::Int> scanNo_p; 330 : casacore::ScalarColumn<casacore::Int> processorId_p; 331 : casacore::ScalarColumn<casacore::Int> stateId_p; 332 : casacore::ScalarColumn<casacore::Int> phaseId_p; 333 : casacore::ScalarColumn<casacore::Int> pulsarBin_p; 334 : casacore::ScalarColumn<casacore::Int> pulsarGateId_p; 335 : casacore::ScalarColumn<casacore::Int> freqGrp_p; 336 : casacore::ScalarColumn<casacore::String> freqGrpName_p; 337 : casacore::ScalarColumn<casacore::String> fieldName_p; 338 : casacore::ScalarColumn<casacore::String> fieldCode_p; 339 : casacore::ScalarColumn<casacore::String> sourceName_p; 340 : casacore::ScalarColumn<casacore::String> sourceCode_p; 341 : casacore::ScalarColumn<casacore::Int> calGrp_p; 342 : casacore::ArrayColumn<casacore::Complex> gain_p; 343 : casacore::ArrayColumn<casacore::Int> refAnt_p; 344 : casacore::ArrayColumn<casacore::Int> refFeed_p; 345 : casacore::ArrayColumn<casacore::Int> refReceptor_p; 346 : casacore::ArrayColumn<casacore::Double> refFreq_p; 347 : casacore::ArrayMeasColumn<casacore::MFrequency> refFreqMeas_p; 348 : casacore::ScalarColumn<casacore::Int> measFreqRef_p; 349 : casacore::ArrayColumn<casacore::Double> refDir_p; 350 : casacore::ArrayMeasColumn<casacore::MDirection> refDirMeas_p; 351 : casacore::ScalarColumn<casacore::Int> measDirRef_p; 352 : casacore::ScalarColumn<casacore::Int> calDescId_p; 353 : casacore::ScalarColumn<casacore::Int> calHistoryId_p; 354 : }; 355 : 356 : 357 : } //# NAMESPACE CASA - END 358 : 359 : #endif 360 : 361 : 362 : 363 : 364 :