casacore
Loading...
Searching...
No Matches
FrequencyEngine.h
Go to the documentation of this file.
1//# FrequencyEngine.h: Engine for TaQL UDF Frequency conversions
2//# Copyright (C) 2016
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_FREQUENCYENGINE_H
27#define MEAS_FREQUENCYENGINE_H
28
29//# Includes
30#include <casacore/casa/aips.h>
31#include<casacore/meas/MeasUDF/MeasEngine.h>
32#include <casacore/measures/Measures/MFrequency.h>
33#include <casacore/measures/Measures/MCFrequency.h>
34#include <casacore/measures/Measures/MeasConvert.h>
35
36namespace casacore {
37
38 //# Forward declarations
39 class DopplerEngine;
40 class RadialVelocityEngine;
41 class DirectionEngine;
42 class EpochEngine;
43 class PositionEngine;
44
45
46 // <summary>
47 // Engine for TaQL UDF Frequency conversions
48 // </summary>
49
50 // <use visibility=export>
51
52 // <reviewed reviewer="" date="" tests="tMeas.cc">
53 // </reviewed>
54
55 // <prerequisite>
56 //# Classes you should understand before using this one.
57 // <li> EngineBase
58 // </prerequisite>
59
60 // <synopsis>
61 // FrequencyEngine defines Engines (user defined functions) that can be used
62 // in TaQL to convert Measures for frequencies.
63 // In this way such derived values appear to be ordinary TaQL functions.
64 //
65 // Frequency conversions require a MeasFrame containing sky direction,
66 // epoch and position on earth.
67 // In TaQL these functions can be called like:
68 // <srcblock>
69 // meas.freq ('TOPO', 1GHz, 'LSRK', 'CasA', date(),
70 // [1e6m,1e6m,1e6m], 'WGS84')
71 // </srcblock>
72 // which converts the frequency from LSRK to TOPO.
73 // <ul>
74 // <li>
75 // <src>toref</src> is a single constant string.
76 // <li>
77 // <src>pos</src> can have various value types. A single numeric array is
78 // a series of RA,DEC in J2000. If given as a set, the last argument of the
79 // set can be the reference types of the values in the set. The values can
80 // be strings (indicating planetary objects) or value pairs giving lon,lat.
81 // The default reference type is J2000.
82 // </ul>
83 // All such functions return data with type double and unit Hz.
84 //
85 // Frequencies can be given like:
86 // [f1,f2,...], fromRef
87 // where fromRef is the reference type.
88 //
89 // A frequency can also be a table column which usually knows its type.
90 // It can also be an expression (e.g. FREQUENCY[0,]) which also knows the type.
91 // </synopsis>
92
93 // <motivation>
94 // It makes it possible to handle measures in TaQL.
95 // </motivation>
96
97 class FrequencyEngine: public MeasEngine<MFrequency>
98 {
99 public:
101
103
104 // Get the values.
106
107 // Get the frequencies.
109
110 // Handle the argument(s) giving the input frequencies and reference type.
111 // The frequency can be a column in a table.
112 void handleFrequency (std::vector<TENShPtr>& args,
113 uInt& argnr);
114
115 // Set the MeasConvert object.
117
118 // Set the possible doppler engine.
119 // It can be done only once.
121
122 // Set the possible radial velocity engine.
123 // It can be done only once.
125
126 // Set the possible direction engine.
127 // It can be done only once.
129
130 // Set the possible epoch engine.
131 // It can be done only once.
133
134 // Set the possible position engine.
135 // It can be done only once.
137
138 private:
139 virtual void handleValues (TableExprNode& operand,
140 const TableExprId& id,
141 Array<MFrequency>& frequencies);
142
143 //# Data members.
144 MeasFrame itsFrame; //# frame used by converter
145 MeasFrame itsRVFrame; //# frame used for radial velocities
152 };
153
154} //end namespace
155
156#endif
void setPositionEngine(PositionEngine &engine)
Set the possible position engine.
void setDirectionEngine(DirectionEngine &engine)
Set the possible direction engine.
void setConverter(MFrequency::Types toType)
Set the MeasConvert object.
virtual void handleValues(TableExprNode &operand, const TableExprId &id, Array< MFrequency > &frequencies)
Let a derive class handle the values.
Array< MFrequency > getFrequencies(const TableExprId &id)
Get the frequencies.
void handleFrequency(std::vector< TENShPtr > &args, uInt &argnr)
Handle the argument(s) giving the input frequencies and reference type.
DirectionEngine * itsDirectionEngine
MFrequency::Convert itsConverter
void setDopplerEngine(DopplerEngine &engine)
Set the possible doppler engine.
RadialVelocityEngine * itsRadVelEngine
Array< Double > getArrayDouble(const TableExprId &id, int type)
Get the values.
void setRadVelEngine(RadialVelocityEngine &engine)
Set the possible radial velocity engine.
PositionEngine * itsPositionEngine
DopplerEngine * itsDopplerEngine
void setEpochEngine(EpochEngine &engine)
Set the possible epoch engine.
Types
Types of known MFrequencies Warning: The order defines the order in the translation matrix FromTo in...
Definition MFrequency.h:173
this file contains all the compiler specific defines
Definition mainpage.dox:28
unsigned int uInt
Definition aipstype.h:49