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();
159 const DataIterator& dataStart,
Int64 nr,
uInt dataStride
164 const DataIterator& dataStart,
Int64 nr,
uInt dataStride,
170 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
171 const MaskIterator& maskBegin,
uInt maskStride
176 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
177 const MaskIterator& maskBegin,
uInt maskStride,
const DataRanges& ranges,
183 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
189 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
195 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
196 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
202 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
203 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride
208 vector<vector<uInt64> >& binCounts,
210 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
212 const vector<AccumType>& maxLimit
216 vector<vector<uInt64> >& binCounts,
218 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
224 vector<vector<uInt64> >& binCounts,
226 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
227 const MaskIterator& maskBegin,
uInt maskStride,
232 vector<vector<uInt64> >& binCounts,
234 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
235 const MaskIterator& maskBegin,
uInt maskStride,
const DataRanges& ranges,
241 vector<vector<uInt64> >& binCounts,
243 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
249 vector<vector<uInt64> >& binCounts,
251 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
257 vector<vector<uInt64> >& binCounts,
259 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
260 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
266 vector<vector<uInt64> >& binCounts,
268 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
269 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
283 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride
288 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
294 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
295 const MaskIterator& maskBegin,
uInt maskStride
300 const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
301 const MaskIterator& maskBegin,
uInt maskStride,
const DataRanges& ranges,
307 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
313 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
319 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
320 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
326 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
327 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride
340 vector<AccumType>& ary,
const DataIterator& dataBegin,
Int64 nr,
uInt dataStride
345 vector<AccumType>& ary,
const DataIterator& dataBegin,
Int64 nr,
350 vector<AccumType>& ary,
const DataIterator& dataBegin,
351 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
357 vector<AccumType>& ary,
const DataIterator& dataBegin,
Int64 nr,
358 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
364 vector<AccumType>& ary,
const DataIterator& dataBegin,
365 const WeightsIterator& weightsBegin,
Int64 nr,
uInt dataStride
370 vector<AccumType>& ary,
const DataIterator& dataBegin,
371 const WeightsIterator& weightsBegin,
Int64 nr,
uInt dataStride,
377 vector<AccumType>& ary,
const DataIterator& dataBegin,
378 const WeightsIterator& weightBegin,
Int64 nr,
uInt dataStride,
379 const MaskIterator& maskBegin,
uInt maskStride
384 vector<AccumType>& ary,
const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
385 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
391 vector<vector<AccumType> >& arys,
uInt64& currentCount,
const DataIterator& dataBegin,
Int64 nr,
uInt dataStride,
392 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt64 maxCount
397 vector<vector<AccumType> >& arys,
uInt64& currentCount,
const DataIterator& dataBegin,
Int64 nr,
399 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt64 maxCount
403 vector<vector<AccumType> >& arys,
uInt64& currentCount,
const DataIterator& dataBegin,
404 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
406 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt64 maxCount
411 vector<vector<AccumType> >& arys,
uInt64& currentCount,
const DataIterator& dataBegin,
Int64 nr,
412 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
414 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt64 maxCount
419 vector<vector<AccumType> >& arys,
uInt64& currentCount,
const DataIterator& dataBegin,
420 const WeightsIterator& weightsBegin,
Int64 nr,
uInt dataStride,
421 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt64 maxCount
426 vector<vector<AccumType> >& arys,
uInt64& currentCount,
const DataIterator& dataBegin,
427 const WeightsIterator& weightsBegin,
Int64 nr,
uInt dataStride,
429 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt64 maxCount
434 vector<vector<AccumType> >& arys,
uInt64& currentCount,
const DataIterator& dataBegin,
435 const WeightsIterator& weightBegin,
Int64 nr,
uInt dataStride,
436 const MaskIterator& maskBegin,
uInt maskStride,
437 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt64 maxCount
442 vector<vector<AccumType> >& arys,
uInt64& currentCount,
const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
443 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
445 const vector<std::pair<AccumType, AccumType> > &includeLimits,
uInt64 maxCount
452 vector<AccumType>& ary,
const DataIterator& dataBegin,
458 vector<AccumType>& ary,
const DataIterator& dataBegin,
Int64 nr,
465 vector<AccumType>& ary,
const DataIterator& dataBegin,
466 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
472 vector<AccumType>& ary,
const DataIterator& dataBegin,
Int64 nr,
473 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
479 vector<AccumType>& ary,
const DataIterator& dataBegin,
480 const WeightsIterator& weightBegin,
Int64 nr,
uInt dataStride,
486 vector<AccumType>& ary,
const DataIterator& dataBegin,
487 const WeightsIterator& weightsBegin,
Int64 nr,
uInt dataStride,
493 vector<AccumType>& ary,
const DataIterator& dataBegin,
494 const WeightsIterator& weightBegin,
Int64 nr,
495 uInt dataStride,
const MaskIterator& maskBegin,
501 vector<AccumType>& ary,
const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
502 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
599 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride
606 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
616 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
623 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
630 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
631 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride
637 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
638 Int64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
651 #ifndef CASACORE_NO_AUTO_TEMPLATES 652 #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()
unsigned long long uInt64
std::pair< Int64, Int64 > LocationType
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...
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
virtual void _populateArrays(vector< vector< CASA_STATP > > &arys, uInt64 ¤tCount, const DataIterator &dataBegin, Int64 nr, uInt dataStride, const vector< std::pair< CASA_STATP, CASA_STATP > > &includeLimits, uInt64 maxCount) const
Create a vector of unsorted arrays, one array for each bin defined by includeLimits.
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...
virtual void _unweightedStats(StatsData< CASA_STATP > &stats, uInt64 &ngood, LocationType &location, const DataIterator &dataBegin, Int64 nr, uInt dataStride)
no weights, no mask, no ranges
Bool _isInRange(const AccumType &datum) const
std::pair< Int64, Int64 > getStatisticIndex(StatisticsData::STATS stat)
see base class description
virtual void _weightedStats(StatsData< CASA_STATP > &stats, LocationType &location, const DataIterator &dataBegin, const DataIterator &weightsBegin, Int64 nr, uInt dataStride)
has weights, but no mask, no ranges
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 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...