casacore
Loading...
Searching...
No Matches
DerivedMSCal.h
Go to the documentation of this file.
1//# DerivedMSCal.h: Virtual column engine to return derived MS values
2//# Copyright (C) 2010
3//# Associated Universities, Inc. Washington DC, USA.
4//#
5//# This library is free software; you can redistribute it and/or modify it
6//# under the terms of the GNU Library General Public License as published by
7//# the Free Software Foundation; either version 2 of the License, or (at your
8//# option) any later version.
9//#
10//# This library is distributed in the hope that it will be useful, but WITHOUT
11//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13//# License for more details.
14//#
15//# You should have received a copy of the GNU Library General Public License
16//# along with this library; if not, write to the Free Software Foundation,
17//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18//#
19//# Correspondence concerning AIPS++ should be addressed as follows:
20//# Internet email: aips2-request@nrao.edu.
21//# Postal address: AIPS++ Project Office
22//# National Radio Astronomy Observatory
23//# 520 Edgemont Road
24//# Charlottesville, VA 22903-2475 USA
25//#
26//# $Id$
27
28#ifndef DERIVEDMSCAL_DERIVEDMSCAL_H
29#define DERIVEDMSCAL_DERIVEDMSCAL_H
30
31//# Includes
32#include <casacore/casa/aips.h>
33#include <casacore/derivedmscal/DerivedMC/MSCalEngine.h>
34#include <casacore/tables/DataMan/VirtColEng.h>
35
36namespace casacore {
37
38// <summary>
39// Virtual column engine to return derived MS values
40// </summary>
41
42// <use visibility=export>
43
44// <reviewed reviewer="" date="" tests="tDerivedMSCal.cc">
45// </reviewed>
46
47// <prerequisite>
48//# Classes you should understand before using this one.
49// <li> The Table Data Managers concept as described in module file
50// <linkto module="Tables:Data Managers">Tables.h</linkto>
51// <li> MeasurementSet
52// </prerequisite>
53
54// <synopsis>
55// DerivedMSCal makes it possible to have virtual columns for the derived
56// MeasurementSet values hourangle, parallactic angle, azimuth/elevation,
57// and local sidereal time. In this way such derived values appear to be
58// ordinary columns with the exception that no values can be put into them.
59//
60// The following columns can be defined:
61// <ul>
62// <li> HA is the hourangle of the pointing from the array center (observatory position).
63// <li> HA1 is the hourangle of the pointing from ANTENNA1.
64// <li> HA2 is the hourangle of the pointing from ANTENNA2.
65// <li> HADEC is the hourangle/DEC of the pointing from the array center (observatory position).
66// <li> HADEC1 is the hourangle/DEC of the pointing from ANTENNA1.
67// <li> HADEC2 is the hourangle/DEC of the pointing from ANTENNA2.
68// <li> LAST is the local sidereal time of the pointing from the array center.
69// <li> LAST1 is the local sidereal time of the pointing from ANTENNA1.
70// <li> LAST2 is the local sidereal time of the pointing from ANTENNA2.
71// <li> PA1 is the parallactic angle of the pointing from ANTENNA1.
72// <li> PA2 is the parallactic angle of the pointing from ANTENNA2.
73// <li> AZEL is the azimuth/elevation of the pointing from the array center.
74// <li> AZEL1 is the azimuth/elevation of the pointing from ANTENNA1.
75// <li> AZEL2 is the azimuth/elevation of the pointing from ANTENNA2.
76// <li> ITRF is the pointing in (time-dependent) ITRF coordinates.
77// <li> UVW_J2000 is the UVW coordinates in J2000 (in meters).
78// </ul>
79// All columns have data type double and unit radian (except UVW). The HADEC,
80// AZEL, ITRF and UVW columns are array columnns while the others are
81// scalar columns.
82//
83// This engine is meant for a MeasurementSet, but can be used for any table
84// containing an ANTENNA and FIELD subtable and the relevant columns in the
85// main table (ANTENNA1 and/or ANTENNA2, FIELD_ID, and TIME).
86// <br>In principle the array center is the Observatory position, which is
87// taken from the Measures Observatory table using the telescope name found
88// in the OBSERVATION subtable. However, if the subtable is not defined or
89// empty or if the telescope name is unknown, the position of the first antenna
90// is used as the array position.
91//
92// The engine can also be used for a CASA Calibration Table. It understands
93// how it references the MeasurementSets. Because calibration tables contain
94// no ANTENNA2 columns, columns XX2 are the same as XX1.
95// </synopsis>
96
97// <motivation>
98// It makes it possible to use generic table software (like querying,
99// plotting, tablebrowser) on these values.
100// </motivation>
101
102// <example>
103// The following example shows how to add such columns to an MS and use
104// them thereafter.
105// <srcblock>
106// // Open the table for update (to be able to add the columns).
107// Table tab ("tDerivedMSCal_tmp.tab", Table::Update);
108// // Define the columns and add them using DerivedMSCal.
109// TableDesc td;
110// td.addColumn (ScalarColumnDesc<double>("HA1"));
111// td.addColumn (ScalarColumnDesc<double>("HA2"));
112// td.addColumn (ScalarColumnDesc<double>("PA1"));
113// td.addColumn (ScalarColumnDesc<double>("PA2"));
114// DerivedMSCal dataMan;
115// tab.addColumn (td, dataMan);
116// // Print values of all rows.
117// ScalarColumn<double> ha1(tab, "HA1");
118// ScalarColumn<double> ha2(tab, "HA2");
119// ScalarColumn<double> pa1(tab, "PA1");
120// ScalarColumn<double> pa2(tab, "PA2");
121// for (rownr_t row=0; row<tab.nrow(); ++row) {
122// cout << ha1(row)<<' '<<ha2(row)<<' '<<pa1(row)<<' '<<pa2(row)<<endl;
123// }
124// </srcblock>
125// </example>
126
127// <todo asof="$DATE:$">
128// <li> Take care of the feeds and their offsets.
129// <li> Have a conversion engine per field/antenna/feed?
130// </todo>
131
132
134{
135public:
136 // Create the data manager.
138
139 // Create a Lofar storage manager with the given name.
140 // The specifications are part of the record (as created by dataManagerSpec).
141 explicit DerivedMSCal (const Record& spec);
142
144
145 // Clone this object.
146 virtual DataManager* clone() const;
147
148 // Prepare the object. It sets the Table object in the engine.
149 virtual void prepare();
150
151 // Get the type name of the data manager (i.e. DerivedMSCal).
152 virtual String dataManagerType() const;
153
154 // Record a record containing data manager specifications.
155 virtual Record dataManagerSpec() const;
156
157 // Columns can be added.
158 virtual Bool canAddColumn() const;
159
160 // Columns can be removed.
161 virtual Bool canRemoveColumn() const;
162
163 // Make the object from the type name string.
164 // This function gets registered in the DataManager "constructor" map.
165 // The caller has to delete the object.
166 // The dataManName is not used.
167 static DataManager* makeObject (const String& dataManName,
168 const Record& spec);
169
170 // Register the class name and the static makeObject "constructor".
171 // This will make the engine known to the table system.
172 static void registerClass();
173
174private:
175 // Copy constructor cannot be used.
177
178 // Assignment cannot be used.
180
181 // Do the final addition of a column.
182 // It won't do anything.
184
185 // Remove a column from the data file.
186 // It won't do anything.
188
189 // Create a column in the storage manager on behalf of a table column.
190 // The caller has to delete the newly created object.
191 // <group>
192 // Create a scalar column.
194 int aDataType,
195 const String& aDataTypeID);
196 // Create an indirect array column.
198 int aDataType,
199 const String& aDataTypeID);
200 // </group>
201
202 //# Declare member variables.
204 vector<DataManagerColumn*> itsColumns;
205};
206
207
208} //# end namespace
209
210#endif
Abstract base class for a data manager.
static DataManager * makeObject(const String &dataManName, const Record &spec)
Make the object from the type name string.
virtual Bool canRemoveColumn() const
Columns can be removed.
DerivedMSCal(const Record &spec)
Create a Lofar storage manager with the given name.
DerivedMSCal & operator=(const DerivedMSCal &that)
Assignment cannot be used.
static void registerClass()
Register the class name and the static makeObject "constructor".
virtual Record dataManagerSpec() const
Record a record containing data manager specifications.
virtual Bool canAddColumn() const
Columns can be added.
virtual void addColumn(DataManagerColumn *)
Do the final addition of a column.
virtual DataManagerColumn * makeScalarColumn(const String &aName, int aDataType, const String &aDataTypeID)
Create a column in the storage manager on behalf of a table column.
virtual void removeColumn(DataManagerColumn *)
Remove a column from the data file.
vector< DataManagerColumn * > itsColumns
virtual DataManager * clone() const
Clone this object.
DerivedMSCal()
Create the data manager.
virtual String dataManagerType() const
Get the type name of the data manager (i.e.
virtual void prepare()
Prepare the object.
DerivedMSCal(const DerivedMSCal &that)
Copy constructor cannot be used.
virtual DataManagerColumn * makeIndArrColumn(const String &aName, int aDataType, const String &aDataTypeID)
Create an indirect array column.
String: the storage and methods of handling collections of characters.
Definition String.h:225
this file contains all the compiler specific defines
Definition mainpage.dox:28
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:42