00001 //# MSmainColumns.h: provides easy access to MeasurementSet main table columns 00002 //# Copyright (C) 2000 00003 //# Associated Universities, Inc. Washington DC, USA. 00004 //# 00005 //# This library is free software; you can redistribute it and/or modify it 00006 //# under the terms of the GNU Library General Public License as published by 00007 //# the Free Software Foundation; either version 2 of the License, or (at your 00008 //# option) any later version. 00009 //# 00010 //# This library is distributed in the hope that it will be useful, but WITHOUT 00011 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00012 //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 00013 //# License for more details. 00014 //# 00015 //# You should have received a copy of the GNU Library General Public License 00016 //# along with this library; if not, write to the Free Software Foundation, 00017 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. 00018 //# 00019 //# Correspondence concerning AIPS++ should be addressed as follows: 00020 //# Internet email: aips2-request@nrao.edu. 00021 //# Postal address: AIPS++ Project Office 00022 //# National Radio Astronomy Observatory 00023 //# 520 Edgemont Road 00024 //# Charlottesville, VA 22903-2475 USA 00025 //# 00026 //# $Id$ 00027 00028 #ifndef MS_MSMAINCOLUMNS_H 00029 #define MS_MSMAINCOLUMNS_H 00030 00031 #include <casacore/casa/aips.h> 00032 #include <casacore/measures/Measures/MEpoch.h> 00033 #include <casacore/measures/Measures/Muvw.h> 00034 #include <casacore/measures/Measures/MCEpoch.h> 00035 #include <casacore/measures/Measures/MCuvw.h> 00036 #include <casacore/tables/Tables/ScalarColumn.h> 00037 #include <casacore/tables/Tables/ArrayColumn.h> 00038 #include <casacore/measures/TableMeasures/ScalarMeasColumn.h> 00039 #include <casacore/measures/TableMeasures/ScalarQuantColumn.h> 00040 #include <casacore/measures/TableMeasures/ArrayQuantColumn.h> 00041 00042 namespace casacore { //# NAMESPACE CASACORE - BEGIN 00043 00044 class MeasurementSet; 00045 class String; 00046 template <class T> class Vector; 00047 00048 // <summary> 00049 // A class for easy read-only access to MeasurementSet main table columns 00050 // </summary> 00051 00052 // <use visibility=export> 00053 00054 // <reviewed reviewer="Bob Garwood" date="1997/02/01" tests="" demos=""> 00055 // </reviewed> 00056 00057 // <prerequisite> 00058 // <li> MeasurementSet 00059 // <li> ArrayColumn 00060 // <li> ScalarColumn 00061 // </prerequisite> 00062 // 00063 // <etymology> 00064 // ROMSColumns stands for Read-Only MeasurementSet Table columns. 00065 // </etymology> 00066 // 00067 // <synopsis> 00068 // This class provides read-only access to the columns in the MeasurementSet. 00069 // It does the declaration of all the Scalar and ArrayColumns with the 00070 // correct types, so the application programmer doesn't have to 00071 // worry about getting those right. There is an access function 00072 // for every predefined column. Access to non-predefined columns will still 00073 // have to be done with explicit declarations. 00074 // <note role=warning> The Table that is used to construct this class must not 00075 // be destroyed (or go out of scope) before this class does. Otherwise the 00076 // scalar and array columns use by this class will be left dangling.</note> 00077 // </synopsis> 00078 // </synopsis> 00079 // 00080 // <example> 00081 // <srcblock> 00082 // // use as follows 00083 // MeasurementSet ms("myMS"); 00084 // ROMSColumns msc(ms); 00085 // // show data from row 5 00086 // cout << msc.data()(5); 00087 // // show name of antenna on row 3 in antenna table 00088 // cout << msc.antenna().name(); 00089 // </srcblock> 00090 // </example> 00091 // 00092 // <motivation> 00093 // See <linkto class=MSColumns> MSColumns</linkto> for the motivation. 00094 // </motivation> 00095 // 00096 // <todo asof="1997/02/01"> 00097 // <li> We might decide to merge all the MSColumn classes with the 00098 // corresponding MeasurementSet classes. 00099 // </todo> 00100 00101 class ROMSMainColumns 00102 { 00103 public: 00104 // Create a columns object that accesses the data in the specified Table 00105 ROMSMainColumns(const MeasurementSet& ms); 00106 00107 // The desctructor does nothing special 00108 ~ROMSMainColumns(); 00109 00110 // Access to required columns 00111 // <group> 00112 const ROScalarColumn<Int>& antenna1() const {return antenna1_p;} 00113 const ROScalarColumn<Int>& antenna2() const {return antenna2_p;} 00114 const ROScalarColumn<Int>& arrayId() const {return arrayId_p;} 00115 const ROScalarColumn<Int>& dataDescId() const {return dataDescId_p;} 00116 const ROScalarColumn<Double>& exposure() const {return exposure_p;} 00117 const ROScalarQuantColumn<Double>& exposureQuant() const { 00118 return exposureQuant_p;} 00119 const ROScalarColumn<Int>& feed1() const {return feed1_p;} 00120 const ROScalarColumn<Int>& feed2() const {return feed2_p;} 00121 const ROScalarColumn<Int>& fieldId() const {return fieldId_p;} 00122 const ROArrayColumn<Bool>& flag() const {return flag_p;} 00123 const ROArrayColumn<Bool>& flagCategory() const {return flagCategory_p;} 00124 const ROScalarColumn<Bool>& flagRow() const {return flagRow_p;} 00125 const ROScalarColumn<Double>& interval() const {return interval_p;} 00126 const ROScalarQuantColumn<Double>& intervalQuant() const { 00127 return intervalQuant_p;} 00128 const ROScalarColumn<Int>& observationId() const {return observationId_p;} 00129 const ROScalarColumn<Int>& processorId() const {return processorId_p;} 00130 const ROScalarColumn<Int>& scanNumber() const {return scanNumber_p;} 00131 const ROArrayColumn<Float>& sigma() const {return sigma_p;} 00132 const ROScalarColumn<Int>& stateId() const {return stateId_p;} 00133 const ROScalarColumn<Double>& time() const {return time_p;} 00134 const ROScalarQuantColumn<Double>& timeQuant() const { 00135 return timeQuant_p;} 00136 const ROScalarMeasColumn<MEpoch>& timeMeas() const { 00137 return timeMeas_p;} 00138 const ROScalarColumn<Double>& timeCentroid() const {return timeCentroid_p;} 00139 const ROScalarQuantColumn<Double>& timeCentroidQuant() const { 00140 return timeCentroidQuant_p;} 00141 const ROScalarMeasColumn<MEpoch>& timeCentroidMeas() const { 00142 return timeCentroidMeas_p;} 00143 const ROArrayColumn<Double>& uvw() const {return uvw_p;} 00144 const ROArrayQuantColumn<Double>& uvwQuant() const { 00145 return uvwQuant_p;} 00146 const ROScalarMeasColumn<Muvw>& uvwMeas() const { 00147 return uvwMeas_p;} 00148 const ROArrayColumn<Float>& weight() const {return weight_p;} 00149 // </group> 00150 00151 // Access to optional columns 00152 // <group> 00153 const ROScalarColumn<Int>& antenna3() const {return antenna3_p;} 00154 const ROScalarColumn<Bool>& baselineRef() const {return baselineRef_p;} 00155 const ROArrayColumn<Complex>& correctedData() const {return correctedData_p;} 00156 const ROArrayColumn<Complex>& data() const {return data_p;} 00157 const ROScalarColumn<Int>& feed3() const {return feed3_p;} 00158 const ROArrayColumn<Float>& floatData() const {return floatData_p;} 00159 const ROArrayColumn<Float>& imagingWeight() const {return imagingWeight_p;} 00160 const ROArrayColumn<Complex>& lagData() const {return lagData_p;} 00161 const ROArrayColumn<Complex>& modelData() const {return modelData_p;} 00162 const ROScalarColumn<Int>& phaseId() const {return phaseId_p;} 00163 const ROScalarColumn<Int>& pulsarBin() const {return pulsarBin_p;} 00164 const ROScalarColumn<Int>& pulsarGateId() const {return pulsarGateId_p;} 00165 const ROArrayColumn<Float>& sigmaSpectrum() const {return sigmaSpectrum_p;} 00166 const ROScalarColumn<Double>& timeExtraPrec() const {return timeExtraPrec_p;} 00167 const ROScalarQuantColumn<Double>& timeExtraPrecQuant() const { 00168 return timeExtraPrecQuant_p;} 00169 const ROArrayColumn<Double>& uvw2() const {return uvw2_p;} 00170 const ROScalarMeasColumn<Muvw>& uvw2Meas() const { 00171 return uvw2Meas_p;} 00172 const ROArrayQuantColumn<Double>& uvw2Quant() const { 00173 return uvw2Quant_p;} 00174 const ROArrayColumn<Complex>& videoPoint() const {return videoPoint_p;} 00175 const ROArrayColumn<Float>& weightSpectrum() const {return weightSpectrum_p;} 00176 const ROArrayColumn<Float>& weightSpectrumCorrected() const {return weightSpectrumCorrected_p;} 00177 // </group> 00178 00179 // Convenience function that returns the number of rows in any of the columns 00180 uInt nrow() const {return antenna1_p.nrow();} 00181 00182 // Returns the category labels for the FLAG_CATEGORY column. 00183 Vector<String> flagCategories() const; 00184 00185 protected: 00186 //# default constructor creates a object that is not usable. Use the attach 00187 //# function correct this. 00188 ROMSMainColumns(); 00189 00190 //# attach this object to the supplied table. 00191 void attach(const MeasurementSet& ms); 00192 00193 private: 00194 //# Make the assignment operator and the copy constructor private to prevent 00195 //# any compiler generated one from being used. 00196 ROMSMainColumns(const ROMSMainColumns&); 00197 ROMSMainColumns& operator=(const ROMSMainColumns&); 00198 00199 //# Check if any optional columns exist and if so attach them. 00200 void attachOptionalCols(const MeasurementSet& ms); 00201 00202 //# required columns 00203 ROScalarColumn<Int> antenna1_p; 00204 ROScalarColumn<Int> antenna2_p; 00205 ROScalarColumn<Int> arrayId_p; 00206 ROScalarColumn<Int> dataDescId_p; 00207 ROScalarColumn<Double> exposure_p; 00208 ROScalarColumn<Int> feed1_p; 00209 ROScalarColumn<Int> feed2_p; 00210 ROScalarColumn<Int> fieldId_p; 00211 ROArrayColumn<Bool> flag_p; 00212 ROArrayColumn<Bool> flagCategory_p; 00213 ROScalarColumn<Bool> flagRow_p; 00214 ROScalarColumn<Double> interval_p; 00215 ROScalarColumn<Int> observationId_p; 00216 ROScalarColumn<Int> processorId_p; 00217 ROScalarColumn<Int> scanNumber_p; 00218 ROArrayColumn<Float> sigma_p; 00219 ROScalarColumn<Int> stateId_p; 00220 ROScalarColumn<Double> time_p; 00221 ROScalarColumn<Double> timeCentroid_p; 00222 ROArrayColumn<Double> uvw_p; 00223 ROArrayColumn<Float> weight_p; 00224 //# optional columns 00225 ROScalarColumn<Int> antenna3_p; 00226 ROScalarColumn<Bool> baselineRef_p; 00227 ROArrayColumn<Complex> data_p; 00228 ROScalarColumn<Int> feed3_p; 00229 ROArrayColumn<Float> floatData_p; 00230 ROArrayColumn<Complex> lagData_p; 00231 ROScalarColumn<Int> phaseId_p; 00232 ROScalarColumn<Int> pulsarBin_p; 00233 ROScalarColumn<Int> pulsarGateId_p; 00234 ROArrayColumn<Float> sigmaSpectrum_p; 00235 ROScalarColumn<Double> timeExtraPrec_p; 00236 ROArrayColumn<Double> uvw2_p; 00237 ROArrayColumn<Complex> videoPoint_p; 00238 ROArrayColumn<Float> weightSpectrum_p; 00239 ROArrayColumn<Float> weightSpectrumCorrected_p; 00240 00241 //# columns required for synthesis applications - all optional 00242 ROArrayColumn<Complex> correctedData_p; 00243 ROArrayColumn<Float> imagingWeight_p; 00244 ROArrayColumn<Complex> modelData_p; 00245 00246 //# Access to Measure columns 00247 ROScalarMeasColumn<MEpoch> timeMeas_p; 00248 ROScalarMeasColumn<MEpoch> timeCentroidMeas_p; 00249 ROScalarMeasColumn<Muvw> uvwMeas_p; 00250 //# optional Measure columns 00251 ROScalarMeasColumn<Muvw> uvw2Meas_p; 00252 00253 //# Access to Quantum columns 00254 ROScalarQuantColumn<Double> exposureQuant_p; 00255 ROScalarQuantColumn<Double> intervalQuant_p; 00256 ROScalarQuantColumn<Double> timeQuant_p; 00257 ROScalarQuantColumn<Double> timeCentroidQuant_p; 00258 ROArrayQuantColumn<Double> uvwQuant_p; 00259 //# optional Quantum columns 00260 ROScalarQuantColumn<Double> timeExtraPrecQuant_p; 00261 ROArrayQuantColumn<Double> uvw2Quant_p; 00262 00263 }; 00264 00265 // <summary> 00266 // A class for easy read-write access to MeasurementSet main table columns 00267 // </summary> 00268 00269 // <use visibility=export> 00270 00271 // <reviewed reviewer="Bob Garwood" date="1997/02/01" tests="" demos=""> 00272 // </reviewed> 00273 00274 // <prerequisite> 00275 // <li> MeasurementSet 00276 // <li> ArrayColumn 00277 // <li> ScalarColumn 00278 // </prerequisite> 00279 // 00280 // <etymology> 00281 // MSMainColumns stands for MeasurementSet main Table columns. 00282 // </etymology> 00283 // 00284 // <synopsis> 00285 // This class provides access to the columns in the MeasurementSet. 00286 // It does the declaration of all the Scalar and ArrayColumns with the 00287 // correct types, so the application programmer doesn't have to 00288 // worry about getting those right. There is an access function 00289 // for every predefined column. Access to non-predefined columns will still 00290 // have to be done with explicit declarations. 00291 // <note role=warning> The Table that is used to construct this class must not 00292 // be destroyed (or go out of scope) before this class does. Otherwise the 00293 // scalar and array columns use by this class will be left dangling.</note> 00294 // </synopsis> 00295 // </synopsis> 00296 // 00297 // <example> 00298 // <srcblock> 00299 // // use as follows 00300 // MeasurementSet ms("myMS",Table::Update); 00301 // MSColumns msc(ms); 00302 // // show data from row 5 00303 // cout << msc.data()(5); 00304 // // change name of antenna on row 3 in antenna table 00305 // msc.antenna().name().put(3,"NewAnt-3"); 00306 // </srcblock> 00307 // </example> 00308 // 00309 // <motivation> 00310 // Having to type long lists of Scalar and Array column declarations gets 00311 // very tedious. This class attempts to relieve some of that tedium, while 00312 // at the same time concentrating all the declarations in one place, 00313 // making Type errors in the column declaration (only caught at run-time) less 00314 // probable. Type errors in the use of the columns is caught at compile 00315 // time. 00316 // </motivation> 00317 // 00318 // <todo asof="1997/02/01"> 00319 // <li> We might decide to merge this class with the MeasurementSet 00320 // </todo> 00321 00322 class MSMainColumns: public ROMSMainColumns 00323 { 00324 public: 00325 00326 // Create a columns object that accesses the data in the specified Table 00327 MSMainColumns(MeasurementSet& ms); 00328 00329 // The desctructor does nothing special 00330 ~MSMainColumns(); 00331 00332 // Read-write access to required columns 00333 // <group> 00334 ScalarColumn<Int>& antenna1() {return antenna1_p;} 00335 ScalarColumn<Int>& antenna2() {return antenna2_p;} 00336 ScalarColumn<Int>& arrayId() {return arrayId_p;} 00337 ScalarColumn<Int>& dataDescId() {return dataDescId_p;} 00338 ScalarColumn<Double>& exposure() {return exposure_p;} 00339 ScalarQuantColumn<Double>& exposureQuant() { 00340 return exposureQuant_p;} 00341 ScalarColumn<Int>& feed1() {return feed1_p;} 00342 ScalarColumn<Int>& feed2() {return feed2_p;} 00343 ScalarColumn<Int>& fieldId() {return fieldId_p;} 00344 ArrayColumn<Bool>& flag() {return flag_p;} 00345 ArrayColumn<Bool>& flagCategory() {return flagCategory_p;} 00346 ScalarColumn<Bool>& flagRow() {return flagRow_p;} 00347 ScalarColumn<Double>& interval() {return interval_p;} 00348 ScalarQuantColumn<Double>& intervalQuant() { 00349 return intervalQuant_p;} 00350 ScalarColumn<Int>& observationId() {return observationId_p;} 00351 ScalarColumn<Int>& processorId() {return processorId_p;} 00352 ScalarColumn<Int>& scanNumber() {return scanNumber_p;} 00353 ArrayColumn<Float>& sigma() {return sigma_p;} 00354 ScalarColumn<Int>& stateId() {return stateId_p;} 00355 ScalarColumn<Double>& time() {return time_p;} 00356 ScalarQuantColumn<Double>& timeQuant() { 00357 return timeQuant_p;} 00358 ScalarMeasColumn<MEpoch>& timeMeas() { 00359 return timeMeas_p;} 00360 ScalarColumn<Double>& timeCentroid() {return timeCentroid_p;} 00361 ScalarQuantColumn<Double>& timeCentroidQuant() { 00362 return timeCentroidQuant_p;} 00363 ScalarMeasColumn<MEpoch>& timeCentroidMeas() { 00364 return timeCentroidMeas_p;} 00365 ArrayColumn<Double>& uvw() {return uvw_p;} 00366 ArrayQuantColumn<Double>& uvwQuant() { 00367 return uvwQuant_p;} 00368 ScalarMeasColumn<Muvw>& uvwMeas() { 00369 return uvwMeas_p;} 00370 ArrayColumn<Float>& weight() {return weight_p;} 00371 // </group> 00372 00373 // Read-write access to optional columns 00374 // <group> 00375 ScalarColumn<Int>& antenna3() {return antenna3_p;} 00376 ScalarColumn<Bool>& baselineRef() {return baselineRef_p;} 00377 ArrayColumn<Complex>& correctedData() {return correctedData_p;} 00378 ArrayColumn<Complex>& data() {return data_p;} 00379 ScalarColumn<Int>& feed3() {return feed3_p;} 00380 ArrayColumn<Float>& floatData() {return floatData_p;} 00381 ArrayColumn<Float>& imagingWeight() {return imagingWeight_p;} 00382 ArrayColumn<Complex>& lagData() {return lagData_p;} 00383 ArrayColumn<Complex>& modelData() {return modelData_p;} 00384 ScalarColumn<Int>& phaseId() {return phaseId_p;} 00385 ScalarColumn<Int>& pulsarBin() {return pulsarBin_p;} 00386 ScalarColumn<Int>& pulsarGateId() {return pulsarGateId_p;} 00387 ArrayColumn<Float>& sigmaSpectrum() {return sigmaSpectrum_p;} 00388 ScalarColumn<Double>& timeExtraPrec() {return timeExtraPrec_p;} 00389 ScalarQuantColumn<Double>& timeExtraPrecQuant() { 00390 return timeExtraPrecQuant_p;} 00391 ArrayColumn<Double>& uvw2() {return uvw2_p;} 00392 ScalarMeasColumn<Muvw>& uvw2Meas() { 00393 return uvw2Meas_p;} 00394 ArrayQuantColumn<Double>& uvw2Quant() { 00395 return uvw2Quant_p;} 00396 ArrayColumn<Complex>& videoPoint() {return videoPoint_p;} 00397 ArrayColumn<Float>& weightSpectrum() {return weightSpectrum_p;} 00398 ArrayColumn<Float>& weightSpectrumCorrected() {return weightSpectrumCorrected_p;} 00399 // </group> 00400 00401 // Read-only access to required columns 00402 // <group> 00403 const ROScalarColumn<Int>& antenna1() const { 00404 return ROMSMainColumns::antenna1();} 00405 const ROScalarColumn<Int>& antenna2() const { 00406 return ROMSMainColumns::antenna2();} 00407 const ROScalarColumn<Int>& arrayId() const { 00408 return ROMSMainColumns::arrayId();} 00409 const ROScalarColumn<Int>& dataDescId() const { 00410 return ROMSMainColumns::dataDescId();} 00411 const ROScalarColumn<Double>& exposure() const { 00412 return ROMSMainColumns::exposure();} 00413 const ROScalarQuantColumn<Double>& exposureQuant() const { 00414 return ROMSMainColumns::exposureQuant();} 00415 const ROScalarColumn<Int>& feed1() const { 00416 return ROMSMainColumns::feed1();} 00417 const ROScalarColumn<Int>& feed2() const { 00418 return ROMSMainColumns::feed2();} 00419 const ROScalarColumn<Int>& fieldId() const { 00420 return ROMSMainColumns::fieldId();} 00421 const ROArrayColumn<Bool>& flag() const { 00422 return ROMSMainColumns::flag();} 00423 const ROArrayColumn<Bool>& flagCategory() const { 00424 return ROMSMainColumns::flagCategory();} 00425 const ROScalarColumn<Bool>& flagRow() const { 00426 return ROMSMainColumns::flagRow();} 00427 const ROScalarColumn<Double>& interval() const { 00428 return ROMSMainColumns::interval();} 00429 const ROScalarQuantColumn<Double>& intervalQuant() const { 00430 return ROMSMainColumns::intervalQuant();} 00431 const ROScalarColumn<Int>& observationId() const { 00432 return ROMSMainColumns::observationId();} 00433 const ROScalarColumn<Int>& processorId() const { 00434 return ROMSMainColumns::processorId();} 00435 const ROScalarColumn<Int>& scanNumber() const { 00436 return ROMSMainColumns::scanNumber();} 00437 const ROArrayColumn<Float>& sigma() const { 00438 return ROMSMainColumns::sigma();} 00439 const ROScalarColumn<Int>& stateId() const { 00440 return ROMSMainColumns::stateId();} 00441 const ROScalarColumn<Double>& time() const { 00442 return ROMSMainColumns::time();} 00443 const ROScalarQuantColumn<Double>& timeQuant() const { 00444 return ROMSMainColumns::timeQuant();} 00445 const ROScalarMeasColumn<MEpoch>& timeMeas() const { 00446 return ROMSMainColumns::timeMeas();} 00447 const ROScalarColumn<Double>& timeCentroid() const { 00448 return ROMSMainColumns::timeCentroid();} 00449 const ROScalarQuantColumn<Double>& timeCentroidQuant() const { 00450 return ROMSMainColumns::timeCentroidQuant();} 00451 const ROScalarMeasColumn<MEpoch>& timeCentroidMeas() const { 00452 return ROMSMainColumns::timeCentroidMeas();} 00453 const ROArrayColumn<Double>& uvw() const { 00454 return ROMSMainColumns::uvw();} 00455 const ROArrayQuantColumn<Double>& uvwQuant() const { 00456 return ROMSMainColumns::uvwQuant();} 00457 const ROScalarMeasColumn<Muvw>& uvwMeas() const { 00458 return ROMSMainColumns::uvwMeas();} 00459 const ROArrayColumn<Float>& weight() const { 00460 return ROMSMainColumns::weight();} 00461 // </group> 00462 00463 // Read-only access to optional columns 00464 // <group> 00465 const ROScalarColumn<Int>& antenna3() const { 00466 return ROMSMainColumns::antenna3();} 00467 const ROScalarColumn<Bool>& baselineRef() const { 00468 return ROMSMainColumns::baselineRef();} 00469 const ROArrayColumn<Complex>& correctedData() const { 00470 return ROMSMainColumns::correctedData();} 00471 const ROArrayColumn<Complex>& data() const { 00472 return ROMSMainColumns::data();} 00473 const ROScalarColumn<Int>& feed3() const { 00474 return ROMSMainColumns::feed3();} 00475 const ROArrayColumn<Float>& floatData() const { 00476 return ROMSMainColumns::floatData();} 00477 const ROArrayColumn<Float>& imagingWeight() const { 00478 return ROMSMainColumns::imagingWeight();} 00479 const ROArrayColumn<Complex>& lagData() const { 00480 return ROMSMainColumns::lagData();} 00481 const ROArrayColumn<Complex>& modelData() const { 00482 return ROMSMainColumns::modelData();} 00483 const ROScalarColumn<Int>& phaseId() const { 00484 return ROMSMainColumns::phaseId();} 00485 const ROScalarColumn<Int>& pulsarBin() const { 00486 return ROMSMainColumns::pulsarBin();} 00487 const ROScalarColumn<Int>& pulsarGateId() const { 00488 return ROMSMainColumns::pulsarGateId();} 00489 const ROArrayColumn<Float>& sigmaSpectrum() const { 00490 return ROMSMainColumns::sigmaSpectrum();} 00491 const ROScalarColumn<Double>& timeExtraPrec() const { 00492 return ROMSMainColumns::timeExtraPrec();} 00493 const ROScalarQuantColumn<Double>& timeExtraPrecQuant() const { 00494 return ROMSMainColumns::timeExtraPrecQuant();} 00495 const ROArrayColumn<Double>& uvw2() const { 00496 return ROMSMainColumns::uvw2();} 00497 const ROScalarMeasColumn<Muvw>& uvw2Meas() const { 00498 return ROMSMainColumns::uvw2Meas();} 00499 const ROArrayQuantColumn<Double>& uvw2Quant() const { 00500 return ROMSMainColumns::uvw2Quant();} 00501 const ROArrayColumn<Complex>& videoPoint() const { 00502 return ROMSMainColumns::videoPoint();} 00503 const ROArrayColumn<Float>& weightSpectrum() const { 00504 return ROMSMainColumns::weightSpectrum();} 00505 const ROArrayColumn<Float>& weightSpectrumCorrected() const { 00506 return ROMSMainColumns::weightSpectrumCorrected();} 00507 // </group> 00508 00509 // set the epoch type for the TIME and TIME_CENTROID columns. 00510 // <note role=tip> 00511 // In principle this function can only be used if the table is empty, 00512 // otherwise already written values may thereafter have an incorrect 00513 // reference, offset, or unit. However, it is possible that part of the 00514 // table gets written before these values are known. In that case the 00515 // reference, offset, or units can be set by using a False 00516 // <src>tableMustBeEmpty</src> argument. 00517 // </note> 00518 void setEpochRef(MEpoch::Types ref, Bool tableMustBeEmpty=True); 00519 00520 // set the UVW reference type for the UVW and UVW2 (if defined) columns. This 00521 // can only be done when the table has no rows. Trying to do so at other 00522 // times will throw an exception. 00523 void setUVWRef(Muvw::Types ref); 00524 00525 // Set the flag category labels to the supplied values (in the CATEGORY 00526 // keyword of the FLAG_CATEGORY column). Throws an exception, when compiled 00527 // in Debug mode, if the length of the supplied Vector is not the same as the 00528 // length of the third dimension of the FLAG_CATEGORY column. 00529 void setFlagCategories(const Vector<String>& categories); 00530 00531 protected: 00532 //# default constructor creates a object that is not usable. Use the attach 00533 //# function correct this. 00534 MSMainColumns(); 00535 00536 //# attach this object to the supplied table. 00537 void attach(MeasurementSet& ms); 00538 00539 private: 00540 //# Make the assignment operator and the copy constructor private to prevent 00541 //# any compiler generated one from being used. 00542 MSMainColumns(const MSMainColumns&); 00543 MSMainColumns& operator=(const MSMainColumns&); 00544 00545 //# Check if any optional columns exist and if so attach them. 00546 void attachOptionalCols(MeasurementSet& ms); 00547 00548 //# required columns 00549 ScalarColumn<Int> antenna1_p; 00550 ScalarColumn<Int> antenna2_p; 00551 ScalarColumn<Int> arrayId_p; 00552 ScalarColumn<Int> dataDescId_p; 00553 ScalarColumn<Double> exposure_p; 00554 ScalarColumn<Int> feed1_p; 00555 ScalarColumn<Int> feed2_p; 00556 ScalarColumn<Int> fieldId_p; 00557 ArrayColumn<Bool> flag_p; 00558 ArrayColumn<Bool> flagCategory_p; 00559 ScalarColumn<Bool> flagRow_p; 00560 ScalarColumn<Double> interval_p; 00561 ScalarColumn<Int> observationId_p; 00562 ScalarColumn<Int> processorId_p; 00563 ScalarColumn<Int> scanNumber_p; 00564 ArrayColumn<Float> sigma_p; 00565 ScalarColumn<Int> stateId_p; 00566 ScalarColumn<Double> time_p; 00567 ScalarColumn<Double> timeCentroid_p; 00568 ArrayColumn<Double> uvw_p; 00569 ArrayColumn<Float> weight_p; 00570 //# optional columns 00571 ScalarColumn<Int> antenna3_p; 00572 ScalarColumn<Bool> baselineRef_p; 00573 ArrayColumn<Complex> data_p; 00574 ScalarColumn<Int> feed3_p; 00575 ArrayColumn<Float> floatData_p; 00576 ArrayColumn<Complex> lagData_p; 00577 ScalarColumn<Int> phaseId_p; 00578 ScalarColumn<Int> pulsarBin_p; 00579 ScalarColumn<Int> pulsarGateId_p; 00580 ArrayColumn<Float> sigmaSpectrum_p; 00581 ScalarColumn<Double> timeExtraPrec_p; 00582 ArrayColumn<Double> uvw2_p; 00583 ArrayColumn<Complex> videoPoint_p; 00584 ArrayColumn<Float> weightSpectrum_p; 00585 ArrayColumn<Float> weightSpectrumCorrected_p; 00586 00587 //# columns required for synthesis applications - all optional 00588 ArrayColumn<Complex> correctedData_p; 00589 ArrayColumn<Float> imagingWeight_p; 00590 ArrayColumn<Complex> modelData_p; 00591 00592 //# Access to Measure columns 00593 ScalarMeasColumn<MEpoch> timeMeas_p; 00594 ScalarMeasColumn<MEpoch> timeCentroidMeas_p; 00595 ScalarMeasColumn<Muvw> uvwMeas_p; 00596 //# optional Measure columns 00597 ScalarMeasColumn<Muvw> uvw2Meas_p; 00598 00599 //# Access to Quantum columns 00600 ScalarQuantColumn<Double> exposureQuant_p; 00601 ScalarQuantColumn<Double> intervalQuant_p; 00602 ScalarQuantColumn<Double> timeQuant_p; 00603 ScalarQuantColumn<Double> timeCentroidQuant_p; 00604 ArrayQuantColumn<Double> uvwQuant_p; 00605 //# optional Quantum columns 00606 ScalarQuantColumn<Double> timeExtraPrecQuant_p; 00607 ArrayQuantColumn<Double> uvw2Quant_p; 00608 00609 }; 00610 00611 00612 } //# NAMESPACE CASACORE - END 00613 00614 #endif 00615 00616