27 #ifndef SCIMATH_CONSTRAINEDRANGESTATISTICS_H 28 #define SCIMATH_CONSTRAINEDRANGESTATISTICS_H 30 #include <casacore/casa/aips.h> 32 #include <casacore/scimath/Mathematics/ClassicalStatistics.h> 43 template <
class AccumType,
class DataIterator,
class MaskIterator=const Bool*,
class WeightsIterator=DataIterator>
105 uInt binningThreshholdSizeBytes=4096*4096,
Bool persistSortedArray=
False,
114 std::map<Double, AccumType>& quantileToValue,
const std::set<Double>& quantiles,
117 uInt binningThreshholdSizeBytes=4096*4096,
Bool persistSortedArray=
False,
126 uInt binningThreshholdSizeBytes=4096*4096,
Bool persistSortedArray=
False,
132 virtual void getMinMax(AccumType& mymin, AccumType& mymax);
146 virtual void reset();
158 const DataIterator& dataStart,
Int64 nr,
uInt dataStride
163 const DataIterator& dataStart,
Int64 nr,
uInt dataStride,
169 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
170 const MaskIterator& maskBegin,
uInt maskStride
175 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
176 const MaskIterator& maskBegin,
uInt maskStride,
const DataRanges& ranges,
182 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
188 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
194 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
195 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
201 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
202 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride
207 vector<vector<uInt64> >& binCounts,
209 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
211 const vector<AccumType>& maxLimit
215 vector<vector<uInt64> >& binCounts,
217 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
223 vector<vector<uInt64> >& binCounts,
225 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
226 const MaskIterator& maskBegin,
uInt maskStride,
231 vector<vector<uInt64> >& binCounts,
233 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
234 const MaskIterator& maskBegin,
uInt maskStride,
const DataRanges& ranges,
240 vector<vector<uInt64> >& binCounts,
242 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
248 vector<vector<uInt64> >& binCounts,
250 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
256 vector<vector<uInt64> >& binCounts,
258 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
259 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
265 vector<vector<uInt64> >& binCounts,
267 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
268 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
282 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride
287 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
293 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
294 const MaskIterator& maskBegin,
uInt maskStride
299 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
300 const MaskIterator& maskBegin,
uInt maskStride,
const DataRanges& ranges,
306 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
312 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
318 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
319 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
325 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
326 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride
339 vector<AccumType>& ary,
const DataIterator& dataBegin,
Int64 nr,
uInt dataStride
344 vector<AccumType>& ary,
const DataIterator& dataBegin,
Int64 nr,
349 vector<AccumType>& ary,
const DataIterator& dataBegin,
350 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
356 vector<AccumType>& ary,
const DataIterator& dataBegin,
Int64 nr,
357 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
363 vector<AccumType>& ary,
const DataIterator& dataBegin,
364 const WeightsIterator& weightsBegin,
Int64 nr,
uInt dataStride
369 vector<AccumType>& ary,
const DataIterator& dataBegin,
370 const WeightsIterator& weightsBegin,
Int64 nr,
uInt dataStride,
376 vector<AccumType>& ary,
const DataIterator& dataBegin,
377 const WeightsIterator& weightBegin,
Int64 nr,
uInt dataStride,
378 const MaskIterator& maskBegin,
uInt maskStride
383 vector<AccumType>& ary,
const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
384 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
390 vector<vector<AccumType> >& arys,
uInt& currentCount,
const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
391 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt maxCount
396 vector<vector<AccumType> >& arys,
uInt& currentCount,
const DataIterator& dataBegin,
Int64 nr,
398 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt maxCount
402 vector<vector<AccumType> >& arys,
uInt& currentCount,
const DataIterator& dataBegin,
403 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
405 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt maxCount
410 vector<vector<AccumType> >& arys,
uInt& currentCount,
const DataIterator& dataBegin,
Int64 nr,
411 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
413 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt maxCount
418 vector<vector<AccumType> >& arys,
uInt& currentCount,
const DataIterator& dataBegin,
419 const WeightsIterator& weightsBegin,
Int64 nr,
uInt dataStride,
420 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt maxCount
425 vector<vector<AccumType> >& arys,
uInt& currentCount,
const DataIterator& dataBegin,
426 const WeightsIterator& weightsBegin,
Int64 nr,
uInt dataStride,
428 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt maxCount
433 vector<vector<AccumType> >& arys,
uInt& currentCount,
const DataIterator& dataBegin,
434 const WeightsIterator& weightBegin,
Int64 nr,
uInt dataStride,
435 const MaskIterator& maskBegin,
uInt maskStride,
436 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt maxCount
441 vector<vector<AccumType> >& arys,
uInt& currentCount,
const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
442 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
444 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt maxCount
451 vector<AccumType>& ary,
const DataIterator& dataBegin,
457 vector<AccumType>& ary,
const DataIterator& dataBegin,
Int64 nr,
464 vector<AccumType>& ary,
const DataIterator& dataBegin,
465 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
471 vector<AccumType>& ary,
const DataIterator& dataBegin,
Int64 nr,
472 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
478 vector<AccumType>& ary,
const DataIterator& dataBegin,
479 const WeightsIterator& weightBegin,
Int64 nr,
uInt dataStride,
485 vector<AccumType>& ary,
const DataIterator& dataBegin,
486 const WeightsIterator& weightsBegin,
Int64 nr,
uInt dataStride,
492 vector<AccumType>& ary,
const DataIterator& dataBegin,
493 const WeightsIterator& weightBegin,
Int64 nr,
494 uInt dataStride,
const MaskIterator& maskBegin,
500 vector<AccumType>& ary,
const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
501 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
515 uInt64& ngood, AccumType& mymin, AccumType& mymax,
517 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride
522 uInt64& ngood, AccumType& mymin, AccumType& mymax,
524 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
529 uInt64& ngood, AccumType& mymin, AccumType& mymax,
531 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
532 const MaskIterator& maskBegin,
uInt maskStride
536 uInt64& ngood, AccumType& mymin, AccumType& mymax,
538 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
539 const MaskIterator& maskBegin,
uInt maskStride,
547 AccumType& mymin, AccumType& mymax,
549 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
554 AccumType& mymin, AccumType& mymax,
556 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
561 AccumType& mymin, AccumType& mymax,
563 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
564 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride
568 AccumType& mymin, AccumType& mymax,
570 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
571 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
584 #ifndef CASACORE_NO_AUTO_TEMPLATES 585 #include <casacore/scimath/Mathematics/ConstrainedRangeStatistics.tcc> long long Int64
Define the extra non-standard types used by Casacore (like proposed uSize, Size)
AccumType getMedian(CountedPtr< uInt64 > knownNpts=NULL, CountedPtr< AccumType > knownMin=NULL, CountedPtr< AccumType > knownMax=NULL, uInt binningThreshholdSizeBytes=4096 *4096, Bool persistSortedArray=False, uInt64 nBins=10000)
In the following group of methods, if the size of the composite dataset is smaller than binningThresh...
void _setRange(CountedPtr< std::pair< AccumType, AccumType > > r)
CASA_STATP _getStatistic(StatisticsData::STATS stat)
virtual void _minMax(CountedPtr< CASA_STATP > &mymin, CountedPtr< CASA_STATP > &mymax, const DataIterator &dataBegin, Int64 nr, uInt dataStride) const
StatsData< CASA_STATP > _getStatistics()
virtual ~ConstrainedRangeStatistics()
virtual void _weightedStats(CASA_STATP &mymin, CASA_STATP &mymax, Int64 &minpos, Int64 &maxpos, const DataIterator &dataBegin, const DataIterator &weightsBegin, Int64 nr, uInt dataStride)
has weights, but no mask, no ranges
unsigned long long uInt64
void _accumNpts(uInt64 &npts, const DataIterator &dataStart, Int64 nr, uInt dataStride) const
scan through the data set to determine the number of good (unmasked, weight > 0, within range) points...
Class to calculate statistics in a "classical" sense, ie using accumulators with no special filtering...
virtual void _unweightedStats(uInt64 &ngood, CASA_STATP &mymin, CASA_STATP &mymax, Int64 &minpos, Int64 &maxpos, const DataIterator &dataBegin, Int64 nr, uInt dataStride)
no weights, no mask, no ranges
std::map< Double, AccumType > getQuantiles(const std::set< Double > &quantiles, CountedPtr< uInt64 > knownNpts=NULL, CountedPtr< AccumType > knownMin=NULL, CountedPtr< AccumType > knownMax=NULL, uInt binningThreshholdSizeBytes=4096 *4096, Bool persistSortedArray=False, uInt64 nBins=10000)
Get the specified quantiles.
CountedPtr< std::pair< AccumType, AccumType > > _range
AccumType getMedianAbsDevMed(CountedPtr< uInt64 > knownNpts=NULL, CountedPtr< AccumType > knownMin=NULL, CountedPtr< AccumType > knownMax=NULL, uInt binningThreshholdSizeBytes=4096 *4096, Bool persistSortedArray=False, uInt64 nBins=10000)
get the median of the absolute deviation about the median of the data.
virtual uInt64 getNPts()
scan the dataset(s) that have been added, and find the number of good points.
Referenced counted pointer for constant data.
ConstrainedRangeStatistics< CASA_STATP > & operator=(const ConstrainedRangeStatistics< CASA_STATP > &other)
copy semantics
#define DataRanges
Commonly used types in statistics framework.
bool Bool
Define the standard types used by Casacore.
virtual Bool _populateTestArray(vector< CASA_STATP > &ary, const DataIterator &dataBegin, Int64 nr, uInt dataStride, uInt maxElements) const
no weights, no mask, no ranges
virtual void reset()
reset object to initial state.
Abstract base class for statistics algorithms which are characterized by a range of good values...
Bool _isInRange(const AccumType &datum) const
std::pair< Int64, Int64 > getStatisticIndex(StatisticsData::STATS stat)
see base class description
AccumType getMedianAndQuantiles(std::map< Double, AccumType > &quantileToValue, const std::set< Double > &quantiles, CountedPtr< uInt64 > knownNpts=NULL, CountedPtr< AccumType > knownMin=NULL, CountedPtr< AccumType > knownMax=NULL, uInt binningThreshholdSizeBytes=4096 *4096, Bool persistSortedArray=False, uInt64 nBins=10000)
If one needs to compute both the median and quantile values, it is better to call getMedianAndQuantil...
virtual void _populateArray(vector< CASA_STATP > &ary, const DataIterator &dataBegin, Int64 nr, uInt dataStride) const
populate an unsorted array with valid data.
this file contains all the compiler specific defines
ConstrainedRangeStatistics()
virtual void _populateArrays(vector< vector< CASA_STATP > > &arys, uInt ¤tCount, const DataIterator &dataBegin, Int64 nr, uInt dataStride, const vector< std::pair< CASA_STATP, CASA_STATP > > &includeLimits, uInt maxCount) const
Create a vector of unsorted arrays, one array for each bin defined by includeLimits.
virtual void getMinMax(AccumType &mymin, AccumType &mymax)
get the min and max of the data set
virtual void _findBins(vector< vector< uInt64 > > &binCounts, vector< CountedPtr< AccumType > > &sameVal, vector< Bool > &allSame, const DataIterator &dataBegin, Int64 nr, uInt dataStride, const vector< typename StatisticsUtilities< AccumType >::BinDesc > &binDesc, const vector< AccumType > &maxLimit) const
description of a regularly spaced bins with the first bin having lower limit of minLimit and having n...