casacore
Loading...
Searching...
No Matches
BaseEngine.h
Go to the documentation of this file.
1// # BaseEngine.h: Base class for the TaQL UDF conversion engines
2// # Copyright (C) 2018
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: casa-feedback@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#ifndef MEAS_BASEENGINE_H
27#define MEAS_BASEENGINE_H
28
29// # Includes
30#include <casacore/casa/aips.h>
31#include <casacore/tables/TaQL/ExprNode.h>
32#include <casacore/measures/TableMeasures/ScalarMeasColumn.h>
33#include <casacore/measures/TableMeasures/ArrayMeasColumn.h>
34#include <casacore/casa/Arrays/Array.h>
35
36namespace casacore {
37
38// <summary>
39// Abstract base class for the TaQL UDF conversion engines
40// </summary>
41
42// <use visibility=export>
43
44// <reviewed reviewer="" date="" tests="tMeas.cc">
45// </reviewed>
46
47// <prerequisite>
48// # Classes you should understand before using this one.
49// <li> EngineBase
50// </prerequisite>
51
52// <synopsis>
53// DopplerEngine defines Engines (user defined functions) that can be used
54// in TaQL to convert Measures for dopplers.
55// In this way such derived values appear to be ordinary TaQL functions.
56//
57// Doppler conversions require a MeasFrame containing sky direction,
58// epoch and position on earth.
59// In TaQL these functions can be called like:
60// <srcblock>
61// meas.rv ('TOPO', 1 'm/s', 'LSRK', 'CasA', date(),
62// [1e6m,1e6m,1e6m], 'WGS84')
63// </srcblock>
64// which converts the dopplers from LSRK to TOPO.
65// <ul>
66// <li>
67// <src>toref</src> is a single constant string.
68// <li>
69// <src>pos</src> can have various value types. A single numeric array is
70// a series of RA,DEC in J2000. If given as a set, the last argument of the
71// set can be the reference types of the values in the set. The values can
72// be strings (indicating planetary objects) or value pairs giving lon,lat.
73// The default reference type is J2000.
74// </ul>
75// All such functions return data with type double and unit Hz.
76//
77// Dopplers can be given like:
78// [v1,v2,...], fromRef
79// where fromRef is the reference type.
80//
81// A doppler can also be a table column which usually knows its type.
82// It can also be an expression (e.g. DOPPLER[0,]) which also knows the type.
83// </synopsis>
84
85// <motivation>
86// It makes it possible to handle measures in TaQL.
87// </motivation>
88
90 public:
92
93 virtual ~BaseEngine();
94
95 // Adapt the output shape and dimensionality for possible constant values.
96 // It also sets the itsIsConst flag.
97 // If the given shape is not empty the shape is set to it and an extra axis
98 // is added if nvalues>0 (for e.g. LONLAT).
99 // If nvalues=1, the first axis is removed from the shape.
100 // Note that the shape might have been set to the column's shape if a
101 // measure column is used.
102 void adaptForConstant(const IPosition& shapeConstant, uInt nvalues = 0);
103
104 // Extend the shape (if not empty) with the engine's shape.
105 // If the engine is not const, itsIsConst is cleared.
106 void extendBase(const BaseEngine&, Bool removeFirstAxis = False);
107
108 // Get the output shape.
109 const IPosition& shape() const { return itsShape; }
110
111 // Get the output dimensionality.
112 Int ndim() const { return itsNDim; }
113
114 // Get the unit of the function's result.
115 const Unit& unit() const { return itsOutUnit; }
116
117 // Get the unit of the expression.
118 const Unit& inUnit() const { return itsInUnit; }
119
120 // Tell if the expression is constant.
121 Bool isConstant() const { return itsIsConst; }
122
123 protected:
124 // Let a derived class derive its attributes.
125 // The default implementation does nothing.
126 virtual void deriveAttr(const Unit& unit, Int nval);
127
128 // Let a derived class set its value type.
129 // By default is does nothing.
130 virtual void setValueType(Int valueType);
131
132 // Let a derived class strip part of the reference type.
133 // The default implementation returns the full type string.
135
136 // # Data members.
139 Int itsNDim; // <0 unknown shape, 0 scalar, >0 known shape
143};
144
145} // namespace casacore
146
147#endif
Bool isConstant() const
Tell if the expression is constant.
Definition BaseEngine.h:121
virtual void deriveAttr(const Unit &unit, Int nval)
Let a derived class derive its attributes.
void adaptForConstant(const IPosition &shapeConstant, uInt nvalues=0)
Adapt the output shape and dimensionality for possible constant values.
const Unit & inUnit() const
Get the unit of the expression.
Definition BaseEngine.h:118
const Unit & unit() const
Get the unit of the function's result.
Definition BaseEngine.h:115
virtual void setValueType(Int valueType)
Let a derived class set its value type.
void extendBase(const BaseEngine &, Bool removeFirstAxis=False)
Extend the shape (if not empty) with the engine's shape.
Int ndim() const
Get the output dimensionality.
Definition BaseEngine.h:112
const IPosition & shape() const
Get the output shape.
Definition BaseEngine.h:109
TableExprNode itsExprNode
Definition BaseEngine.h:142
virtual String stripMeasType(const String &type)
Let a derived class strip part of the reference type.
String: the storage and methods of handling collections of characters.
Definition String.h:355
For temporary backward namespace compatibility, use casa as alias for casacore.
Definition mainpage.dox:28
const Bool False
Definition aipstype.h:42
unsigned int uInt
Definition aipstype.h:49
int Int
Definition aipstype.h:48
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40