Logo ROOT  
Reference Guide
ROOT::Experimental::RAxisLabels Class Reference

A RAxisGrow that has a label assigned to each bin and a bin width of 1.

While filling still works through coordinates (i.e. arrays of doubles), RAxisLabels allows to convert a string to a bin number or the bin's coordinate center. The number of labels and the number of bins reported by RAxisGrow might differ: the RAxisGrow will only grow when seeing a Fill(), while the RAxisLabels will add a new label whenever GetBinCenter() is called.

Implementation details: Filling happens often; GetBinCenter() needs to be fast. Thus the unordered_map. The painter needs the reverse: it wants the label for bin 0, bin 1 etc. The axis should only store the bin labels once; referencing them is (due to re-allocation, hashing etc) non-trivial. So instead, build a vector<string_view> for the few times the axis needs to be painted.

Definition at line 737 of file RAxis.hxx.

Public Types

enum  LabelsCmpFlags { kLabelsCmpSame = 0 , kLabelsCmpSubset = 0b1 , kLabelsCmpSuperset = 0b10 , kLabelsCmpDisordered = 0b100 }
 Result of an RAxisLabels label set comparison. More...
 

Public Member Functions

 RAxisLabels (const std::vector< std::string > &labels)
 Construct a RAxisLables from a vector of strings. More...
 
 RAxisLabels (const std::vector< std::string_view > &labels)
 Construct a RAxisLables from a vector of string_views. More...
 
 RAxisLabels (std::string_view title, const std::vector< std::string > &labels)
 Construct a RAxisLables from a vector of strings, with title. More...
 
 RAxisLabels (std::string_view title, const std::vector< std::string_view > &labels)
 Construct a RAxisLables from a vector of string_views, with title. More...
 
LabelsCmpFlags CompareBinLabels (const RAxisLabels &other) const noexcept
 Compare the labels of this axis with those of another axis. More...
 
int FindBinByName (const std::string &label)
 Get the bin index with label. More...
 
double GetBinCenterByName (const std::string &label)
 Get the center of the bin with label. More...
 
std::vector< std::string_viewGetBinLabels () const
 Build a vector of labels. The position in the vector defines the label's bin. More...
 
 operator RAxisConfig () const
 Convert to RAxisConfig. More...
 
- Public Member Functions inherited from ROOT::Experimental::RAxisGrow
 RAxisGrow (int nbins, double low, double high) noexcept
 Initialize a RAxisGrow. More...
 
 RAxisGrow (std::string_view title, int nbins, double low, double high) noexcept
 Initialize a RAxisGrow. More...
 
bool CanGrow () const noexcept final override
 This axis kind can increase its range. More...
 
int Grow (int toBin)
 Grow this axis to make the "virtual bin" toBin in-range. More...
 
 operator RAxisConfig () const
 Convert to RAxisConfig. More...
 
- Public Member Functions inherited from ROOT::Experimental::RAxisEquidistant
 RAxisEquidistant ()=default
 
 RAxisEquidistant (int nbinsNoOver, double low, double high) noexcept
 Initialize a RAxisEquidistant. More...
 
 RAxisEquidistant (std::string_view title, int nbinsNoOver, double low, double high) noexcept
 Initialize a RAxisEquidistant. More...
 
bool CanGrow () const noexcept override
 This axis cannot grow. More...
 
int FindBin (double x) const noexcept final override
 Find the adjusted bin index (returning kUnderflowBin for underflow and kOverflowBin for overflow) for the given coordinate. More...
 
double GetBinCenter (int bin) const final override
 Get the bin center for the given bin index. More...
 
double GetBinFrom (int bin) const final override
 Get the low bin border for the given bin index. More...
 
int GetBinIndexForLowEdge (double x) const noexcept final override
 If the coordinate x is within 10 ULPs of a bin low edge coordinate, return the bin for which this is a low edge. More...
 
double GetBinWidth () const noexcept
 Get the width of the bins. More...
 
double GetInverseBinWidth () const noexcept
 Get the inverse of the width of the bins. More...
 
int GetNBinsNoOver () const noexcept final override
 Get the number of bins, excluding under- and overflow. More...
 
 operator RAxisConfig () const
 Convert to RAxisConfig. More...
 
- Public Member Functions inherited from ROOT::Experimental::RAxisBase
virtual bool CanGrow () const noexcept=0
 Whether this axis can grow (and thus has no overflow bins). More...
 
virtual int FindBin (double x) const noexcept=0
 Find the adjusted bin index (returning kUnderflowBin for underflow and kOverflowBin for overflow) for the given coordinate. More...
 
virtual double GetBinCenter (int bin) const =0
 Get the bin center for the given bin index. More...
 
virtual double GetBinFrom (int bin) const =0
 Get the low bin border ("left edge") for the given bin index. More...
 
virtual int GetBinIndexForLowEdge (double x) const noexcept=0
 If the coordinate x is within 10 ULPs of a bin low edge coordinate, return the bin for which this is a low edge. More...
 
double GetBinTo (int bin) const
 Get the high bin border ("right edge") for the given bin index. More...
 
int GetFirstBin () const noexcept
 Get the bin index for the first bin of the axis. More...
 
int GetLastBin () const noexcept
 Get the bin index for the last bin of the axis. More...
 
double GetMaximum () const
 Get the high end of the axis range. More...
 
double GetMinimum () const
 Get the low end of the axis range. More...
 
int GetNBins () const noexcept
 Get the number of bins, including under- and overflow. More...
 
virtual int GetNBinsNoOver () const noexcept=0
 Get the number of bins, excluding under- and overflow. More...
 
int GetNOverflowBins () const noexcept
 Get the number of over- and underflow bins: 0 for growable axes, 2 otherwise. More...
 
int GetOverflowBin () const noexcept
 Get the bin index for the overflow bin (or kInvalidBin if CanGrow()). More...
 
const std::string & GetTitle () const
 Get the axis's title. More...
 
int GetUnderflowBin () const noexcept
 Get the bin index for the underflow bin (or kInvalidBin if CanGrow()). More...
 
bool HasSameBinningAs (const RAxisBase &other) const
 Check if two axes use the same binning convention, i.e. More...
 
const_iterator begin () const noexcept
 Get a const_iterator pointing to the first regular bin. More...
 
const_iterator end () const noexcept
 Get a const_iterator pointing beyond the last regular bin. More...
 

Private Attributes

std::unordered_map< std::string, int > fLabelsIndex
 Map of label (view on fLabels's elements) to bin index. More...
 

Additional Inherited Members

- Static Public Attributes inherited from ROOT::Experimental::RAxisBase
constexpr static const int kInvalidBin = 0
 Special bin index returned to signify that no bin matches a request. More...
 
constexpr static const int kOverflowBin = -2
 Index of the overflow bin, if any. More...
 
constexpr static const int kUnderflowBin = -1
 Index of the underflow bin, if any. More...
 
- Protected Member Functions inherited from ROOT::Experimental::RAxisEquidistant
double FindBinRaw (double x) const noexcept
 Find the raw bin index (not adjusted) for the given coordinate. More...
 
bool HasSameBinBordersAs (const RAxisBase &other) const override
 See RAxisBase::HasSameBinBordersAs. More...
 
- Protected Member Functions inherited from ROOT::Experimental::RAxisBase
 RAxisBase () noexcept(noexcept(std::string()))=default
 Default construct a RAxisBase (for use by derived classes for I/O) More...
 
 RAxisBase (std::string_view title) noexcept
 Construct a RAxisBase. More...
 
virtual ~RAxisBase ()
 Virtual destructor needed in this inheritance-based design. More...
 
int AdjustOverflowBinNumber (double rawbin) const
 Given rawbin (<0 for underflow, >=GetNBinsNoOver() for overflow), determine the bin number taking into account how over/underflow should be handled. More...
 
virtual bool HasSameBinBordersAs (const RAxisBase &other) const
 Check if two axis have the same bin borders. More...
 
 RAxisBase (const RAxisBase &)=default
 
 RAxisBase (RAxisBase &&)=default
 
RAxisBaseoperator= (const RAxisBase &)=default
 
RAxisBaseoperator= (RAxisBase &&)=default
 
- Static Protected Member Functions inherited from ROOT::Experimental::RAxisEquidistant
static double GetInvBinWidth (int nbinsNoOver, double lowOrHigh, double highOrLow)
 Determine the inverse bin width. More...
 
- Protected Attributes inherited from ROOT::Experimental::RAxisEquidistant
double fInvBinWidth = 0.
 The inverse of the bin width. More...
 
double fLow = 0.
 The lower limit of the axis. More...
 
unsigned int fNBinsNoOver
 Number of bins excluding under- and overflow. More...
 

#include <ROOT/RAxis.hxx>

Inheritance diagram for ROOT::Experimental::RAxisLabels:
[legend]

Member Enumeration Documentation

◆ LabelsCmpFlags

Result of an RAxisLabels label set comparison.

Enumerator
kLabelsCmpSame 

Both axes have the same labels, mapping to the same bins.

kLabelsCmpSubset 

The other axis doesn't have some labels from this axis.

kLabelsCmpSuperset 

The other axis has some labels which this axis doesn't have.

kLabelsCmpDisordered 

The labels shared by both axes do not map into the same bins.

Definition at line 797 of file RAxis.hxx.

Constructor & Destructor Documentation

◆ RAxisLabels() [1/4]

ROOT::Experimental::RAxisLabels::RAxisLabels ( std::string_view  title,
const std::vector< std::string_view > &  labels 
)
inlineexplicit

Construct a RAxisLables from a vector of string_views, with title.

Definition at line 744 of file RAxis.hxx.

◆ RAxisLabels() [2/4]

ROOT::Experimental::RAxisLabels::RAxisLabels ( std::string_view  title,
const std::vector< std::string > &  labels 
)
inlineexplicit

Construct a RAxisLables from a vector of strings, with title.

Definition at line 752 of file RAxis.hxx.

◆ RAxisLabels() [3/4]

ROOT::Experimental::RAxisLabels::RAxisLabels ( const std::vector< std::string_view > &  labels)
inlineexplicit

Construct a RAxisLables from a vector of string_views.

Definition at line 760 of file RAxis.hxx.

◆ RAxisLabels() [4/4]

ROOT::Experimental::RAxisLabels::RAxisLabels ( const std::vector< std::string > &  labels)
inlineexplicit

Construct a RAxisLables from a vector of strings.

Definition at line 763 of file RAxis.hxx.

Member Function Documentation

◆ CompareBinLabels()

LabelsCmpFlags ROOT::Experimental::RAxisLabels::CompareBinLabels ( const RAxisLabels other) const
inlinenoexcept

Compare the labels of this axis with those of another axis.

Definition at line 812 of file RAxis.hxx.

◆ FindBinByName()

int ROOT::Experimental::RAxisLabels::FindBinByName ( const std::string &  label)
inline

Get the bin index with label.

Definition at line 769 of file RAxis.hxx.

◆ GetBinCenterByName()

double ROOT::Experimental::RAxisLabels::GetBinCenterByName ( const std::string &  label)
inline

Get the center of the bin with label.

Definition at line 782 of file RAxis.hxx.

◆ GetBinLabels()

std::vector< std::string_view > ROOT::Experimental::RAxisLabels::GetBinLabels ( ) const
inline

Build a vector of labels. The position in the vector defines the label's bin.

Definition at line 788 of file RAxis.hxx.

◆ operator RAxisConfig()

ROOT::Experimental::RAxisLabels::operator RAxisConfig ( ) const
inline

Convert to RAxisConfig.

Definition at line 766 of file RAxis.hxx.

Member Data Documentation

◆ fLabelsIndex

std::unordered_map<std::string, int > ROOT::Experimental::RAxisLabels::fLabelsIndex
private

Map of label (view on fLabels's elements) to bin index.

Definition at line 740 of file RAxis.hxx.


The documentation for this class was generated from the following file: