Loading...
Searching...
No Matches
ClassicalQuantileComputer.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 SCIMATH_CLASSICALQUANTILECOMPUTER_H
#define SCIMATH_CLASSICALQUANTILECOMPUTER_H
#include <casacore/scimath/StatsFramework/StatisticsAlgorithmQuantileComputer.h>
#include <casacore/scimath/StatsFramework/StatisticsUtilities.h>
#include <casacore/casa/aips.h>
#include <map>
#include <set>
#include <utility>
#include <vector>
namespace casacore {
// This class is used internally by ClassicalStatistics objects. It should never
// be explicitly instantiated by an API developer. See the documentation of
// StatisticsAlgorithm for details regarding QuantileComputer classes.
template <
class AccumType, class DataIterator, class MaskIterator=const Bool*,
class WeightsIterator=DataIterator
> class ClassicalQuantileComputer
: public StatisticsAlgorithmQuantileComputer<CASA_STATP> {
using LimitPair = std::pair<AccumType, AccumType>;
using LimitPairVectorIter = typename std::vector<LimitPair>::const_iterator;
using IndexValueMap = typename std::map<uInt64, AccumType>;
using IndexSet = std::set<uInt64>;
public:
ClassicalQuantileComputer() = delete;
ClassicalQuantileComputer(StatisticsDataset<CASA_STATP>* dataset);
// copy semantics
ClassicalQuantileComputer(const ClassicalQuantileComputer& other);
virtual ~ClassicalQuantileComputer();
// copy semantics
ClassicalQuantileComputer& operator=(
const ClassicalQuantileComputer& other
);
// clone this object by returning a pointer to a copy
virtual StatisticsAlgorithmQuantileComputer<CASA_STATP>* clone() const;
// Caller is responsible for passing correct values of mynpts, mymin, and
// mymax; no checking is done for correctness in this method.
virtual AccumType getMedian(
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 AccumType getMedianAbsDevMed(
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 getMedianAndQuantiles() rather than getMedian() and
// getQuantiles() separately, as the first will scan large data sets fewer
// times than calling the separate methods. The return value is the median;
// the quantiles are returned in the <src>quantiles</src> map. Values in the
// <src>fractions</src> set represent the locations in the CDF and should be
// between 0 and 1, exclusive.
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
);
// Get the specified Quantiles. <src>fractions</src> must be between 0 and
// 1, noninclusive.
virtual std::map<Double, AccumType> getQuantiles(
const std::set<Double>& fractions, uInt64 mynpts, AccumType mymin,
AccumType mymax, uInt binningThreshholdSizeBytes,
Bool persistSortedArray, uInt nBins
);
// reset the private fields
virtual void reset();
protected:
// <group>
// Get the counts of data within the specified histogram bins. The number of
// arrays within binCounts will be equal to the number of histograms in
// <src>hist</src>. Each array within <src>binCounts</src> will have the
// same number of elements as the number of bins in its corresponding
// histogram in <src>hist</src>.
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;
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;
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;
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 _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;
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;
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;
// </group>
//<group>
// populate an unsorted array with valid data.
// no weights, no mask, no ranges
virtual void _populateArray(
std::vector<AccumType>& ary, const DataIterator& dataBegin, uInt64 nr,
uInt dataStride
) const;
// ranges
virtual void _populateArray(
std::vector<AccumType>& ary, const DataIterator& dataBegin, uInt64 nr,
uInt dataStride, const DataRanges& ranges, Bool isInclude
) const;
virtual void _populateArray(
std::vector<AccumType>& ary, const DataIterator& dataBegin,
uInt64 nr, uInt dataStride, const MaskIterator& maskBegin,
uInt maskStride
) const;
// mask and 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;
// weights
virtual void _populateArray(
std::vector<AccumType>& ary, const DataIterator& dataBegin,
const WeightsIterator& weightsBegin, uInt64 nr, uInt dataStride
) const;
// weights and ranges
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 mask
virtual void _populateArray(
std::vector<AccumType>& ary, const DataIterator& dataBegin,
const WeightsIterator& weightBegin, uInt64 nr, uInt dataStride,
const MaskIterator& maskBegin, uInt maskStride
) const;
// weights, mask, 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;
// </group>
// <group>
// Create a std::vector of unsorted arrays, one array for each bin defined
// by <src>includeLimits</src>. <src>includeLimits</src> should be
// non-overlapping and should be given in ascending order (the algorithm
// used assumes this). Once the sum of the lengths of all arrays equals
// <src>maxCount</src> the method will return with no further processing.
// no weights, no mask, no ranges
virtual void _populateArrays(
std::vector<std::vector<AccumType>>& arys, uInt64& currentCount,
const DataIterator& dataBegin, uInt64 nr, uInt dataStride,
const IncludeLimits& includeLimits, uInt64 maxCount
) const;
// ranges
virtual void _populateArrays(
std::vector<std::vector<AccumType>>& arys, uInt64& currentCount,
const DataIterator& dataBegin, uInt64 nr, uInt dataStride,
const DataRanges& ranges, Bool isInclude,
const IncludeLimits& includeLimits, uInt64 maxCount
) const;
virtual void _populateArrays(
std::vector<std::vector<AccumType>>& arys, uInt64& currentCount,
const DataIterator& dataBegin, uInt64 nr, uInt dataStride,
const MaskIterator& maskBegin, uInt maskStride,
const IncludeLimits& includeLimits, uInt64 maxCount
) const;
// mask and ranges
virtual void _populateArrays(
std::vector<std::vector<AccumType>>& arys, uInt64& currentCount,
const DataIterator& dataBegin, uInt64 nr, uInt dataStride,
const MaskIterator& maskBegin, uInt maskStride,
const DataRanges& ranges, Bool isInclude,
const IncludeLimits& includeLimits, uInt64 maxCount
) const;
// weights
virtual void _populateArrays(
std::vector<std::vector<AccumType>>& arys, uInt64& currentCount,
const DataIterator& dataBegin, const WeightsIterator& weightsBegin,
uInt64 nr, uInt dataStride, const IncludeLimits& includeLimits,
uInt64 maxCount
) const;
// weights and ranges
virtual void _populateArrays(
std::vector<std::vector<AccumType>>& arys, uInt64& currentCount,
const DataIterator& dataBegin, const WeightsIterator& weightsBegin,
uInt64 nr, uInt dataStride, const DataRanges& ranges, Bool isInclude,
const IncludeLimits& includeLimits, uInt64 maxCount
) const;
// weights and mask
virtual void _populateArrays(
std::vector<std::vector<AccumType>>& arys, uInt64& currentCount,
const DataIterator& dataBegin, const WeightsIterator& weightBegin,
uInt64 nr, uInt dataStride, const MaskIterator& maskBegin,
uInt maskStride, const IncludeLimits& includeLimits, uInt64 maxCount
) const;
// weights, mask, ranges
virtual void _populateArrays(
std::vector<std::vector<AccumType>>& arys, uInt64& currentCount,
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;
// </group>
// <group>
// no weights, no mask, no ranges
virtual Bool _populateTestArray(
std::vector<AccumType>& ary, const DataIterator& dataBegin,
uInt64 nr, uInt dataStride, uInt maxElements
) const;
// ranges
virtual Bool _populateTestArray(
std::vector<AccumType>& ary, const DataIterator& dataBegin, uInt64 nr,
uInt dataStride, const DataRanges& ranges, Bool isInclude,
uInt maxElements
) const;
// mask
virtual Bool _populateTestArray(
std::vector<AccumType>& ary, const DataIterator& dataBegin,
uInt64 nr, uInt dataStride, const MaskIterator& maskBegin,
uInt maskStride, uInt maxElements
) const;
// mask and ranges
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;
// weights
virtual Bool _populateTestArray(
std::vector<AccumType>& ary, const DataIterator& dataBegin,
const WeightsIterator& weightBegin, uInt64 nr, uInt dataStride,
uInt maxElements
) const;
// weights and ranges
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 mask
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, mask, ranges
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;
// </group>
// get values from sorted array if the array is small enough to be held in
// memory. Note that this is the array containing all good data, not data in
// just a single bin representing a subset of good data.
// Returns True if the data were successfully retrieved.
// If True is returned, the values map will contain a map of index to value.
// It is the caller's responsibility to check that <src>mynpts</src> is not
// 0; no checking is done here.
Bool _valuesFromSortedArray(
std::map<uInt64, AccumType>& values, uInt64 mynpts,
const std::set<uInt64>& indices, uInt64 maxArraySize,
Bool persistSortedArray
);
private:
Bool _doMedAbsDevMed{False};
// for use in often repeatedly run macros
AccumType _myMedian{0};
// tally the number of data points that fall into each bin provided by
// <src>hist</src>. Any points that are less than hist.minLimit or greater
// than hist.minLimit + hist.nBins*hist.binWidth are not included in the
// counts. A data point that falls exactly on a bin boundary is considered
// to be in the higher index bin. <src>sameVal</src> will be non-null if all
// the good values in the histogram range are the same. In that case, the
// value held will be the value of each of those data points.
std::vector<std::vector<uInt64>> _binCounts(
std::vector<std::shared_ptr<AccumType>>& sameVal,
const std::vector<StatsHistogram<AccumType>>& hist
);
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
);
void _computeDataArray(
std::vector<AccumType>& ary, DataIterator dataIter,
MaskIterator maskIter, WeightsIterator weightsIter, uInt64 dataCount,
const typename StatisticsDataset<CASA_STATP>::ChunkData& chunk
);
void _computeDataArrays(
std::vector<std::vector<AccumType>>& arys, uInt64& currentCount,
DataIterator dataIter, MaskIterator maskIter,
WeightsIterator weightsIter, uInt64 dataCount,
const IncludeLimits& includeLimits, uInt64 maxCount,
const typename StatisticsDataset<CASA_STATP>::ChunkData& chunk
);
// Create an unsorted array of the complete data set. If
// <src>includeLimits</src> is specified, only points within those limits
// (including min but excluding max, as per definition of bins), are
// included.
void _createDataArray(std::vector<AccumType>& array);
void _createDataArrays(
std::vector<std::vector<AccumType>>& arrays,
const IncludeLimits& includeLimits, uInt64 maxCount
);
// extract data from multiple histograms given by <src>hist</src>.
// <src>dataIndices</src> represent the indices of the sorted arrays of
// values to extract. There should be exactly one set of data indices to
// extract for each supplied histogram. The data indices are relative to the
// minimum value of the minimum bin in their respective histograms. The
// ordering of the maps in the returned std::vector represent the ordering
// of histograms in <src>hist</src>. <src>hist</src> should contain
// non-overlapping histograms and the histograms should be specified in
// ascending order.
std::vector<IndexValueMap> _dataFromMultipleBins(
const std::vector<StatsHistogram<AccumType>>& hist,
uInt64 maxArraySize, const std::vector<IndexSet>& dataIndices,
uInt nBins
);
std::vector<IndexValueMap> _dataFromSingleBins(
const std::vector<uInt64>& binNpts, uInt64 maxArraySize,
const IncludeLimits& binLimits,
const std::vector<IndexSet>& dataIndices, uInt nBins
);
// get the values for the specified indices in the sorted array of all good
// data
IndexValueMap _indicesToValues(
uInt64 mynpts, AccumType mymin, AccumType mymax, uInt64 maxArraySize,
const IndexSet& dataIndices, Bool persistSortedArray, uInt nBins
);
// get the index (for odd npts) or indices (for even npts) of the median of
// the sorted array.
static IndexSet _medianIndices(uInt64 mynpts);
};
}
#ifndef CASACORE_NO_AUTO_TEMPLATES
#include <casacore/scimath/StatsFramework/ClassicalQuantileComputer.tcc>
#endif
#endif
DataRanges
#define DataRanges
Definition StatisticsTypes.h:49
IncludeLimits
#define IncludeLimits
Definition StatisticsTypes.h:50
casacore::ClassicalQuantileComputer::_populateTestArray
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
casacore::ClassicalQuantileComputer::ClassicalQuantileComputer
ClassicalQuantileComputer()=delete
casacore::ClassicalQuantileComputer::IndexSet
std::set< uInt64 > IndexSet
Definition ClassicalQuantileComputer.h:55
casacore::ClassicalQuantileComputer::_dataFromMultipleBins
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.
casacore::ClassicalQuantileComputer::_populateArray
virtual void _populateArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride) const
populate an unsorted array with valid data.
casacore::ClassicalQuantileComputer::_populateArray
virtual void _populateArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
casacore::ClassicalQuantileComputer::_medianIndices
static IndexSet _medianIndices(uInt64 mynpts)
get the index (for odd npts) or indices (for even npts) of the median of the sorted array.
casacore::ClassicalQuantileComputer::clone
virtual StatisticsAlgorithmQuantileComputer< CASA_STATP > * clone() const
clone this object by returning a pointer to a copy
casacore::ClassicalQuantileComputer::reset
virtual void reset()
reset the private fields
casacore::ClassicalQuantileComputer::_populateTestArray
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
casacore::ClassicalQuantileComputer::_populateArray
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
casacore::ClassicalQuantileComputer::_findBins
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.
casacore::ClassicalQuantileComputer::_findBins
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
casacore::ClassicalQuantileComputer::ClassicalQuantileComputer
ClassicalQuantileComputer(StatisticsDataset< CASA_STATP > *dataset)
casacore::ClassicalQuantileComputer::_findBins
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
casacore::ClassicalQuantileComputer::_populateArray
virtual void _populateArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
ranges
casacore::ClassicalQuantileComputer::_populateArrays
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 &currentCount, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const IncludeLimits &includeLimits, uInt64 maxCount) const
weights
casacore::ClassicalQuantileComputer::_indicesToValues
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
casacore::ClassicalQuantileComputer::_populateArray
virtual void _populateArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride) const
weights
casacore::ClassicalQuantileComputer::_populateArray
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
casacore::ClassicalQuantileComputer::operator=
ClassicalQuantileComputer & operator=(const ClassicalQuantileComputer &other)
copy semantics
casacore::ClassicalQuantileComputer::getMedianAndQuantiles
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...
casacore::ClassicalQuantileComputer::_populateArrays
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 &currentCount, 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.
casacore::ClassicalQuantileComputer::_computeDataArray
void _computeDataArray(std::vector< AccumType > &ary, DataIterator dataIter, MaskIterator maskIter, WeightsIterator weightsIter, uInt64 dataCount, const typename StatisticsDataset< CASA_STATP >::ChunkData &chunk)
casacore::ClassicalQuantileComputer::_valuesFromSortedArray
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.
casacore::ClassicalQuantileComputer::IndexValueMap
typename std::map< uInt64, AccumType > IndexValueMap
Definition ClassicalQuantileComputer.h:54
casacore::ClassicalQuantileComputer::_populateTestArray
virtual Bool _populateTestArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude, uInt maxElements) const
ranges
casacore::ClassicalQuantileComputer::_populateArray
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
casacore::ClassicalQuantileComputer::getMedian
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...
casacore::ClassicalQuantileComputer::_populateArrays
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 &currentCount, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude, const IncludeLimits &includeLimits, uInt64 maxCount) const
weights and ranges
casacore::ClassicalQuantileComputer::getMedianAbsDevMed
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.
casacore::ClassicalQuantileComputer::_findBins
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
casacore::ClassicalQuantileComputer::_findBins
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
casacore::ClassicalQuantileComputer::LimitPair
std::pair< AccumType, AccumType > LimitPair
Definition ClassicalQuantileComputer.h:52
casacore::ClassicalQuantileComputer::_findBins
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
casacore::ClassicalQuantileComputer::_populateArrays
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 &currentCount, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude, const IncludeLimits &includeLimits, uInt64 maxCount) const
ranges
casacore::ClassicalQuantileComputer::_populateArrays
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 &currentCount, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const IncludeLimits &includeLimits, uInt64 maxCount) const
weights and mask
casacore::ClassicalQuantileComputer::_populateArrays
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 &currentCount, 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
casacore::ClassicalQuantileComputer::_createDataArrays
void _createDataArrays(std::vector< std::vector< AccumType > > &arrays, const IncludeLimits &includeLimits, uInt64 maxCount)
casacore::ClassicalQuantileComputer::_populateTestArray
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
casacore::ClassicalQuantileComputer::_populateTestArray
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
casacore::ClassicalQuantileComputer::_computeDataArrays
void _computeDataArrays(std::vector< std::vector< AccumType > > &arys, uInt64 &currentCount, DataIterator dataIter, MaskIterator maskIter, WeightsIterator weightsIter, uInt64 dataCount, const IncludeLimits &includeLimits, uInt64 maxCount, const typename StatisticsDataset< CASA_STATP >::ChunkData &chunk)
casacore::ClassicalQuantileComputer::_populateArrays
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 &currentCount, 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
casacore::ClassicalQuantileComputer::_populateTestArray
virtual Bool _populateTestArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, uInt maxElements) const
mask
casacore::ClassicalQuantileComputer::_findBins
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
casacore::ClassicalQuantileComputer::_createDataArray
void _createDataArray(std::vector< AccumType > &array)
Create an unsorted array of the complete data set.
casacore::ClassicalQuantileComputer::_doMedAbsDevMed
Bool _doMedAbsDevMed
Definition ClassicalQuantileComputer.h:399
casacore::ClassicalQuantileComputer::_populateArrays
virtual void _populateArrays(std::vector< std::vector< AccumType > > &arys, uInt64 &currentCount, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const IncludeLimits &includeLimits, uInt64 maxCount) const
casacore::ClassicalQuantileComputer::_binCounts
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.
casacore::ClassicalQuantileComputer::_myMedian
AccumType _myMedian
for use in often repeatedly run macros
Definition ClassicalQuantileComputer.h:401
casacore::ClassicalQuantileComputer::_computeBins
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)
casacore::ClassicalQuantileComputer::_populateTestArray
virtual Bool _populateTestArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, uInt maxElements) const
no weights, no mask, no ranges
casacore::ClassicalQuantileComputer::~ClassicalQuantileComputer
virtual ~ClassicalQuantileComputer()
casacore::ClassicalQuantileComputer::_findBins
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
casacore::ClassicalQuantileComputer::LimitPairVectorIter
typename std::vector< LimitPair >::const_iterator LimitPairVectorIter
Definition ClassicalQuantileComputer.h:53
casacore::ClassicalQuantileComputer::_dataFromSingleBins
std::vector< IndexValueMap > _dataFromSingleBins(const std::vector< uInt64 > &binNpts, uInt64 maxArraySize, const IncludeLimits &binLimits, const std::vector< IndexSet > &dataIndices, uInt nBins)
casacore::ClassicalQuantileComputer::_populateArray
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
casacore::ClassicalQuantileComputer::ClassicalQuantileComputer
ClassicalQuantileComputer(const ClassicalQuantileComputer &other)
copy semantics
casacore::ClassicalQuantileComputer::getQuantiles
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.
casacore::ClassicalQuantileComputer::_populateTestArray
virtual Bool _populateTestArray(std::vector< AccumType > &ary, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, uInt maxElements) const
weights
casacore::StatisticsAlgorithmQuantileComputer< CASA_STATP >::StatisticsAlgorithmQuantileComputer
StatisticsAlgorithmQuantileComputer()=delete
casacore::StatisticsDataset
Representation of a statistics dataset used in statistics framework calculatations.
Definition StatisticsDataset.h:53
casacore::StatsHistogram
Represents an unfilled histogram with equal width bins for binning used for quantile computations.
Definition StatsHistogram.h:47
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::False
const Bool False
Definition aipstype.h:42
casacore::array
T * array
The actual storage.
Definition Block.h:689
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
casacore::StatisticsDataset::ChunkData
holds information about a data chunk.
Definition StatisticsDataset.h:60