21 const std::vector<double>& bin_boundaries)
24 if (
m_nbins != bin_boundaries.size() - 1)
25 throw std::runtime_error(
"VariableBinAxis::VariableBinAxis() -> Error! "
26 "The size of bin_boundaries should be of size [nbins+1].");
50 throw std::runtime_error(
"VariableBinAxis::bin() -> Error. Wrong index.");
74 throw std::runtime_error(
"VariableBinAxis::findClosestIndex() -> Error! "
75 "VariableBinAxis not correctly initialized");
82 std::vector<double>::const_iterator top_limit =
84 if (*top_limit != value)
92 std::vector<double> result;
93 result.resize(
size(), 0.0);
94 for (
size_t i = 0; i <
size(); ++i) {
104 throw std::runtime_error(
"VariableBinAxis::createClippedAxis() -> Error. "
105 "'left'' should be smaller than 'right'");
115 size_t new_nbins = nbin2 - nbin1 + 1;
116 std::vector<double> new_boundaries;
117 for (
size_t i = 0; i < new_nbins + 1; ++i) {
126 ostr <<
"VariableBinAxis(\"" <<
getName() <<
"\", " <<
size() <<
", [";
128 ostr << std::setprecision(std::numeric_limits<double>::digits10 + 2) <<
m_bin_boundaries[i];
140 if (
size() != p_other_cast->size())
155 std::vector<double> vec_sorted = bin_boundaries;
156 std::sort(vec_sorted.begin(), vec_sorted.end());
157 for (
size_t i = 0; i < bin_boundaries.size(); ++i) {
158 if (vec_sorted[i] != bin_boundaries[i])
159 throw std::runtime_error(
"VariableBinAxis::VariableBinAxis() -> Error. "
160 "Array with bin edges is not sorted.");
163 std::vector<double> vec = bin_boundaries;
164 vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
166 if (vec.size() != bin_boundaries.size())
167 throw std::runtime_error(
"VariableBinAxis::VariableBinAxis() -> Error. "
168 "Array with bin edges contains repeating values.");
Defines and implements namespace algo with some algorithms.
Defines class VariableBinAxis.
Interface for one-dimensional axes.
virtual bool equals(const IAxis &other) const
std::string getName() const
retrieve the label of the axis
Axis with variable bin size.
double upperBound() const
Returns value of last point of axis.
size_t size() const
retrieve the number of bins
void setBinBoundaries(const std::vector< double > &bin_boundaries)
double operator[](size_t index) const
indexed accessor retrieves a sample
double binCenter(size_t index) const
virtual bool equals(const IAxis &other) const
VariableBinAxis(const std::string &name, size_t nbins, const std::vector< double > &bin_boundaries)
VariableBinAxis constructor.
std::vector< double > m_bin_boundaries
vector containing the bin limits
Bin1D bin(size_t index) const
retrieve a 1d bin for the given index
double lowerBound() const
Returns value of first point of axis.
virtual VariableBinAxis * createClippedAxis(double left, double right) const
Creates a new clipped axis.
size_t findClosestIndex(double value) const
find bin index which is best match for given value
std::vector< double > binCenters() const
virtual void print(std::ostream &ostr) const
VariableBinAxis * clone() const
clone function
QString const & name(EShape k)
bool almostEqual(double a, double b)
Returns true if two doubles agree within machine epsilon.