5#ifndef ROOT_RCategoricalAxis
6#define ROOT_RCategoricalAxis
17#include <unordered_set>
24namespace Experimental {
60 throw std::invalid_argument(
"must have at least one category");
63 std::unordered_set<std::string_view> set;
64 for (std::size_t i = 0; i <
fCategories.size(); i++) {
66 std::string
msg =
"duplicate category '" +
fCategories[i] +
"' for bin " + std::to_string(i);
67 throw std::invalid_argument(
msg);
79 return lhs.fCategories ==
rhs.fCategories &&
lhs.fEnableOverflowBin ==
rhs.fEnableOverflowBin;
93 for (std::size_t bin = 0; bin <
fCategories.size(); bin++) {
112 if (
index.IsUnderflow()) {
115 }
else if (
index.IsOverflow()) {
117 }
else if (
index.IsInvalid()) {
121 std::size_t bin =
index.GetIndex();
141 throw std::invalid_argument(
"begin must be a normal bin");
144 throw std::invalid_argument(
"begin must be inside the axis");
146 if (!end.IsNormal()) {
147 throw std::invalid_argument(
"end must be a normal bin");
150 throw std::invalid_argument(
"end must be inside or past the axis");
152 if (!(end >= begin)) {
153 throw std::invalid_argument(
"end must be >= begin");
170 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.
std::size_t GetIndex() const
Return the index for a normal bin.
bool IsNormal() const
A bin index is normal iff it is not one of the special values.
An axis with categorical bins.
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::size_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.
std::size_t GetNNormalBins() const
Buffer base class used for serializing objects.
RBinIndexRange CreateBinIndexRange(RBinIndex begin, RBinIndex end, std::size_t nNormalBins)
Internal function to create RBinIndexRange.
A linearized index that can be invalid.