MSSourceColumns.h

Go to the documentation of this file.
00001 //# MSSourceColumns.h: provides easy access to MSSource 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_MSSOURCECOLUMNS_H
00029 #define MS_MSSOURCECOLUMNS_H
00030 
00031 #include <casa/aips.h>
00032 #include <measures/Measures/MDirection.h>
00033 #include <measures/Measures/MEpoch.h>
00034 #include <measures/Measures/MFrequency.h>
00035 #include <measures/Measures/MPosition.h>
00036 #include <measures/Measures/MRadialVelocity.h>
00037 #include <measures/TableMeasures/ArrayMeasColumn.h>
00038 #include <measures/TableMeasures/ArrayQuantColumn.h>
00039 #include <measures/TableMeasures/ScalarMeasColumn.h>
00040 #include <measures/TableMeasures/ScalarQuantColumn.h>
00041 #include <tables/Tables/ArrayColumn.h>
00042 #include <tables/Tables/ScalarColumn.h>
00043 #include <tables/Tables/TableRecord.h>
00044 #include <casa/BasicSL/String.h>
00045 
00046 namespace casa { //# NAMESPACE CASA - BEGIN
00047 
00048 class MSSource;
00049 
00050 // <summary>
00051 // A class to provide easy read-only access to MSSource columns
00052 // </summary>
00053 
00054 // <use visibility=export>
00055 
00056 // <reviewed reviewer="Bob Garwood" date="1997/02/01" tests="" demos="">
00057 // </reviewed>
00058 
00059 // <prerequisite>
00060 //   <li> MSSource
00061 //   <li> ArrayColumn
00062 //   <li> ScalarColumn
00063 // </prerequisite>
00064 //
00065 // <etymology>
00066 // ROMSSourceColumns stands for Read-Only MeasurementSet Source Table columns.
00067 // </etymology>
00068 //
00069 // <synopsis>
00070 // This class provides read-only access to the columns in the MSSource Table.
00071 // It does the declaration of all the Scalar and ArrayColumns with the
00072 // correct types, so the application programmer doesn't have to
00073 // worry about getting those right. There is an access function
00074 // for every predefined column. Access to non-predefined columns will still
00075 // have to be done with explicit declarations.
00076 // See <linkto class=ROMSColumns> ROMSColumns</linkto> for an example.
00077 // </synopsis>
00078 //
00079 // <motivation>
00080 // See <linkto class=MSColumns> MSColumns</linkto> for the motivation.
00081 // </motivation>
00082 
00083 class ROMSSourceColumns
00084 {
00085 public:
00086   // Construct from the supplied Table
00087   ROMSSourceColumns(const MSSource& msSource);
00088 
00089   // The destructor does nothing special
00090   ~ROMSSourceColumns();
00091 
00092   // Is this object defined? (MSSource table is optional)
00093   Bool isNull() const {return isNull_p;}
00094 
00095   // Access to required columns
00096   // <group>
00097   const ROScalarColumn<Int>& calibrationGroup() const {
00098     return calibrationGroup_p;}
00099   const ROScalarColumn<String>& code() const {return code_p;}
00100   const ROArrayColumn<Double>& direction() const {return direction_p;}
00101   const ROArrayQuantColumn<Double>& directionQuant() const {
00102     return directionQuant_p;}
00103   const ROScalarMeasColumn<MDirection>& directionMeas() const {
00104     return directionMeas_p;}
00105   const ROScalarColumn<Double>& interval() const {return interval_p;}
00106   const ROScalarQuantColumn<Double>& intervalQuant() const {
00107     return intervalQuant_p;}
00108   const ROScalarColumn<String>& name() const {return name_p;}
00109   const ROScalarColumn<Int>& numLines() const {return numLines_p;}
00110   const ROArrayColumn<Double>& properMotion() const {return properMotion_p;}
00111   const ROArrayQuantColumn<Double>& properMotionQuant() const {
00112     return properMotionQuant_p;}
00113   const ROScalarColumn<Int>& sourceId() const {return sourceId_p;}
00114   const ROScalarColumn<Int>& spectralWindowId() const {
00115     return spectralWindowId_p;}
00116   const ROScalarColumn<Double>& time() const {return time_p;}
00117   const ROScalarQuantColumn<Double>& timeQuant() const {return timeQuant_p;}
00118   const ROScalarMeasColumn<MEpoch>& timeMeas() const {return timeMeas_p;}
00119   // </group>
00120 
00121   // Access to optional columns
00122   // <group>
00123   const ROArrayColumn<Double>& position() const {return position_p;}
00124   const ROArrayQuantColumn<Double>& positionQuant() const {
00125     return positionQuant_p;}
00126   const ROScalarMeasColumn<MPosition>& positionMeas() const {
00127     return positionMeas_p;}
00128   const ROScalarColumn<Int>& pulsarId() const {return pulsarId_p;}
00129   const ROArrayColumn<Double>& restFrequency() const {return restFrequency_p;}
00130   const ROArrayQuantColumn<Double>& restFrequencyQuant() const {
00131     return restFrequencyQuant_p;}
00132   const ROArrayMeasColumn<MFrequency>& restFrequencyMeas() const {
00133     return restFrequencyMeas_p;}
00134   const ROScalarColumn<TableRecord>& sourceModel() const {
00135     return sourceModel_p;}
00136   const ROArrayColumn<Double>& sysvel() const {return sysvel_p;}
00137   const ROArrayQuantColumn<Double>& sysvelQuant() const {return sysvelQuant_p;}
00138   const ROArrayMeasColumn<MRadialVelocity>& sysvelMeas() const {
00139     return sysvelMeas_p;}
00140   const ROArrayColumn<String>& transition() const {return transition_p;}
00141   // </group>
00142 
00143   // Convenience function that returns the number of rows in any of the
00144   // columns. Returns zero if the object is null.
00145   uInt nrow() const {return isNull() ? 0 : calibrationGroup_p.nrow();}
00146 
00147 protected:
00148   //# default constructor creates a object that is not usable. Use the attach
00149   //# function correct this.
00150   ROMSSourceColumns();
00151 
00152   //# attach this object to the supplied table.
00153   void attach(const MSSource& msSource);
00154 
00155 private:
00156   //# Make the assignment operator and the copy constructor private to prevent
00157   //# any compiler generated one from being used.
00158   ROMSSourceColumns(const ROMSSourceColumns&);
00159   ROMSSourceColumns& operator=(const ROMSSourceColumns&);
00160 
00161   //# Check if any optional columns exist and if so attach them.
00162   void attachOptionalCols(const MSSource& msSource);
00163   
00164   //# Is the object not attached to a Table.
00165   Bool isNull_p;
00166 
00167   //# required columns
00168   ROScalarColumn<Int> calibrationGroup_p;
00169   ROScalarColumn<String> code_p;
00170   ROArrayColumn<Double> direction_p;
00171   ROScalarColumn<Double> interval_p;
00172   ROScalarColumn<String> name_p;
00173   ROScalarColumn<Int> numLines_p;
00174   ROArrayColumn<Double> properMotion_p;
00175   ROScalarColumn<Int> sourceId_p;
00176   ROScalarColumn<Int> spectralWindowId_p;
00177   ROScalarColumn<Double> time_p;
00178   //# optional columns
00179   ROArrayColumn<Double> position_p;
00180   ROScalarColumn<Int> pulsarId_p;
00181   ROArrayColumn<Double> restFrequency_p;
00182   ROScalarColumn<TableRecord> sourceModel_p;
00183   ROArrayColumn<Double> sysvel_p;
00184   ROArrayColumn<String> transition_p;
00185 
00186   //# Access to Measure columns
00187   ROScalarMeasColumn<MDirection> directionMeas_p;
00188   ROScalarMeasColumn<MEpoch> timeMeas_p;
00189   //# Optional Measure columns
00190   ROScalarMeasColumn<MPosition> positionMeas_p;
00191   ROArrayMeasColumn<MFrequency> restFrequencyMeas_p;
00192   ROArrayMeasColumn<MRadialVelocity> sysvelMeas_p;
00193 
00194   //# Access to Quantum columns
00195   ROArrayQuantColumn<Double> directionQuant_p;
00196   ROScalarQuantColumn<Double> intervalQuant_p;
00197   ROArrayQuantColumn<Double> properMotionQuant_p;
00198   ROScalarQuantColumn<Double> timeQuant_p;
00199   //# Optional Quantum columns
00200   ROArrayQuantColumn<Double> positionQuant_p;
00201   ROArrayQuantColumn<Double> restFrequencyQuant_p;
00202   ROArrayQuantColumn<Double> sysvelQuant_p;
00203 };
00204 
00205 // <summary>
00206 // A class to provide easy read-write access to MSSource columns
00207 // </summary>
00208 
00209 // <use visibility=export>
00210 
00211 // <reviewed reviewer="Bob Garwood" date="1997/02/01" tests="" demos="">
00212 // </reviewed>
00213 
00214 // <prerequisite>
00215 //   <li> MSSource
00216 //   <li> ArrayColumn
00217 //   <li> ScalarColumn
00218 // </prerequisite>
00219 //
00220 // <etymology>
00221 // MSSourceColumns stands for MeasurementSet Source Table columns.
00222 // </etymology>
00223 //
00224 // <synopsis>
00225 // This class provides access to the columns in the MSSource Table,
00226 // it does the declaration of all the Scalar and ArrayColumns with the
00227 // correct types, so the application programmer doesn't have to
00228 // worry about getting those right. There is an access function
00229 // for every predefined column. Access to non-predefined columns will still
00230 // have to be done with explicit declarations.
00231 // See <linkto class=MSColumns> MSColumns</linkto> for an example.
00232 // </synopsis>
00233 //
00234 // <motivation>
00235 // See <linkto class=MSColumns> MSColumns</linkto> for the motivation.
00236 // </motivation>
00237 
00238 class MSSourceColumns: public ROMSSourceColumns
00239 {
00240 public:
00241   // Construct from the supplied Table
00242   MSSourceColumns(MSSource& msSource);
00243 
00244   // The destructor does nothing special
00245   ~MSSourceColumns();
00246 
00247   // Read-write access to required columns
00248   // <group>
00249   ScalarColumn<Int>& calibrationGroup() {return calibrationGroup_p;}
00250   ScalarColumn<String>& code() {return code_p;}
00251   ArrayColumn<Double>& direction() {return direction_p;}
00252   ArrayQuantColumn<Double>& directionQuant() {return directionQuant_p;}
00253   ScalarMeasColumn<MDirection>& directionMeas() {return directionMeas_p;}
00254   ScalarColumn<Double>& interval() {return interval_p;}
00255   ScalarQuantColumn<Double>& intervalQuant() {return intervalQuant_p;}
00256   ScalarColumn<String>& name() {return name_p;}
00257   ScalarColumn<Int>& numLines() {return numLines_p;}
00258   ArrayColumn<Double>& properMotion() {return properMotion_p;}
00259   ArrayQuantColumn<Double>& properMotionQuant() {return properMotionQuant_p;}
00260   ScalarColumn<Int>& sourceId() {return sourceId_p;}
00261   ScalarColumn<Int>& spectralWindowId() {return spectralWindowId_p;}
00262   ScalarColumn<Double>& time() {return time_p;}
00263   ScalarQuantColumn<Double>& timeQuant() {return timeQuant_p;}
00264   ScalarMeasColumn<MEpoch>& timeMeas() {return timeMeas_p;}
00265   // </group>
00266 
00267   // Read-write access to optional columns
00268   // <group>
00269   ArrayColumn<Double>& position() {return position_p;}
00270   ArrayQuantColumn<Double>& positionQuant() {return positionQuant_p;}
00271   ScalarMeasColumn<MPosition>& positionMeas() {return positionMeas_p;}
00272   ScalarColumn<Int>& pulsarId() {return pulsarId_p;}
00273   ArrayColumn<Double>& restFrequency() {return restFrequency_p;}
00274   ArrayQuantColumn<Double>& restFrequencyQuant() {return restFrequencyQuant_p;}
00275   ArrayMeasColumn<MFrequency>& restFrequencyMeas() {
00276     return restFrequencyMeas_p;}
00277   ScalarColumn<TableRecord>& sourceModel() {return sourceModel_p;}
00278   ArrayColumn<Double>& sysvel() {return sysvel_p;}
00279   ArrayQuantColumn<Double>& sysvelQuant() {return sysvelQuant_p;}
00280   ArrayMeasColumn<MRadialVelocity>& sysvelMeas() {return sysvelMeas_p;}
00281   ArrayColumn<String>& transition() {return transition_p;}
00282   // </group>
00283 
00284   // Read-only access to required columns
00285   // <group>
00286   const ROScalarColumn<Int>& calibrationGroup() const {
00287     return ROMSSourceColumns::calibrationGroup();}
00288   const ROScalarColumn<String>& code() const {
00289     return ROMSSourceColumns::code();}
00290   const ROArrayColumn<Double>& direction() const {
00291     return ROMSSourceColumns::direction();}
00292   const ROArrayQuantColumn<Double>& directionQuant() const {
00293     return ROMSSourceColumns::directionQuant();}
00294   const ROScalarMeasColumn<MDirection>& directionMeas() const {
00295     return ROMSSourceColumns::directionMeas();}
00296   const ROScalarColumn<Double>& interval() const {
00297     return ROMSSourceColumns::interval();}
00298   const ROScalarQuantColumn<Double>& intervalQuant() const {
00299     return ROMSSourceColumns::intervalQuant();}
00300   const ROScalarColumn<String>& name() const {
00301     return ROMSSourceColumns::name();}
00302   const ROScalarColumn<Int>& numLines() const {
00303     return ROMSSourceColumns::numLines();}
00304   const ROArrayColumn<Double>& properMotion() const {
00305     return ROMSSourceColumns::properMotion();}
00306   const ROArrayQuantColumn<Double>& properMotionQuant() const {
00307     return ROMSSourceColumns::properMotionQuant();}
00308   const ROScalarColumn<Int>& sourceId() const {
00309     return ROMSSourceColumns::sourceId();}
00310   const ROScalarColumn<Int>& spectralWindowId() const {
00311     return ROMSSourceColumns::spectralWindowId();}
00312   const ROScalarColumn<Double>& time() const {
00313     return ROMSSourceColumns::time();}
00314   const ROScalarQuantColumn<Double>& timeQuant() const {
00315     return ROMSSourceColumns::timeQuant();}
00316   const ROScalarMeasColumn<MEpoch>& timeMeas() const {
00317     return ROMSSourceColumns::timeMeas();}
00318   // </group>
00319 
00320   // Read-only access to optional columns
00321   // <group>
00322   const ROArrayColumn<Double>& position() const {
00323     return ROMSSourceColumns::position();}
00324   const ROArrayQuantColumn<Double>& positionQuant() const {
00325     return ROMSSourceColumns::positionQuant();}
00326   const ROScalarMeasColumn<MPosition>& positionMeas() const {
00327     return ROMSSourceColumns::positionMeas();}
00328   const ROScalarColumn<Int>& pulsarId() const {
00329     return ROMSSourceColumns::pulsarId();}
00330   const ROArrayColumn<Double>& restFrequency() const {
00331     return ROMSSourceColumns::restFrequency();}
00332   const ROArrayQuantColumn<Double>& restFrequencyQuant() const {
00333     return ROMSSourceColumns::restFrequencyQuant();}
00334   const ROArrayMeasColumn<MFrequency>& restFrequencyMeas() const {
00335     return ROMSSourceColumns::restFrequencyMeas();}
00336   const ROScalarColumn<TableRecord>& sourceModel() const {
00337     return ROMSSourceColumns::sourceModel();}
00338   const ROArrayColumn<Double>& sysvel() const {
00339     return ROMSSourceColumns::sysvel();}
00340   const ROArrayQuantColumn<Double>& sysvelQuant() const {
00341     return ROMSSourceColumns::sysvelQuant();}
00342   const ROArrayMeasColumn<MRadialVelocity>& sysvelMeas() const {
00343     return ROMSSourceColumns::sysvelMeas();}
00344   const ROArrayColumn<String>& transition() const {
00345     return ROMSSourceColumns::transition();}
00346   // </group>
00347 
00348   // set the epoch type for the TIME column.
00349   // <note role=tip>
00350   // In principle this function can only be used if the table is empty,
00351   // otherwise already written values may thereafter have an incorrect
00352   // reference, offset, or unit.  However, it is possible that part of the
00353   // table gets written before these values are known.  In that case the
00354   // reference, offset, or units can be set by using a False
00355   // <src>tableMustBeEmpty</src> argument.
00356   // </note>
00357   void setEpochRef(MEpoch::Types ref, Bool tableMustBeEmpty=True);
00358 
00359   // set the direction type for the DIRECTION column. This can only be done
00360   // when the table has no rows. Trying to do so at other times will throw an
00361   // exception.
00362   void setDirectionRef(MDirection::Types ref);
00363 
00364   // set the position type for the POSITION column. This can only be done when
00365   // the table has no rows. Trying to do so at other times will throw an
00366   // exception.
00367   void setPositionRef(MPosition::Types ref);
00368 
00369   // set the frequency type for the REST_FREQUENCY column. Does nothing if this
00370   // column is not defined. This can only be done when the table has no
00371   // rows. Trying to do so at other times will throw an exception.
00372   void setFrequencyRef(MFrequency::Types ref);
00373 
00374   // set the radial velocity type for the SYSVEL column. Does nothing if this
00375   // column is not defined. This can only be done when the table has no
00376   // rows. Trying to do so at other times will throw an exception.
00377   void setRadialVelocityRef(MRadialVelocity::Types ref);
00378 
00379 protected:
00380   //# default constructor creates a object that is not usable. Use the attach
00381   //# function correct this.
00382   MSSourceColumns();
00383 
00384   //# attach this object to the supplied table.
00385   void attach(MSSource& msSource);
00386 
00387 private:
00388   //# Make the assignment operator and the copy constructor private to prevent
00389   //# any compiler generated one from being used.
00390   MSSourceColumns(const MSSourceColumns&);
00391   MSSourceColumns& operator=(const MSSourceColumns&);
00392 
00393   //# Check if any optional columns exist and if so attach them.
00394   void attachOptionalCols(MSSource& msSource);
00395   
00396   //# required columns
00397   ScalarColumn<Int> calibrationGroup_p;
00398   ScalarColumn<String> code_p;
00399   ArrayColumn<Double> direction_p;
00400   ScalarColumn<Double> interval_p;
00401   ScalarColumn<String> name_p;
00402   ScalarColumn<Int> numLines_p;
00403   ArrayColumn<Double> properMotion_p;
00404   ScalarColumn<Int> sourceId_p;
00405   ScalarColumn<Int> spectralWindowId_p;
00406   ScalarColumn<Double> time_p;
00407   //# optional columns
00408   ArrayColumn<Double> position_p;
00409   ScalarColumn<Int> pulsarId_p;
00410   ArrayColumn<Double> restFrequency_p;
00411   ScalarColumn<TableRecord> sourceModel_p;
00412   ArrayColumn<Double> sysvel_p;
00413   ArrayColumn<String> transition_p;
00414 
00415   //# Access to Measure columns
00416   ScalarMeasColumn<MDirection> directionMeas_p;
00417   ScalarMeasColumn<MEpoch> timeMeas_p;
00418   //# Optional Measure columns
00419   ScalarMeasColumn<MPosition> positionMeas_p;
00420   ArrayMeasColumn<MFrequency> restFrequencyMeas_p;
00421   ArrayMeasColumn<MRadialVelocity> sysvelMeas_p;
00422 
00423   //# Access to Quantum columns
00424   ArrayQuantColumn<Double> directionQuant_p;
00425   ScalarQuantColumn<Double> intervalQuant_p;
00426   ArrayQuantColumn<Double> properMotionQuant_p;
00427   ScalarQuantColumn<Double> timeQuant_p;
00428   //# Optional Quantum columns
00429   ArrayQuantColumn<Double> positionQuant_p;
00430   ArrayQuantColumn<Double> restFrequencyQuant_p;
00431   ArrayQuantColumn<Double> sysvelQuant_p;
00432 };
00433 
00434 } //# NAMESPACE CASA - END
00435 
00436 #endif

Generated on Mon Sep 1 22:35:11 2008 for NRAOCASA by  doxygen 1.5.1