5#ifndef ROOT_RVariableBinAxis
6#define ROOT_RVariableBinAxis
24namespace Experimental {
60 throw std::invalid_argument(
"must have >= 2 bin edges");
63 throw std::invalid_argument(
"bin egde 0 is NaN");
65 for (std::size_t i = 1; i <
fBinEdges.size(); i++) {
67 throw std::invalid_argument(
"bin egde " + std::to_string(i) +
" is NaN");
70 std::string
msg =
"binEdges must be sorted, but for bin " + std::to_string(i - 1) +
": ";
72 throw std::invalid_argument(
msg);
84 return lhs.fBinEdges ==
rhs.fBinEdges &&
lhs.fEnableFlowBins ==
rhs.fEnableFlowBins;
103 }
else if (overflow) {
108 for (std::size_t bin = 0; bin <
fBinEdges.size() - 2; bin++) {
135 if (
index.IsUnderflow()) {
137 }
else if (
index.IsOverflow()) {
139 }
else if (
index.IsInvalid()) {
143 std::uint64_t bin =
index.GetIndex();
171 throw std::invalid_argument(
"begin must be a normal bin");
174 throw std::invalid_argument(
"begin must be inside the axis");
176 if (!end.IsNormal()) {
177 throw std::invalid_argument(
"end must be a normal bin");
179 if (end.GetIndex() >
fBinEdges.size() - 1) {
180 throw std::invalid_argument(
"end must be inside or past the axis");
182 if (!(end >= begin)) {
183 throw std::invalid_argument(
"end must be >= begin");
200 void Streamer(
TBuffer &) {
throw std::runtime_error(
"unable to store RVariableBinAxis"); }
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
A bin index with special values for underflow and overflow bins.
bool IsNormal() const
A bin index is normal iff it is not one of the special values.
std::uint64_t GetIndex() const
Return the index for a normal bin.
static RBinIndex Underflow()
An axis with variable bins defined by their edges.
RLinearizedIndex GetLinearizedIndex(RBinIndex index) const
Compute the linarized index for a single argument.
RBinIndexRange GetNormalRange(RBinIndex begin, RBinIndex end) const
Get a range of normal bins.
RBinIndexRange GetFullRange() const
Get the full range of all bins.
bool fEnableFlowBins
Whether underflow and overflow bins are enabled.
void Streamer(TBuffer &)
ROOT Streamer function to throw when trying to store an object of this class.
std::vector< double > fBinEdges
The (ordered) edges of the normal bins.
RVariableBinAxis(std::vector< double > binEdges, bool enableFlowBins=true)
Construct an axis object with variable bins.
friend bool operator==(const RVariableBinAxis &lhs, const RVariableBinAxis &rhs)
const std::vector< double > & GetBinEdges() const
std::uint64_t GetNNormalBins() const
RBinIndexRange GetNormalRange() const
Get the range of all normal bins.
std::uint64_t GetTotalNBins() const
Buffer base class used for serializing objects.
static RBinIndexRange CreateBinIndexRange(RBinIndex begin, RBinIndex end, std::uint64_t nNormalBins)
Internal function to create RBinIndexRange.
A linearized index that can be invalid.