26#ifndef SCIMATH_STATISTICSDATASET_H
27#define SCIMATH_STATISTICSDATASET_H
29#include <casacore/casa/aips.h>
31#include <casacore/scimath/StatsFramework/StatisticsTypes.h>
47template <
class AccumType,
class DataIterator,
class MaskIterator =
const Bool*,
48 class WeightsIterator = DataIterator>
63 std::unique_ptr<std::pair<DataRanges, Bool>>
ranges;
66 std::unique_ptr<std::pair<MaskIterator, uInt>>
mask;
118 void addData(
const DataIterator&
first,
const WeightsIterator& weightFirst,
119 const MaskIterator& maskFirst,
uInt nr,
uInt dataStride = 1,
122 void addData(
const DataIterator&
first,
const WeightsIterator& weightFirst,
123 const MaskIterator& maskFirst,
uInt nr,
const DataRanges& dataRanges,
125 uInt maskStride = 1);
150 uInt& chunkMaskStride,
Bool& chunkHasWeights);
155 Bool& chunkHasMask, MaskIterator& chunkMask,
uInt& chunkMaskStride,
156 Bool& chunkHasWeights, WeightsIterator& chunkWeights);
161 std::unique_ptr<DataIterator[]>& dataIter,
162 std::unique_ptr<MaskIterator[]>& maskIter,
163 std::unique_ptr<WeightsIterator[]>& weightsIter,
195 void setData(
const DataIterator&
first,
const WeightsIterator& weightFirst,
196 const MaskIterator& maskFirst,
uInt nr,
uInt dataStride = 1,
199 void setData(
const DataIterator&
first,
const WeightsIterator& weightFirst,
200 const MaskIterator& maskFirst,
uInt nr,
const DataRanges& dataRanges,
202 uInt maskStride = 1);
226 typename std::vector<DataIterator>::const_iterator
_dend{},
_diter{};
227 std::vector<Int64>::const_iterator
_citer{};
237#ifndef CASACORE_NO_AUTO_TEMPLATES
238#include <casacore/scimath/StatsFramework/StatisticsDataset.tcc>
void initLoopVars(uInt64 &chunkCount, uInt &chunkStride, Bool &chunkHasRanges, DataRanges &chunkRanges, Bool &chunkIsIncludeRanges, Bool &chunkHasMask, uInt &chunkMaskStride, Bool &chunkHasWeights)
used for threaded methods
void addData(const DataIterator &first, uInt nr, const DataRanges &dataRanges, Bool isInclude=True, uInt dataStride=1, Bool nrAccountsForStride=False)
void setDataProvider(StatsDataProvider< CASA_STATP > *dataProvider)
instead of setting and adding data "by hand", set the data provider that will provide all the data se...
void addData(const DataIterator &first, const WeightsIterator &weightFirst, const MaskIterator &maskFirst, uInt nr, uInt dataStride=1, Bool nrAccountsForStride=False, uInt maskStride=1)
std::vector< uInt >::const_iterator _dsiter
void setData(const DataIterator &first, const MaskIterator &maskFirst, uInt nr, const DataRanges &dataRanges, Bool isInclude=True, uInt dataStride=1, Bool nrAccountsForStride=False, uInt maskStride=1)
void addData(const DataIterator &first, const WeightsIterator &weightFirst, uInt nr, const DataRanges &dataRanges, Bool isInclude=True, uInt dataStride=1, Bool nrAccountsForStride=False)
void setData(const DataIterator &first, const WeightsIterator &weightFirst, const MaskIterator &maskFirst, uInt nr, const DataRanges &dataRanges, Bool isInclude=True, uInt dataStride=1, Bool nrAccountsForStride=False, uInt maskStride=1)
const ChunkData & initLoopVars()
void addData(const DataIterator &first, const MaskIterator &maskFirst, uInt nr, uInt dataStride=1, Bool nrAccountsForStride=False, uInt maskStride=1)
void setData(const DataIterator &first, const WeightsIterator &weightFirst, uInt nr, uInt dataStride=1, Bool nrAccountsForStride=False)
std::map< uInt, Bool > _isIncludeRanges
StatisticsDataset< CASA_STATP > & operator=(const StatisticsDataset< CASA_STATP > &other)
use copy semantics, except for the data provider which uses reference semantics
std::vector< DataIterator > _data
StatsDataProvider< CASA_STATP > * getDataProvider()
void setData(const DataIterator &first, const MaskIterator &maskFirst, uInt nr, uInt dataStride=1, Bool nrAccountsForStride=False, uInt maskStride=1)
std::vector< DataIterator >::const_iterator _dend
std::vector< Int64 >::const_iterator _citer
std::map< uInt, uInt > _maskStrides
std::vector< uInt > _dataStrides
void incrementThreadIters(DataIterator &dataIter, MaskIterator &maskIter, WeightsIterator &weightsIter, uInt64 &offset, uInt nthreads) const
Bool increment(Bool includeIDataset)
Bool empty() const
returns !
std::map< uInt, DataRanges > _dataRanges
void addData(const DataIterator &first, const MaskIterator &maskFirst, uInt nr, const DataRanges &dataRanges, Bool isInclude=True, uInt dataStride=1, Bool nrAccountsForStride=False, uInt maskStride=1)
void addData(const DataIterator &first, const WeightsIterator &weightFirst, uInt nr, uInt dataStride=1, Bool nrAccountsForStride=False)
std::map< uInt, MaskIterator > _masks
maps data to masks
void setData(const DataIterator &first, const WeightsIterator &weightFirst, const MaskIterator &maskFirst, uInt nr, uInt dataStride=1, Bool nrAccountsForStride=False, uInt maskStride=1)
void initLoopVars(DataIterator &chunkData, uInt64 &chunkCount, uInt &chunkStride, Bool &chunkHasRanges, DataRanges &chunkRanges, Bool &chunkIsIncludeRanges, Bool &chunkHasMask, MaskIterator &chunkMask, uInt &chunkMaskStride, Bool &chunkHasWeights, WeightsIterator &chunkWeights)
used for unthreaded methods
const std::vector< Int64 > & getCounts() const
get data counts associated with the underlying data sets
void initThreadVars(uInt &nBlocks, uInt64 &extra, uInt &nthreads, std::unique_ptr< DataIterator[]> &dataIter, std::unique_ptr< MaskIterator[]> &maskIter, std::unique_ptr< WeightsIterator[]> &weightsIter, std::unique_ptr< uInt64[]> &offset, uInt nThreadsMax) const
StatsDataProvider< CASA_STATP > * _dataProvider
const StatsDataProvider< CASA_STATP > * getDataProvider() const
void setData(const DataIterator &first, uInt nr, const DataRanges &dataRanges, Bool isInclude=True, uInt dataStride=1, Bool nrAccountsForStride=False)
void _throwIfDataProviderDefined() const
void setData(const DataIterator &first, uInt nr, uInt dataStride=1, Bool nrAccountsForStride=False)
setdata() clears any current datasets or data provider and then adds the specified data set as the fi...
void addData(const DataIterator &first, const WeightsIterator &weightFirst, const MaskIterator &maskFirst, uInt nr, const DataRanges &dataRanges, Bool isInclude=True, uInt dataStride=1, Bool nrAccountsForStride=False, uInt maskStride=1)
std::vector< DataIterator >::const_iterator _diter
std::map< uInt, WeightsIterator > _weights
maps data to weights.
std::vector< Int64 > _counts
StatisticsDataset(const StatisticsDataset &other)
void setData(const DataIterator &first, const WeightsIterator &weightFirst, uInt nr, const DataRanges &dataRanges, Bool isInclude=True, uInt dataStride=1, Bool nrAccountsForStride=False)
void addData(const DataIterator &first, uInt nr, uInt dataStride=1, Bool nrAccountsForStride=False)
Add a dataset to an existing set of datasets on which statistics are to be calculated.
Abstract base class which defines interface for providing "datasets" to the statistics framework in c...
For temporary backward namespace compatibility, use casa as alias for casacore.
int offset(int, int) const
compute a linear offset from array indicies
long long Int64
Define the extra non-standard types used by Casacore (like proposed uSize, Size).
bool Bool
Define the standard types used by Casacore.
unsigned long long uInt64
holds information about a data chunk.
std::unique_ptr< std::pair< DataRanges, Bool > > ranges
associated ranges.
uInt dataStride
data stride
std::unique_ptr< WeightsIterator > weights
associated weights.
std::unique_ptr< std::pair< MaskIterator, uInt > > mask
associated mask.
DataIterator data
start of data
uInt64 count
total number of points