25#include <initializer_list>
29namespace Experimental {
32template <
int DIMENSIONS,
class PRECISION,
template <
int D_,
class P_>
class...
STAT>
36template <
int DIMENSIONS,
class PRECISION,
template <
int D_,
class P_>
class...
STAT>
52template <int DIMENSIONS, class PRECISION, template <int D_, class P_> class... STAT>
92 explicit RHist(std::array<RAxisConfig, DIMENSIONS> axes);
137 std::unique_ptr<ImplBase_t>
TakeImpl() &&
noexcept {
return std::move(
fImpl); }
145 void FillN(
const std::span<const CoordArray_t>
xN,
const std::span<const Weight_t>
weightN)
noexcept
154 void FillN(std::initializer_list<const CoordArray_t>
xN, std::initializer_list<const Weight_t>
weightN)
noexcept
160 void FillN(
const std::span<const CoordArray_t>
xN)
noexcept {
fImpl->FillN(
xN); }
164 void FillN(std::initializer_list<const CoordArray_t>
xN)
noexcept {
201template <
int DIMENSIONS,
class PRECISION>
209template <
int DIMENSIONS,
class PRECISION,
template <
int D_,
class P_>
class...
STAT>
223 template <RAxisConfig::EKind KIND>
224 std::unique_ptr<Detail::RHistImplBase<DATA>>
225 MakeNextAxis(std::string_view title,
const std::array<RAxisConfig, NDIM> &axes,
246 std::unique_ptr<Detail::RHistImplBase<DATA>>
operator()(std::string_view title,
247 const std::array<RAxisConfig, NDIM> &axes,
250 switch (axes[
IDIM].GetKind()) {
266 std::unique_ptr<HistImplBase_t>
270 return std::make_unique<HistImplt_t>(title,
axisArgs...);
275template <
int DIMENSIONS,
class PRECISION,
template <
int D_,
class P_>
class...
STAT>
278 Internal::RHistImplGen<
RHist::GetNDim(), 0,
279 Detail::RHistData<
DIMENSIONS, PRECISION, std::vector<PRECISION>,
STAT...>>()(
285template <
int DIMENSIONS,
class PRECISION,
template <
int D_,
class P_>
class...
STAT>
290template <
int DIMENSIONS,
class PRECISION,
template <
int D_,
class P_>
class...
STAT>
340 template <
int D_,
class P_>
class...
STAT_TO,
341 template <
int D_,
class P_>
class...
STAT_FROM>
348 if (!
toImpl.GetAxis(dim).HasSameBinningAs(
fromImpl.GetAxis(dim))) {
349 throw std::runtime_error(
"Attempted to add RHists with incompatible axis binning");
#define R__LOG_ERROR(...)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Iterates over the bins of a RHist or RHistImpl.
Interface class for RHistImpl.
void(RHistImplBase::*)(const CoordArray_t &x, Weight_t w) FillFunc_t
Type of the Fill(x, w) function.
Hist::CoordArray_t< DATA::GetNDim()> CoordArray_t
Type of the coordinates.
Hist::AxisIterRange_t< DIMENSIONS > AxisIterRange_t
Range type.
Objects used to configure the different axis types.
@ kGrow
represents a RAxisGrow
@ kEquidistant
represents a RAxisEquidistant
@ kIrregular
represents a RAxisIrregular
Basic histogram statistics, keeping track of the bin content and the total number of calls to Fill().
Histogram class for histograms with DIMENSIONS dimensions, where each bin count is stored by a value ...
ImplBase_t * GetImpl() const noexcept
Access the ImplBase_t this RHist points to.
static constexpr int GetNDim() noexcept
Number of dimensions of the coordinates.
void FillN(const std::span< const CoordArray_t > xN) noexcept
Convenience overload: FillN() with weight 1.
PRECISION Weight_t
The type of weights.
Weight_t GetBinContent(const CoordArray_t &x) const
Get the content of the bin at x.
int64_t GetEntries() const noexcept
Get the number of entries this histogram was filled with.
double GetBinUncertainty(const CoordArray_t &x) const
Get the uncertainty on the content of the bin at x.
RHist(std::string_view histTitle, const RAxisConfig &xaxis, const RAxisConfig &yaxis)
Constructor overload that's only available for a 2-dimensional histogram, also passing the histogram ...
const_iterator end() const
RHist(const RAxisConfig &xaxis, const RAxisConfig &yaxis)
Constructor overload that's only available for a 2-dimensional histogram.
void FillN(std::initializer_list< const CoordArray_t > xN, std::initializer_list< const Weight_t > weightN) noexcept
For each coordinate in xN, add weightN[i] to the bin at coordinate xN[i].
typename ImplBase_t::FillFunc_t FillFunc_t
Pointer type to HistImpl_t::Fill, for faster access.
RHist(const RAxisConfig &xaxis, const RAxisConfig &yaxis, const RAxisConfig &zaxis)
Constructor overload that's only available for a 3-dimensional histogram.
void FillN(const std::span< const CoordArray_t > xN, const std::span< const Weight_t > weightN) noexcept
For each coordinate in xN, add weightN[i] to the bin at coordinate xN[i].
typename ImplBase_t::AxisIterRange_t AxisRange_t
Range.
void Fill(const CoordArray_t &x, Weight_t weight=(Weight_t) 1) noexcept
Add weight to the bin containing coordinate x.
RHist(std::string_view histTitle, std::array< RAxisConfig, DIMENSIONS > axes)
Constructor overload taking the histogram title.
Detail::RHistBinIter< ImplBase_t > const_iterator
const_iterator begin() const
RHist(std::string_view histTitle, const RAxisConfig &xaxis, const RAxisConfig &yaxis, const RAxisConfig &zaxis)
Constructor overload that's only available for a 3-dimensional histogram, also passing the histogram ...
void swap(RHist< DIMENSIONS, PRECISION, STAT... > &other) noexcept
Swap *this and other.
std::unique_ptr< ImplBase_t > fImpl
The actual histogram implementation.
std::unique_ptr< ImplBase_t > TakeImpl() &&noexcept
"Steal" the ImplBase_t this RHist points to.
RHist(const RHist &other)
void FillN(std::initializer_list< const CoordArray_t > xN) noexcept
Convenience overload: FillN() with weight 1.
RHist(const RAxisConfig &xaxis)
Constructor overload that's only available for a 1-dimensional histogram.
RHist(std::array< RAxisConfig, DIMENSIONS > axes)
Create a histogram from an array of axes (RAxisConfigs).
FillFunc_t fFillFunc
Pointer to RHistImpl::Fill() member function.
typename ImplBase_t::CoordArray_t CoordArray_t
The coordinates type: a DIMENSIONS-dimensional std::array of double.
RHist(std::string_view histTitle, const RAxisConfig &xaxis)
Constructor overload that's only available for a 1-dimensional histogram, also passing the histogram ...
const_iterator begin() const
const_iterator end() const
class RHist< DIMENSIONS, PRECISION, STAT... > HistFromImpl(std::unique_ptr< typename RHist< DIMENSIONS, PRECISION, STAT... >::ImplBase_t > pHistImpl)
Adopt an external, stand-alone RHistImpl. The RHist will take ownership.
void Add(RHist< DIMENSIONS, PRECISION, STAT_TO... > &to, const RHist< DIMENSIONS, PRECISION, STAT_FROM... > &from)
Add two histograms.
RLogChannel & HistLog()
Log channel for Hist diagnostics.
void swap(RHist< DIMENSIONS, PRECISION, STAT... > &a, RHist< DIMENSIONS, PRECISION, STAT... > &b) noexcept
Swap two histograms.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
Converts a RAxisConfig of whatever kind to the corresponding RAxisBase-derived object.
std::unique_ptr< HistImplBase_t > operator()(std::string_view title, const std::array< RAxisConfig, DATA::GetNDim()> &, PROCESSEDAXISCONFIG... axisArgs)
Generate RHist::fImpl from RHist constructor arguments.
std::unique_ptr< Detail::RHistImplBase< DATA > > MakeNextAxis(std::string_view title, const std::array< RAxisConfig, NDIM > &axes, PROCESSEDAXISCONFIG... processedAxisArgs)
Select the template argument for the next axis type, and "recurse" into RHistImplGen for the next axi...
std::unique_ptr< Detail::RHistImplBase< DATA > > operator()(std::string_view title, const std::array< RAxisConfig, NDIM > &axes, PROCESSEDAXISCONFIG... processedAxisArgs)
Make a RHistImpl-derived object reflecting the RAxisConfig array.