Loading...
Searching...
No Matches
MArrayBase.h
Go to the documentation of this file.
//# MArrayBase.h: Base class for an array with an optional mask
//# Copyright (C) 2012
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library is distributed in the hope that it will be useful, but WITHOUT
//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
//# License for more details.
//#
//# You should have received a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be addressed as follows:
//# Internet email: casa-feedback@nrao.edu.
//# Postal address: AIPS++ Project Office
//# National Radio Astronomy Observatory
//# 520 Edgemont Road
//# Charlottesville, VA 22903-2475 USA
#ifndef CASA_MARRAYBASE_H
#define CASA_MARRAYBASE_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/casa/Arrays/Array.h>
#include <casacore/casa/Arrays/ArrayLogical.h>
//# Define the mask value indicating a valid value.
//# In this way it is easy to change it to another value (if ever needed).
//# The current setting is the same as used in numpy's masked_array and
//# in the MeasurementSet's FLAG column.
//# But the opposite value sounds somewhat better (same as MaskedArray)
//# because something like DATA[isnan(DATA)] = 0 is much more intuitive.
//# #define MArrayValid False
//# #define MArrayInvalid True
namespace casacore { //# NAMESPACE CASACORE - BEGIN
// <summary>
// Base class for an array with an optional mask
// </summary>
// <use visibility=local>
// <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="">
// </reviewed>
// <prerequisite>
//# Classes you should understand before using this one.
// <li> <linkto class=Array>Array</linkto>
// </prerequisite>
// <synopsis>
// This class is the base class of the templated class MArray. It contains
// the functions that are not template dependent.
//
// MArray is developed to make it easier to handle arrays with an
// optional mask. The array is always present, but the mask is optional.
// MArrayMath contains functions to operate on such arrays.
//
// Similar to numpy.masked_array and the MeasurementSet FLAG definition,
// a mask value True means that the corresponding value is masked off,
// thus is not taken into account in reduction functions like <src>sum</src>.
// on a masked array. In operations like addition, masked off values are
// processed because testing the mask value is more expensive than an
// addition (even if the value is a NaN). For an operation with multiple
// operands, the mask of the result is the OR of the operand masks.
//
// MArray can be null meaning that the array is a null value. It can be
// used to indicate that a table cell does not contain an array.
// A null MArray has an empty array and mask. Operations where an operand
// is a null MArray, result in a null MArray.
// </synopsis>
class MArrayBase
{
protected:
// The default constructor creates an empty mask.
explicit MArrayBase (Bool isNull)
: itsSize (0),
itsNValid (0),
itsNull (isNull)
{}
// Construct from a given array shape and mask.
MArrayBase (const ArrayBase& arr, const Array<Bool>& mask, Bool isNull);
// Construct from a given array shape and mask from another MArray.
MArrayBase (const ArrayBase& arr, const MArrayBase& marray);
// Reference the mask and set the shape.
void setBase (const ArrayBase& arr, const Array<Bool>& mask);
// Reference another MArray.
void referenceBase (const MArrayBase& other);
// Set the array shape and resize the mask.
void resizeBase (const ArrayBase& arr, Bool useMask);
public:
// Is the array null?
Bool isNull() const
{ return itsNull; }
// Remove the mask.
void removeMask()
{ itsMask.resize(); itsNValid = itsSize; }
// Is there a mask?
Bool hasMask() const
{ return !itsMask.empty(); }
// Set the mask. It checks if it matches the array shape.
void setMask (const Array<Bool>& mask);
// Get the mask. The returned array is empty if there is no mask.
const Array<Bool>& mask() const
{ return itsMask; }
Array<Bool>& wmask()
{ return itsMask; }
// Return the number of valid array values, thus unflagged elements.
Int64 nvalid() const
{
if (itsNValid < 0) fillNValid();
return itsNValid;
}
// Is the array empty?
Bool empty() const
{ return itsSize == 0; }
// Get the dimensionality.
uInt ndim() const
{ return itsShape.size(); }
// Get the shape.
const IPosition& shape() const
{ return itsShape; }
// Get the size.
// <group>
size_t size() const
{ return itsSize; }
size_t nelements() const
{ return itsSize; }
// </group>
// Combine this and the other mask.
// One or both MArray-s can be unmasked.
Array<Bool> combineMask (const MArrayBase& other) const;
private:
// Initialize and check.
void init();
// Fill the number of valid values.
void fillNValid() const;
//# Data members.
Array<Bool> itsMask;
IPosition itsShape;
size_t itsSize;
mutable Int64 itsNValid;
Bool itsNull; // True = array is null, thus undefined in a column
};
} //# NAMESPACE CASACORE - END
#endif
casacore::ArrayBase
Non-templated base class for templated Array class.
Definition ArrayBase.h:71
casacore::Array
Definition Array.h:155
casacore::IPosition
Definition IPosition.h:117
casacore::MArrayBase::MArrayBase
MArrayBase(Bool isNull)
The default constructor creates an empty mask.
Definition MArrayBase.h:86
casacore::MArrayBase::itsNull
Bool itsNull
Definition MArrayBase.h:172
casacore::MArrayBase::nvalid
Int64 nvalid() const
Return the number of valid array values, thus unflagged elements.
Definition MArrayBase.h:130
casacore::MArrayBase::itsSize
size_t itsSize
Definition MArrayBase.h:170
casacore::MArrayBase::empty
Bool empty() const
Is the array empty?
Definition MArrayBase.h:137
casacore::MArrayBase::combineMask
Array< Bool > combineMask(const MArrayBase &other) const
Combine this and the other mask.
casacore::MArrayBase::setBase
void setBase(const ArrayBase &arr, const Array< Bool > &mask)
Reference the mask and set the shape.
casacore::MArrayBase::nelements
size_t nelements() const
Definition MArrayBase.h:152
casacore::MArrayBase::isNull
Bool isNull() const
Is the array null?
Definition MArrayBase.h:109
casacore::MArrayBase::MArrayBase
MArrayBase(const ArrayBase &arr, const Array< Bool > &mask, Bool isNull)
Construct from a given array shape and mask.
casacore::MArrayBase::init
void init()
Initialize and check.
casacore::MArrayBase::setMask
void setMask(const Array< Bool > &mask)
Set the mask.
casacore::MArrayBase::ndim
uInt ndim() const
Get the dimensionality.
Definition MArrayBase.h:141
casacore::MArrayBase::mask
const Array< Bool > & mask() const
Get the mask.
Definition MArrayBase.h:124
casacore::MArrayBase::itsShape
IPosition itsShape
Definition MArrayBase.h:169
casacore::MArrayBase::resizeBase
void resizeBase(const ArrayBase &arr, Bool useMask)
Set the array shape and resize the mask.
casacore::MArrayBase::wmask
Array< Bool > & wmask()
Definition MArrayBase.h:126
casacore::MArrayBase::MArrayBase
MArrayBase(const ArrayBase &arr, const MArrayBase &marray)
Construct from a given array shape and mask from another MArray.
casacore::MArrayBase::itsMask
Array< Bool > itsMask
Definition MArrayBase.h:168
casacore::MArrayBase::fillNValid
void fillNValid() const
Fill the number of valid values.
casacore::MArrayBase::size
size_t size() const
Get the size.
Definition MArrayBase.h:150
casacore::MArrayBase::itsNValid
Int64 itsNValid
Definition MArrayBase.h:171
casacore::MArrayBase::referenceBase
void referenceBase(const MArrayBase &other)
Reference another MArray.
casacore::MArrayBase::removeMask
void removeMask()
Remove the mask.
Definition MArrayBase.h:113
casacore::MArrayBase::hasMask
Bool hasMask() const
Is there a mask?
Definition MArrayBase.h:117
casacore::MArrayBase::shape
const IPosition & shape() const
Get the shape.
Definition MArrayBase.h:145
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::uInt
unsigned int uInt
Definition aipstype.h:49
casacore::Int64
long long Int64
Define the extra non-standard types used by Casacore (like proposed uSize, Size).
Definition aipsxtype.h:36
casacore::Bool
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40
casacore::marray
TableExprNode marray(const TableExprNode &array, const TableExprNode &mask)
Form a masked array.
Definition ExprNode.h:1939