MSMainColumns.h

Go to the documentation of this file.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 31 Aug 2016 for casa by  doxygen 1.6.1