This list of all available MeqTree node classes is a small Reference Manual on its own, perhaps in combination with the ./NodeBehaviour. The main MeqTree functions may be gleaned from the node categories below, each of which has a terse summary of essential information. In addition, there are numerous links to pages with more detailed information per category and per node, and also to demonstration scripts.
Leaf nodes (no children)
In order to satisfy a Request, these nodes either use their internal information, or interface an external data source like a table or an image. See MeqLeaf for more detail.
Node |
nc |
Description |
Example Tree |
0 |
a [possibly solvable] parameter |
||
MeqConstant |
0 |
all domain cells have the same constant value |
|
0 |
random noise per domain cell (lower bound, upper bound) |
||
0 |
gaussian noise per domain cell (stddev, mean) |
||
MeqTime |
0 |
cell values are their domain time values (s) |
|
MeqFreq |
0 |
cell values are their domain freq values (Hz) |
|
MeqGrid |
0 |
generalisation: e.g. Meq.Grid(axis='time') is equivalent to Meq.Time() |
|
0 |
read data, e.g. uv-data from a MS, via the VisTable interface |
||
MeqFITSReader |
1 |
Read a FITS Image, see MeqImage |
|
MeqFITSImage |
1 |
Read in a (I,Q,U,V) source-model, see MeqImage |
|
MeqFITSSpigot |
1 |
Similar to MeqFITSImage, see MeqImage |
NB: The various interface nodes with FITS images (see MeqImage) are still somewhat special.
Unary math operations (one child).
The operation is performed on each cell. An illegal operation (e.g. sqrt(-1)) produces a NaN (Not A Number) for that cell, which is then carried all the way downstream (i.e. towards the root of the tree). It does NOT produce a FAIL. See also RefMan/UnaryMathNodes.
Node |
nc |
Description |
Example Tree |
MeqAbs |
1 |
abs(z) |
|
MeqAcos |
1 |
acos(z), abs(z)<1 |
|
MeqArg |
1 |
arg(z), the phase of the complex z |
|
MeqAsin |
1 |
asin(z), abs(z)<1 |
|
MeqAtan |
1 |
atan(z) |
|
MeqCeil |
1 |
ceil(z), the nearest integer |
|
MeqConj |
1 |
conj(z), the complex conjugate |
|
MeqCos |
1 |
cos(z), z in rad |
|
MeqCosh |
1 |
cosh(z) |
|
MeqExp |
1 |
exp(z) |
|
MeqFabs |
1 |
abs(z) |
|
MeqFloor |
1 |
floor(z), nearest integer |
|
MeqImag |
1 |
imag(z), imaginary part |
|
MeqInvert |
1 |
1/z |
|
MeqLog |
1 |
elog(z) |
|
MeqNegate |
1 |
-z |
|
MeqNorm |
1 |
same as abs(z) |
|
MeqPow2 |
1 |
z^2 |
|
MeqPow3 |
1 |
z^3 |
|
MeqPow4 |
1 |
z^4 |
|
MeqPow5 |
1 |
z^5 |
|
MeqPow6 |
1 |
z^6 |
|
MeqPow7 |
1 |
z^7 |
|
MeqPow8 |
1 |
z^8 |
|
MeqReal |
1 |
real(z), real part |
|
MeqSin |
1 |
sin(z), z in rad |
|
MeqSinh |
1 |
sinh(z) |
|
MeqSqr |
1 |
sqr(z), same as MeqPow2 |
|
MeqSqrt |
1 |
sqrt(z), square root (z>0) |
|
MeqTan |
1 |
tan(z), z in rad |
|
MeqTanh |
1 |
tanh(z) |
binary math operations (two children)
The operation is performed cell-by-cell. If the first child has a Result with multiple vellsets, there are two possibilities: If the second child is a scalar, its single vellset is applied to all the vellsets of the first. Otherwise, the Result of the second child must have the same number of vellsets as the first, and the operation is performed between corresponding vellsets. The final Result has the same shape (number of vellsets) as the first child.
Node |
nc |
Description |
Example Tree |
MeqSubtract |
2 |
c0 - c1 |
|
MeqDivide |
2 |
c0 / c1 |
|
MeqPow |
2 |
c0 ^ c1 |
|
MeqFMod |
2 |
c0 % c1 |
|
MeqToComplex |
2 |
complex(real imag) |
|
MeqPolar |
2 |
express a complex number in polar coordinates (amplitude, phase) |
math operations on one or more children
The operation is performed cell-by-cell. If the number of children is two, the same rules apply as for binary operations (see above). If the number of children is greater than two, the Results of all children must have the same shape (number of vellsets).
Node |
nc |
Description |
Example Tree |
MeqAdd |
1+ |
c0+c1+c2+.. |
|
MeqMultiply |
1+ |
c0*c1*c2*... |
|
MeqNElements |
1+ |
Gives the number of 'cells'(!) in the domain. Not quite safe with flags. |
|
MeqWMean |
1+ |
same as MeqWSum, but divided by (w[0]+w[1]+w[2]+...) |
|
MeqWSum |
1+ |
w[0]*c0 + w[1]*c1 + w[2]*c2 + ... (w is vector of doubles) |
tensor math
As explained above, a Result may have multiple vellsets, and an optional shape. Most nodes can handle such "tensor" Results, within the rules outlined above. Some nodes are specialized for operations on Results with a specific shape, e.g. 2x2 matrices. The introduction of tensor Results has greatly simplified the trees, and speeded up operation.
Node |
nc |
Description |
Example Tree |
MeqComposer |
1+ |
compose a tensor from children (with optional shape, e.g. dims=[2,2]) |
|
MeqSelector |
1 |
select one or more tensor element(s), index=1, or index=[2,1] |
|
MeqPaster |
2 |
paste tensor elements |
|
4 |
create a 2x2 matrix (same as MeqComposer with 4 children and dims=[2,2]) |
||
MeqTranspose |
1 |
matrix transpose |
|
MeqConjTranspose |
1 |
matrix conjugate transpose |
|
MeqMatrixMultiply |
1+ |
matrix multiplication |
|
MeqMatrixInvert22 |
1 |
2x2 matrix inversion |
reduction nodes (combine cells along specified axis/axes)
By default, these nodes reduce an entire vellset to a single scalar (e.g. by summing them). However, if one or more reduction_axes are specified, the reduction is only along these axes (e.g. reduction_axes=['time'] reduces only the time-axis to length 1. With a tensor, the operation is performed over all its vellsets.
Node |
nc |
Description |
Example Tree |
MeqSum |
1+ |
sums vellset cells |
|
MeqProduct |
1+ |
multiplies vellset cells |
|
MeqStdDev |
1 |
the standard deviation of vellset cells |
|
MeqRms |
1 |
same as MeqStdDev (obsolete?) |
|
MeqMean |
1+ |
The mean of vellset cells |
|
MeqMax |
1+ |
The max of vellset cells |
|
MeqMin |
1+ |
The min of vellset cells |
regridding nodes (interpolation between cells)
Node |
nc |
Description |
Example Tree |
1 |
changes the resolution of the REQUEST (e.g. num_cells=[2,3]) |
||
1 |
resamples the Result of its children |
||
2 |
implement implicit (compound) functions |
FFT
Node |
nc |
Description |
Example Tree |
MeqUVBrick |
. |
... |
|
MeqUVInterpol |
. |
... |
|
MeqVisPhaseShift |
. |
... |
coordinate operations
These are based on the AIPS++ Measures, written by Wim Brouw.
Node |
nc |
Description |
Example Tree |
2+ |
calculate Azimuth and Elevation from RA and DEC |
||
MeqLST |
3 |
calculate Local Sidereal Time from Earth position xyz=tensor, or observatory='VLA' |
|
2 |
transforms coordinates |
||
MeqLMN |
. |
Calculate L, M, N from RA and DEC |
|
2 |
calculate RA, DEC from L and M |
||
0 |
Give RA,Dec of standard objects like SUN,MOON |
||
2 |
calculate Parallactic Angle from RA and DEC |
||
MeqRADec |
2 |
Calculates the RA,Dec given Az, El coordinates |
|
MeqUVW |
. |
... |
request generation
Node |
nc |
Description |
Example Tree |
1 |
make requests and write data |
||
1+ |
parent of all MeqSink nodes |
flow control
Node |
nc |
Description |
Example Tree |
MeqReqMux |
1+ |
... |
|
1+ |
sends a sequence of requests |
solving for MeqParm coeff
At this moment, only one solving strategy is supported: Iterative (Levenberg-Marquardt) least-squares minimization.
Node |
nc |
Description |
Example Tree |
MeqCondeq |
2 |
child of MeqSolver, produces one condition equation per cell |
|
1+ |
solves for (the coeff of) a subset of MeqParm nodes |
flagging
The user must supply a subtree that takes a Result with data, and produces a Result with values around zero. This subtree is the child of a ZeroFlagger node, which will then set a flag for all cells whose value is greater than zero. The MergeFlags node can be used to transfer these flags to the main data stream, i.e. the Result that contains the data.
Node |
nc |
Description |
Example Tree |
MeqZeroFlagger |
1 |
Generates cell flags according to its child Result values |
|
MeqMergeFlags |
1+ |
Merge the cell flags of its children |
visualisation
Node |
nc |
Description |
Example Tree |
MeqDataCollect |
1+ |
visualise groups of nodes together |
|
MeqDataConcat |
1+ |
concatenates multiple datacollect nodes |
|
1 |
collects history into a list |
||
inspector |
1+ |
visualises a result with multiple (tensor) vellsets |
miscellaneous
Node |
nc |
Description |
Example Tree |
1 |
strip the perturbed values from the Vellset(s) |
||
1 |
make a copy of a node, with a new name |
user-defined behaviour
n |
uses c/c++ function to operate on its children |
|
n |
interprets function string to operate on children |
|
n |
uses a named python script to operate on its children |
