Loading...
Searching...
No Matches
LatticeRegion.h
Go to the documentation of this file.
//# LatticeRegion.h: An optionally strided region in a lattice
//# Copyright (C) 1998,1999,2000,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_LATTICEREGION_H
#define LATTICES_LATTICEREGION_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/lattices/Lattices/Lattice.h>
#include <casacore/casa/Arrays/Slicer.h>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
//# Forward Declarations
class LCRegion;
// <summary>
// An optionally strided region in a Lattice
// </summary>
// <use visibility=local>
// <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos="">
// </reviewed>
// <prerequisite>
// <li> <linkto class="LCRegion">LCRegion</linkto>
// </prerequisite>
// <synopsis>
// A LatticeRegion is a lattice referencing a subset of another lattice
// by means of a <linkto class="Slicer">Slicer</linkto> object.
// <br>It is useful when only a subset of a lattice needs to be accessed.
// <p>
// When the LatticeRegion is created from a const <src>Lattice</src> object,
// it is not writable, thus it can only be used as an rvalue.
// </synopsis>
// <example>
// <srcblock>
// </srcblock>
// </example>
//# <todo asof="yyyy/mm/dd">
//# </todo>
class LatticeRegion: public Lattice<Bool>
{
public:
// The default constructor creates a LatticeRegion that is useless for just
// about everything, except that it can be assigned to with the assignment
// operator.
LatticeRegion();
// Create from the given region.
// The pointer to the parent can be 0.
LatticeRegion (const LCRegion& region);
// Create from the given region and take over the pointer.
// This means the user should not delete the region object pointed to,
// because it will be deleted by the LatticeRegion destructor.
// The pointer to the parent is set to 0.
LatticeRegion (LCRegion* region);
// Construct from the given slicer. The lattice shape has to be
// the lattice shape of the lattice where the region is taken from.
LatticeRegion (const Slicer& slicer, const IPosition& latticeShape);
// Copy constructor (reference semantics).
LatticeRegion (const LatticeRegion& other);
virtual ~LatticeRegion();
// Assignment (reference semantics).
LatticeRegion& operator= (const LatticeRegion& other);
// Make a copy of the object (reference semantics).
virtual Lattice<Bool>* clone() const;
// Is the LatticeRegion writable?
virtual Bool isWritable() const;
// Has the region a mask?
Bool hasMask() const;
// Handle the (un)locking.
// <group>
virtual Bool lock (FileLocker::LockType, uInt nattempts);
virtual void unlock();
virtual Bool hasLock (FileLocker::LockType) const;
// </group>
// Resynchronize the PagedArray object with the lattice file.
// This function is only useful if no read-locking is used, ie.
// if the table lock option is UserNoReadLocking or AutoNoReadLocking.
// In that cases the table system does not acquire a read-lock, thus
// does not synchronize itself automatically.
virtual void resync();
// Flush the data (but do not unlock).
virtual void flush();
// Temporarily close the lattice.
// It will be reopened automatically on the next access.
virtual void tempClose();
// Explicitly reopen the temporarily closed lattice.
virtual void reopen();
// Get the LCRegion object describing the region.
// Note that it does not contain strides, even if this LatticeRegion
// object was constructed from a Slicer with strides. In that case
// the region only defines the resulting shape.
const LCRegion& region() const;
// Get the Slicer object describing the region.
// Note that it may contain strides.
const Slicer& slicer() const;
// Returns the shape of the LatticeRegion including all degenerate axes
// (i.e. axes with a length of one).
virtual IPosition shape() const;
// Returns the number of axes in this LatticeRegion. This includes all
// degenerate axes.
virtual uInt ndim() const;
// Returns the total number of elements in this LatticeRegion.
virtual size_t nelements() const;
// Check class internals - used for debugging. Should always return True
virtual Bool ok() const;
// This function is used by the LatticeIterator class to generate an
// iterator of the correct type for this Lattice. Not recommended
// for general use.
virtual LatticeIterInterface<Bool>* makeIter
(const LatticeNavigator& navigator,
Bool useRef) const;
// Returns the maximum recommended number of pixels for a cursor.
// This is the number of pixels in a tile.
virtual uInt advisedMaxPixels() const;
// Help the user pick a cursor for most efficient access.
virtual IPosition doNiceCursorShape (uInt maxPixels) const;
// Maximum size - not necessarily all used. In pixels.
virtual uInt maximumCacheSize() const;
// Set the maximum (allowed) cache size as indicated.
virtual void setMaximumCacheSize (uInt howManyPixels);
// Set the cache size as to "fit" the indicated path.
virtual void setCacheSizeFromPath (const IPosition& sliceShape,
const IPosition& windowStart,
const IPosition& windowLength,
const IPosition& axisPath);
// Set the actual cache size for this Array to be be big enough for the
// indicated number of tiles. This cache is not shared with PagedArrays
// in other rows and is always clipped to be less than the maximum value
// set using the setMaximumCacheSize member function.
// tiles. Tiles are cached using a first in first out algorithm.
virtual void setCacheSizeInTiles (uInt howManyTiles);
// Clears and frees up the caches, but the maximum allowed cache size is
// unchanged from when setCacheSize was called
virtual void clearCache();
// Report on cache success.
virtual void showCacheStatistics (ostream& os) 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>
// Convert positions to positions in the parent object.
// <group>
Slicer convert (const Slicer& slicer) const;
IPosition convert (const IPosition& position) const;
// </group>
// 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);
private:
LCRegion* itsRegion;
Slicer itsSlicer;
Bool itsHasRegionMask;
};
inline Bool LatticeRegion::hasMask() const
{
return itsHasRegionMask;
}
inline const LCRegion& LatticeRegion::region() const
{
return *itsRegion;
}
inline const Slicer& LatticeRegion::slicer() const
{
return itsSlicer;
}
} //# NAMESPACE CASACORE - END
#endif
casacore::Array
Definition Array.h:155
casacore::FileLocker::LockType
LockType
Define the possible lock types.
Definition FileLocker.h:93
casacore::Functional
Definition Functional.h:120
casacore::IPosition
Definition IPosition.h:117
casacore::LCRegion
Definition LCRegion.h:86
casacore::LatticeIterInterface
Definition LatticeIterInterface.h:112
casacore::LatticeNavigator
Definition LatticeNavigator.h:180
casacore::LatticeRegion::makeIter
virtual LatticeIterInterface< Bool > * makeIter(const LatticeNavigator &navigator, Bool useRef) const
This function is used by the LatticeIterator class to generate an iterator of the correct type for th...
casacore::LatticeRegion::unlock
virtual void unlock()
casacore::LatticeRegion::showCacheStatistics
virtual void showCacheStatistics(ostream &os) const
Report on cache success.
casacore::LatticeRegion::LatticeRegion
LatticeRegion()
The default constructor creates a LatticeRegion that is useless for just about everything,...
casacore::LatticeRegion::maximumCacheSize
virtual uInt maximumCacheSize() const
Maximum size - not necessarily all used.
casacore::LatticeRegion::doPutSlice
virtual void doPutSlice(const Array< Bool > &sourceBuffer, const IPosition &where, const IPosition &stride)
Do the actual putting of the mask.
casacore::LatticeRegion::nelements
virtual size_t nelements() const
Returns the total number of elements in this LatticeRegion.
casacore::LatticeRegion::copyData
virtual void copyData(const Lattice< Bool > &from)
Copy the data from the given lattice to this one.
casacore::LatticeRegion::apply
virtual void apply(const Functional< Bool, Bool > &function)
casacore::LatticeRegion::convert
IPosition convert(const IPosition &position) const
casacore::LatticeRegion::LatticeRegion
LatticeRegion(const LatticeRegion &other)
Copy constructor (reference semantics).
casacore::LatticeRegion::LatticeRegion
LatticeRegion(const LCRegion &region)
Create from the given region.
casacore::LatticeRegion::LatticeRegion
LatticeRegion(const Slicer &slicer, const IPosition &latticeShape)
Construct from the given slicer.
casacore::LatticeRegion::hasMask
Bool hasMask() const
Has the region a mask?
Definition LatticeRegion.h:233
casacore::LatticeRegion::lock
virtual Bool lock(FileLocker::LockType, uInt nattempts)
Handle the (un)locking.
casacore::LatticeRegion::clearCache
virtual void clearCache()
Clears and frees up the caches, but the maximum allowed cache size is unchanged from when setCacheSiz...
casacore::LatticeRegion::setMaximumCacheSize
virtual void setMaximumCacheSize(uInt howManyPixels)
Set the maximum (allowed) cache size as indicated.
casacore::LatticeRegion::tempClose
virtual void tempClose()
Temporarily close the lattice.
casacore::LatticeRegion::putAt
virtual void putAt(const Bool &value, const IPosition &where)
Put the value of a single element.
casacore::LatticeRegion::shape
virtual IPosition shape() const
Returns the shape of the LatticeRegion including all degenerate axes (i.e.
casacore::LatticeRegion::setCacheSizeFromPath
virtual void setCacheSizeFromPath(const IPosition &sliceShape, const IPosition &windowStart, const IPosition &windowLength, const IPosition &axisPath)
Set the cache size as to "fit" the indicated path.
casacore::LatticeRegion::advisedMaxPixels
virtual uInt advisedMaxPixels() const
Returns the maximum recommended number of pixels for a cursor.
casacore::LatticeRegion::convert
Slicer convert(const Slicer &slicer) const
Convert positions to positions in the parent object.
casacore::LatticeRegion::itsRegion
LCRegion * itsRegion
Definition LatticeRegion.h:227
casacore::LatticeRegion::apply
virtual void apply(Bool(*function)(Bool))
Replace every element, x, of the Lattice with the result of f(x).
casacore::LatticeRegion::clone
virtual Lattice< Bool > * clone() const
Make a copy of the object (reference semantics).
casacore::LatticeRegion::flush
virtual void flush()
Flush the data (but do not unlock).
casacore::LatticeRegion::itsSlicer
Slicer itsSlicer
Definition LatticeRegion.h:228
casacore::LatticeRegion::hasLock
virtual Bool hasLock(FileLocker::LockType) const
casacore::LatticeRegion::apply
virtual void apply(Bool(*function)(const Bool &))
casacore::LatticeRegion::isWritable
virtual Bool isWritable() const
Is the LatticeRegion writable?
casacore::LatticeRegion::doNiceCursorShape
virtual IPosition doNiceCursorShape(uInt maxPixels) const
Help the user pick a cursor for most efficient access.
casacore::LatticeRegion::operator=
LatticeRegion & operator=(const LatticeRegion &other)
Assignment (reference semantics).
casacore::LatticeRegion::ndim
virtual uInt ndim() const
Returns the number of axes in this LatticeRegion.
casacore::LatticeRegion::LatticeRegion
LatticeRegion(LCRegion *region)
Create from the given region and take over the pointer.
casacore::LatticeRegion::slicer
const Slicer & slicer() const
Get the Slicer object describing the region.
Definition LatticeRegion.h:241
casacore::LatticeRegion::ok
virtual Bool ok() const
Check class internals - used for debugging.
casacore::LatticeRegion::~LatticeRegion
virtual ~LatticeRegion()
casacore::LatticeRegion::reopen
virtual void reopen()
Explicitly reopen the temporarily closed lattice.
casacore::LatticeRegion::resync
virtual void resync()
Resynchronize the PagedArray object with the lattice file.
casacore::LatticeRegion::set
virtual void set(const Bool &value)
The following "put" functions are described in detail in class Lattice.
casacore::LatticeRegion::setCacheSizeInTiles
virtual void setCacheSizeInTiles(uInt howManyTiles)
Set the actual cache size for this Array to be be big enough for the indicated number of tiles.
casacore::LatticeRegion::doGetSlice
virtual Bool doGetSlice(Array< Bool > &buffer, const Slicer &section)
Do the actual getting of the mask.
casacore::LatticeRegion::itsHasRegionMask
Bool itsHasRegionMask
Definition LatticeRegion.h:229
casacore::LatticeRegion::region
const LCRegion & region() const
Get the LCRegion object describing the region.
Definition LatticeRegion.h:237
casacore::Lattice< Bool >::Lattice
Lattice()
Definition Lattice.h:405
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::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