8 #ifndef IMPSTATISTICS_HISTOGRAM_D_H
9 #define IMPSTATISTICS_HISTOGRAM_D_H
10 #include <IMP/statistics/statistics_config.h>
11 #include "internal/histogram.h"
21 IMPSTATISTICS_BEGIN_NAMESPACE
24 template <
int D,
class Grid = algebra::GridD<
25 D,
typename algebra::DenseGridStorageD<D, double>, double,
26 typename algebra::DefaultEmbeddingD<D> > >
29 typedef Grid CountGrid;
30 HistogramD() : count_(std::numeric_limits<double>::max()) {}
32 : grid_(voxel_size, bb, 0), count_(0) {}
37 "Using uninitialized histogram");
38 typename CountGrid::ExtendedIndex ei = grid_.get_nearest_extended_index(x);
39 if (grid_.get_has_index(ei)) {
40 grid_[grid_.get_index(ei)] += weight;
47 CountGrid grid(grid_.get_unit_cell()[0], algebra::get_bounding_box(grid_),
49 grid_.apply(internal::Frequency<D, Grid>(grid, 1.0 / count_));
54 CountGrid grid(grid_.get_unit_cell()[0], algebra::get_bounding_box(grid_),
58 grid_.apply(internal::Frequency<D, Grid>(grid, 1.0 / (count_ * volume)));
61 const CountGrid &get_counts()
const {
return grid_; }
64 std::fill(zeros.begin(), zeros.end(), 0.0);
65 return grid_.apply(internal::Mean<D>(zeros)).mn / count_;
67 unsigned int get_dimension()
const {
return grid_.get_dimension(); }
68 algebra::VectorD<D> get_standard_deviation(
69 const algebra::VectorD<D> &mean)
const {
70 algebra::VectorD<D> zeros(grid_.get_bounding_box().get_corner(0));
71 std::fill(zeros.begin(), zeros.end(), 0.0);
72 algebra::VectorD<D> s2 =
73 grid_.apply(internal::Sigma2<D>(mean, zeros)).sigma2;
75 for (
unsigned int i = 0; i < get_dimension(); ++i) {
76 s2[i] = std::sqrt(s2[i]);
80 algebra::BoundingBoxD<D> get_bounding_box()
const {
83 FloatPair get_minimum_and_maximum()
const {
84 return grid_.apply(internal::MinMax<D>()).minmax;
90 HistogramD(
const CountGrid &g) : grid_(g), count_(1) {}
96 typedef HistogramD<1> Histogram1D;
98 typedef HistogramD<2> Histogram2D;
100 typedef HistogramD<3> Histogram3D;
102 typedef HistogramD<4> Histogram4D;
104 typedef HistogramD<5> Histogram5D;
106 typedef HistogramD<6> Histogram6D;
108 typedef HistogramD<-1> HistogramKD;
115 IMPSTATISTICSEXPORT
double get_quantile(
const Histogram1D &h,
double fraction);
117 IMPSTATISTICS_END_NAMESPACE
Base class for geometric types.
double get_mean(const cv::Mat &mat, const cvIntMat &mask)
#define IMP_SHOWABLE_INLINE(Name, how_to_show)
Declare the methods needed by an object that can be printed.
A class to represent a voxel grid.
BoundingBoxD< 3 > get_bounding_box(const Geometry &)
Compute the bounding box of any geometric object.
std::pair< double, double > FloatPair
A generic pair of floats.
double get_quantile(const Histogram1D &h, double fraction)
#define IMP_VALUES(Name, PluralName)
Define the type for storing sets of values.
double get_volume(const BoundingBoxD< D > &bb)
See BoundingBoxD.
Base class for geometric types.
A Cartesian vector in D-dimensions.
A bounding box in D dimensions.
An axis-aligned bounding box.
HistogramD< D > get_probability_distribution_function() const
#define IMP_USAGE_CHECK(expr, message)
A runtime test for incorrect usage of a class or method.
All grids that are in the Python API should be defined here.
void add(const algebra::VectorD< D > &x, double weight=1)
Dynamically build a histogram embedded in D-dimensional space.
double get_total_count() const
Get the sum of all counts in the histogram.