Loading...
Searching...
No Matches
MaskedLatticeStatsDataProvider.h
Go to the documentation of this file.
//# Copyright (C) 2000,2001
//# 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_MASKEDLATTICESTATSDATAPROVIDER_H
#define LATTICES_MASKEDLATTICESTATSDATAPROVIDER_H
#include <casacore/lattices/LatticeMath/LatticeStatsDataProviderBase.h>
#include <casacore/lattices/Lattices/MaskedLattice.h>
#include <casacore/lattices/Lattices/MaskedLatticeIterator.h>
#include <casacore/casa/aips.h>
namespace casacore {
// Data provider which allows stats framework to iterate through a masked lattice.
template <class T> class MaskedLatticeStatsDataProvider
: public LatticeStatsDataProviderBase<T> {
public:
// default constructor. Must set lattice after construction but before
// using the object
MaskedLatticeStatsDataProvider();
// <src>iteratorLimitBytes</src> is related to the size of the lattice.
// If the lattice is greater than this size, then a lattice iterator will
// be used to step through the lattice. If less, then all the data in the
// values in the lattice are retrieved in a single chunk. The advantage of
// the iterator is that less memory is used. The disadvantage is there is
// a significant performace cost, so if the lattice is small, it is better to
// get all its values in a single chunk and forgo the iterator. This is particularly
// true when looping for a large number of iterations and creating a
// MaskedLatticeStatsDataProvider each loop (in that case, you probably will want
// to create a single object before the loop and use setLattice() to update
// its lattice).
MaskedLatticeStatsDataProvider(
MaskedLattice<T>& lattice, uInt iteratorLimitBytes=4096*4096
);
~MaskedLatticeStatsDataProvider();
void operator++();
uInt estimatedSteps() const;
// Are there any data sets left to provide?
Bool atEnd() const;
// Take any actions necessary to finalize the provider. This will be called when
// atEnd() returns True.
void finalize();
// get the count of elements in the current data set. When implementing this method, be
// certain to take stride into account; ie for a data set with nominally 100 elements that
// is to have a stride of two, this method should return 50.
uInt64 getCount();
// get the current data set
const T* getData();
// Get the associated mask of the current dataset. Only called if hasMask() returns True;
const Bool* getMask();
// returns something reasonable based on the lattice size.
uInt getNMaxThreads() const;
// Does the current data set have an associated mask?
Bool hasMask() const;
// reset the provider to point to the first data set it manages.
void reset();
// set the lattice. Automatically resets the lattice iterator.
// <src>iteratorLimitBytes</src> is related to the size of the lattice.
// If the lattice is greater than this size, then a lattice iterator will
// be used to step through the lattice. If less, then all the data in the
// values in the lattice are retrieved in a single chunk. The advantage of
// the iterator is that less memory is used. The disadvantage is there is
// a significant performace cost, so if the lattice is small, it is better to
// get all its values in a single chunk and forgo the iterator. This is particularly
// true when looping for a large number of iterations and creating a
// MaskedLatticeStatsDataProvider each loop (in that case, you probably will want
// to create a single object before the loop and use setLattice() to update
// its lattice).
void setLattice(const MaskedLattice<T>& lattice, uInt iteratorLimitBytes=4096*4096);
// <group>
// see base class documentation.
void updateMaxPos(const std::pair<Int64, Int64>& maxpos);
void updateMinPos(const std::pair<Int64, Int64>& minpos);
// </group>
private:
std::shared_ptr<RO_MaskedLatticeIterator<T>> _iter;
Array<T> _currentSlice;
Array<Bool> _currentMaskSlice;
const T* _currentPtr;
const Bool* _currentMaskPtr;
Bool _delData, _delMask, _atEnd;
uInt _nMaxThreads;
void _freeStorage();
};
}
#ifndef CASACORE_NO_AUTO_TEMPLATES
#include <casacore/lattices/LatticeMath/MaskedLatticeStatsDataProvider.tcc>
#endif //# CASACORE_NO_AUTO_TEMPLATES
#endif
casacore::Array
Definition Array.h:155
casacore::LatticeStatsDataProviderBase::LatticeStatsDataProviderBase
LatticeStatsDataProviderBase()
casacore::MaskedLatticeStatsDataProvider::hasMask
Bool hasMask() const
Does the current data set have an associated mask?
casacore::MaskedLatticeStatsDataProvider::atEnd
Bool atEnd() const
Are there any data sets left to provide?
casacore::MaskedLatticeStatsDataProvider::MaskedLatticeStatsDataProvider
MaskedLatticeStatsDataProvider()
default constructor.
casacore::MaskedLatticeStatsDataProvider::getNMaxThreads
uInt getNMaxThreads() const
returns something reasonable based on the lattice size.
casacore::MaskedLatticeStatsDataProvider::operator++
void operator++()
increment the data provider to the next dataset, mask, range set, and weights.
casacore::MaskedLatticeStatsDataProvider::_freeStorage
void _freeStorage()
casacore::MaskedLatticeStatsDataProvider::getData
const T * getData()
get the current data set
casacore::MaskedLatticeStatsDataProvider::updateMinPos
void updateMinPos(const std::pair< Int64, Int64 > &minpos)
casacore::MaskedLatticeStatsDataProvider::_currentSlice
Array< T > _currentSlice
Definition MaskedLatticeStatsDataProvider.h:120
casacore::MaskedLatticeStatsDataProvider::_nMaxThreads
uInt _nMaxThreads
Definition MaskedLatticeStatsDataProvider.h:125
casacore::MaskedLatticeStatsDataProvider::setLattice
void setLattice(const MaskedLattice< T > &lattice, uInt iteratorLimitBytes=4096 *4096)
set the lattice.
casacore::MaskedLatticeStatsDataProvider::finalize
void finalize()
Take any actions necessary to finalize the provider.
casacore::MaskedLatticeStatsDataProvider::_delData
Bool _delData
Definition MaskedLatticeStatsDataProvider.h:124
casacore::MaskedLatticeStatsDataProvider::~MaskedLatticeStatsDataProvider
~MaskedLatticeStatsDataProvider()
casacore::MaskedLatticeStatsDataProvider::_currentMaskSlice
Array< Bool > _currentMaskSlice
Definition MaskedLatticeStatsDataProvider.h:121
casacore::MaskedLatticeStatsDataProvider::reset
void reset()
reset the provider to point to the first data set it manages.
casacore::MaskedLatticeStatsDataProvider::_currentMaskPtr
const Bool * _currentMaskPtr
Definition MaskedLatticeStatsDataProvider.h:123
casacore::MaskedLatticeStatsDataProvider::_atEnd
Bool _atEnd
Definition MaskedLatticeStatsDataProvider.h:124
casacore::MaskedLatticeStatsDataProvider::getCount
uInt64 getCount()
get the count of elements in the current data set.
casacore::MaskedLatticeStatsDataProvider::MaskedLatticeStatsDataProvider
MaskedLatticeStatsDataProvider(MaskedLattice< T > &lattice, uInt iteratorLimitBytes=4096 *4096)
iteratorLimitBytes is related to the size of the lattice.
casacore::MaskedLatticeStatsDataProvider::_iter
std::shared_ptr< RO_MaskedLatticeIterator< T > > _iter
Definition MaskedLatticeStatsDataProvider.h:119
casacore::MaskedLatticeStatsDataProvider::estimatedSteps
uInt estimatedSteps() const
estimated number of steps to iterate through the the lattice
casacore::MaskedLatticeStatsDataProvider::_delMask
Bool _delMask
Definition MaskedLatticeStatsDataProvider.h:124
casacore::MaskedLatticeStatsDataProvider::getMask
const Bool * getMask()
Get the associated mask of the current dataset.
casacore::MaskedLatticeStatsDataProvider::_currentPtr
const T * _currentPtr
Definition MaskedLatticeStatsDataProvider.h:122
casacore::MaskedLatticeStatsDataProvider::updateMaxPos
void updateMaxPos(const std::pair< Int64, Int64 > &maxpos)
see base class documentation.
casacore::MaskedLattice
Definition MaskedLattice.h:216
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::uInt64
unsigned long long uInt64
Definition aipsxtype.h:37