casa  5.7.0-16
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Friends | List of all members
casacore::LatticeExprNode Class Reference

Bridging class to allow C++ expressions involving lattices. More...

#include <LatticeExprNode.h>

Public Member Functions

 LatticeExprNode ()
 Default constructor. More...
 
 LatticeExprNode (Int64 constant)
 Unary constant expression constructors. More...
 
 LatticeExprNode (Int constant)
 
 LatticeExprNode (uInt constant)
 
 LatticeExprNode (Long constant)
 
 LatticeExprNode (Float constant)
 
 LatticeExprNode (Double constant)
 
 LatticeExprNode (const Complex &constant)
 
 LatticeExprNode (const DComplex &constant)
 
 LatticeExprNode (Bool constant)
 
 LatticeExprNode (const IPosition &)
 Constructor from an IPosition (containing indices or axes). More...
 
 LatticeExprNode (const Lattice< Float > &lattice)
 Lattice expression (gets Lattice pixels) constructors. More...
 
 LatticeExprNode (const Lattice< Double > &lattice)
 
 LatticeExprNode (const Lattice< Complex > &lattice)
 
 LatticeExprNode (const Lattice< DComplex > &lattice)
 
 LatticeExprNode (const Lattice< Bool > &lattice)
 
 LatticeExprNode (const MaskedLattice< Float > &lattice)
 
 LatticeExprNode (const MaskedLattice< Double > &lattice)
 
 LatticeExprNode (const MaskedLattice< Complex > &lattice)
 
 LatticeExprNode (const MaskedLattice< DComplex > &lattice)
 
 LatticeExprNode (const MaskedLattice< Bool > &lattice)
 
 LatticeExprNode (const LCRegion &region)
 Create a lattice expression from a region. More...
 
 LatticeExprNode (const Slicer &slicer)
 
 LatticeExprNode (const LattRegionHolder &region)
 
LatticeExprNode operator[] (const LatticeExprNode &cond) const
 Masking operator using a condition. More...
 
 LatticeExprNode (const LatticeExprNode &other)
 Copy constructor (reference semantics) More...
 
virtual ~LatticeExprNode ()
 Destructor, does nothing. More...
 
LatticeExprNodeoperator= (const LatticeExprNode &other)
 Assignment (reference semantics) More...
 
const IPositiongetIPosition () const
 Get the IPosition. More...
 
CountedPtr< LELInterface< Float > > makeFloat () const
 Convert the expression to another data type. More...
 
CountedPtr< LELInterface
< Double > > 
makeDouble () const
 
CountedPtr< LELInterface
< Complex > > 
makeComplex () const
 
CountedPtr< LELInterface
< DComplex > > 
makeDComplex () const
 
CountedPtr< LELInterface< Bool > > makeBool () const
 
void eval (LELArray< Float > &result, const Slicer &section) const
 Evaluate the expression. More...
 
void eval (LELArray< Double > &result, const Slicer &section) const
 
void eval (LELArray< Complex > &result, const Slicer &section) const
 
void eval (LELArray< DComplex > &result, const Slicer &section) const
 
void eval (LELArray< Bool > &result, const Slicer &section) const
 
void evalRef (LELArrayRef< Float > &result, const Slicer &section) const
 Evaluate the expression. More...
 
void evalRef (LELArrayRef< Double > &result, const Slicer &section) const
 
void evalRef (LELArrayRef< Complex > &result, const Slicer &section) const
 
void evalRef (LELArrayRef< DComplex > &result, const Slicer &section) const
 
void evalRef (LELArrayRef< Bool > &result, const Slicer &section) const
 
void eval (Float &result) const
 Evaluate the expression (in case it is a scalar). More...
 
void eval (Double &result) const
 
void eval (Complex &result) const
 
void eval (DComplex &result) const
 
void eval (Bool &result) const
 
Float getFloat () const
 
Double getDouble () const
 
Complex getComplex () const
 
DComplex getDComplex () const
 
Bool getBool () const
 
Array< FloatgetArrayFloat () const
 Evaluate the expression (in case it is a constant array). More...
 
Array< DoublegetArrayDouble () const
 
Array< Complex > getArrayComplex () const
 
Array< DComplex > getArrayDComplex () const
 
Array< BoolgetArrayBool () const
 
DataType dataType () const
 Get the data type of the expression. More...
 
Bool isRegion () const
 Is the expression node a region? More...
 
Bool isScalar () const
 Is the result of "eval" a scalar? More...
 
Bool isMasked () const
 Is the result of "eval" masked? More...
 
Bool isInvalidScalar () const
 Holds the node an invalid scalar? More...
 
const IPositionshape () const
 Return the shape of the Lattice including all degenerate axes (ie. More...
 
const LELAttributegetAttribute () const
 Get the attribute object of the expression. More...
 
Bool replaceScalarExpr ()
 Replace a scalar subexpression by its result. More...
 
 LatticeExprNode (const CountedPtr< LELInterface< Float > > &expr)
 Make the object from a Counted<LELInterface> pointer. More...
 
 LatticeExprNode (const CountedPtr< LELInterface< Double > > &expr)
 
 LatticeExprNode (const CountedPtr< LELInterface< Complex > > &expr)
 
 LatticeExprNode (const CountedPtr< LELInterface< DComplex > > &expr)
 
 LatticeExprNode (const CountedPtr< LELInterface< Bool > > &expr)
 
Bool lock (FileLocker::LockType, uInt nattempts)
 Handle locking of the LatticeExpr which is delegated to all of its parts. More...
 
void unlock ()
 
Bool hasLock (FileLocker::LockType) const
 
void resync ()
 

Static Public Member Functions

static DataType resultDataType (DataType left, DataType right)
 Determine the resulting data type from the given data types. More...
 
static LELAttribute checkArg (const Block< LatticeExprNode > &arg, const Block< Int > &argType, Bool expectArray, Bool matchAxes=True)
 Check the arguments of a function and return the resulting attribute object. More...
 

Private Member Functions

 LatticeExprNode (LELInterface< Float > *expr)
 Make the object from a LELInterface* pointer. More...
 
 LatticeExprNode (LELInterface< Double > *expr)
 
 LatticeExprNode (LELInterface< Complex > *expr)
 
 LatticeExprNode (LELInterface< DComplex > *expr)
 
 LatticeExprNode (LELInterface< Bool > *expr)
 
void doPrepare () const
 Do the preparation for the evaluation. More...
 

Static Private Member Functions

static Bool areRegions (const LatticeExprNode &left, const LatticeExprNode &right)
 Test if both operands represent a region. More...
 
static LatticeExprNode newNumUnary (LELUnaryEnums::Operation oper, const LatticeExprNode &expr)
 Create a new node for a numerical unary operation. More...
 
static LatticeExprNode newNumFunc1D (LELFunctionEnums::Function func, const LatticeExprNode &expr)
 Create a new node for a numerical function with 1 argument. More...
 
static LatticeExprNode newRealFunc1D (LELFunctionEnums::Function func, const LatticeExprNode &expr)
 Create a new node for a real numerical function with 1 argument. More...
 
static LatticeExprNode newComplexFunc1D (LELFunctionEnums::Function func, const LatticeExprNode &expr)
 Create a new node for a complex numerical function with 1 argument. More...
 
static LatticeExprNode newNumReal1D (LELFunctionEnums::Function func, const LatticeExprNode &expr)
 Create a new node for a numerical function with 1 argument that returns a real number. More...
 
static LatticeExprNode newNumFunc2D (LELFunctionEnums::Function func, const LatticeExprNode &left, const LatticeExprNode &right)
 Create a new node for a numerical function with 2 arguments. More...
 
static LatticeExprNode newNumBinary (LELBinaryEnums::Operation oper, const LatticeExprNode &left, const LatticeExprNode &right)
 Create a new node for a numerical binary operator. More...
 
static LatticeExprNode newLogBinary (LELBinaryEnums::Operation oper, const LatticeExprNode &left, const LatticeExprNode &right)
 Create a new node for a logical binary operator. More...
 
static LatticeExprNode newBinaryCmp (LELBinaryEnums::Operation oper, const LatticeExprNode &left, const LatticeExprNode &right)
 Create a new node for a comparison binary operator. More...
 
static Int makeEqualDim (LatticeExprNode &expr0, LatticeExprNode &expr1)
 Make (if needed and if possible) the expression nodes such that the dimensionalities are equal. More...
 

Private Attributes

Bool donePrepare_p
 Member variables. More...
 
DataType dtype_p
 
Bool isInvalid_p
 
IPosition iposition_p
 
const LELAttributepAttr_p
 
CountedPtr< LELInterface< Float > > pExprFloat_p
 
CountedPtr< LELInterface
< Double > > 
pExprDouble_p
 
CountedPtr< LELInterface
< Complex > > 
pExprComplex_p
 
CountedPtr< LELInterface
< DComplex > > 
pExprDComplex_p
 
CountedPtr< LELInterface< Bool > > pExprBool_p
 

Friends

LatticeExprNode operator+ (const LatticeExprNode &expr)
 All global functions need to be declared as friends. More...
 
LatticeExprNode operator- (const LatticeExprNode &expr)
 
LatticeExprNode operator! (const LatticeExprNode &expr)
 
LatticeExprNode operator+ (const LatticeExprNode &left, const LatticeExprNode &right)
 Numerical binary operators. More...
 
LatticeExprNode operator- (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode operator* (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode operator/ (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode operator% (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode operator^ (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode operator== (const LatticeExprNode &left, const LatticeExprNode &right)
 Relational binary operators. More...
 
LatticeExprNode operator> (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode operator>= (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode operator< (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode operator<= (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode operator!= (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode operator&& (const LatticeExprNode &left, const LatticeExprNode &right)
 Logical binary operators. More...
 
LatticeExprNode operator|| (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode sin (const LatticeExprNode &expr)
 Numerical 1-argument functions. More...
 
LatticeExprNode sinh (const LatticeExprNode &expr)
 
LatticeExprNode asin (const LatticeExprNode &expr)
 
LatticeExprNode cos (const LatticeExprNode &expr)
 
LatticeExprNode cosh (const LatticeExprNode &expr)
 
LatticeExprNode acos (const LatticeExprNode &expr)
 
LatticeExprNode tan (const LatticeExprNode &expr)
 
LatticeExprNode tanh (const LatticeExprNode &expr)
 
LatticeExprNode atan (const LatticeExprNode &expr)
 
LatticeExprNode exp (const LatticeExprNode &expr)
 
LatticeExprNode log (const LatticeExprNode &expr)
 
LatticeExprNode log10 (const LatticeExprNode &expr)
 
LatticeExprNode sqrt (const LatticeExprNode &expr)
 
LatticeExprNode sign (const LatticeExprNode &expr)
 
LatticeExprNode round (const LatticeExprNode &expr)
 
LatticeExprNode ceil (const LatticeExprNode &expr)
 
LatticeExprNode floor (const LatticeExprNode &expr)
 
LatticeExprNode conj (const LatticeExprNode &expr)
 
LatticeExprNode atan2 (const LatticeExprNode &left, const LatticeExprNode &right)
 Numerical 2-argument functions. More...
 
LatticeExprNode pow (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode fmod (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode min (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode max (const LatticeExprNode &left, const LatticeExprNode &right)
 
LatticeExprNode formComplex (const LatticeExprNode &left, const LatticeExprNode &right)
 Form a complex number from two real numbers. More...
 
LatticeExprNode abs (const LatticeExprNode &expr)
 Numerical 1-argument functions which result in a real number regardless of input expression type. More...
 
LatticeExprNode arg (const LatticeExprNode &expr)
 
LatticeExprNode real (const LatticeExprNode &expr)
 
LatticeExprNode imag (const LatticeExprNode &expr)
 
LatticeExprNode min (const LatticeExprNode &expr)
 1-argument functions operating on a numeric expression resulting in a scalar More...
 
LatticeExprNode max (const LatticeExprNode &expr)
 
LatticeExprNode sum (const LatticeExprNode &expr)
 
LatticeExprNode median (const LatticeExprNode &expr)
 
LatticeExprNode mean (const LatticeExprNode &expr)
 
LatticeExprNode variance (const LatticeExprNode &expr)
 
LatticeExprNode stddev (const LatticeExprNode &expr)
 
LatticeExprNode avdev (const LatticeExprNode &expr)
 
LatticeExprNode fractile (const LatticeExprNode &expr, const LatticeExprNode &fraction)
 Determine the value of the element at the part fraction from the beginning of the given lattice. More...
 
LatticeExprNode fractileRange (const LatticeExprNode &expr, const LatticeExprNode &fraction1, const LatticeExprNode &fraction2)
 Determine the value range of the elements at the part fraction1 and fraction2 from the beginning of the given lattice. More...
 
LatticeExprNode fractileRange (const LatticeExprNode &expr, const LatticeExprNode &fraction)
 
LatticeExprNode nelements (const LatticeExprNode &expr)
 1-argument function to get the number of elements in a lattice. More...
 
LatticeExprNode ndim (const LatticeExprNode &expr)
 1-argument function to get the dimensionality of a lattice. More...
 
LatticeExprNode length (const LatticeExprNode &expr, const LatticeExprNode &axis)
 2-argument function to get the length of an axis. More...
 
LatticeExprNode indexin (const LatticeExprNode &axis, const LatticeExprNode &indexFlags)
 2-argument function telling per pixel if its index on the given axis is contained in the 2nd argument. More...
 
LatticeExprNode rebin (const LatticeExprNode &expr, const LatticeExprNode &bin)
 2-argument function rebinning Lattice by given factors. More...
 
LatticeExprNode isNaN (const LatticeExprNode &expr)
 Test if a value is a NaN. More...
 
LatticeExprNode any (const LatticeExprNode &expr)
 Functions operating on a logical expression resulting in a scalar; Functions "any" (are any pixels "True") and "all" (are all pixels "True") result in a Bool; functions "ntrue" and "nfalse" result in a Double. More...
 
LatticeExprNode all (const LatticeExprNode &expr)
 
LatticeExprNode ntrue (const LatticeExprNode &expr)
 
LatticeExprNode nfalse (const LatticeExprNode &expr)
 
LatticeExprNode mask (const LatticeExprNode &expr)
 This function returns the mask of the given expression. More...
 
LatticeExprNode value (const LatticeExprNode &expr)
 This function returns the value of the expression without a mask. More...
 
LatticeExprNode amp (const LatticeExprNode &left, const LatticeExprNode &right)
 This function finds sqrt(left^2+right^2). More...
 
LatticeExprNode pa (const LatticeExprNode &left, const LatticeExprNode &right)
 This function finds 180/pi*atan2(left,right)/2. More...
 
LatticeExprNode spectralindex (const LatticeExprNode &left, const LatticeExprNode &right)
 This function finds the spectral index alpha = log(s1/s2) / log(f1/f2). More...
 
LatticeExprNode iif (const LatticeExprNode &condition, const LatticeExprNode &arg1, const LatticeExprNode &arg2)
 Function resembling the ternary ?: construct in C++. More...
 
LatticeExprNode replace (const LatticeExprNode &arg1, const LatticeExprNode &arg2)
 This function replaces every masked-off element in the first argument with the corresponding element from the second argument. More...
 
LatticeExprNode toFloat (const LatticeExprNode &expr)
 Functions to convert to the given data type. More...
 
LatticeExprNode toDouble (const LatticeExprNode &expr)
 
LatticeExprNode toComplex (const LatticeExprNode &expr)
 
LatticeExprNode toDComplex (const LatticeExprNode &expr)
 
LatticeExprNode toBool (const LatticeExprNode &expr)
 

Detailed Description

Bridging class to allow C++ expressions involving lattices.

Intended use:

Public interface

Review Status

Date Reviewed:
yyyy/mm/dd

Prerequisite

Etymology

The name is derived from the fact that this class provides an expression interface to the user which s/he may use to write C++ expressions involving Lattices. This class actually constructs the nodes of the expression tree, hence its name. It is used by the envelope class LatticeExpr and provides a bridge to the letter classes derived from LELInterface.

Synopsis

This class is part of the interface which allows the C++ programmer to enter mathematical expressions involving Lattices. It is is part of a Letter/envelope scheme. It's actually a bridge between the envelope class (LatticeExpr) and the letter classes (derived from LELInterface) and it exists largely to handle type conversions. In a single type environment, the envelope class could have directly called the letter classes.

The envelope and bridge provide the interface which the programmer sees. The letter classes do the real work and are hidden from the programmer.

All the expression manipulation functionality that the user has access to is viewable in this class; it is here that the operators, functions and constructors are defined. These allow the programmer to write mathematical expressions which involve Lattices. The letter classes take care of the optimal traversal of the Lattice and the memory mangement thereof. Thus the Lattices are iterated through and the expressions evaluated for each chunk (usually a tile shape) of the iteration.

A description of the implementation details of these classes can be found in Note 216

The available functionality is defined by the global friend functions and operators, plus the public constructors. The other public members functions are generally not of interest to the user of this class.

Generally, if one writes an expression such as a.copyData(sin(b)), the expression is automatically converted first to a LatticeExprNode and then to a LatticeExpr (which is a Lattice) before evaluation occurs. However, it may occur that you wish to build an expression from subexpressions. To do this, you must explcitly create objects of class LatticeExprNode. You cannot manipulate subexpressions of type LatticeExpr<T>. See below for an example.

Example

ArrayLattice<Float> f1(IPosition (2,nx,ny));
ArrayLattice<Float> f2(IPosition (2,nx,ny));
f2.set(2.0);
f1.copyData(2*f2+f2);

In this example, the values of the pixels in Lattice f1 are set to the values resulting from the expression "2*f2 + f2" I.e. the expression is evaluated for each pixel in the Lattices

Note that :

1) the Lattice::copyData function is expecting a Lattice argument. 2) LatticeExpr inherits from Lattice and therefore a LatticeExpr object is a valid argument object type 3) The expression in the copyData call is automatically converted to a LatticeExprNode by the constructors and operators in LatticeExprNode 4) The LatticeExprNode object so created is automatically converted to a LatticeExpr by casting functions in LatticeExprNode.

Example

ArrayLattice<Float> f1(IPosition (2,nx,ny));
ArrayLattice<Float> f2(IPosition (2,nx,ny));
ArrayLattice<Double> d(IPosition (2,nx,ny));
ArrayLattice<Complex> c(IPosition (2,nx,ny));
ArrayLattice<Bool> b(IPosition (2,nx,ny));
f2.set(1.0); d.set(2.0); c.set(Complex(2.0,3.0)); b.set(True);
f1.copyData((3.5*f2) + (cos(d)) - (10/min(d,f2)*(-abs(c))*ntrue(b)) - (C::pi));

In this rather silly example, we fill Lattice "f1" with the result of the expression. The expression shows the use of constants, unary operations, binary operations, 1D and 2D functions. It also shows how mixed types can be handled. The output Lattice is a Float, whereas mixed into the expression are subexpressions involving Float, Double, Complex and Bool Lattices.

Example

ArrayLattice<Float> f1(IPosition (2,nx,ny));
ArrayLattice<Float> f2(IPosition (2,nx,ny));
f2.set(2.0);
LatticeExprNode exp1(sin(f2));
LatticeExprNode exp2(pow(f2,2.0));
f1.copyData(exp1+exp2);

In this example, the expression is "sin(f2) + pow(f2,2.0)", but we have put it together from two subexpressions contained in LatticeExprNode objects exp1 and exp2. Again the LatticeExprNode object formed from summing exp1 and exp2 is automatically converted to a LatticeExpr for consumption by copyData

Motivation

The Lattice expression classes enable the C++ programmer much simpler handling of mathematical expressions involving lattices. In addition, these classes provide the infrastructure on top of which we can build an image calculator for Glish users

To Do

Definition at line 440 of file LatticeExprNode.h.

Constructor & Destructor Documentation

casacore::LatticeExprNode::LatticeExprNode ( )

Default constructor.

casacore::LatticeExprNode::LatticeExprNode ( Int64  constant)

Unary constant expression constructors.

casacore::LatticeExprNode::LatticeExprNode ( Int  constant)
casacore::LatticeExprNode::LatticeExprNode ( uInt  constant)
casacore::LatticeExprNode::LatticeExprNode ( Long  constant)
casacore::LatticeExprNode::LatticeExprNode ( Float  constant)
casacore::LatticeExprNode::LatticeExprNode ( Double  constant)
casacore::LatticeExprNode::LatticeExprNode ( const Complex &  constant)
casacore::LatticeExprNode::LatticeExprNode ( const DComplex &  constant)
casacore::LatticeExprNode::LatticeExprNode ( Bool  constant)
casacore::LatticeExprNode::LatticeExprNode ( const IPosition )

Constructor from an IPosition (containing indices or axes).

casacore::LatticeExprNode::LatticeExprNode ( const Lattice< Float > &  lattice)

Lattice expression (gets Lattice pixels) constructors.

casacore::LatticeExprNode::LatticeExprNode ( const Lattice< Double > &  lattice)
casacore::LatticeExprNode::LatticeExprNode ( const Lattice< Complex > &  lattice)
casacore::LatticeExprNode::LatticeExprNode ( const Lattice< DComplex > &  lattice)
casacore::LatticeExprNode::LatticeExprNode ( const Lattice< Bool > &  lattice)
casacore::LatticeExprNode::LatticeExprNode ( const MaskedLattice< Float > &  lattice)
casacore::LatticeExprNode::LatticeExprNode ( const MaskedLattice< Double > &  lattice)
casacore::LatticeExprNode::LatticeExprNode ( const MaskedLattice< Complex > &  lattice)
casacore::LatticeExprNode::LatticeExprNode ( const MaskedLattice< DComplex > &  lattice)
casacore::LatticeExprNode::LatticeExprNode ( const MaskedLattice< Bool > &  lattice)
casacore::LatticeExprNode::LatticeExprNode ( const LCRegion region)

Create a lattice expression from a region.

It results in a boolean expression node.

casacore::LatticeExprNode::LatticeExprNode ( const Slicer slicer)
casacore::LatticeExprNode::LatticeExprNode ( const LattRegionHolder region)
casacore::LatticeExprNode::LatticeExprNode ( const LatticeExprNode other)

Copy constructor (reference semantics)

virtual casacore::LatticeExprNode::~LatticeExprNode ( )
virtual

Destructor, does nothing.

casacore::LatticeExprNode::LatticeExprNode ( const CountedPtr< LELInterface< Float > > &  expr)

Make the object from a Counted<LELInterface> pointer.

Ideally this function is private, but alas it is needed in LELFunction1D, operator==, and more (too many to make them friend).

casacore::LatticeExprNode::LatticeExprNode ( const CountedPtr< LELInterface< Double > > &  expr)
casacore::LatticeExprNode::LatticeExprNode ( const CountedPtr< LELInterface< Complex > > &  expr)
casacore::LatticeExprNode::LatticeExprNode ( const CountedPtr< LELInterface< DComplex > > &  expr)
casacore::LatticeExprNode::LatticeExprNode ( const CountedPtr< LELInterface< Bool > > &  expr)
casacore::LatticeExprNode::LatticeExprNode ( LELInterface< Float > *  expr)
private

Make the object from a LELInterface* pointer.

casacore::LatticeExprNode::LatticeExprNode ( LELInterface< Double > *  expr)
private
casacore::LatticeExprNode::LatticeExprNode ( LELInterface< Complex > *  expr)
private
casacore::LatticeExprNode::LatticeExprNode ( LELInterface< DComplex > *  expr)
private
casacore::LatticeExprNode::LatticeExprNode ( LELInterface< Bool > *  expr)
private

Member Function Documentation

static Bool casacore::LatticeExprNode::areRegions ( const LatticeExprNode left,
const LatticeExprNode right 
)
staticprivate

Test if both operands represent a region.

An exception is thrown if only one of them is a region.

static LELAttribute casacore::LatticeExprNode::checkArg ( const Block< LatticeExprNode > &  arg,
const Block< Int > &  argType,
Bool  expectArray,
Bool  matchAxes = True 
)
static

Check the arguments of a function and return the resulting attribute object.

The matchAxes argument tells if the axes have to match exactly or whether it is possible that one expression is a subset of another (i.e. that axes may be missing).
The expectArray argument tells if the result should be an array which is the case if one of the arguments is an array.

DataType casacore::LatticeExprNode::dataType ( ) const
inline

Get the data type of the expression.

Definition at line 681 of file LatticeExprNode.h.

References dtype_p.

void casacore::LatticeExprNode::doPrepare ( ) const
private

Do the preparation for the evaluation.

Referenced by isInvalidScalar().

void casacore::LatticeExprNode::eval ( LELArray< Float > &  result,
const Slicer section 
) const

Evaluate the expression.

One can be sure that the result is not a reference to another array. This function should be used by LatticeExpr and other users.

void casacore::LatticeExprNode::eval ( LELArray< Double > &  result,
const Slicer section 
) const
void casacore::LatticeExprNode::eval ( LELArray< Complex > &  result,
const Slicer section 
) const
void casacore::LatticeExprNode::eval ( LELArray< DComplex > &  result,
const Slicer section 
) const
void casacore::LatticeExprNode::eval ( LELArray< Bool > &  result,
const Slicer section 
) const
void casacore::LatticeExprNode::eval ( Float result) const

Evaluate the expression (in case it is a scalar).

The "eval" and "get*" functions do the same thing, they just have a slightly different interface.

void casacore::LatticeExprNode::eval ( Double result) const
void casacore::LatticeExprNode::eval ( Complex &  result) const
void casacore::LatticeExprNode::eval ( DComplex &  result) const
void casacore::LatticeExprNode::eval ( Bool result) const
void casacore::LatticeExprNode::evalRef ( LELArrayRef< Float > &  result,
const Slicer section 
) const
inline

Evaluate the expression.

The result can be a reference to some internal array (in particular to an array in an ArrayLattice object used as a lattice). This function is meant for internal use by the LEL classes and should not be used externally.

Definition at line 643 of file LatticeExprNode.h.

References pExprFloat_p.

void casacore::LatticeExprNode::evalRef ( LELArrayRef< Double > &  result,
const Slicer section 
) const
inline

Definition at line 645 of file LatticeExprNode.h.

References pExprDouble_p.

void casacore::LatticeExprNode::evalRef ( LELArrayRef< Complex > &  result,
const Slicer section 
) const
inline

Definition at line 647 of file LatticeExprNode.h.

References pExprComplex_p.

void casacore::LatticeExprNode::evalRef ( LELArrayRef< DComplex > &  result,
const Slicer section 
) const
inline

Definition at line 649 of file LatticeExprNode.h.

References pExprDComplex_p.

void casacore::LatticeExprNode::evalRef ( LELArrayRef< Bool > &  result,
const Slicer section 
) const
inline

Definition at line 651 of file LatticeExprNode.h.

References pExprBool_p.

Array<Bool> casacore::LatticeExprNode::getArrayBool ( ) const
Array<Complex> casacore::LatticeExprNode::getArrayComplex ( ) const
Array<DComplex> casacore::LatticeExprNode::getArrayDComplex ( ) const
Array<Double> casacore::LatticeExprNode::getArrayDouble ( ) const
Array<Float> casacore::LatticeExprNode::getArrayFloat ( ) const

Evaluate the expression (in case it is a constant array).

const LELAttribute& casacore::LatticeExprNode::getAttribute ( ) const
inline

Get the attribute object of the expression.

Definition at line 709 of file LatticeExprNode.h.

References pAttr_p.

Bool casacore::LatticeExprNode::getBool ( ) const
Complex casacore::LatticeExprNode::getComplex ( ) const
DComplex casacore::LatticeExprNode::getDComplex ( ) const
Double casacore::LatticeExprNode::getDouble ( ) const
Float casacore::LatticeExprNode::getFloat ( ) const
const IPosition& casacore::LatticeExprNode::getIPosition ( ) const

Get the IPosition.

It throws an exception if the node does not contain an IPosition.

Bool casacore::LatticeExprNode::hasLock ( FileLocker::LockType  ) const
Bool casacore::LatticeExprNode::isInvalidScalar ( ) const
inline

Holds the node an invalid scalar?

Definition at line 697 of file LatticeExprNode.h.

References donePrepare_p, doPrepare(), and isInvalid_p.

Bool casacore::LatticeExprNode::isMasked ( ) const
inline

Is the result of "eval" masked?

Definition at line 693 of file LatticeExprNode.h.

References casacore::LELAttribute::isMasked(), and pAttr_p.

Bool casacore::LatticeExprNode::isRegion ( ) const
inline

Is the expression node a region?

Definition at line 685 of file LatticeExprNode.h.

References casacore::LELAttribute::isRegion(), and pAttr_p.

Bool casacore::LatticeExprNode::isScalar ( ) const
inline

Is the result of "eval" a scalar?

Definition at line 689 of file LatticeExprNode.h.

References casacore::LELAttribute::isScalar(), and pAttr_p.

Bool casacore::LatticeExprNode::lock ( FileLocker::LockType  ,
uInt  nattempts 
)

Handle locking of the LatticeExpr which is delegated to all of its parts.

CountedPtr<LELInterface<Bool> > casacore::LatticeExprNode::makeBool ( ) const
CountedPtr<LELInterface<Complex> > casacore::LatticeExprNode::makeComplex ( ) const
CountedPtr<LELInterface<DComplex> > casacore::LatticeExprNode::makeDComplex ( ) const
CountedPtr<LELInterface<Double> > casacore::LatticeExprNode::makeDouble ( ) const
static Int casacore::LatticeExprNode::makeEqualDim ( LatticeExprNode expr0,
LatticeExprNode expr1 
)
staticprivate

Make (if needed and if possible) the expression nodes such that the dimensionalities are equal.

This is only possible if both nodes have a coordinate system. It is done by creating an ExtendLattice object for the node with the lower dimensionality.

CountedPtr<LELInterface<Float> > casacore::LatticeExprNode::makeFloat ( ) const

Convert the expression to another data type.

static LatticeExprNode casacore::LatticeExprNode::newBinaryCmp ( LELBinaryEnums::Operation  oper,
const LatticeExprNode left,
const LatticeExprNode right 
)
staticprivate

Create a new node for a comparison binary operator.

The result has the same data type as the combined input type.

static LatticeExprNode casacore::LatticeExprNode::newComplexFunc1D ( LELFunctionEnums::Function  func,
const LatticeExprNode expr 
)
staticprivate

Create a new node for a complex numerical function with 1 argument.

The result has the same data type as the input.

static LatticeExprNode casacore::LatticeExprNode::newLogBinary ( LELBinaryEnums::Operation  oper,
const LatticeExprNode left,
const LatticeExprNode right 
)
staticprivate

Create a new node for a logical binary operator.

The result has the same data type as the combined input type.

static LatticeExprNode casacore::LatticeExprNode::newNumBinary ( LELBinaryEnums::Operation  oper,
const LatticeExprNode left,
const LatticeExprNode right 
)
staticprivate

Create a new node for a numerical binary operator.

The result has the same data type as the combined input type.

static LatticeExprNode casacore::LatticeExprNode::newNumFunc1D ( LELFunctionEnums::Function  func,
const LatticeExprNode expr 
)
staticprivate

Create a new node for a numerical function with 1 argument.

The result has the same data type as the input.

static LatticeExprNode casacore::LatticeExprNode::newNumFunc2D ( LELFunctionEnums::Function  func,
const LatticeExprNode left,
const LatticeExprNode right 
)
staticprivate

Create a new node for a numerical function with 2 arguments.

The result has the same data type as the combined input type.

static LatticeExprNode casacore::LatticeExprNode::newNumReal1D ( LELFunctionEnums::Function  func,
const LatticeExprNode expr 
)
staticprivate

Create a new node for a numerical function with 1 argument that returns a real number.

static LatticeExprNode casacore::LatticeExprNode::newNumUnary ( LELUnaryEnums::Operation  oper,
const LatticeExprNode expr 
)
staticprivate

Create a new node for a numerical unary operation.

The result has the same data type as the input.

static LatticeExprNode casacore::LatticeExprNode::newRealFunc1D ( LELFunctionEnums::Function  func,
const LatticeExprNode expr 
)
staticprivate

Create a new node for a real numerical function with 1 argument.

The result has the same data type as the input.

LatticeExprNode& casacore::LatticeExprNode::operator= ( const LatticeExprNode other)

Assignment (reference semantics)

LatticeExprNode casacore::LatticeExprNode::operator[] ( const LatticeExprNode cond) const

Masking operator using a condition.

The given boolean expression forms a mask/region for this expression node.

Bool casacore::LatticeExprNode::replaceScalarExpr ( )

Replace a scalar subexpression by its result.

static DataType casacore::LatticeExprNode::resultDataType ( DataType  left,
DataType  right 
)
static

Determine the resulting data type from the given data types.

An exception is thrown if they are incompatible.

void casacore::LatticeExprNode::resync ( )
const IPosition& casacore::LatticeExprNode::shape ( ) const
inline

Return the shape of the Lattice including all degenerate axes (ie.

axes with a length of one)

Definition at line 705 of file LatticeExprNode.h.

References pAttr_p, and casacore::LELAttribute::shape().

void casacore::LatticeExprNode::unlock ( )

Friends And Related Function Documentation

LatticeExprNode abs ( const LatticeExprNode expr)
friend

Numerical 1-argument functions which result in a real number regardless of input expression type.

LatticeExprNode acos ( const LatticeExprNode expr)
friend
LatticeExprNode all ( const LatticeExprNode expr)
friend
LatticeExprNode amp ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend

This function finds sqrt(left^2+right^2).

This could be used to find the (biased) polarized intensity if left and right are images of Stokes Q and U.

LatticeExprNode any ( const LatticeExprNode expr)
friend

Functions operating on a logical expression resulting in a scalar; Functions "any" (are any pixels "True") and "all" (are all pixels "True") result in a Bool; functions "ntrue" and "nfalse" result in a Double.

LatticeExprNode arg ( const LatticeExprNode expr)
friend
LatticeExprNode asin ( const LatticeExprNode expr)
friend
LatticeExprNode atan ( const LatticeExprNode expr)
friend
LatticeExprNode atan2 ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend

Numerical 2-argument functions.

LatticeExprNode avdev ( const LatticeExprNode expr)
friend
LatticeExprNode ceil ( const LatticeExprNode expr)
friend
LatticeExprNode conj ( const LatticeExprNode expr)
friend
LatticeExprNode cos ( const LatticeExprNode expr)
friend
LatticeExprNode cosh ( const LatticeExprNode expr)
friend
LatticeExprNode exp ( const LatticeExprNode expr)
friend
LatticeExprNode floor ( const LatticeExprNode expr)
friend
LatticeExprNode fmod ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode formComplex ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend

Form a complex number from two real numbers.

LatticeExprNode fractile ( const LatticeExprNode expr,
const LatticeExprNode fraction 
)
friend

Determine the value of the element at the part fraction from the beginning of the given lattice.

Thus fraction=0.5 is equal to the median.

LatticeExprNode fractileRange ( const LatticeExprNode expr,
const LatticeExprNode fraction1,
const LatticeExprNode fraction2 
)
friend

Determine the value range of the elements at the part fraction1 and fraction2 from the beginning of the given lattice.

Both fractions must be >=0 and <=1 and fraction1 must be <= fraction2. By default fraction2 is equal to 1-fraction1. Thus fraction=0.25 gives the quartile range of the lattice.

LatticeExprNode fractileRange ( const LatticeExprNode expr,
const LatticeExprNode fraction 
)
friend
LatticeExprNode iif ( const LatticeExprNode condition,
const LatticeExprNode arg1,
const LatticeExprNode arg2 
)
friend

Function resembling the ternary ?: construct in C++.

The argument "condition" has to be a Bool scalar or lattice. If an element in "condition" is True, the corresponding element from "arg1" is taken, otherwise it is taken from "arg2".

LatticeExprNode imag ( const LatticeExprNode expr)
friend
LatticeExprNode indexin ( const LatticeExprNode axis,
const LatticeExprNode indexFlags 
)
friend

2-argument function telling per pixel if its index on the given axis is contained in the 2nd argument.

The 2nd argument should be a boolean vector where True means that the index is contained. For indices >= vector_length, the 2nd argument defaults to False. Results in a Bool array.
Caution: Axes start counting at 0; If the axis is a number < 0 or >= ndim, an exception is thrown;

LatticeExprNode isNaN ( const LatticeExprNode expr)
friend

Test if a value is a NaN.

LatticeExprNode length ( const LatticeExprNode expr,
const LatticeExprNode axis 
)
friend

2-argument function to get the length of an axis.

Results in a scalar Float. The 2nd expression (giving the axis number) has to be a real scalar.
Caution: Axes start counting at 0; If the axis is a number < 0, an exception is thrown; If the axis is a number exceeding the dimensionality, 1 is returned;

LatticeExprNode log ( const LatticeExprNode expr)
friend
LatticeExprNode log10 ( const LatticeExprNode expr)
friend
LatticeExprNode mask ( const LatticeExprNode expr)
friend

This function returns the mask of the given expression.

If it has no mask, the result is an array with all True values.

LatticeExprNode max ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode max ( const LatticeExprNode expr)
friend
LatticeExprNode mean ( const LatticeExprNode expr)
friend
LatticeExprNode median ( const LatticeExprNode expr)
friend
LatticeExprNode min ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode min ( const LatticeExprNode expr)
friend

1-argument functions operating on a numeric expression resulting in a scalar

LatticeExprNode ndim ( const LatticeExprNode expr)
friend

1-argument function to get the dimensionality of a lattice.

0 is returned if it is a scalar. Results in a scalar Float.

LatticeExprNode nelements ( const LatticeExprNode expr)
friend

1-argument function to get the number of elements in a lattice.

If the lattice is masked, only the True elements are counted. Results in a scalar Double.

LatticeExprNode nfalse ( const LatticeExprNode expr)
friend
LatticeExprNode ntrue ( const LatticeExprNode expr)
friend
LatticeExprNode operator! ( const LatticeExprNode expr)
friend
LatticeExprNode operator!= ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode operator% ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode operator&& ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend

Logical binary operators.

LatticeExprNode operator* ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode operator+ ( const LatticeExprNode expr)
friend

All global functions need to be declared as friends.

Unary functions.

LatticeExprNode operator+ ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend

Numerical binary operators.

LatticeExprNode operator- ( const LatticeExprNode expr)
friend
LatticeExprNode operator- ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode operator/ ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode operator< ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode operator<= ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode operator== ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend

Relational binary operators.

LatticeExprNode operator> ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode operator>= ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode operator^ ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode operator|| ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode pa ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend

This function finds 180/pi*atan2(left,right)/2.

This could be used to find the position of linear polarization if left and right are images of Stokes U and Q, respectively.

LatticeExprNode pow ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend
LatticeExprNode real ( const LatticeExprNode expr)
friend
LatticeExprNode rebin ( const LatticeExprNode expr,
const LatticeExprNode bin 
)
friend

2-argument function rebinning Lattice by given factors.

The 2nd argument should be a vector (preferably Float - really Int but Int not well supported in LEL yet). Results in a T array.

LatticeExprNode replace ( const LatticeExprNode arg1,
const LatticeExprNode arg2 
)
friend

This function replaces every masked-off element in the first argument with the corresponding element from the second argument.

The first argument has to be a lattice (expression), the second can be a scalar or lattice. The mask of the first argument is not changed. If the first argument does not have a mask, this function does nothing.

LatticeExprNode round ( const LatticeExprNode expr)
friend
LatticeExprNode sign ( const LatticeExprNode expr)
friend
LatticeExprNode sin ( const LatticeExprNode expr)
friend

Numerical 1-argument functions.

LatticeExprNode sinh ( const LatticeExprNode expr)
friend
LatticeExprNode spectralindex ( const LatticeExprNode left,
const LatticeExprNode right 
)
friend

This function finds the spectral index alpha = log(s1/s2) / log(f1/f2).

LatticeExprNode sqrt ( const LatticeExprNode expr)
friend
LatticeExprNode stddev ( const LatticeExprNode expr)
friend
LatticeExprNode sum ( const LatticeExprNode expr)
friend
LatticeExprNode tan ( const LatticeExprNode expr)
friend
LatticeExprNode tanh ( const LatticeExprNode expr)
friend
LatticeExprNode toBool ( const LatticeExprNode expr)
friend
LatticeExprNode toComplex ( const LatticeExprNode expr)
friend
LatticeExprNode toDComplex ( const LatticeExprNode expr)
friend
LatticeExprNode toDouble ( const LatticeExprNode expr)
friend
LatticeExprNode toFloat ( const LatticeExprNode expr)
friend

Functions to convert to the given data type.

These are mostly meaningful for down-conversions (e.g. double to float), since up-conversions are automatically done to get matching data types when needed. Note that some conversions are not supported, such as Complex to Double or Float.
The conversion to Bool is useful to convert a region to a boolean lattice, which is only possible if the region is given in world coordinates. Otherwise an exception is thrown.

LatticeExprNode value ( const LatticeExprNode expr)
friend

This function returns the value of the expression without a mask.

LatticeExprNode variance ( const LatticeExprNode expr)
friend

Member Data Documentation

Bool casacore::LatticeExprNode::donePrepare_p
private

Member variables.

Definition at line 828 of file LatticeExprNode.h.

Referenced by isInvalidScalar().

DataType casacore::LatticeExprNode::dtype_p
private

Definition at line 829 of file LatticeExprNode.h.

Referenced by dataType().

IPosition casacore::LatticeExprNode::iposition_p
private

Definition at line 831 of file LatticeExprNode.h.

Bool casacore::LatticeExprNode::isInvalid_p
private

Definition at line 830 of file LatticeExprNode.h.

Referenced by isInvalidScalar().

const LELAttribute* casacore::LatticeExprNode::pAttr_p
private

Definition at line 832 of file LatticeExprNode.h.

Referenced by getAttribute(), isMasked(), isRegion(), isScalar(), and shape().

CountedPtr<LELInterface<Bool> > casacore::LatticeExprNode::pExprBool_p
private

Definition at line 837 of file LatticeExprNode.h.

Referenced by evalRef().

CountedPtr<LELInterface<Complex> > casacore::LatticeExprNode::pExprComplex_p
private

Definition at line 835 of file LatticeExprNode.h.

Referenced by evalRef().

CountedPtr<LELInterface<DComplex> > casacore::LatticeExprNode::pExprDComplex_p
private

Definition at line 836 of file LatticeExprNode.h.

Referenced by evalRef().

CountedPtr<LELInterface<Double> > casacore::LatticeExprNode::pExprDouble_p
private

Definition at line 834 of file LatticeExprNode.h.

Referenced by evalRef().

CountedPtr<LELInterface<Float> > casacore::LatticeExprNode::pExprFloat_p
private

Definition at line 833 of file LatticeExprNode.h.

Referenced by evalRef().


The documentation for this class was generated from the following file: