5#ifndef ROOT_RCategoricalAxis
6#define ROOT_RCategoricalAxis
18#include <unordered_set>
25namespace Experimental {
61 throw std::invalid_argument(
"must have at least one category");
64 std::unordered_set<std::string_view> set;
65 for (std::size_t i = 0; i <
fCategories.size(); i++) {
67 std::string
msg =
"duplicate category '" +
fCategories[i] +
"' for bin " + std::to_string(i);
68 throw std::invalid_argument(
msg);
80 return lhs.fCategories ==
rhs.fCategories &&
lhs.fEnableOverflowBin ==
rhs.fEnableOverflowBin;
94 for (std::size_t bin = 0; bin <
fCategories.size(); bin++) {
113 if (
index.IsUnderflow()) {
116 }
else if (
index.IsOverflow()) {
118 }
else if (
index.IsInvalid()) {
122 std::uint64_t bin =
index.GetIndex();
142 throw std::invalid_argument(
"begin must be a normal bin");
145 throw std::invalid_argument(
"begin must be inside the axis");
147 if (!end.IsNormal()) {
148 throw std::invalid_argument(
"end must be a normal bin");
151 throw std::invalid_argument(
"end must be inside or past the axis");
153 if (!(end >= begin)) {
154 throw std::invalid_argument(
"end must be >= begin");
171 void Streamer(
TBuffer &) {
throw std::runtime_error(
"unable to store RCategoricalAxis"); }
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.
An axis with categorical bins.
std::uint64_t GetNNormalBins() const
RCategoricalAxis(std::vector< std::string > categories, bool enableOverflowBin=true)
Construct an axis object with categories.
std::vector< std::string > fCategories
The categories as defined by the user.
std::string_view ArgumentType
RBinIndexRange GetFullRange() const
Get the full range of all bins.
RBinIndexRange GetNormalRange(RBinIndex begin, RBinIndex end) const
Get a range of normal bins.
bool HasOverflowBin() const
RLinearizedIndex ComputeLinearizedIndex(std::string_view x) const
Compute the linarized index for a single argument.
bool fEnableOverflowBin
Whether the overflow bin is enabled.
std::uint64_t GetTotalNBins() const
const std::vector< std::string > & GetCategories() const
friend bool operator==(const RCategoricalAxis &lhs, const RCategoricalAxis &rhs)
RBinIndexRange GetNormalRange() const
Get the range of all normal bins.
void Streamer(TBuffer &)
ROOT Streamer function to throw when trying to store an object of this class.
RLinearizedIndex GetLinearizedIndex(RBinIndex index) const
Get the linearized index for an RBinIndex.
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.