casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
MSSelectionKeywords.h
Go to the documentation of this file.
00001 //# MSSelectionKeywords.h: selection keywords for the MS
00002 //# Copyright (C) 1997,1998,1999,2000,2001
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 //#
00027 //# $Id: MSSelectionKeywords.h 20838 2009-12-01 10:10:55Z gervandiepen $
00028 
00029 #ifndef MS_MSSELECTIONKEYWORDS_H
00030 #define MS_MSSELECTIONKEYWORDS_H
00031 
00032 #include <casa/aips.h>
00033 
00034 namespace casa { //# NAMESPACE CASA - BEGIN
00035 
00036 template <class K, class V> class SimpleOrderedMap;
00037 template <class T> class Block;
00038 // forward declare the class so we can typedef it
00039 class MSSelectionKeywords;
00040 class String;
00041 
00042 // Define a shorthand notation for this class, so enums can be specified
00043 // easily.
00044 typedef MSSelectionKeywords MSS;
00045 
00046 // <summary>
00047 // MSSelectionKeywords specifies selection keywords for the MeasurementSet
00048 // </summary>
00049 
00050 // <use visibility=export>
00051 
00052 // <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos="">
00053 // </reviewed>
00054 
00055 // <prerequisite>
00056 //   <li> MeasurementSet
00057 //   <li> MSSelector
00058 // </prerequisite>
00059 //
00060 // <etymology>
00061 // MSSelectionKeywords is a class that defines selection keywords
00062 // </etymology>
00063 //
00064 // <synopsis>
00065 // This class is used to specify selections on a MeasurementSet.
00066 // It is a purely static class that just defines a mapping from 
00067 // Strings to Enums, and provides these for use by classes like
00068 // MSSelector and MSRange
00069 //
00070 // <example> <srcblock>
00071 // </srcblock></example>
00072 // </synopsis>
00073 //
00074 // <motivation>
00075 // Selection keywords are needed for several classes, this class provides
00076 // them to all, avoiding duplication in each class.
00077 // </motivation>
00078 //
00079 // <thrown>
00080 //    <li>
00081 //    <li>
00082 // </thrown>
00083 //
00084 // <todo asof="yyyy/mm/dd">
00085 //   <li> add this feature
00086 // </todo>
00087 
00088 class MSSelectionKeywords
00089 {
00090 public:
00091   // The fields in the MS for which selection and range operations are
00092   // defined. Some of these directly correspond to columns in the table,
00093   // others are derived quantities or columns in subtables.
00094   enum Field { 
00095     // undefined field
00096     UNDEFINED=0, 
00097     // the range of visibility amplitude
00098     AMPLITUDE,
00099     // the range of corrected vis amplitude
00100     CORRECTED_AMPLITUDE,
00101     // the range of model vis amplitude
00102     MODEL_AMPLITUDE,
00103     // the amplitude of the ratio corrected data/model data
00104     RATIO_AMPLITUDE,
00105     // the residual vis amplitude (corrected-model)
00106     RESIDUAL_AMPLITUDE,
00107     // the observed residual vis amplitude (observed-model)
00108     OBS_RESIDUAL_AMPLITUDE,
00109     // the list of antenna1 id values
00110     ANTENNA1,
00111     // the list of antenna2 id values
00112     ANTENNA2,
00113     // the list of antenna names
00114     ANTENNAS,
00115     // the list of array id values
00116     ARRAY_ID,
00117     // description of the data axes
00118     AXIS_INFO,
00119     // the channel frequencies, a vector for each selected spectral window
00120     CHAN_FREQ,
00121     // the list of polarizations present, this gives the String values
00122     CORR_NAMES,
00123     // the list of polarizations present, this gives the Stokes enum values
00124     CORR_TYPES,
00125     // the complex data
00126     DATA,
00127     // the complex corrected data
00128     CORRECTED_DATA,
00129     //the complex model data
00130     MODEL_DATA,
00131     // the ratio corrected data/model data
00132     RATIO_DATA,
00133     // the residual data (corrected - model)
00134     RESIDUAL_DATA,
00135     // the observed residual data (observed - model)
00136     OBS_RESIDUAL_DATA,
00137     // the list of dataDescription id values
00138     DATA_DESC_ID,
00139     // the list of feed1 id values
00140     FEED1,
00141     // the list of feed2 id values
00142     FEED2,
00143     // the list of field_id values
00144     FIELD_ID,
00145     // the list of field names
00146     FIELDS,
00147     // the flags
00148     FLAG,
00149     // the row flags
00150     FLAG_ROW,
00151     // a summary of flags (flag count summed over rows)
00152     FLAG_SUM,
00153     // the float data (optional single dish column)
00154     FLOAT_DATA,
00155     // Hour angle
00156     HA,
00157     // the list of interferometers (= 1000*ant1+ant2) present
00158     IFR_NUMBER,
00159     // the (range of the) imaginary part of the visibilities
00160     IMAGINARY,
00161     // the (range of the) imaginary part of the corrected visibilities
00162     CORRECTED_IMAGINARY,
00163     // the (range of the) imaginary part of the model visibilities
00164     MODEL_IMAGINARY,
00165     // the imaginary part of the ratio corrected data/model data
00166     RATIO_IMAGINARY,
00167     // the (range of the) imaginary part of the residual visibilities
00168     RESIDUAL_IMAGINARY,
00169     // the (range of the) imaginary part of the observed residual visibilities
00170     OBS_RESIDUAL_IMAGINARY,
00171     // Local Apparent Sidereal Time
00172     LAST,
00173     // the number of correlation products (polarizations) for selected spectral window
00174     NUM_CORR,
00175     // the number of spectral channels for selected spectral window
00176     NUM_CHAN,
00177     // the (range of the) phase of the visibilities
00178     PHASE,
00179     // the (range of the) phase of the corrected visibilities
00180     CORRECTED_PHASE,
00181     // the (range of the) phase of the model visibilities
00182     MODEL_PHASE,
00183     // the phase of the ratio corrected data/model data
00184     RATIO_PHASE,
00185     // the (range of the) phase of the residual visibilities
00186     RESIDUAL_PHASE,
00187     // the (range of the) phase of the observed residual visibilities
00188     OBS_RESIDUAL_PHASE,
00189     // the phase center direction for each field (matrix + epoch)
00190     PHASE_DIR,
00191     // the (range of the) real part of the visibilities
00192     REAL,
00193     // the (range of the) real part of the corrected visibilities
00194     CORRECTED_REAL,
00195     // the (range of the) real part of the model visibilities
00196     MODEL_REAL,
00197     // the real part of the ratio corrected data/model data
00198     RATIO_REAL,
00199     // the real part of the residual visibilities (corrected-model)
00200     RESIDUAL_REAL,
00201     // the real part of the observed residuals (observed-model)
00202     OBS_RESIDUAL_REAL,
00203     // the reference frequency for selected spectral window (or vector with all)
00204     REF_FREQUENCY,
00205     // the list of row numbers in the original MS
00206     ROWS,
00207     // the list of scan_number values
00208     SCAN_NUMBER,
00209     //# the list of spectral window id values
00210     //# SPECTRAL_WINDOW_ID,
00211     // the per spectrum sigmas
00212     SIGMA,
00213     // the range of times
00214     TIME,
00215     // the list of time values
00216     TIMES,
00217     // UT time (seconds of current day)
00218     UT,
00219     // the uvw coordinates
00220     UVW,
00221     // the (range of the) U coordinate (m)
00222 //#    Note:order of U, V and W is important, no intervening items allowed
00223 //#    without changing select() code.
00224     U,
00225     // the (range of the) V coordinate (m)
00226     V, 
00227     // the (range of the) W coordinate (m)
00228     W,
00229     // the (range of the) UV-distance (m)
00230     UVDIST,
00231     // the weights
00232     WEIGHT,
00233     // Number of keywords
00234     NUMBER_KEYWORDS
00235 };
00236 
00237 
00238   // convert a keyword string to the corresponding enum
00239   static Field field(const String& keyword);
00240 
00241   // convert an enum value to the corresponding keyword string
00242   static const String& keyword(Field field);
00243 
00244 protected:
00245   // This class is purely static, no instances are allowed.
00246   MSSelectionKeywords();
00247   MSSelectionKeywords(const MSSelectionKeywords& other);
00248   MSSelectionKeywords& operator=(const MSSelectionKeywords& other);
00249   
00250   // initialization function for the string to enum mapping
00251   static void initMap(SimpleOrderedMap<String,Int>*& fieldMap,
00252                       Block<Int>*& reverseMap);
00253 };
00254 
00255 
00256 } //# NAMESPACE CASA - END
00257 
00258 #endif