casacore
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
casacore::Cube< T > Class Template Reference

More...

#include <Cube.h>

Public Member Functions

 Cube ()
 A Cube of length zero in each dimension; zero origin. More...
 
 Cube (size_t l1, size_t l2, size_t l3)
 A l1xl2xl3 sized cube. More...
 
 Cube (size_t l1, size_t l2, size_t l3, ArrayInitPolicy initPolicy)
 A l1xl2xl3 sized cube. More...
 
 Cube (size_t l1, size_t l2, size_t l3, const T &initialValue)
 A l1xl2xl3 sized cube. More...
 
 Cube (const IPosition &len)
 A Cube where the shape ("len") is defined with IPositions. More...
 
 Cube (const IPosition &len, ArrayInitPolicy initPolicy)
 A Cube where the shape ("len") is defined with IPositions. More...
 
 Cube (const IPosition &len, const T &initialValue)
 A Cube where the shape ("len") is defined with IPositions. More...
 
 Cube (const Cube< T > &)
 The copy constructor uses reference semantics. More...
 
 Cube (const Array< T > &)
 Construct a cube by reference from "other". More...
 
 Cube (const IPosition &shape, T *storage, StorageInitPolicy policy=COPY)
 Create an Cube of a given shape from a pointer. More...
 
 Cube (const IPosition &shape, T *storage, StorageInitPolicy policy, AbstractAllocator< T > const &allocator)
 Create an Cube of a given shape from a pointer. More...
 
 Cube (const IPosition &shape, const T *storage)
 Create an Cube of a given shape from a pointer. More...
 
virtual ~Cube ()
 Define a destructor, otherwise the (SUN) compiler makes a static one. More...
 
virtual void assign (const Array< T > &other)
 Assign the other array (which must be dimension 3) to this cube. More...
 
virtual void reference (const Array< T > &other)
 Make this cube a reference to other. More...
 
void resize (size_t nx, size_t ny, size_t nz, Bool copyValues=False)
 
void resize (size_t nx, size_t ny, size_t nz, Bool copyValues, ArrayInitPolicy policy)
 
virtual void resize ()
 
virtual void resize (const IPosition &newShape, Bool copyValues, ArrayInitPolicy policy)
 
Cube< T > & operator= (const Cube< T > &other)
 Copy the values from other to this cube. More...
 
virtual Array< T > & operator= (const Array< T > &other)
 
Array< T > & operator= (const T &val)
 Copy val into every element of this cube; i.e. More...
 
Cube< T > & operator= (const MaskedArray< T > &marray)
 Copy to this those values in marray whose corresponding elements in marray's mask are True. More...
 
T & operator() (const IPosition &i)
 Single-pixel addressing. More...
 
const T & operator() (const IPosition &i) const
 
T & operator() (size_t i1, size_t i2, size_t i3)
 
const T & operator() (size_t i1, size_t i2, size_t i3) const
 
T & at (size_t i1, size_t i2, size_t i3)
 
const T & at (size_t i1, size_t i2, size_t i3) const
 
Cube< T > operator() (const Slice &sliceX, const Slice &sliceY, const Slice &sliceZ)
 Take a slice of this cube. More...
 
const Cube< T > operator() (const Slice &sliceX, const Slice &sliceY, const Slice &sliceZ) const
 
Array< T > operator() (const IPosition &blc, const IPosition &trc, const IPosition &incr)
 Slice using IPositions. More...
 
const Array< T > operator() (const IPosition &blc, const IPosition &trc, const IPosition &incr) const
 
Array< T > operator() (const IPosition &blc, const IPosition &trc)
 
const Array< T > operator() (const IPosition &blc, const IPosition &trc) const
 
Array< T > operator() (const Slicer &slicer)
 
const Array< T > operator() (const Slicer &slicer) const
 
const MaskedArray< T > operator() (const LogicalArray &mask) const
 The array is masked by the input LogicalArray. More...
 
MaskedArray< T > operator() (const LogicalArray &mask)
 Return a MaskedArray. More...
 
const MaskedArray< T > operator() (const MaskedLogicalArray &mask) const
 The array is masked by the input MaskedLogicalArray. More...
 
MaskedArray< T > operator() (const MaskedLogicalArray &mask)
 Return a MaskedArray. More...
 
Matrix< T > xyPlane (size_t zplane)
 Extract a plane as a matrix referencing the original data. More...
 
const Matrix< T > xyPlane (size_t zplane) const
 
Matrix< T > xzPlane (size_t yplane)
 
const Matrix< T > xzPlane (size_t yplane) const
 
Matrix< T > yzPlane (size_t xplane)
 
const Matrix< T > yzPlane (size_t xplane) const
 
const IPositionshape () const
 The length of each axis of the cube. More...
 
void shape (Int &s1, Int &s2, Int &s3) const
 
size_t nrow () const
 The number of rows in the Cube, i.e. More...
 
size_t ncolumn () const
 The number of columns in the Cube, i.e. More...
 
size_t nplane () const
 The number of planes in the Cube, i.e. More...
 
virtual Bool ok () const
 Checks that the cube is consistent (invariants check out). More...
 

Protected Member Functions

virtual void preTakeStorage (const IPosition &shape)
 
virtual void postTakeStorage ()
 
virtual void doNonDegenerate (const Array< T > &other, const IPosition &ignoreAxes)
 Remove the degenerate axes from other and store result in this cube. More...
 

Private Member Functions

void makeIndexingConstants ()
 Helper fn to calculate the indexing constants. More...
 

Private Attributes

size_t xinc_p
 Cached constants to improve indexing. More...
 
size_t yinc_p
 
size_t zinc_p
 

Detailed Description

template<class T>
class casacore::Cube< T >

A 3-D Specialization of the Array class

Review Status

Reviewed By:
UNKNOWN
Date Reviewed:
before2004/08/25

Cube objects are three-dimensional specializations (e.g., more convenient and efficient indexing) of the general Array class. You might also want to look at the Array documentation to see inherited functionality.

Generally the member functions of Array are also available in Cube versions which take a pair of integers where the array needs an IPosition. Since the Cube is three-dimensional, the IPositions are overkill, although you may use those versions if you want to.

Cube<Int> ci(100,100,100); // Shape is 100x100
ci.resize(50,50,50); // Shape now 50x50

Slices may be taken with the Slice class. To take a slice, one "indexes" with one Slice(start, length, inc) for each axis, where end and inc are optional. Additionally, there is an xyPlane() member function which return a Matrix which corresponds to some plane:

Cube<Float> cube(10,20,30);
for(uInt i=0; i < 30; i++) {
cube.xyPlane(i) = i; // Set every 10x20 plane to its "height"
}

Element-by-element arithmetic and logical operations are available (in aips/ArrayMath.h and aips/ArrayLogical.h).

As with the Arrays, if the preprocessor symbol AIPS_DEBUG is defined at compile time invariants will be checked on entry to most member functions. Additionally, if AIPS_ARRAY_INDEX_CHECK is defined index operations will be bounds-checked. Neither of these should be defined for production code.

Definition at line 80 of file Cube.h.

Constructor & Destructor Documentation

◆ Cube() [1/12]

template<class T >
casacore::Cube< T >::Cube ( )

A Cube of length zero in each dimension; zero origin.

◆ Cube() [2/12]

template<class T >
casacore::Cube< T >::Cube ( size_t  l1,
size_t  l2,
size_t  l3 
)

A l1xl2xl3 sized cube.

◆ Cube() [3/12]

template<class T >
casacore::Cube< T >::Cube ( size_t  l1,
size_t  l2,
size_t  l3,
ArrayInitPolicy  initPolicy 
)

A l1xl2xl3 sized cube.

◆ Cube() [4/12]

template<class T >
casacore::Cube< T >::Cube ( size_t  l1,
size_t  l2,
size_t  l3,
const T &  initialValue 
)

A l1xl2xl3 sized cube.

Fill it with the initial value.

◆ Cube() [5/12]

template<class T >
casacore::Cube< T >::Cube ( const IPosition len)

A Cube where the shape ("len") is defined with IPositions.

◆ Cube() [6/12]

template<class T >
casacore::Cube< T >::Cube ( const IPosition len,
ArrayInitPolicy  initPolicy 
)

A Cube where the shape ("len") is defined with IPositions.

◆ Cube() [7/12]

template<class T >
casacore::Cube< T >::Cube ( const IPosition len,
const T &  initialValue 
)

A Cube where the shape ("len") is defined with IPositions.

Fill it with the initial value.

◆ Cube() [8/12]

template<class T >
casacore::Cube< T >::Cube ( const Cube< T > &  )

The copy constructor uses reference semantics.

◆ Cube() [9/12]

template<class T >
casacore::Cube< T >::Cube ( const Array< T > &  )

Construct a cube by reference from "other".

"other must have ndim() of 3 or less. The warning which applies to the copy constructor is also valid here.

◆ Cube() [10/12]

template<class T >
casacore::Cube< T >::Cube ( const IPosition shape,
T *  storage,
StorageInitPolicy  policy = COPY 
)

Create an Cube of a given shape from a pointer.

◆ Cube() [11/12]

template<class T >
casacore::Cube< T >::Cube ( const IPosition shape,
T *  storage,
StorageInitPolicy  policy,
AbstractAllocator< T > const &  allocator 
)

Create an Cube of a given shape from a pointer.

◆ Cube() [12/12]

template<class T >
casacore::Cube< T >::Cube ( const IPosition shape,
const T *  storage 
)

Create an Cube of a given shape from a pointer.

Because the pointer is const, a copy is always made.

◆ ~Cube()

template<class T >
virtual casacore::Cube< T >::~Cube ( )
virtual

Define a destructor, otherwise the (SUN) compiler makes a static one.

Member Function Documentation

◆ assign()

template<class T >
virtual void casacore::Cube< T >::assign ( const Array< T > &  other)
virtual

Assign the other array (which must be dimension 3) to this cube.

If the shapes mismatch, this array is resized.

◆ at() [1/2]

template<class T >
T& casacore::Cube< T >::at ( size_t  i1,
size_t  i2,
size_t  i3 
)
inline

Definition at line 193 of file Cube.h.

◆ at() [2/2]

template<class T >
const T& casacore::Cube< T >::at ( size_t  i1,
size_t  i2,
size_t  i3 
) const
inline

Definition at line 202 of file Cube.h.

◆ doNonDegenerate()

template<class T >
virtual void casacore::Cube< T >::doNonDegenerate ( const Array< T > &  other,
const IPosition ignoreAxes 
)
protectedvirtual

Remove the degenerate axes from other and store result in this cube.

An exception is thrown if removing degenerate axes does not result in a cube.

◆ makeIndexingConstants()

template<class T >
void casacore::Cube< T >::makeIndexingConstants ( )
private

Helper fn to calculate the indexing constants.

◆ ncolumn()

template<class T >
size_t casacore::Cube< T >::ncolumn ( ) const
inline

The number of columns in the Cube, i.e.

the length of the 2nd axis.

Definition at line 302 of file Cube.h.

◆ nplane()

template<class T >
size_t casacore::Cube< T >::nplane ( ) const
inline

The number of planes in the Cube, i.e.

the length of the 3rd axis.

Definition at line 306 of file Cube.h.

◆ nrow()

template<class T >
size_t casacore::Cube< T >::nrow ( ) const
inline

The number of rows in the Cube, i.e.

the length of the first axis.

Definition at line 298 of file Cube.h.

◆ ok()

template<class T >
virtual Bool casacore::Cube< T >::ok ( ) const
virtual

Checks that the cube is consistent (invariants check out).

◆ operator()() [1/16]

template<class T >
Array<T> casacore::Cube< T >::operator() ( const IPosition blc,
const IPosition trc 
)
inline

Definition at line 236 of file Cube.h.

◆ operator()() [2/16]

template<class T >
const Array<T> casacore::Cube< T >::operator() ( const IPosition blc,
const IPosition trc 
) const
inline

Definition at line 238 of file Cube.h.

◆ operator()() [3/16]

template<class T >
Array<T> casacore::Cube< T >::operator() ( const IPosition blc,
const IPosition trc,
const IPosition incr 
)
inline

Slice using IPositions.

Required to be defined, otherwise the base class versions are hidden.

Definition at line 230 of file Cube.h.

◆ operator()() [4/16]

template<class T >
const Array<T> casacore::Cube< T >::operator() ( const IPosition blc,
const IPosition trc,
const IPosition incr 
) const
inline

Definition at line 233 of file Cube.h.

◆ operator()() [5/16]

template<class T >
T& casacore::Cube< T >::operator() ( const IPosition i)
inline

Single-pixel addressing.

If AIPS_ARRAY_INDEX_CHECK is defined, bounds checking is performed.

Definition at line 170 of file Cube.h.

◆ operator()() [6/16]

template<class T >
const T& casacore::Cube< T >::operator() ( const IPosition i) const
inline

Definition at line 172 of file Cube.h.

◆ operator()() [7/16]

template<class T >
MaskedArray<T> casacore::Cube< T >::operator() ( const LogicalArray &  mask)
inline

Return a MaskedArray.

Definition at line 256 of file Cube.h.

◆ operator()() [8/16]

template<class T >
const MaskedArray<T> casacore::Cube< T >::operator() ( const LogicalArray &  mask) const
inline

The array is masked by the input LogicalArray.

This mask must conform to the array.

Return a MaskedArray.

Definition at line 252 of file Cube.h.

◆ operator()() [9/16]

template<class T >
MaskedArray<T> casacore::Cube< T >::operator() ( const MaskedLogicalArray &  mask)
inline

Return a MaskedArray.

Definition at line 273 of file Cube.h.

◆ operator()() [10/16]

template<class T >
const MaskedArray<T> casacore::Cube< T >::operator() ( const MaskedLogicalArray &  mask) const
inline

The array is masked by the input MaskedLogicalArray.

The mask is effectively the AND of the internal LogicalArray and the internal mask of the MaskedLogicalArray. The MaskedLogicalArray must conform to the array.

Return a MaskedArray.

Definition at line 269 of file Cube.h.

◆ operator()() [11/16]

template<class T >
Cube<T> casacore::Cube< T >::operator() ( const Slice sliceX,
const Slice sliceY,
const Slice sliceZ 
)

Take a slice of this cube.

Slices are always indexed starting at zero. This uses reference semantics, i.e. changing a value in the slice changes the original.

Cube<Double> vd(100,100,100);
//..\.
vd(Slice(0,10),Slice(10,10,Slice(0,10))) = -1.0; // sub-cube set to -1.0

◆ operator()() [12/16]

template<class T >
const Cube<T> casacore::Cube< T >::operator() ( const Slice sliceX,
const Slice sliceY,
const Slice sliceZ 
) const

◆ operator()() [13/16]

template<class T >
Array<T> casacore::Cube< T >::operator() ( const Slicer slicer)
inline

Definition at line 240 of file Cube.h.

◆ operator()() [14/16]

template<class T >
const Array<T> casacore::Cube< T >::operator() ( const Slicer slicer) const
inline

Definition at line 242 of file Cube.h.

◆ operator()() [15/16]

template<class T >
T& casacore::Cube< T >::operator() ( size_t  i1,
size_t  i2,
size_t  i3 
)
inline

Definition at line 175 of file Cube.h.

◆ operator()() [16/16]

template<class T >
const T& casacore::Cube< T >::operator() ( size_t  i1,
size_t  i2,
size_t  i3 
) const
inline

Definition at line 183 of file Cube.h.

◆ operator=() [1/4]

template<class T >
virtual Array<T>& casacore::Cube< T >::operator= ( const Array< T > &  other)
virtual

◆ operator=() [2/4]

template<class T >
Cube<T>& casacore::Cube< T >::operator= ( const Cube< T > &  other)

Copy the values from other to this cube.

If this cube has zero elements then it will resize to be the same shape as other; otherwise other must conform to this. Note that the assign function can be used to assign a non-conforming cube.

◆ operator=() [3/4]

template<class T >
Cube<T>& casacore::Cube< T >::operator= ( const MaskedArray< T > &  marray)
inline

Copy to this those values in marray whose corresponding elements in marray's mask are True.

Definition at line 163 of file Cube.h.

◆ operator=() [4/4]

template<class T >
Array<T>& casacore::Cube< T >::operator= ( const T &  val)
inline

Copy val into every element of this cube; i.e.

behaves as if val were a constant conformant cube.

Definition at line 158 of file Cube.h.

◆ postTakeStorage()

template<class T >
virtual void casacore::Cube< T >::postTakeStorage ( )
protectedvirtual

◆ preTakeStorage()

template<class T >
virtual void casacore::Cube< T >::preTakeStorage ( const IPosition shape)
protectedvirtual

◆ reference()

template<class T >
virtual void casacore::Cube< T >::reference ( const Array< T > &  other)
virtual

Make this cube a reference to other.

Other must be of dimensionality 3 or less.

◆ resize() [1/4]

template<class T >
virtual void casacore::Cube< T >::resize ( )
virtual

◆ resize() [2/4]

template<class T >
virtual void casacore::Cube< T >::resize ( const IPosition newShape,
Bool  copyValues,
ArrayInitPolicy  policy 
)
virtual

◆ resize() [3/4]

template<class T >
void casacore::Cube< T >::resize ( size_t  nx,
size_t  ny,
size_t  nz,
Bool  copyValues,
ArrayInitPolicy  policy 
)

◆ resize() [4/4]

template<class T >
void casacore::Cube< T >::resize ( size_t  nx,
size_t  ny,
size_t  nz,
Bool  copyValues = False 
)
inline

Definition at line 138 of file Cube.h.

◆ shape() [1/2]

template<class T >
const IPosition& casacore::Cube< T >::shape ( ) const
inline

The length of each axis of the cube.

Definition at line 292 of file Cube.h.

◆ shape() [2/2]

template<class T >
void casacore::Cube< T >::shape ( Int s1,
Int s2,
Int s3 
) const
inline

Definition at line 294 of file Cube.h.

◆ xyPlane() [1/2]

template<class T >
Matrix<T> casacore::Cube< T >::xyPlane ( size_t  zplane)

Extract a plane as a matrix referencing the original data.

Of course you could also use a Matrix iterator on the cube.

◆ xyPlane() [2/2]

template<class T >
const Matrix<T> casacore::Cube< T >::xyPlane ( size_t  zplane) const

◆ xzPlane() [1/2]

template<class T >
Matrix<T> casacore::Cube< T >::xzPlane ( size_t  yplane)

◆ xzPlane() [2/2]

template<class T >
const Matrix<T> casacore::Cube< T >::xzPlane ( size_t  yplane) const

◆ yzPlane() [1/2]

template<class T >
Matrix<T> casacore::Cube< T >::yzPlane ( size_t  xplane)

◆ yzPlane() [2/2]

template<class T >
const Matrix<T> casacore::Cube< T >::yzPlane ( size_t  xplane) const

Member Data Documentation

◆ xinc_p

template<class T >
size_t casacore::Cube< T >::xinc_p
private

Cached constants to improve indexing.

Definition at line 323 of file Cube.h.

Referenced by casacore::Cube< casacore::RigidVector< Double, 2 > >::at(), and casacore::Cube< casacore::RigidVector< Double, 2 > >::operator()().

◆ yinc_p

template<class T >
size_t casacore::Cube< T >::yinc_p
private

◆ zinc_p

template<class T >
size_t casacore::Cube< T >::zinc_p
private

The documentation for this class was generated from the following files:
casacore::uInt
unsigned int uInt
Definition: aipstype.h:51
casacore::cube
TableExprNode cube(const TableExprNode &node)
Definition: ExprNode.h:1308