26#ifndef SCIMATH_CLASSICALQUANTILECOMPUTER_H
27#define SCIMATH_CLASSICALQUANTILECOMPUTER_H
29#include <casacore/scimath/StatsFramework/StatisticsAlgorithmQuantileComputer.h>
31#include <casacore/scimath/StatsFramework/StatisticsUtilities.h>
33#include <casacore/casa/aips.h>
46template <
class AccumType,
class DataIterator,
class MaskIterator =
const Bool*,
47 class WeightsIterator = DataIterator>
73 uInt binningThreshholdSizeBytes,
Bool persistSortedArray,
uInt nBins);
77 uInt binningThreshholdSizeBytes,
Bool persistSortedArray,
88 const std::set<Double>& fractions,
uInt64 mynpts,
89 AccumType mymin, AccumType mymax,
90 uInt binningThreshholdSizeBytes,
Bool persistSortedArray,
95 virtual std::map<Double, AccumType>
getQuantiles(
const std::set<Double>& fractions,
uInt64 mynpts,
96 AccumType mymin, AccumType mymax,
97 uInt binningThreshholdSizeBytes,
98 Bool persistSortedArray,
uInt nBins);
110 virtual void _findBins(std::vector<std::vector<uInt64>>& binCounts,
111 std::vector<std::shared_ptr<AccumType>>& sameVal,
112 std::vector<Bool>& allSame,
const DataIterator& dataBegin,
uInt64 nr,
114 const std::vector<AccumType>& maxLimit)
const;
116 virtual void _findBins(std::vector<std::vector<uInt64>>& binCounts,
117 std::vector<std::shared_ptr<AccumType>>& sameVal,
118 std::vector<Bool>& allSame,
const DataIterator& dataBegin,
uInt64 nr,
121 const std::vector<AccumType>& maxLimit)
const;
123 virtual void _findBins(std::vector<std::vector<uInt64>>& binCounts,
124 std::vector<std::shared_ptr<AccumType>>& sameVal,
125 std::vector<Bool>& allSame,
const DataIterator& dataBegin,
uInt64 nr,
126 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
128 const std::vector<AccumType>& maxLimit)
const;
130 virtual void _findBins(std::vector<std::vector<uInt64>>& binCounts,
131 std::vector<std::shared_ptr<AccumType>>& sameVal,
132 std::vector<Bool>& allSame,
const DataIterator& dataBegin,
uInt64 nr,
133 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
136 const std::vector<AccumType>& maxLimit)
const;
138 virtual void _findBins(std::vector<std::vector<uInt64>>& binCounts,
139 std::vector<std::shared_ptr<AccumType>>& sameVal,
140 std::vector<Bool>& allSame,
const DataIterator& dataBegin,
141 const WeightsIterator& weightsBegin,
uInt64 nr,
uInt dataStride,
143 const std::vector<AccumType>& maxLimit)
const;
145 virtual void _findBins(std::vector<std::vector<uInt64>>& binCounts,
146 std::vector<std::shared_ptr<AccumType>>& sameVal,
147 std::vector<Bool>& allSame,
const DataIterator& dataBegin,
148 const WeightsIterator& weightsBegin,
uInt64 nr,
uInt dataStride,
151 const std::vector<AccumType>& maxLimit)
const;
153 virtual void _findBins(std::vector<std::vector<uInt64>>& binCounts,
154 std::vector<std::shared_ptr<AccumType>>& sameVal,
155 std::vector<Bool>& allSame,
const DataIterator& dataBegin,
156 const WeightsIterator& weightsBegin,
uInt64 nr,
uInt dataStride,
157 const MaskIterator& maskBegin,
uInt maskStride,
const DataRanges& ranges,
159 const std::vector<AccumType>& maxLimit)
const;
161 virtual void _findBins(std::vector<std::vector<uInt64>>& binCounts,
162 std::vector<std::shared_ptr<AccumType>>& sameVal,
163 std::vector<Bool>& allSame,
const DataIterator& dataBegin,
164 const WeightsIterator& weightBegin,
uInt64 nr,
uInt dataStride,
165 const MaskIterator& maskBegin,
uInt maskStride,
167 const std::vector<AccumType>& maxLimit)
const;
174 uInt dataStride)
const;
181 uInt dataStride,
const MaskIterator& maskBegin,
182 uInt maskStride)
const;
186 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
190 virtual void _populateArray(std::vector<AccumType>& ary,
const DataIterator& dataBegin,
191 const WeightsIterator& weightsBegin,
uInt64 nr,
192 uInt dataStride)
const;
195 virtual void _populateArray(std::vector<AccumType>& ary,
const DataIterator& dataBegin,
196 const WeightsIterator& weightsBegin,
uInt64 nr,
uInt dataStride,
200 virtual void _populateArray(std::vector<AccumType>& ary,
const DataIterator& dataBegin,
201 const WeightsIterator& weightBegin,
uInt64 nr,
uInt dataStride,
202 const MaskIterator& maskBegin,
uInt maskStride)
const;
205 virtual void _populateArray(std::vector<AccumType>& ary,
const DataIterator& dataBegin,
206 const WeightsIterator& weightBegin,
uInt64 nr,
uInt dataStride,
207 const MaskIterator& maskBegin,
uInt maskStride,
219 const DataIterator& dataBegin,
uInt64 nr,
uInt dataStride,
224 const DataIterator& dataBegin,
uInt64 nr,
uInt dataStride,
229 const DataIterator& dataBegin,
uInt64 nr,
uInt dataStride,
230 const MaskIterator& maskBegin,
uInt maskStride,
235 const DataIterator& dataBegin,
uInt64 nr,
uInt dataStride,
236 const MaskIterator& maskBegin,
uInt maskStride,
242 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
248 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
254 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
255 uInt64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
261 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
262 uInt64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
275 Bool isInclude,
uInt maxElements)
const;
279 uInt64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
280 uInt maskStride,
uInt maxElements)
const;
284 uInt64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
286 uInt maxElements)
const;
290 const WeightsIterator& weightBegin,
uInt64 nr,
uInt dataStride,
291 uInt maxElements)
const;
295 const WeightsIterator& weightsBegin,
uInt64 nr,
uInt dataStride,
300 const WeightsIterator& weightBegin,
uInt64 nr,
uInt dataStride,
301 const MaskIterator& maskBegin,
uInt maskStride,
302 uInt maxElements)
const;
306 const WeightsIterator& weightBegin,
uInt64 nr,
uInt dataStride,
307 const MaskIterator& maskBegin,
uInt maskStride,
319 const std::set<uInt64>& indices,
uInt64 maxArraySize,
320 Bool persistSortedArray);
334 std::vector<std::vector<uInt64>>
_binCounts(std::vector<std::shared_ptr<AccumType>>& sameVal,
338 std::vector<std::shared_ptr<AccumType>>& sameVal, std::vector<Bool>& allSame,
339 DataIterator dataIter, MaskIterator maskIter, WeightsIterator weightsIter,
341 const std::vector<AccumType>& maxLimit,
344 void _computeDataArray(std::vector<AccumType>& ary, DataIterator dataIter, MaskIterator maskIter,
345 WeightsIterator weightsIter,
uInt64 dataCount,
349 DataIterator dataIter, MaskIterator maskIter, WeightsIterator weightsIter,
373 const std::vector<IndexSet>& dataIndices,
uInt nBins);
378 const std::vector<IndexSet>& dataIndices,
385 Bool persistSortedArray,
uInt nBins);
394#ifndef CASACORE_NO_AUTO_TEMPLATES
395#include <casacore/scimath/StatsFramework/ClassicalQuantileComputer.tcc>
virtual Bool _populateTestArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude, uInt maxElements) const
mask and ranges
ClassicalQuantileComputer()=delete
std::set< uInt64 > IndexSet
std::vector< IndexValueMap > _dataFromMultipleBins(const std::vector< StatsHistogram< AccumType > > &hist, uInt64 maxArraySize, const std::vector< IndexSet > &dataIndices, uInt nBins)
extract data from multiple histograms given by hist.
virtual void _populateArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride) const
populate an unsorted array with valid data.
virtual void _populateArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
static IndexSet _medianIndices(uInt64 mynpts)
get the index (for odd npts) or indices (for even npts) of the median of the sorted array.
virtual StatisticsAlgorithmQuantileComputer< CASA_STATP > * clone() const
clone this object by returning a pointer to a copy
virtual void reset()
reset the private fields
virtual Bool _populateTestArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude, uInt maxElements) const
weights, mask, ranges
virtual void _populateArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
mask and ranges
virtual void _findBins(std::vector< std::vector< uInt64 > > &binCounts, std::vector< std::shared_ptr< AccumType > > &sameVal, std::vector< Bool > &allSame, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const std::vector< StatsHistogram< AccumType > > &hist, const std::vector< AccumType > &maxLimit) const
Get the counts of data within the specified histogram bins.
virtual void _findBins(std::vector< std::vector< uInt64 > > &binCounts, std::vector< std::shared_ptr< AccumType > > &sameVal, std::vector< Bool > &allSame, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude, const std::vector< StatsHistogram< AccumType > > &hist, const std::vector< AccumType > &maxLimit) const
ClassicalQuantileComputer(StatisticsDataset< CASA_STATP > *dataset)
virtual void _findBins(std::vector< std::vector< uInt64 > > &binCounts, std::vector< std::shared_ptr< AccumType > > &sameVal, std::vector< Bool > &allSame, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const std::vector< StatsHistogram< AccumType > > &hist, const std::vector< AccumType > &maxLimit) const
virtual void _populateArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
ranges
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 ¤tCount, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const IncludeLimits &includeLimits, uInt64 maxCount) const
weights
IndexValueMap _indicesToValues(uInt64 mynpts, AccumType mymin, AccumType mymax, uInt64 maxArraySize, const IndexSet &dataIndices, Bool persistSortedArray, uInt nBins)
get the values for the specified indices in the sorted array of all good data
virtual void _populateArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride) const
weights
virtual void _populateArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
weights and ranges
ClassicalQuantileComputer & operator=(const ClassicalQuantileComputer &other)
copy semantics
virtual AccumType getMedianAndQuantiles(std::map< Double, AccumType > &quantiles, const std::set< Double > &fractions, uInt64 mynpts, AccumType mymin, AccumType mymax, uInt binningThreshholdSizeBytes, Bool persistSortedArray, uInt nBins)
If one needs to compute both the median and QuantileComputer values, it is better to call getMedianAn...
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 ¤tCount, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const IncludeLimits &includeLimits, uInt64 maxCount) const
Create a std::vector of unsorted arrays, one array for each bin defined by includeLimits.
void _computeDataArray(std::vector< AccumType > &ary, DataIterator dataIter, MaskIterator maskIter, WeightsIterator weightsIter, uInt64 dataCount, const typename StatisticsDataset< CASA_STATP >::ChunkData &chunk)
Bool _valuesFromSortedArray(std::map< uInt64, AccumType > &values, uInt64 mynpts, const std::set< uInt64 > &indices, uInt64 maxArraySize, Bool persistSortedArray)
get values from sorted array if the array is small enough to be held in memory.
typename std::map< uInt64, AccumType > IndexValueMap
virtual Bool _populateTestArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude, uInt maxElements) const
ranges
virtual void _populateArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
weights, mask, ranges
virtual AccumType getMedian(uInt64 mynpts, AccumType mymin, AccumType mymax, uInt binningThreshholdSizeBytes, Bool persistSortedArray, uInt nBins)
Caller is responsible for passing correct values of mynpts, mymin, and mymax; no checking is done for...
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 ¤tCount, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude, const IncludeLimits &includeLimits, uInt64 maxCount) const
weights and ranges
virtual AccumType getMedianAbsDevMed(uInt64 mynpts, AccumType mymin, AccumType mymax, uInt binningThreshholdSizeBytes, Bool persistSortedArray, uInt nBins)
get the median of the absolute deviation about the median of the data.
virtual void _findBins(std::vector< std::vector< uInt64 > > &binCounts, std::vector< std::shared_ptr< AccumType > > &sameVal, std::vector< Bool > &allSame, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude, const std::vector< StatsHistogram< AccumType > > &hist, const std::vector< AccumType > &maxLimit) const
virtual void _findBins(std::vector< std::vector< uInt64 > > &binCounts, std::vector< std::shared_ptr< AccumType > > &sameVal, std::vector< Bool > &allSame, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const std::vector< StatsHistogram< AccumType > > &hist, const std::vector< AccumType > &maxLimit) const
std::pair< AccumType, AccumType > LimitPair
virtual void _findBins(std::vector< std::vector< uInt64 > > &binCounts, std::vector< std::shared_ptr< AccumType > > &sameVal, std::vector< Bool > &allSame, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const std::vector< StatsHistogram< AccumType > > &hist, const std::vector< AccumType > &maxLimit) const
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 ¤tCount, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude, const IncludeLimits &includeLimits, uInt64 maxCount) const
ranges
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 ¤tCount, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const IncludeLimits &includeLimits, uInt64 maxCount) const
weights and mask
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 ¤tCount, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude, const IncludeLimits &includeLimits, uInt64 maxCount) const
weights, mask, ranges
void _createDataArrays(std::vector< std::vector< AccumType > > &arrays, const IncludeLimits &includeLimits, uInt64 maxCount)
virtual Bool _populateTestArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, uInt maxElements) const
weights and mask
virtual Bool _populateTestArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude, uInt maxElements) const
weights and ranges
void _computeDataArrays(std::vector< std::vector< AccumType > > &arys, uInt64 ¤tCount, DataIterator dataIter, MaskIterator maskIter, WeightsIterator weightsIter, uInt64 dataCount, const IncludeLimits &includeLimits, uInt64 maxCount, const typename StatisticsDataset< CASA_STATP >::ChunkData &chunk)
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 ¤tCount, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude, const IncludeLimits &includeLimits, uInt64 maxCount) const
mask and ranges
virtual Bool _populateTestArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, uInt maxElements) const
mask
virtual void _findBins(std::vector< std::vector< uInt64 > > &binCounts, std::vector< std::shared_ptr< AccumType > > &sameVal, std::vector< Bool > &allSame, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude, const std::vector< StatsHistogram< AccumType > > &hist, const std::vector< AccumType > &maxLimit) const
void _createDataArray(std::vector< AccumType > &array)
Create an unsorted array of the complete data set.
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 ¤tCount, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const IncludeLimits &includeLimits, uInt64 maxCount) const
std::vector< std::vector< uInt64 > > _binCounts(std::vector< std::shared_ptr< AccumType > > &sameVal, const std::vector< StatsHistogram< AccumType > > &hist)
tally the number of data points that fall into each bin provided by hist.
AccumType _myMedian
for use in often repeatedly run macros
void _computeBins(std::vector< std::vector< uInt64 > > &bins, std::vector< std::shared_ptr< AccumType > > &sameVal, std::vector< Bool > &allSame, DataIterator dataIter, MaskIterator maskIter, WeightsIterator weightsIter, uInt64 count, const std::vector< StatsHistogram< AccumType > > &hist, const std::vector< AccumType > &maxLimit, const typename StatisticsDataset< CASA_STATP >::ChunkData &chunk)
virtual Bool _populateTestArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, uInt maxElements) const
no weights, no mask, no ranges
virtual ~ClassicalQuantileComputer()
virtual void _findBins(std::vector< std::vector< uInt64 > > &binCounts, std::vector< std::shared_ptr< AccumType > > &sameVal, std::vector< Bool > &allSame, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude, const std::vector< StatsHistogram< AccumType > > &hist, const std::vector< AccumType > &maxLimit) const
typename std::vector< LimitPair >::const_iterator LimitPairVectorIter
std::vector< IndexValueMap > _dataFromSingleBins(const std::vector< uInt64 > &binNpts, uInt64 maxArraySize, const IncludeLimits &binLimits, const std::vector< IndexSet > &dataIndices, uInt nBins)
virtual void _populateArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
weights and mask
ClassicalQuantileComputer(const ClassicalQuantileComputer &other)
copy semantics
virtual std::map< Double, AccumType > getQuantiles(const std::set< Double > &fractions, uInt64 mynpts, AccumType mymin, AccumType mymax, uInt binningThreshholdSizeBytes, Bool persistSortedArray, uInt nBins)
Get the specified Quantiles.
virtual Bool _populateTestArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, uInt maxElements) const
weights
StatisticsAlgorithmQuantileComputer()=delete
Representation of a statistics dataset used in statistics framework calculatations.
Represents an unfilled histogram with equal width bins for binning used for quantile computations.
For temporary backward namespace compatibility, use casa as alias for casacore.
T * array
The actual storage.
bool Bool
Define the standard types used by Casacore.
unsigned long long uInt64
holds information about a data chunk.