Loading...
Searching...
No Matches
MSSelectableTable.h
Go to the documentation of this file.
// -*- C++ -*-
//# MSSelectableTable.h: The generic interface for tables that can be used with MSSelection
//# Copyright (C) 1996,1997,1998,1999,2001
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library is distributed in the hope that it will be useful, but WITHOUT
//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
//# License for more details.
//#
//# You should have received a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be addressed as follows:
//# Internet email: casa-feedback@nrao.edu.
//# Postal address: AIPS++ Project Office
//# National Radio Astronomy Observatory
//# 520 Edgemont Road
//# Charlottesville, VA 22903-2475 USA
#ifndef MS_MSSELECTABLETABLE_H
#define MS_MSSELECTABLETABLE_H
#include <casacore/casa/aips.h>
#include <casacore/casa/BasicSL/String.h>
#include <casacore/casa/Arrays/Vector.h>
#include <casacore/casa/Arrays/Matrix.h>
#include <casacore/casa/Arrays/Cube.h>
#include <casacore/tables/TaQL/ExprNode.h>
#include <casacore/ms/MeasurementSets/MeasurementSet.h>
#include <casacore/ms/MeasurementSets/MSMainEnums.h>
#include <casacore/ms/MSSel/MSSelectionError.h>
#include <casacore/ms/MSSel/MSSelectableMainColumn.h>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
// <summary>
//
// MSSelectableTable: An interface class used by MSSelection module to
// access the sub-tables and main-table columns of MS-like tables.
//
// </summary>
// <use visibility=export>
// <reviewed reviewer="" date="" tests="" demos="">
// <prerequisite>
// </prerequisite>
//
// <etymology>
// From "msselection" and "table".
// </etymology>
//
//<synopsis>
//
// This is a pure virtual base-class to provide a table-type agnostic
// interface to the <linkto
// module="MeasurementSets:description">MSSelection</linkto> module to
// access sub-tables and main-table columns of MS-like tables.
//
// </synopsis>
//
// <example>
// <srcblock>
// </srcblock>
// </example>
//
// <motivation>
//
// To allow use of the <linkto
// module="MeasurementSets:description">MSSelection</linkto> module
// for selection on any table that follows the general structure of the
// MS database. Via this class, minor differences in the database
// layout can be hidden from the MSSelection module. This also keeps
// MeasurementSet module from depending on other MS-like database
// implemention which may use the MSSelection module. Such usage will
// need to implement a specialization of <linkto
// module="MeasurementSets:description">MSSelectableTable</linkto> and
// use it to instantiate the <linkto
// module="MeasurementSets:description">MSSelection</linkto> object.
//
// </motivation>
//
// <todo asof="19/03/13">
// </todo>
class MSSelectableTable
{
public:
enum MSSDataType {BASELINE_BASED=0, PURE_ANTENNA_BASED, REF_ANTENNA_BASED};
MSSelectableTable() {}
MSSelectableTable(const Table& table) {table_p = &table;}
virtual ~MSSelectableTable() {}
virtual void setTable(const Table& table) {table_p = &table;}
const Table* table() {return table_p;}
TableExprNode col(const String& colName) {return table()->col(colName);}
virtual Bool isMS() = 0;
virtual MSSDataType dataType() = 0;
virtual const MSAntenna& antenna() = 0;
virtual const MSField& field() = 0;
virtual const MSSpectralWindow& spectralWindow() = 0;
virtual const MSDataDescription& dataDescription() = 0;
virtual const MSObservation& observation() = 0;
virtual String columnName(MSMainEnums::PredefinedColumns nameEnum) = 0;
virtual const MeasurementSet* asMS() = 0;
virtual MSSelectableMainColumn* mainColumns() = 0;
protected:
const Table *table_p;
};
// <summary>
//
// MSInterface: A specialization of MSSelectableTable for accessing
// MS.
//
// </summary>
// <use visibility=export>
// <reviewed reviewer="" date="" tests="" demos="">
// <prerequisite>
// </prerequisite>
//
// <etymology>
//
// From "ms" and "interface".
//
// </etymology>
//
//<synopsis>
//
// A class that can be passed around as MSSelectableTable, with most of
// the methods overloaded to work with the underlaying MS.
//
//</synopsis>
//
// <example>
// <srcblock>
//
// //
// // Fill in the expression in the various strings that are passed for
// // parsing to the MSSelection object later.
// //
// String fieldStr,timeStr,spwStr,baselineStr,
// uvdistStr,taqlStr,scanStr,arrayStr, polnStr,stateObsModeStr,
// observationStr;
// baselineStr="1&2";
// timeStr="*+0:10:0";
// fieldStr="CygA*";
// //
// // Instantiate the MS and the MSInterface objects.
// //
// MS ms(MSName),selectedMS(ms);
// MSInterface msInterface(ms);
// //
// // Setup the MSSelection thingi
// //
// MSSelection msSelection;
//
// msSelection.reset(msInterface,MSSelection::PARSE_NOW,
// timeStr,baselineStr,fieldStr,spwStr,
// uvdistStr,taqlStr,polnStr,scanStr,arrayStr,
// stateObsModeStr,observationStr);
// if (msSelection.getSelectedMS(selectedMS))
// cerr << "Got the selected MS!" << endl;
// else
// cerr << "The set of expressions resulted into null-selection";
// </srcblock>
// </example>
//
// <motivation>
//
// To generalize the implementation of the MSSelection parsers.
//
// </motivation>
//
// <todo asof="19/03/13">
// </todo>
class MSInterface: public MSSelectableTable
{
public:
MSInterface():msMainCols_p(NULL) {}
MSInterface(const Table& table);
virtual ~MSInterface() {if (msMainCols_p) delete msMainCols_p;}
virtual const MSAntenna& antenna() {return asMS()->antenna();}
virtual const MSField& field() {return asMS()->field();}
virtual const MSSpectralWindow& spectralWindow() {return asMS()->spectralWindow();}
virtual const MSDataDescription& dataDescription() {return asMS()->dataDescription();}
virtual const MSObservation& observation() {return asMS()->observation();}
virtual String columnName(MSMainEnums::PredefinedColumns nameEnum) {return MS::columnName(nameEnum);}
virtual Bool isMS() {return True;}
virtual MSSDataType dataType() {return MSSelectableTable::BASELINE_BASED;}
virtual const MeasurementSet *asMS(){return static_cast<const MeasurementSet *>(table());}
virtual MSSelectableMainColumn* mainColumns()
{msMainCols_p = new MSMainColInterface(*table_p); return msMainCols_p;}
private:
MSMainColInterface *msMainCols_p;
};
} //# NAMESPACE CASACORE - END
#endif
casacore::MSAntenna
Definition MSAntenna.h:78
casacore::MSDataDescription
Definition MSDataDescription.h:78
casacore::MSField
Definition MSField.h:77
casacore::MSInterface::dataDescription
virtual const MSDataDescription & dataDescription()
Definition MSSelectableTable.h:202
casacore::MSInterface::isMS
virtual Bool isMS()
Definition MSSelectableTable.h:205
casacore::MSInterface::~MSInterface
virtual ~MSInterface()
Definition MSSelectableTable.h:198
casacore::MSInterface::msMainCols_p
MSMainColInterface * msMainCols_p
Definition MSSelectableTable.h:212
casacore::MSInterface::antenna
virtual const MSAntenna & antenna()
Definition MSSelectableTable.h:199
casacore::MSInterface::MSInterface
MSInterface(const Table &table)
casacore::MSInterface::observation
virtual const MSObservation & observation()
Definition MSSelectableTable.h:203
casacore::MSInterface::asMS
virtual const MeasurementSet * asMS()
Definition MSSelectableTable.h:208
casacore::MSInterface::dataType
virtual MSSDataType dataType()
Definition MSSelectableTable.h:206
casacore::MSInterface::mainColumns
virtual MSSelectableMainColumn * mainColumns()
Definition MSSelectableTable.h:209
casacore::MSInterface::MSInterface
MSInterface()
Definition MSSelectableTable.h:196
casacore::MSInterface::field
virtual const MSField & field()
Definition MSSelectableTable.h:200
casacore::MSInterface::spectralWindow
virtual const MSSpectralWindow & spectralWindow()
Definition MSSelectableTable.h:201
casacore::MSInterface::columnName
virtual String columnName(MSMainEnums::PredefinedColumns nameEnum)
Definition MSSelectableTable.h:204
casacore::MSMainColInterface
Definition MSSelectableMainColumn.h:63
casacore::MSMainEnums::PredefinedColumns
PredefinedColumns
The Main table colums with predefined meaning.
Definition MSMainEnums.h:62
casacore::MSObservation
Definition MSObservation.h:77
casacore::MSSelectableMainColumn
Definition MSSelectableMainColumn.h:44
casacore::MSSelectableTable::field
virtual const MSField & field()=0
casacore::MSSelectableTable::asMS
virtual const MeasurementSet * asMS()=0
casacore::MSSelectableTable::col
TableExprNode col(const String &colName)
Definition MSSelectableTable.h:104
casacore::MSSelectableTable::table
const Table * table()
Definition MSSelectableTable.h:103
casacore::MSSelectableTable::MSSelectableTable
MSSelectableTable()
Definition MSSelectableTable.h:98
casacore::MSSelectableTable::table_p
const Table * table_p
Definition MSSelectableTable.h:120
casacore::MSSelectableTable::observation
virtual const MSObservation & observation()=0
casacore::MSSelectableTable::isMS
virtual Bool isMS()=0
casacore::MSSelectableTable::spectralWindow
virtual const MSSpectralWindow & spectralWindow()=0
casacore::MSSelectableTable::~MSSelectableTable
virtual ~MSSelectableTable()
Definition MSSelectableTable.h:100
casacore::MSSelectableTable::MSSelectableTable
MSSelectableTable(const Table &table)
Definition MSSelectableTable.h:99
casacore::MSSelectableTable::setTable
virtual void setTable(const Table &table)
Definition MSSelectableTable.h:102
casacore::MSSelectableTable::antenna
virtual const MSAntenna & antenna()=0
casacore::MSSelectableTable::MSSDataType
MSSDataType
Definition MSSelectableTable.h:96
casacore::MSSelectableTable::PURE_ANTENNA_BASED
@ PURE_ANTENNA_BASED
Definition MSSelectableTable.h:96
casacore::MSSelectableTable::REF_ANTENNA_BASED
@ REF_ANTENNA_BASED
Definition MSSelectableTable.h:96
casacore::MSSelectableTable::BASELINE_BASED
@ BASELINE_BASED
Definition MSSelectableTable.h:96
casacore::MSSelectableTable::columnName
virtual String columnName(MSMainEnums::PredefinedColumns nameEnum)=0
casacore::MSSelectableTable::dataType
virtual MSSDataType dataType()=0
casacore::MSSelectableTable::mainColumns
virtual MSSelectableMainColumn * mainColumns()=0
casacore::MSSelectableTable::dataDescription
virtual const MSDataDescription & dataDescription()=0
casacore::MSSpectralWindow
Definition MSSpectralWindow.h:77
casacore::MSTable< MSMainEnums >::columnName
static const String & columnName(ColEnum which)
casacore::MeasurementSet
Definition MeasurementSet.h:278
casacore::MeasurementSet::antenna
MSAntenna & antenna()
Access functions for the subtables, using the MS-like interface for each.
Definition MeasurementSet.h:374
casacore::MeasurementSet::observation
MSObservation & observation()
Definition MeasurementSet.h:382
casacore::MeasurementSet::spectralWindow
MSSpectralWindow & spectralWindow()
Definition MeasurementSet.h:387
casacore::MeasurementSet::field
MSField & field()
Definition MeasurementSet.h:378
casacore::MeasurementSet::dataDescription
MSDataDescription & dataDescription()
Definition MeasurementSet.h:375
casacore::String
String: the storage and methods of handling collections of characters.
Definition String.h:223
casacore::TableExprNode
Definition ExprNode.h:154
casacore::Table
Definition Table.h:157
casacore::Table::col
TableExprNode col(const String &columnName) const
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::Bool
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40
casacore::True
const Bool True
Definition aipstype.h:41