Many mathematical and logical global operators and functions which operate on ROMaskedArrays are defined. See the discussion in MaskedArrays for lists or click here (description) to go to the functions. (info) (info again!)
template<class T> const MaskedArray<T> & operator+= (const MaskedArray<T> &left, const ROMaskedArray<T> &other);The operator operator+=() adds the second argument to the first argument, putting the result in the first argument. Therefore, the second argument can be a ROMaskedArray, since it is not modified, while the first argument must be a MaskedArray, since it is modified.
The internal mask is a total copy of the input mask, and is completely independent of the input mask. However, the origin of the internal mask is shifted to coincide with that of the Array.
The Array is copy constructed, which means that it is a really smart pointer to the underlying Block, and shares this Block with the input Array.
Create a ROMaskedArray from a ROMaskedArray and a LogicalArray.
The internal mask is the AND of the input mask and the mask of the input ROMaskedArray. The origin of the internal mask is set to coincide with that of the Array of the input ROMaskedArray.
The Array from the input ROMaskedArray is copy constructed, which means that it is a really smart pointer to the underlying Block, and shares this Block with the Array from the input ROMaskedArray.
Create a ROMaskedArray from an Array and a ROMaskedLogicalArray.
The internal mask is the AND of the internal LogicalArray and the internal mask of the ROMaskedLogicalArray. The origin of the internal mask is set to coincide with that of the Array of the input ROMaskedArray.
The Array is copy constructed, which means that it is a really smart pointer to the underlying Block, and shares this Block with the input Array.
Create a ROMaskedArray from a ROMaskedArray and a ROMaskedLogicalArray.
The internal mask is the AND of the internal LogicalArray and the internal mask of the ROMaskedLogicalArray, ANDed with the mask of the input ROMaskedArray. The origin of the internal mask is set to coincide with that of the Array of the input ROMaskedArray.
The Array from the input ROMaskedArray is copy constructed, which means that it is a really smart pointer to the underlying Block, and shares this Block with the Array from the input ROMaskedArray.
Copy constructor.
The internal mask is a total copy of the mask from the input ROMaskedArray, and is completely independent of this input mask.
The Array from the input ROMaskedArray is copy constructed, which means that it is a really smart pointer to the underlying Block, and shares this Block with the Array from the input ROMaskedArray.
This functions is used by the exception handling mechanism we have defined. It merely calls the destructor. When real exceptions are available it will be unnecessary.
Return a ROMaskedArray. The new ROMaskedArray is masked by the input LogicalArray "anded" with the mask of the original ROMaskedArray. This mask must conform to the array, but it does not need to have the same origin.
Return a ROMaskedArray. The new ROMaskedArray is masked by the input ROMaskedLogicalArray "anded" with the mask of the original ROMaskedArray. This mask must conform to the array, but it does not need to have the same origin.
Make a copy of the masked array. This is a deep copy. The Array and mask components of the returned ROMaskedArray are deep copies of the Array and mask in the input ROMaskedArray pointed to by this. In other words, the Array and mask in the output ROMaskedArray are completely independent of those in the input ROMaskedArray.
Return the internal Array.
Return the (const) internal Mask.
The dimensionality of this masked array.
The number of elements of this masked array. This is the number of elements of the mask which are TRUE.
The number of elements in the underlying Array.
Check to see if the masked array is consistent. This is about the same thing as checking for invariants. If AIPS_DEBUG is defined, this is invoked after construction and on entry to most member functions.
Are the shapes identical? The origins do NOT need to be the same. Binary operations will "line up" the masked arrays at their origins, so as long as the shapes are the same the masked arrays conform.
The IPosition of the first element of the underlying Array. NOTE: The mask origin is defined to be this also.
The length of each axis.
Manipulate the storage for the underlying Array. See the description of the corresponding Array functions for more information.
Manipulate the storage for the underlying Mask. See the description of the corresponding Array functions for more information.
A MaskedArray should be thought of as a manipulator for an Array, analogous to an iterator. It allows one to perform whole Array operations on selected elements of the Array.
The mask used in the constructor for the MaskedArray must conform to the Array. However, it does not need to have the same origin. The internal mask is (will be) copy constructed with reference semantics from the input mask. Its origin is then shifted to have the same origin as the Array. Therefore, it is (will be) possible to change the internal mask by changing values in the input mask *after* the MaskedArray has been constructed. To ensure that the internal mask is independent of the input mask after construction, use mask.copy() as the input argument.
One can explicitly construct a MaskedArray from an Array and a mask or a MaskedArray and a mask. One can also use operator() on an Array or a MaskedArray to implicitly create a MaskedArray.
One can create a MaskedArray from a MaskedArray and a mask. The resulting MaskedArray has as its Array the Array from the original MaskedArray. The mask for the resulting MaskedArray is the AND of the mask from the original MaskedArray and the input mask.
Any operation involving a MaskedArray or a set of MaskedArrays is only performed for those elements where the AND of the masks is True.
Any operation involving a MaskedArray or a set of MaskedArrays results in a MaskedArray whose mask is the AND of the masks of the original MaskedArrays. The only exception to this is assignment, where the mask determines which elements of the underlying Array are assigned.
Masks, which are LogicalArrays, can be constructed by logical operations involving Arrays. They can also, of course, be constructed by individually setting individual elements of an LogicalArray.
Many mathematical and logical global operators and functions which operate on ROMaskedArrays and MaskedArrays are defined. Typically, they are defined for all sensible combinations of "MaskedArrays", Arrays, and scalars. "MaskedArrays" means ROMaskedArrays if the underlying Array will not be modified, and means MaskedArrays if the underlying Array will be modified.
Mathematical global operators and functions are defined in Arrays/MaskArrMath.h . The list is:
Logical global operators and functions are defined in Arrays/MaskArrLogi.h . The list is:
Array<Int> arr (20); . . . MaskedArray<Int> marr (arr, (arr > 5)); marr = 5;
This sets all elements of arr which are greater than 5 to 5.
Array<Int> arr (20); . . . arr (arr < 0) = 0;
This sets all elements of arr which are less than 0 to 0.
The following expressions are all equivalent. The first (and second) expressions are the most efficient, since the sum is only performed for those elements where ((a > 0) && (b > 0)). The third example is less efficient, since the sum is performed for all elements of a and b, and then the assignment is only performed for those elements where ((a > 0) && (b > 0)).
Array<Int> arr (20); Array<Int> a (20); Array<Int> b (20); . . . arr = a(a > 0) + b(b > 0); arr = a(b > 0) + b(a > 0); arr ((a > 0) && (b > 0)) = a + b; arr = (a + b) ((a > 0) && (b > 0)); arr (a > 0) = a + b(b > 0);
All of these expressions set those elements of arr where ((a > 0) && (b > 0)) to a + b. Those elements of arr where the condition is False are unchanged.
The Array class must have a "shiftOrigin()" member function added so that this can work.
Create a MaskedArray from a MaskedArray and a LogicalArray.
Create a MaskedArray from an Array and a ROMaskedLogicalArray.
Create a MaskedArray from a MaskedArray and a ROMaskedLogicalArray.
Frees up storage.
This function is used by the exception handling mechanism we have defined. It merely calls the destructor. When real exceptions are available it will be unnecessary.
Copy the values in inarray to this, only copying those elements for which the corresponding mask element is True.
Copy the values in other to this, only copying those elements for which the logical AND of the corresponding mask elements of both MaskedArrays is True.
Set every element of this array to "value", only setting those elements for which the corresponding mask element is True. In other words, a scalar behaves as if it were a constant conformant array.
Return a ROMaskedArray. The new ROMaskedArray is masked by the input LogicalArray "anded" with the mask of the original ROMaskedArray. This mask must conform to the array, but it does not need to have the same origin.
Return a MaskedArray. The new MaskedArray is masked by the input LogicalArray "anded" with the mask of the original MaskedArray. This mask must conform to the array, but it does not need to have the same origin.
Return a ROMaskedArray. The new ROMaskedArray is masked by the input ROMaskedLogicalArray "anded" with the mask of the original ROMaskedArray. This mask must conform to the array, but it does not need to have the same origin.
Return a MaskedArray. The new MaskedArray is masked by the input ROMaskedLogicalArray "anded" with the mask of the original MaskedArray. This mask must conform to the array, but it does not need to have the same origin.
Return the internal Array, writeable.
Manipulate the storage for the underlying Array. See the description of the corresponding Array functions for more information.
Copyright © 1995 Associated Universities Inc., Washington, D.C.