26#ifndef SCIMATH_HINGESFENCESSTATISTICS_H
27#define SCIMATH_HINGESFENCESSTATISTICS_H
29#include <casacore/casa/aips.h>
31#include <casacore/scimath/StatsFramework/ConstrainedRangeStatistics.h>
50 class AccumType,
class DataIterator,
class MaskIterator=
const Bool *,
51 class WeightsIterator=DataIterator
106 const MaskIterator& maskBegin,
uInt maskStride
111 const MaskIterator& maskBegin,
uInt maskStride,
116 uInt64& npts,
const DataIterator& dataBegin,
117 const WeightsIterator& weightsBegin,
uInt64 nr,
uInt dataStride
122 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
128 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
129 uInt64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
134 uInt64& npts,
const DataIterator& dataBegin,
135 const WeightsIterator& weightBegin,
uInt64 nr,
uInt dataStride,
136 const MaskIterator& maskBegin,
uInt maskStride
142 std::shared_ptr<AccumType>& mymin, std::shared_ptr<AccumType>& mymax,
143 const DataIterator& dataBegin,
uInt64 nr,
uInt dataStride
147 std::shared_ptr<AccumType>& mymin, std::shared_ptr<AccumType>& mymax,
148 const DataIterator& dataBegin,
uInt64 nr,
uInt dataStride,
153 std::shared_ptr<AccumType>& mymin, std::shared_ptr<AccumType>& mymax,
154 const DataIterator& dataBegin,
uInt64 nr,
uInt dataStride,
155 const MaskIterator& maskBegin,
uInt maskStride
159 std::shared_ptr<AccumType>& mymin, std::shared_ptr<AccumType>& mymax,
160 const DataIterator& dataBegin,
uInt64 nr,
uInt dataStride,
161 const MaskIterator& maskBegin,
166 std::shared_ptr<AccumType>& mymin, std::shared_ptr<AccumType>& mymax,
167 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
172 std::shared_ptr<AccumType>& mymin, std::shared_ptr<AccumType>& mymax,
173 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
178 std::shared_ptr<AccumType>& mymin, std::shared_ptr<AccumType>& mymax,
179 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
180 uInt64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
185 std::shared_ptr<AccumType>& mymin, std::shared_ptr<AccumType>& mymax,
186 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
187 uInt64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
194 uInt64& npts, std::shared_ptr<AccumType>& mymin,
195 std::shared_ptr<AccumType>& mymax,
const DataIterator& dataBegin,
200 uInt64& npts, std::shared_ptr<AccumType>& mymin,
201 std::shared_ptr<AccumType>& mymax,
const DataIterator& dataBegin,
uInt64 nr,
206 uInt64& npts, std::shared_ptr<AccumType>& mymin,
207 std::shared_ptr<AccumType>& mymax,
const DataIterator& dataBegin,
uInt64 nr,
208 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride
212 uInt64& npts, std::shared_ptr<AccumType>& mymin,
213 std::shared_ptr<AccumType>& mymax,
const DataIterator& dataBegin,
uInt64 nr,
214 uInt dataStride,
const MaskIterator& maskBegin,
uInt maskStride,
219 uInt64& npts, std::shared_ptr<AccumType>& mymin,
220 std::shared_ptr<AccumType>& mymax,
const DataIterator& dataBegin,
221 const WeightsIterator& weightsBegin,
uInt64 nr,
uInt dataStride
225 uInt64& npts, std::shared_ptr<AccumType>& mymin,
226 std::shared_ptr<AccumType>& mymax,
const DataIterator& dataBegin,
227 const WeightsIterator& weightsBegin,
uInt64 nr,
uInt dataStride,
232 uInt64& npts, std::shared_ptr<AccumType>& mymin,
233 std::shared_ptr<AccumType>& mymax,
const DataIterator& dataBegin,
234 const WeightsIterator& weightsBegin,
uInt64 nr,
uInt dataStride,
235 const MaskIterator& maskBegin,
uInt maskStride,
240 uInt64& npts, std::shared_ptr<AccumType>& mymin,
241 std::shared_ptr<AccumType>& mymax,
const DataIterator& dataBegin,
242 const WeightsIterator& weightBegin,
uInt64 nr,
uInt dataStride,
243 const MaskIterator& maskBegin,
uInt maskStride
251 const DataIterator& dataBegin,
uInt64 nr,
uInt dataStride
257 const DataIterator& dataBegin,
uInt64 nr,
uInt dataStride,
263 const DataIterator& dataBegin,
uInt64 nr,
uInt dataStride,
264 const MaskIterator& maskBegin,
uInt maskStride
269 const DataIterator& dataBegin,
uInt64 nr,
uInt dataStride,
270 const MaskIterator& maskBegin,
uInt maskStride,
279 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
285 const DataIterator& dataBegin,
const WeightsIterator& weightsBegin,
291 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
292 uInt64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
298 const DataIterator& dataBegin,
const WeightsIterator& weightBegin,
299 uInt64 nr,
uInt dataStride,
const MaskIterator& maskBegin,
317#ifndef CASACORE_NO_AUTO_TEMPLATES
318#include <casacore/scimath/StatsFramework/HingesFencesStatistics.tcc>
Abstract base class for statistics algorithms which are characterized by a range of good values.
Class to calculate statistics using the so-called hinges and fences algorithm.
HingesFencesStatistics< CASA_STATP > & operator=(const HingesFencesStatistics< CASA_STATP > &other)
copy semantics
void _setRange()
derived classes need to implement how to set their respective range
virtual void _minMaxNpts(uInt64 &npts, std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride) const
virtual void _accumNpts(uInt64 &npts, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
virtual void _weightedStats(StatsData< AccumType > &stats, LocationType &location, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude)
virtual void _minMax(std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
virtual void _unweightedStats(StatsData< AccumType > &stats, uInt64 &ngood, LocationType &location, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude)
virtual void _minMaxNpts(uInt64 &npts, std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
virtual void _accumNpts(uInt64 &npts, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride) const
Double _f
_f defined in inclusion range between Q1 - _f*D and Q3 + _f*D, where D = Q3 - Q1 and Q1 and Q3 are th...
virtual void _accumNpts(uInt64 &npts, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
void setCalculateAsAdded(Bool c)
This class does not allow statistics to be calculated as datasets are added, so an exception will be ...
virtual void _accumNpts(uInt64 &npts, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
virtual void _weightedStats(StatsData< AccumType > &stats, LocationType &location, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride)
has weights, but no mask, no ranges
HingesFencesStatistics(const HingesFencesStatistics< CASA_STATP > &other)
copy semantics
virtual void _minMax(std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, uInt64 nr, uInt dataStride) const
virtual void _weightedStats(StatsData< AccumType > &stats, LocationType &location, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride)
virtual void _minMax(std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
virtual ~HingesFencesStatistics()
virtual StatisticsAlgorithm< CASA_STATP > * clone() const
Clone this instance.
virtual void _unweightedStats(StatsData< AccumType > &stats, uInt64 &ngood, LocationType &location, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride)
virtual void _unweightedStats(StatsData< AccumType > &stats, uInt64 &ngood, LocationType &location, const DataIterator &dataBegin, uInt64 nr, uInt dataStride)
no weights, no mask, no ranges
virtual void _minMax(std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
virtual void _minMaxNpts(uInt64 &npts, std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, uInt64 nr, uInt dataStride) const
Sometimes we want the min, max, and npts all in one scan.
virtual void _weightedStats(StatsData< AccumType > &stats, LocationType &location, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude)
virtual void _accumNpts(uInt64 &npts, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
virtual void _minMaxNpts(uInt64 &npts, std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
virtual void _minMaxNpts(uInt64 &npts, std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
virtual void _minMax(std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
virtual StatisticsData::ALGORITHM algorithm() const
get the algorithm that this object uses for computing stats
virtual void _minMax(std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
virtual void _minMaxNpts(uInt64 &npts, std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
virtual void _minMaxNpts(uInt64 &npts, std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
virtual void _unweightedStats(StatsData< AccumType > &stats, uInt64 &ngood, LocationType &location, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude)
no weights, no mask
virtual void _minMax(std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride) const
virtual void _accumNpts(uInt64 &npts, const DataIterator &dataStart, uInt64 nr, uInt dataStride) const
scan through the data set to determine the number of good (unmasked, weight > 0, within range) points...
HingesFencesStatistics(Double f=-1.0)
If f is negative, the full dataset is used; ie the object has the same behavior as a ClassicalStatist...
virtual void _accumNpts(uInt64 &npts, const DataIterator &dataStart, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
virtual void _minMax(std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
virtual void _minMaxNpts(uInt64 &npts, std::shared_ptr< AccumType > &mymin, std::shared_ptr< AccumType > &mymax, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
virtual void _accumNpts(uInt64 &npts, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
virtual void reset()
reset object to initial state.
Base class of statistics algorithm class hierarchy.
ALGORITHM
implemented algorithms
this file contains all the compiler specific defines
bool Bool
Define the standard types used by Casacore.
unsigned long long uInt64
std::pair< Int64, Int64 > LocationType