8 #ifndef IMPSTATISTICS_HISTOGRAM_D_H
9 #define IMPSTATISTICS_HISTOGRAM_D_H
10 #include <IMP/statistics/statistics_config.h>
11 #include "internal/histogram.h"
20 IMPSTATISTICS_BEGIN_NAMESPACE
22 template <
int D,
class Grid = algebra::GridD<
23 D,
typename algebra::DenseGridStorageD<D, double>, double,
24 typename algebra::DefaultEmbeddingD<D> > >
28 typedef Grid CountGrid;
29 HistogramD() : count_(std::numeric_limits<double>::max()) {}
31 : grid_(voxel_size, bb, 0), count_(0) {}
36 "Using uninitialized histogram");
37 typename CountGrid::ExtendedIndex ei = grid_.get_nearest_extended_index(x);
38 if (grid_.get_has_index(ei)) {
39 grid_[grid_.get_index(ei)] += weight;
48 grid_.apply(internal::Frequency<D, Grid>(grid, 1.0 / count_));
57 grid_.apply(internal::Frequency<D, Grid>(grid, 1.0 / (count_ * volume)));
60 const CountGrid &get_counts()
const {
return grid_; }
63 std::fill(zeros.coordinates_begin(), zeros.coordinates_end(), 0.0);
64 return grid_.apply(internal::Mean<D>(zeros)).mn / count_;
66 unsigned int get_dimension()
const {
return grid_.get_dimension(); }
67 algebra::VectorD<D> get_standard_deviation(
68 const algebra::VectorInputD<D> &mean)
const {
69 algebra::VectorD<D> zeros(grid_.get_bounding_box().get_corner(0));
70 std::fill(zeros.coordinates_begin(), zeros.coordinates_end(), 0.0);
71 algebra::VectorD<D> s2 =
72 grid_.apply(internal::Sigma2<D>(mean, zeros)).sigma2;
74 for (
unsigned int i = 0; i < get_dimension(); ++i) {
75 s2[i] = std::sqrt(s2[i]);
82 FloatPair get_minimum_and_maximum()
const {
83 return grid_.apply(internal::MinMax<D>()).minmax;
89 HistogramD(
const CountGrid &g) : grid_(g), count_(1) {}
95 typedef HistogramD<1> Histogram1D;
97 typedef HistogramD<2> Histogram2D;
99 typedef HistogramD<3> Histogram3D;
101 typedef HistogramD<4> Histogram4D;
103 typedef HistogramD<5> Histogram5D;
105 typedef HistogramD<6> Histogram6D;
107 typedef HistogramD<-1> HistogramKD;
114 IMPSTATISTICSEXPORT
double get_quantile(
const Histogram1D &h,
double fraction);
116 IMPSTATISTICS_END_NAMESPACE
double get_mean(const cv::Mat &mat, const cvIntMat &mask)
Import IMP/kernel/base_types.h in the namespace.
A class to represent a voxel grid.
std::pair< double, double > FloatPair
A generic pair of floats.
#define IMP_VALUES(Name, PluralName)
Define the type for storing sets of values.
double get_quantile(const Histogram1D &h, double fraction)
#define IMP_SHOWABLE_INLINE(Name, how_to_show)
Declare the methods needed by an object that can be printed.
#define IMP_USAGE_CHECK(expr, message)
A runtime test for incorrect usage of a class or method.
double get_volume(const BoundingBoxD< D > &bb)
A Cartesian vector in D-dimensions.
A bounding box in D dimensions.
An axis-aligned bounding box.
HistogramD< D > get_probability_distribution_function() const
A class to represent a voxel grid.
double get_total_count() const
Get the sum of all counts in the histogram.
BoundingBoxD< D > get_bounding_box(const BoundingBoxD< D > &g)
void add(const algebra::VectorInputD< D > &x, double weight=1)