MSColumns.h

Go to the documentation of this file.
00001 //# MSColumns.h: provides easy access to MeasurementSet columns
00002 //# Copyright (C) 1996,1999,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_MSCOLUMNS_H
00029 #define MS_MSCOLUMNS_H
00030 
00031 #include <casacore/casa/aips.h>
00032 #include <casacore/measures/Measures/MDirection.h>
00033 #include <casacore/measures/Measures/MEpoch.h>
00034 #include <casacore/measures/Measures/MCPosition.h>
00035 #include <casacore/measures/TableMeasures/ArrayMeasColumn.h>
00036 #include <casacore/measures/TableMeasures/ArrayQuantColumn.h>
00037 #include <casacore/measures/TableMeasures/ScalarMeasColumn.h>
00038 #include <casacore/measures/TableMeasures/ScalarQuantColumn.h>
00039 #include <casacore/ms/MeasurementSets/MSAntennaColumns.h>
00040 #include <casacore/ms/MeasurementSets/MSDataDescColumns.h>
00041 #include <casacore/ms/MeasurementSets/MSDopplerColumns.h>
00042 #include <casacore/ms/MeasurementSets/MSFeedColumns.h>
00043 #include <casacore/ms/MeasurementSets/MSFieldColumns.h>
00044 #include <casacore/ms/MeasurementSets/MSFlagCmdColumns.h>
00045 #include <casacore/ms/MeasurementSets/MSFreqOffColumns.h>
00046 #include <casacore/ms/MeasurementSets/MSHistoryColumns.h>
00047 #include <casacore/ms/MeasurementSets/MSMainColumns.h>
00048 #include <casacore/ms/MeasurementSets/MSObsColumns.h>
00049 #include <casacore/ms/MeasurementSets/MSPointingColumns.h>
00050 #include <casacore/ms/MeasurementSets/MSPolColumns.h>
00051 #include <casacore/ms/MeasurementSets/MSProcessorColumns.h>
00052 #include <casacore/ms/MeasurementSets/MSSourceColumns.h>
00053 #include <casacore/ms/MeasurementSets/MSSpWindowColumns.h>
00054 #include <casacore/ms/MeasurementSets/MSStateColumns.h>
00055 #include <casacore/ms/MeasurementSets/MSSysCalColumns.h>
00056 #include <casacore/ms/MeasurementSets/MSWeatherColumns.h>
00057 
00058 namespace casacore { //# NAMESPACE CASACORE - BEGIN
00059 
00060 class MeasurementSet;
00061 
00062 // <summary>
00063 // A class to provide easy read-only access to MeasurementSet columns
00064 // </summary>
00065 
00066 // <use visibility=export>
00067 
00068 // <reviewed reviewer="Bob Garwood" date="1997/02/01" tests="" demos="">
00069 // </reviewed>
00070 
00071 // <prerequisite>
00072 //   <li> MeasurementSet
00073 //   <li> ArrayColumn
00074 //   <li> ScalarColumn
00075 // </prerequisite>
00076 //
00077 // <etymology>
00078 // ROMSColumns stands for Read-Only MeasurementSet Table columns.
00079 // </etymology>
00080 //
00081 // <synopsis>
00082 // This class provides read-only access to the columns in the MeasurementSet.
00083 // It does the declaration of all the Scalar and ArrayColumns with the
00084 // correct types, so the application programmer doesn't have to
00085 // worry about getting those right. There is an access function
00086 // for every predefined column. Access to non-predefined columns will still
00087 // have to be done with explicit declarations.
00088 // </synopsis>
00089 //
00090 // <example>
00091 // <srcblock>
00092 // // use as follows
00093 // MeasurementSet ms("myMS"); 
00094 // ROMSColumns msc(ms);
00095 // // show data from row 5
00096 // cout << msc.data()(5);
00097 // // show name of antenna on row 3 in antenna table
00098 // cout << msc.antenna().name();
00099 // </srcblock>
00100 // </example>
00101 //
00102 // <motivation>
00103 // See <linkto class=MSColumns> MSColumns</linkto> for the motivation.
00104 // </motivation>
00105 //
00106 // <todo asof="1997/02/01">
00107 //   <li> We might decide to merge all the MSColumn classes with the
00108 //        corresponding MeasurementSet classes.
00109 // </todo>
00110 
00111 class ROMSColumns: public ROMSMainColumns
00112 {
00113 public:
00114   // Create a columns object that accesses the data in the specified MS
00115   ROMSColumns(const MeasurementSet& ms);
00116 
00117   // The destructor does nothing special
00118   ~ROMSColumns();
00119 
00120   // Access to required subtables
00121   // <group>
00122   const ROMSAntennaColumns& antenna() const {return antenna_p;}
00123   const ROMSDataDescColumns& dataDescription() const {return dataDesc_p;}
00124   const ROMSFeedColumns& feed() const {return feed_p;}
00125   const ROMSFieldColumns& field() const {return field_p;}
00126   const ROMSFlagCmdColumns& flagCmd() const {return flagCmd_p;}
00127   const ROMSHistoryColumns& history() const {return history_p;}
00128   const ROMSObservationColumns& observation() const {return observation_p;}
00129   const ROMSPointingColumns& pointing() const {return pointing_p;}
00130   const ROMSPolarizationColumns& polarization() const {
00131     return polarization_p;}
00132   const ROMSProcessorColumns& processor() const {return processor_p;}
00133   const ROMSSpWindowColumns& spectralWindow() const {
00134     return spectralWindow_p;}
00135   const ROMSStateColumns& state() const {return state_p;}
00136   // </group>
00137 
00138   // Access to optional subtables
00139   // <group>
00140   const ROMSDopplerColumns& doppler() const {return doppler_p;}
00141   const ROMSFreqOffsetColumns& freqOffset() const {return freqOffset_p;}
00142   const ROMSSourceColumns& source() const {return source_p;}
00143   const ROMSSysCalColumns& sysCal() const {return sysCal_p;}
00144   const ROMSWeatherColumns& weather() const {return weather_p;}
00145   // </group>
00146 
00147 private:
00148   // Access to subtables
00149   ROMSAntennaColumns antenna_p;
00150   ROMSDataDescColumns dataDesc_p;
00151   ROMSDopplerColumns doppler_p; //optional
00152   ROMSFeedColumns feed_p;
00153   ROMSFieldColumns field_p;
00154   ROMSFlagCmdColumns flagCmd_p;
00155   ROMSFreqOffsetColumns freqOffset_p; //optional
00156   ROMSHistoryColumns history_p;
00157   ROMSObservationColumns observation_p;
00158   ROMSPointingColumns pointing_p;
00159   ROMSPolarizationColumns polarization_p;
00160   ROMSProcessorColumns processor_p;
00161   ROMSSourceColumns source_p; // optional
00162   ROMSSpWindowColumns spectralWindow_p;
00163   ROMSStateColumns state_p;
00164   ROMSSysCalColumns sysCal_p; //optional
00165   ROMSWeatherColumns weather_p; //optional
00166 };
00167 
00168 // <summary>
00169 // A class to provide easy read-write access to MeasurementSet columns
00170 // </summary>
00171 
00172 // <use visibility=export>
00173 
00174 // <reviewed reviewer="Bob Garwood" date="1997/02/01" tests="" demos="">
00175 // </reviewed>
00176 
00177 // <prerequisite>
00178 //   <li> MeasurementSet
00179 //   <li> ArrayColumn
00180 //   <li> ScalarColumn
00181 // </prerequisite>
00182 //
00183 // <etymology>
00184 // MSColumns stands for MeasurementSet Table columns.
00185 // </etymology>
00186 //
00187 // <synopsis>
00188 // This class provides access to all the subtables and direct access to all the
00189 // columns in the MeasurementSet.  It does the declaration of all the Scalar
00190 // and ArrayColumns with the correct types, so the application programmer
00191 // doesn't have to worry about getting those right. There is an access function
00192 // for every predefined column. Access to non-predefined columns will still
00193 // have to be done with explicit declarations.
00194 // </synopsis>
00195 //
00196 // <example>
00197 // <srcblock>
00198 // // use as follows
00199 // MeasurementSet ms("myMS",Table::Update); 
00200 // MSColumns msc(ms);
00201 // // show data from row 5
00202 // cout << msc.data()(5);
00203 // // change name of antenna on row 3 in antenna table
00204 // msc.antenna().name().put(3,"NewAnt-3");
00205 // </srcblock>
00206 // </example>
00207 //
00208 // <motivation>
00209 // Having to type long lists of Scalar and Array column declarations gets
00210 // very tedious. This class attempts to relieve some of that tedium, while
00211 // at the same time concentrating all the declarations in one place,
00212 // making Type errors in the column declaration (only caught at run-time) less
00213 // probable. Type errors in the use of the columns is caught at compile
00214 // time.
00215 // </motivation>
00216 //
00217 // <todo asof="1997/02/01">
00218 //   <li> We might decide to merge this class with the MeasurementSet
00219 // </todo>
00220 
00221 class MSColumns: public MSMainColumns
00222 {
00223 public:
00224   // Create a columns object that accesses the data in the specified MS
00225   MSColumns(MeasurementSet& ms);
00226 
00227   // The destructor does nothing special
00228   ~MSColumns();
00229 
00230   // Read-write access to required subtables
00231   // <group>
00232   MSAntennaColumns& antenna() {return antenna_p;}
00233   MSDataDescColumns& dataDescription() {return dataDesc_p;}
00234   MSFeedColumns& feed() {return feed_p;}
00235   MSFieldColumns& field() {return field_p;}
00236   MSFlagCmdColumns& flagCmd() {return flagCmd_p;}
00237   MSHistoryColumns& history() {return history_p;}
00238   MSObservationColumns& observation() {return observation_p;}
00239   MSPointingColumns& pointing() {return pointing_p;}
00240   MSPolarizationColumns& polarization() {return polarization_p;}
00241   MSProcessorColumns& processor() {return processor_p;}
00242   MSSpWindowColumns& spectralWindow() {return spectralWindow_p;}
00243   MSStateColumns& state() {return state_p;}
00244   // </group>
00245 
00246   // Read-write access to optional subtables
00247   // <group>
00248   MSDopplerColumns& doppler() {return doppler_p;}
00249   MSFreqOffsetColumns& freqOffset() {return freqOffset_p;}
00250   MSSourceColumns& source() {return source_p;}
00251   MSSysCalColumns& sysCal() {return sysCal_p;}
00252   MSWeatherColumns& weather() {return weather_p;}
00253   // </group>
00254 
00255   // Read-only access to required subtables
00256   // <group>
00257   const ROMSAntennaColumns& antenna() const {return antenna_p;}
00258   const ROMSDataDescColumns& dataDescription() const {return dataDesc_p;}
00259   const ROMSFeedColumns& feed() const {return feed_p;}
00260   const ROMSFieldColumns& field() const {return field_p;}
00261   const ROMSFlagCmdColumns& flagCmd() const {return flagCmd_p;}
00262   const ROMSHistoryColumns& history() const {return history_p;}
00263   const ROMSObservationColumns& observation() const {return observation_p;}
00264   const ROMSPointingColumns& pointing() const {return pointing_p;}
00265   const ROMSPolarizationColumns& polarization() const {
00266     return polarization_p;}
00267   const ROMSProcessorColumns& processor() const {return processor_p;}
00268   const ROMSSourceColumns& source() const {return source_p;}
00269   const ROMSSpWindowColumns& spectralWindow() const {
00270     return spectralWindow_p;}
00271   const ROMSStateColumns& state() const {return state_p;}
00272   // </group>
00273 
00274   // Read-only access to optional subtables
00275   // <group>
00276   const ROMSDopplerColumns& doppler() const {return doppler_p;}
00277   const ROMSFreqOffsetColumns& freqOffset() const {return freqOffset_p;}
00278   const ROMSSysCalColumns& sysCal() const {return sysCal_p;}
00279   const ROMSWeatherColumns& weather() const {return weather_p;}
00280   // </group>
00281 
00282   // set the EPOCH reference type in all EPOCH columns in the MS. Note that
00283   // only a single EPOCH reference is allowed in the MS. This 
00284   // <note role=tip>
00285   // In principle this function can only be used if the table is empty,
00286   // otherwise already written values may thereafter have an incorrect
00287   // reference, offset, or unit.  However, it is possible that part of the
00288   // table gets written before these values are known.  In that case the
00289   // reference, offset, or units can be set by using a False
00290   // <src>tableMustBeEmpty</src> argument.
00291   // </note>
00292   void setEpochRef(MEpoch::Types ref, Bool tableMustBeEmpty=True);
00293 
00294   // set the DIRECTION reference type for FIELD, POINTING and SOURCE tables
00295   // (except for antenna frame directions). 
00296   void setDirectionRef(MDirection::Types ref);
00297 
00298 private:
00299   // Access to subtables
00300   MSAntennaColumns antenna_p;
00301   MSDataDescColumns dataDesc_p;
00302   MSDopplerColumns doppler_p; //optional
00303   MSFeedColumns feed_p;
00304   MSFieldColumns field_p;
00305   MSFlagCmdColumns flagCmd_p;
00306   MSFreqOffsetColumns freqOffset_p; //optional
00307   MSHistoryColumns history_p;
00308   MSObservationColumns observation_p;
00309   MSPointingColumns pointing_p;
00310   MSPolarizationColumns polarization_p;
00311   MSProcessorColumns processor_p;
00312   MSSourceColumns source_p; // optional
00313   MSSpWindowColumns spectralWindow_p;
00314   MSStateColumns state_p;
00315   MSSysCalColumns sysCal_p; //optional
00316   MSWeatherColumns weather_p; //optional
00317 };
00318 
00319 //# Declare extern templates for often used types.
00320 #ifdef AIPS_CXX11
00321   extern template class ArrayMeasColumn<MDirection>;
00322   extern template class ScalarMeasColumn<MPosition>;
00323   extern template class ScalarMeasColumn<MEpoch>;
00324   extern template class ArrayQuantColumn<Double>;
00325   extern template class ScalarQuantColumn<Double>;
00326 #endif
00327 
00328 } //# NAMESPACE CASACORE - END
00329 
00330 #endif
00331 
00332 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 31 Aug 2016 for casa by  doxygen 1.6.1