Loading...
Searching...
No Matches
LCRegionSingle.h
Go to the documentation of this file.
//# LCRegionSingle.h: Abstract base class to define a single region
//# Copyright (C) 1998,1999,2003
//# 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 LATTICES_LCREGIONSINGLE_H
#define LATTICES_LCREGIONSINGLE_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/lattices/LRegions/LCRegion.h>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
// <summary>
// Abstract base class to define a single region.
// </summary>
// <use visibility=export>
// <reviewed reviewer="" date="" tests="">
// </reviewed>
// <prerequisite>
// <li> <linkto class=Slicer>Slicer</linkto>
// </prerequisite>
// <synopsis>
// The LCRegion class is the abstract base class for various types
// of LCRegion's (e.g. LCRegionEllipsoid, LCRegionBox).
// It contains the minimal bounding box of the region and, if needed,
// a mask with the same shape as the bounding box. A mask element
// is true if the element is inside the box.
// <p>
// Each LCRegion object must be able to convert itself to and from a Record.
// In that way they can be made persistent (in for example a Table).
// <p>
// The LCRegion can be used in several Lattices and Images classes and
// functions to limit the area to operate on.
// </synopsis>
// <example>
// <srcblock>
// </srcblock>
// </example>
// <motivation>
// The Slicer class is too limited as a region, because it can only
// describe a rectangular region. Specialized classes are needed to
// describe arbitrary regions. They need a base class to combine them.
// </motivation>
//# <todo asof="1997/11/11">
//# <li>
//# </todo>
class LCRegionSingle : public LCRegion
{
public:
LCRegionSingle();
// Construct with the lattice shape only.
LCRegionSingle (const IPosition& latticeShape);
// Copy constructor (copy semantics).
LCRegionSingle (const LCRegionSingle& other);
virtual ~LCRegionSingle();
// Does the region have a mask?
virtual Bool hasMask() const;
// Get the mask (as an array).
const Array<Bool> maskArray() const;
// Is the mask of this region the same as the mask of the other
Bool masksEqual (const LCRegion& other) const;
// The following "put" functions are described in detail in class
// <linkto class=Lattice>Lattice</linkto>.
// They'll throw an exception is no mask is available or if
// the mask is not writable.
// <group>
virtual void set (const Bool& value);
virtual void apply (Bool (*function)(Bool));
virtual void apply (Bool (*function)(const Bool&));
virtual void apply (const Functional<Bool,Bool>& function);
virtual void putAt (const Bool& value, const IPosition& where);
virtual void copyData (const Lattice<Bool>& from);
// </group>
protected:
// Assignment (copy semantics) is only useful for derived classes.
LCRegionSingle& operator= (const LCRegionSingle& other);
// Set the pointer to the mask in the derived class.
void setMaskPtr (Lattice<Bool>& mask);
// Do the actual getting of the mask.
virtual Bool doGetSlice (Array<Bool>& buffer, const Slicer& section);
// Do the actual putting of the mask. Only possible if region is writable.
virtual void doPutSlice (const Array<Bool>& sourceBuffer,
const IPosition& where,
const IPosition& stride);
// Get the best cursor shape.
virtual IPosition doNiceCursorShape (uInt maxPixels) const;
// Make an iterator.
// When the underlying region has a mask, an iterator for that region
// is returned. Otherwise the standard iterator is returned.
virtual LatticeIterInterface<Bool>* makeIter
(const LatticeNavigator& navigator,
Bool useRef) const;
private:
Bool itsHasMask;
Lattice<Bool>* itsMaskPtr;
};
} //# NAMESPACE CASACORE - END
#endif
casacore::Array
Definition Array.h:155
casacore::Functional
Definition Functional.h:120
casacore::IPosition
Definition IPosition.h:117
casacore::LCRegionSingle::makeIter
virtual LatticeIterInterface< Bool > * makeIter(const LatticeNavigator &navigator, Bool useRef) const
Make an iterator.
casacore::LCRegionSingle::apply
virtual void apply(const Functional< Bool, Bool > &function)
casacore::LCRegionSingle::setMaskPtr
void setMaskPtr(Lattice< Bool > &mask)
Set the pointer to the mask in the derived class.
casacore::LCRegionSingle::doNiceCursorShape
virtual IPosition doNiceCursorShape(uInt maxPixels) const
Get the best cursor shape.
casacore::LCRegionSingle::doPutSlice
virtual void doPutSlice(const Array< Bool > &sourceBuffer, const IPosition &where, const IPosition &stride)
Do the actual putting of the mask.
casacore::LCRegionSingle::hasMask
virtual Bool hasMask() const
Does the region have a mask?
casacore::LCRegionSingle::apply
virtual void apply(Bool(*function)(const Bool &))
casacore::LCRegionSingle::operator=
LCRegionSingle & operator=(const LCRegionSingle &other)
Assignment (copy semantics) is only useful for derived classes.
casacore::LCRegionSingle::~LCRegionSingle
virtual ~LCRegionSingle()
casacore::LCRegionSingle::LCRegionSingle
LCRegionSingle(const IPosition &latticeShape)
Construct with the lattice shape only.
casacore::LCRegionSingle::doGetSlice
virtual Bool doGetSlice(Array< Bool > &buffer, const Slicer &section)
Do the actual getting of the mask.
casacore::LCRegionSingle::apply
virtual void apply(Bool(*function)(Bool))
Replace every element, x, of the Lattice with the result of f(x).
casacore::LCRegionSingle::copyData
virtual void copyData(const Lattice< Bool > &from)
Copy the data from the given lattice to this one.
casacore::LCRegionSingle::itsMaskPtr
Lattice< Bool > * itsMaskPtr
Definition LCRegionSingle.h:140
casacore::LCRegionSingle::set
virtual void set(const Bool &value)
The following "put" functions are described in detail in class Lattice.
casacore::LCRegionSingle::LCRegionSingle
LCRegionSingle()
casacore::LCRegionSingle::itsHasMask
Bool itsHasMask
Definition LCRegionSingle.h:139
casacore::LCRegionSingle::masksEqual
Bool masksEqual(const LCRegion &other) const
Is the mask of this region the same as the mask of the other.
casacore::LCRegionSingle::maskArray
const Array< Bool > maskArray() const
Get the mask (as an array).
casacore::LCRegionSingle::LCRegionSingle
LCRegionSingle(const LCRegionSingle &other)
Copy constructor (copy semantics).
casacore::LCRegionSingle::putAt
virtual void putAt(const Bool &value, const IPosition &where)
Put the value of a single element.
casacore::LCRegion::LCRegion
LCRegion()
casacore::LCRegion::latticeShape
const IPosition & latticeShape() const
Give the full lattice shape.
Definition LCRegion.h:229
casacore::LatticeIterInterface
Definition LatticeIterInterface.h:112
casacore::LatticeNavigator
Definition LatticeNavigator.h:180
casacore::Lattice
Definition Lattice.h:230
casacore::Slicer
Definition Slicer.h:287
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::uInt
unsigned int uInt
Definition aipstype.h:49
casacore::mask
LatticeExprNode mask(const LatticeExprNode &expr)
This function returns the mask of the given expression.
casacore::Bool
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40
casacore::value
NewDelAllocator< T > NewDelAllocator< T >::value
Definition Allocator.h:369