An axis that can extend its range, keeping the number of its bins unchanged.
The axis is constructed with an initial range. Apart from its ability to grow, this axis behaves like a RAxisEquidistant.
Public Member Functions  
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 inrange. 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...  
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 inheritancebased 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  
RAxisBase &  operator= (const RAxisBase &)=default 
RAxisBase &  operator= (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>

inlineexplicitnoexcept 
Initialize a RAxisGrow.
[in]  title   axis title used for graphics and text representation. 
nbins   number of bins in the axis, excluding under and overflow bins. This value is fixed over the lifetime of the object.  
low   the initial value for the low axis range. Any coordinate below that is considered as underflow. To trigger the growing of the axis call Grow() .  
high   the initial value for the high axis range. Any coordinate above that is considered as overflow. To trigger the growing of the axis call Grow() . 

inlineexplicitnoexcept 
Initialize a RAxisGrow.
nbins   number of bins in the axis, excluding under and overflow bins. This value is fixed over the lifetime of the object. 
low   the initial value for the low axis range. Any coordinate below that is considered as underflow. To trigger the growing of the axis call Grow() . 
high   the initial value for the high axis range. Any coordinate above that is considered as overflow. To trigger the growing of the axis call Grow() . 

inlinefinaloverridevirtualnoexcept 
This axis kind can increase its range.
Reimplemented from ROOT::Experimental::RAxisEquidistant.
int ROOT::Experimental::RAxisGrow::Grow  (  int  toBin  ) 
Grow this axis to make the "virtual bin" toBin inrange.
This keeps the nonaffected axis limit unchanged, and extends the other axis limit such that a number of consecutive bins are merged.
Example, assuming an initial RAxisGrow with 10 bins from 0. to 1.:
Grow(0)
: that (virtual) bin spans from 0.1 to 0. To include it in the axis range, the lower limit must be shifted. The minimal number of bins that can be merged is 2, thus the new axis will span from 1. to 1.Grow(1)
: that (virtual) bin spans from 0.2 to 0.1. To include it in the axis range, the lower limit must be shifted. The minimal number of bins that can be merged is 2, thus the new axis will span from 1. to 1.Grow(50)
: that (virtual) bin spans from 4.9 to 5.0. To include it in the axis range, the higher limit must be shifted. Five bins need to be merged, making the new axis range 0. to 5.0.toBin   the "virtual" bin number, as if the axis had an infinite number of bins with the current bin width. For instance, for an axis with ten bins in the range 0. to 1., the coordinate 2.05 has the virtual bin index 20. 

inline 
Convert to RAxisConfig.