5#ifndef GEMMI_BINNER_HPP_
6#define GEMMI_BINNER_HPP_
25 fail(
"Binner: nbins argument must be positive");
27 fail(
"Binner: no data");
31 fail(
"Binner: unknown unit cell");
50 for (
size_t i = 1;
i <
limits.size(); ++
i)
56 for (
size_t i = 1;
i <
limits.size(); ++
i)
64 for (
size_t i = 1;
i <
limits.size(); ++
i)
72 for (
size_t i = 1;
i <
limits.size(); ++
i)
77 limits.back() = std::numeric_limits<double>::infinity();
87 template<
typename DataProxy>
91 fail(
"wrong col_idx in Binner::setup()");
92 cell = cell_ ? *cell_ :
proxy.unit_cell();
93 std::vector<double>
inv_d2;
103 fail(
"Binner not set up");
138 template<
typename DataProxy>
152 for (
size_t i = 0;
i <
size; ++
i)
std::array< int, 3 > Miller
A synonym for convenient passing of hkl.
constexpr float sq(float x)
void fail(const std::string &msg)
int get_bin(const Miller &hkl)
std::vector< double > mids
std::vector< double > limits
double dmin_of_bin(int n) const
void ensure_limits_are_set() const
std::vector< int > get_bins_from_1_d2(const double *inv_d2, size_t size) const
void setup_from_1_d2(int nbins, Method method, std::vector< double > &&inv_d2, const UnitCell *cell_)
int get_bin_hinted(const Miller &hkl, int &hint) const
std::vector< int > get_bins(const DataProxy &proxy) const
int get_bin_from_1_d2_hinted(double inv_d2, int &hint) const
void setup(int nbins, Method method, const DataProxy &proxy, const UnitCell *cell_=nullptr, size_t col_idx=0)
std::vector< int > get_bins_from_1_d2(const std::vector< double > &inv_d2) const
int get_bin_from_1_d2(double inv_d2)
double dmax_of_bin(int n) const
double calculate_1_d2(const Miller &hkl) const