casacore
Loading...
Searching...
No Matches
BiweightStatistics.h
Go to the documentation of this file.
1//# Copyright (C) 2000,2001
2//# Associated Universities, Inc. Washington DC, USA.
3//#
4//# This library is free software; you can redistribute it and/or modify it
5//# under the terms of the GNU Library General Public License as published by
6//# the Free Software Foundation; either version 2 of the License, or (at your
7//# option) any later version.
8//#
9//# This library is distributed in the hope that it will be useful, but WITHOUT
10//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12//# License for more details.
13//#
14//# You should have received a copy of the GNU Library General Public License
15//# along with this library; if not, write to the Free Software Foundation,
16//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
17//#
18//# Correspondence concerning AIPS++ should be addressed as follows:
19//# Internet email: casa-feedback@nrao.edu.
20//# Postal address: AIPS++ Project Office
21//# National Radio Astronomy Observatory
22//# 520 Edgemont Road
23//# Charlottesville, VA 22903-2475 USA
24//#
25
26#ifndef SCIMATH_BIWEIGHTSTATISTICS_H
27#define SCIMATH_BIWEIGHTSTATISTICS_H
28
29#include <casacore/casa/aips.h>
30
31#include <casacore/scimath/StatsFramework/ClassicalStatistics.h>
32
33#include <set>
34#include <vector>
35#include <utility>
36
37namespace casacore {
38
39// The biweight algorithm is a robust iterative algorithm that computes two
40// quantities called the "location" and the "scale", which are analogous to
41// the mean and the standard deviation. Important equations are
42//
43// A. How to compute u_i values, which are related to the weights,
44// w_i = (1 - u_i*u_i) if abs(u_i) < 1, 0 otherwise, using the equation
45//
46// u_i = (x_i - c_bi)/(c*s_bi) (1)
47//
48// where x_i are the data values, c_bi is the biweight location, c is a
49// configurable constant, and s_bi is the biweight scale. For the initial
50// computation of the u_i values, c_bi is set equal to the median of the
51// distribution and s_bi is set equal to the normalized median of the
52// absolute deviation about the median (that is the median of the absolute
53// deviation about the median multiplied by the value of the probit function
54// at 0.75).
55// B The location, c_bi, is computed from
56//
57// c_bi = sum(x_i * w_i^2)/sum(w_i^2) (2)
58//
59// where only values of u_i which satisfy abs(u_i) < 1 (w_i > 0) are used in
60// the sums.
61// C. The scale value is computed using
62//
63// n * sum((x_i - c_bi)^2 * w_i^4)
64// s_bi^2 = _______________________________ (3)
65// p * max(1, p - 1)
66//
67// where n is the number of points for the entire distribution (which includes
68// all the data for which abs(u_i) >= 1) and p is given by
69//
70// p = abs(sum((w_i) * (w_i - 4*u_i^2)))
71//
72// Again, the sums include only data for which abs(u_i) < 1.
73//
74// The algorithm proceeds as follows.
75// 1. Compute initial u_i values from equation (1), setting c_bi equal to the
76// median of the distribution and s_bi equal to the normalized median of the
77// absolute deviation about the median.
78// 2. Compute the initial value of the scale using the u_i values computed in
79// step 1. using equation 3.
80// 3. Recompute u_i values using the most recent previous scale and location
81// values.
82// 4. Compute the location using the u_i values from step 3 and equation (2).
83// 5. Recompute u_i values using the most recent previous scale and location
84// values.
85// 6. Compute the new scale value using the the u_i values computed in step 5
86// and the value of the location computed in step 4.
87// 7. Steps 3. - 6. are repeated until convergence occurs or the maximum number
88// of iterations (a configurable parameter) is reached. The convergence
89// criterion is given by
90//
91// abs(1 - s_bi/s_bi,prev) < 0.03 * sqrt(0.5/(n - 1))
92//
93// where s_bi,prev is the value of the scale computed in the previous
94// iteration.
95//
96// SPECIAL CASE TO FACILITATE SPEED
97//
98// In the special case where maxNiter is specified to be negative, the algorithm
99// proceeds as follows
100// 1. Compute u_i values using the median for the location and the normalized
101// median of the absolute deviation about the median as the scale
102// 2. Compute the location and scale (which can be carried out simultaneously)
103// using the u_i values computed in step 1. The value of the location is just
104// the median that is used in equation (3) to compute the scale
105//
106// IMPORTANT NOTE REGARDING USER SPECIFIED WEIGHTS
107//
108// Although user-specified weights can be supplied, they are effectively ignored
109// by this algorithm, except for data which have weights of zero, which are
110// ignored.
111
112// This is a derived class of ClassicalStatistics, rather than
113// ConstrainedRangeStatistics, because if behaves differently from
114// ConstrainedRangeStatistics and does not need to use any methods in that
115// class, so making it a specialization of the higher level ClassicalStatistics
116// seems the better choice.
117template <
118 class AccumType, class DataIterator, class MaskIterator=const Bool*,
119 class WeightsIterator=DataIterator
120>
122 : public ClassicalStatistics<CASA_STATP> {
123public:
124
125 BiweightStatistics(Int maxNiter=3, Double c=6.0);
126
127 // copy semantics
129
131
132 // copy semantics
135 );
136
138
139 // Clone this instance
141
142 // <group>
143 // these statistics are not supported. The methods, which override
144 // the virtual ancestor versions, throw exceptions.
145 virtual AccumType getMedian(
146 std::shared_ptr<uInt64> knownNpts=nullptr,
147 std::shared_ptr<AccumType> knownMin=nullptr,
148 std::shared_ptr<AccumType> knownMax=nullptr,
149 uInt binningThreshholdSizeBytes=4096*4096,
150 Bool persistSortedArray=False, uInt nBins=10000
151 );
152
153 virtual AccumType getMedianAndQuantiles(
154 std::map<Double, AccumType>& quantileToValue,
155 const std::set<Double>& quantiles, std::shared_ptr<uInt64> knownNpts=nullptr,
156 std::shared_ptr<AccumType> knownMin=nullptr,
157 std::shared_ptr<AccumType> knownMax=nullptr,
158 uInt binningThreshholdSizeBytes=4096*4096,
159 Bool persistSortedArray=False, uInt nBins=10000
160 );
161
162 virtual AccumType getMedianAbsDevMed(
163 std::shared_ptr<uInt64> knownNpts=nullptr,
164 std::shared_ptr<AccumType> knownMin=nullptr,
165 std::shared_ptr<AccumType> knownMax=nullptr,
166 uInt binningThreshholdSizeBytes=4096*4096,
167 Bool persistSortedArray=False, uInt nBins=10000
168 );
169
170 virtual std::map<Double, AccumType> getQuantiles(
171 const std::set<Double>& quantiles, std::shared_ptr<uInt64> npts=nullptr,
172 std::shared_ptr<AccumType> min=nullptr, std::shared_ptr<AccumType> max=nullptr,
173 uInt binningThreshholdSizeBytes=4096*4096,
174 Bool persistSortedArray=False, uInt nBins=10000
175 );
176
177 virtual std::pair<Int64, Int64> getStatisticIndex(
179 );
180 // </group>
181
182 // returns the number of iterations performed to
183 // compute the current location and scale values
184 Int getNiter() const;
185
186 // reset object to initial state. Clears all private fields including data,
187 // accumulators, etc.
188 virtual void reset();
189
190 // If c is True, an exception is thrown; this algorithm does not support
191 // computing stats as data are added.
192 virtual void setCalculateAsAdded(Bool c);
193
194 // Provide guidance to algorithms by specifying a priori which statistics
195 // the caller would like calculated. This algorithm always needs to compute
196 // the location (MEAN) and the scale (STDDEV) so these statistics are always
197 // added to the input set, which is why this method overrides the base class
198 // version.
199 virtual void setStatsToCalculate(std::set<StatisticsData::STATS>& stats);
200
201protected:
202
204
206
207private:
210 AccumType _location{0}, _scale{0};
211 std::pair<AccumType, AccumType> _range{};
212 // _npts is the number of points computed using ClassicalStatistics
214
215 // because the compiler gets confused if these aren't explicitly typed
216 static const AccumType FOUR;
217 static const AccumType FIVE;
218
220 AccumType& sxw2, AccumType& sw2, AccumType& sx_M2w4,
221 AccumType& ww_4u2, DataIterator dataIter, MaskIterator maskIter,
222 WeightsIterator weightsIter, uInt64 dataCount,
223 const typename StatisticsDataset<CASA_STATP>::ChunkData& chunk
224 );
225
227 AccumType& sxw2, AccumType& sw2, DataIterator dataIter,
228 MaskIterator maskIter, WeightsIterator weightsIter, uInt64 dataCount,
229 const typename StatisticsDataset<CASA_STATP>::ChunkData& chunk
230 );
231
233 AccumType& sx_M2w4, AccumType& ww_4u2, DataIterator dataIter,
234 MaskIterator maskIter, WeightsIterator weightsIter, uInt64 dataCount,
235 const typename StatisticsDataset<CASA_STATP>::ChunkData& chunk
236 ) const;
237
239
241
242 void _doScale();
243
244 // <group>
245 // sxw2 = sum(x_i*(1 - u_i^2)^2)
246 // sw2 = sum((1-u_i^2)^2)
247 // sx_M2w4 = sum((x_i - _location)^2 * (1 - u_i^2)^4) = sum((x_i - _location)^2 * w_i^4)
248 // ww_4u2 = sum((1 - u_i^2) * (1 - 5*u_i^2)) = sum(w_i * (w_i - 4*u_i^2))
250 AccumType& sxw2, AccumType& sw2, AccumType& sx_M2w4, AccumType& ww_4u2,
251 const DataIterator& dataBegin, uInt64 nr, uInt dataStride
252 ) const;
253
255 AccumType& sxw2, AccumType& sw2, AccumType& sx_M2w4, AccumType& ww_4u2,
256 const DataIterator& dataBegin, uInt64 nr, uInt dataStride,
257 const DataRanges& ranges, Bool isInclude
258 ) const;
259
261 AccumType& sxw2, AccumType& sw2, AccumType& sx_M2w4, AccumType& ww_4u2,
262 const DataIterator& dataBegin, uInt64 nr, uInt dataStride,
263 const MaskIterator& maskBegin, uInt maskStride
264 ) const;
265
267 AccumType& sxw2, AccumType& sw2, AccumType& sx_M2w4, AccumType& ww_4u2,
268 const DataIterator& dataBegin, uInt64 nr, uInt dataStride,
269 const MaskIterator& maskBegin, uInt maskStride,
270 const DataRanges& ranges, Bool isInclude
271 ) const;
272
274 AccumType& sxw2, AccumType& sw2, AccumType& sx_M2w4, AccumType& ww_4u2,
275 const DataIterator& dataBegin, const WeightsIterator& weightsBegin,
276 uInt64 nr, uInt dataStride
277 ) const;
278
280 AccumType& sxw2, AccumType& sw2, AccumType& sx_M2w4, AccumType& ww_4u2,
281 const DataIterator& dataBegin, const WeightsIterator& weightsBegin,
282 uInt64 nr, uInt dataStride, const DataRanges& ranges, Bool isInclude
283 ) const;
284
286 AccumType& sxw2, AccumType& sw2, AccumType& sx_M2w4, AccumType& ww_4u2,
287 const DataIterator& dataBegin, const WeightsIterator& weightsBegin,
288 uInt64 nr, uInt dataStride, const MaskIterator& maskBegin,
289 uInt maskStride, const DataRanges& ranges, Bool isInclude
290 ) const;
291
293 AccumType& sxw2, AccumType& sw2, AccumType& sx_M2w4, AccumType& ww_4u2,
294 const DataIterator& dataBegin, const WeightsIterator& weightBegin,
295 uInt64 nr, uInt dataStride, const MaskIterator& maskBegin,
296 uInt maskStride
297 ) const;
298 // </group>
299
300 // <group>
301 // sxw2 = sum(x_i*(1 - u_i^2)^2)
302 // sw2 = sum((1-u_i^2)^2)
304 AccumType& sxw2, AccumType& sw2, const DataIterator& dataBegin,
305 uInt64 nr, uInt dataStride
306 ) const;
307
309 AccumType& sxw2, AccumType& sw2, const DataIterator& dataBegin,
310 uInt64 nr, uInt dataStride, const DataRanges& ranges, Bool isInclude
311 ) const;
312
314 AccumType& sxw2, AccumType& sw2, const DataIterator& dataBegin,
315 uInt64 nr, uInt dataStride, const MaskIterator& maskBegin,
316 uInt maskStride
317 ) const;
318
320 AccumType& sxw2, AccumType& sw2, const DataIterator& dataBegin,
321 uInt64 nr, uInt dataStride, const MaskIterator& maskBegin,
322 uInt maskStride, const DataRanges& ranges, Bool isInclude
323 ) const;
324
326 AccumType& sxw2, AccumType& sw2, const DataIterator& dataBegin,
327 const WeightsIterator& weightsBegin, uInt64 nr, uInt dataStride
328 ) const;
329
331 AccumType& sxw2, AccumType& sw2, const DataIterator& dataBegin,
332 const WeightsIterator& weightsBegin, uInt64 nr, uInt dataStride,
333 const DataRanges& ranges, Bool isInclude
334 ) const;
335
337 AccumType& sxw2, AccumType& sw2, const DataIterator& dataBegin,
338 const WeightsIterator& weightsBegin, uInt64 nr, uInt dataStride,
339 const MaskIterator& maskBegin, uInt maskStride,
340 const DataRanges& ranges, Bool isInclude
341 ) const;
342
344 AccumType& sxw2, AccumType& sw2, const DataIterator& dataBegin,
345 const WeightsIterator& weightBegin, uInt64 nr, uInt dataStride,
346 const MaskIterator& maskBegin, uInt maskStride
347 ) const;
348 // </group>
349
350 // <group>
351 // sx_M2w4 = sum((x_i - _location)^2 * (1 - u_i^2)^4) = sum((x_i - _location)^2 * w_i^4)
352 // ww_4u2 = sum((1 - u_i^2) * (1 - 5*u_i^2)) = sum(w_i * (w_i - 4*u_i^2))
354 AccumType& sx_M2w4, AccumType& ww_4u2, const DataIterator& dataBegin,
355 uInt64 nr, uInt dataStride
356 ) const;
357
359 AccumType& sx_M2w4, AccumType& ww_4u2, const DataIterator& dataBegin,
360 uInt64 nr, uInt dataStride, const DataRanges& ranges,
361 Bool isInclude
362 ) const;
363
365 AccumType& sx_M2w4, AccumType& ww_4u2, const DataIterator& dataBegin,
366 uInt64 nr, uInt dataStride, const MaskIterator& maskBegin,
367 uInt maskStride
368 ) const;
369
371 AccumType& sx_M2w4, AccumType& ww_4u2, const DataIterator& dataBegin,
372 uInt64 nr, uInt dataStride, const MaskIterator& maskBegin,
373 uInt maskStride, const DataRanges& ranges, Bool isInclude
374 ) const;
375
377 AccumType& sx_M2w4, AccumType& ww_4u2, const DataIterator& dataBegin,
378 const WeightsIterator& weightsBegin, uInt64 nr, uInt dataStride
379 ) const;
380
382 AccumType& sx_M2w4, AccumType& ww_4u2, const DataIterator& dataBegin,
383 const WeightsIterator& weightsBegin, uInt64 nr, uInt dataStride,
384 const DataRanges& ranges, Bool isInclude
385 ) const;
386
388 AccumType& sx_M2w4, AccumType& ww_4u2, const DataIterator& dataBegin,
389 const WeightsIterator& weightsBegin, uInt64 nr, uInt dataStride,
390 const MaskIterator& maskBegin, uInt maskStride,
391 const DataRanges& ranges, Bool isInclude
392 ) const;
393
395 AccumType& sx_M2w4, AccumType& ww_4u2, const DataIterator& dataBegin,
396 const WeightsIterator& weightBegin, uInt64 nr, uInt dataStride,
397 const MaskIterator& maskBegin, uInt maskStride
398 ) const;
399 // </group>
400
401};
402
403}
404
405#ifndef CASACORE_NO_AUTO_TEMPLATES
406#include <casacore/scimath/StatsFramework/BiweightStatistics.tcc>
407#endif
408
409#endif
#define DataRanges
The biweight algorithm is a robust iterative algorithm that computes two quantities called the "locat...
void _locationAndScaleSums(AccumType &sxw2, AccumType &sw2, AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
void _computeLocationAndScaleSums(AccumType &sxw2, AccumType &sw2, AccumType &sx_M2w4, AccumType &ww_4u2, DataIterator dataIter, MaskIterator maskIter, WeightsIterator weightsIter, uInt64 dataCount, const typename StatisticsDataset< CASA_STATP >::ChunkData &chunk)
void _locationSums(AccumType &sxw2, AccumType &sw2, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
void _locationSums(AccumType &sxw2, AccumType &sw2, const DataIterator &dataBegin, uInt64 nr, uInt dataStride) const
sxw2 = sum(x_i*(1 - u_i^2)^2) sw2 = sum((1-u_i^2)^2)
uInt64 _npts
_npts is the number of points computed using ClassicalStatistics
void _scaleSums(AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
void _locationAndScaleSums(AccumType &sxw2, AccumType &sw2, AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
void _scaleSums(AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
void _locationAndScaleSums(AccumType &sxw2, AccumType &sw2, AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
void _locationAndScaleSums(AccumType &sxw2, AccumType &sw2, AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
virtual AccumType getMedianAndQuantiles(std::map< Double, AccumType > &quantileToValue, const std::set< Double > &quantiles, std::shared_ptr< uInt64 > knownNpts=nullptr, std::shared_ptr< AccumType > knownMin=nullptr, std::shared_ptr< AccumType > knownMax=nullptr, uInt binningThreshholdSizeBytes=4096 *4096, Bool persistSortedArray=False, uInt nBins=10000)
void _scaleSums(AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride) const
void _scaleSums(AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, uInt64 nr, uInt dataStride) const
sx_M2w4 = sum((x_i - _location)^2 * (1 - u_i^2)^4) = sum((x_i - _location)^2 * w_i^4) ww_4u2 = sum((1...
virtual std::map< Double, AccumType > getQuantiles(const std::set< Double > &quantiles, std::shared_ptr< uInt64 > npts=nullptr, std::shared_ptr< AccumType > min=nullptr, std::shared_ptr< AccumType > max=nullptr, uInt binningThreshholdSizeBytes=4096 *4096, Bool persistSortedArray=False, uInt nBins=10000)
virtual void setStatsToCalculate(std::set< StatisticsData::STATS > &stats)
Provide guidance to algorithms by specifying a priori which statistics the caller would like calculat...
virtual AccumType getMedianAbsDevMed(std::shared_ptr< uInt64 > knownNpts=nullptr, std::shared_ptr< AccumType > knownMin=nullptr, std::shared_ptr< AccumType > knownMax=nullptr, uInt binningThreshholdSizeBytes=4096 *4096, Bool persistSortedArray=False, uInt nBins=10000)
void _locationSums(AccumType &sxw2, AccumType &sw2, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
virtual void setCalculateAsAdded(Bool c)
If c is True, an exception is thrown; this algorithm does not support computing stats as data are add...
void _scaleSums(AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
virtual void reset()
reset object to initial state.
void _locationAndScaleSums(AccumType &sxw2, AccumType &sw2, AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride) const
void _locationSums(AccumType &sxw2, AccumType &sw2, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
void _locationAndScaleSums(AccumType &sxw2, AccumType &sw2, AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const DataRanges &ranges, Bool isInclude) const
virtual StatisticsAlgorithm< CASA_STATP > * clone() const
Clone this instance.
void _locationAndScaleSums(AccumType &sxw2, AccumType &sw2, AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
void _scaleSums(AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
void _computeScaleSums(AccumType &sx_M2w4, AccumType &ww_4u2, DataIterator dataIter, MaskIterator maskIter, WeightsIterator weightsIter, uInt64 dataCount, const typename StatisticsDataset< CASA_STATP >::ChunkData &chunk) const
void _locationSums(AccumType &sxw2, AccumType &sw2, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride) const
virtual StatisticsData::ALGORITHM algorithm() const
get the algorithm that this object uses for computing stats
void _locationAndScaleSums(AccumType &sxw2, AccumType &sw2, AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, uInt64 nr, uInt dataStride) const
sxw2 = sum(x_i*(1 - u_i^2)^2) sw2 = sum((1-u_i^2)^2) sx_M2w4 = sum((x_i - _location)^2 * (1 - u_i^2)^...
void _scaleSums(AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
std::pair< AccumType, AccumType > _range
virtual StatsData< AccumType > _getStatistics()
void _locationSums(AccumType &sxw2, AccumType &sw2, const DataIterator &dataBegin, const WeightsIterator &weightsBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
virtual std::pair< Int64, Int64 > getStatisticIndex(StatisticsData::STATS stat)
see base class description
static const AccumType FOUR
because the compiler gets confused if these aren't explicitly typed
BiweightStatistics(Int maxNiter=3, Double c=6.0)
void _computeLocationSums(AccumType &sxw2, AccumType &sw2, DataIterator dataIter, MaskIterator maskIter, WeightsIterator weightsIter, uInt64 dataCount, const typename StatisticsDataset< CASA_STATP >::ChunkData &chunk)
BiweightStatistics< CASA_STATP > & operator=(const BiweightStatistics< CASA_STATP > &other)
copy semantics
void _locationSums(AccumType &sxw2, AccumType &sw2, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride, const DataRanges &ranges, Bool isInclude) const
void _locationSums(AccumType &sxw2, AccumType &sw2, const DataIterator &dataBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
BiweightStatistics(const BiweightStatistics< CASA_STATP > &other)
copy semantics
void _scaleSums(AccumType &sx_M2w4, AccumType &ww_4u2, const DataIterator &dataBegin, const WeightsIterator &weightBegin, uInt64 nr, uInt dataStride, const MaskIterator &maskBegin, uInt maskStride) const
virtual AccumType getMedian(std::shared_ptr< uInt64 > knownNpts=nullptr, std::shared_ptr< AccumType > knownMin=nullptr, std::shared_ptr< AccumType > knownMax=nullptr, uInt binningThreshholdSizeBytes=4096 *4096, Bool persistSortedArray=False, uInt nBins=10000)
these statistics are not supported.
Int getNiter() const
returns the number of iterations performed to compute the current location and scale values
Class to calculate statistics in a "classical" sense, ie using accumulators with no special filtering...
Base class of statistics algorithm class hierarchy.
ALGORITHM
implemented algorithms
this file contains all the compiler specific defines
Definition mainpage.dox:28
const Bool False
Definition aipstype.h:42
LatticeExprNode max(const LatticeExprNode &left, const LatticeExprNode &right)
unsigned int uInt
Definition aipstype.h:49
LatticeExprNode min(const LatticeExprNode &left, const LatticeExprNode &right)
int Int
Definition aipstype.h:48
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40
double Double
Definition aipstype.h:53
unsigned long long uInt64
Definition aipsxtype.h:37
holds information about a data chunk.