00001 #ifndef CCTBX_MATH_ARRAY_UTILS_H
00002 #define CCTBX_MATH_ARRAY_UTILS_H
00003
00004 #include <cctbx/fixes/cmath>
00005 #include <cctbx/array_family/ref_reductions.h>
00006
00007 namespace cctbx { namespace math {
00008
00009 template <typename FloatType>
00010 class array_statistics
00011 {
00012 public:
00013 array_statistics() {}
00014 array_statistics(af::const_ref<FloatType> const& a)
00015 {
00016 m_min = af::min(a);
00017 m_max = af::max(a);
00018 m_mean = af::mean(a);
00019 m_mean2 = af::mean_sq(a);
00020 m_sigma = m_mean2 - m_mean * m_mean;
00021 if (m_sigma < FloatType(0)) m_sigma = 0;
00022 m_sigma = std::sqrt(m_sigma);
00023 }
00024 FloatType const& min() const { return m_min; }
00025 FloatType const& max() const { return m_max; }
00026 FloatType const& mean() const { return m_mean; }
00027 FloatType const& mean2() const { return m_mean2; }
00028 FloatType const& sigma() const { return m_sigma; }
00029 protected:
00030 FloatType m_min;
00031 FloatType m_max;
00032 FloatType m_mean;
00033 FloatType m_mean2;
00034 FloatType m_sigma;
00035 };
00036
00037 }}
00038
00039 #endif // CCTBX_MATH_ARRAY_UTILS_H