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.