yoda is hosted by Hepforge, IPPP Durham
YODA - Yet more Objects for Data Analysis 2.0.3
YODA::EstimateStorage< AxisT > Class Template Reference

EstimateStorage convenience class based on BinnedStorage. More...

#include <BinnedEstimate.h>

Inheritance diagram for YODA::EstimateStorage< AxisT >:
YODA::BinnedStorage< Estimate, AxisT... > YODA::AnalysisObject YODA::BinnedEstimate< AxisT >

Public Types

using BaseT = BinnedStorage< Estimate, AxisT... >
 
using BinningT = typename BaseT::BinningT
 
using BinT = typename BaseT::BinT
 
using BinType = BinT
 
- Public Types inherited from YODA::BinnedStorage< Estimate, AxisT... >
using BinningType = BinningT
 
using BinType = BinT
 
using BinDimension = std::integral_constant< size_t, sizeof...(AxisT)>
 
- Public Types inherited from YODA::AnalysisObject
typedef std::map< std::string, std::string > Annotations
 Collection type for annotations, as a string-string map.
 

Public Member Functions

Constructors
 EstimateStorage (const std::string &path="", const std::string &title="")
 Nullary constructor for unique pointers etc.
 
 EstimateStorage (std::vector< AxisT > &&... binsEdges, const std::string &path="", const std::string &title="")
 Constructor giving explicit bin edges as rvalue reference.
 
 EstimateStorage (const std::vector< AxisT > &... binsEdges, const std::string &path="", const std::string &title="")
 Constructor giving explicit bin edges as lvalue reference.
 
 EstimateStorage (std::initializer_list< AxisT > &&... binsEdges, const std::string &path="", const std::string &title="")
 Constructor giving explicit bin edges as initializer list.
 
template<typename EdgeT = double, typename = enable_if_all_CAxisT<EdgeT, AxisT...>>
 EstimateStorage (const std::vector< size_t > &nBins, const std::vector< std::pair< EdgeT, EdgeT > > &limitsLowUp, const std::string &path="", const std::string &title="")
 Constructor giving range and number of bins.
 
 EstimateStorage (const BinningT &binning, const std::string &path="", const std::string &title="")
 Constructor given a binning type.
 
 EstimateStorage (BinningT &&binning, const std::string &path="", const std::string &title="")
 Constructor given an rvalue BinningT.
 
template<typename EdgeT = double, typename = enable_if_all_CAxisT<EdgeT, AxisT...>>
 EstimateStorage (const ScatterND< sizeof...(AxisT)+1 > &s, const std::string &path="", const std::string &title="")
 Constructor given a scatter.
 
 EstimateStorage (const EstimateStorage &other, const std::string &path="")
 Copy constructor.
 
 EstimateStorage (EstimateStorage &&other, const std::string &path="")
 Move constructor.
 
EstimateStorage clone () const noexcept
 Make a copy on the stack.
 
EstimateStoragenewclone () const noexcept
 Make a copy on the heap.
 
Transformations
void scale (const double scalefactor) noexcept
 Rescale as if all fill weights had been different by factor scalefactor.
 
template<size_t axisN>
void rebinBy (unsigned int n, size_t begin=1, size_t end=UINT_MAX)
 Merge every group of n bins, from start to end inclusive.
 
template<size_t axisN>
void rebin (unsigned int n, size_t begin=1, size_t end=UINT_MAX)
 Overloaded alias for rebinBy.
 
template<size_t axisN>
void rebinTo (const std::vector< typename BinningT::template getAxisT< axisN >::EdgeT > &newedges)
 Rebin to the given list of bin edges.
 
template<size_t axisN>
void rebin (const std::vector< typename BinningT::template getAxisT< axisN >::EdgeT > &newedges)
 Overloaded alias for rebinTo.
 
void reset () noexcept
 Reset the EstimateStorage.
 
EstimateStorageoperator= (const EstimateStorage &est) noexcept
 Copy assignment.
 
EstimateStorageoperator= (EstimateStorage &&est) noexcept
 Move assignment.
 
EstimateStorageadd (const EstimateStorage &est, const std::string &pat_uncorr="^stat|^uncor")
 Add two EstimateStorages.
 
EstimateStorageoperator+= (const EstimateStorage &est)
 
EstimateStorageadd (EstimateStorage &&est, const std::string &pat_uncorr="^stat|^uncor")
 Add two (rvalue) EstimateStorages.
 
EstimateStorageoperator+= (EstimateStorage &&est)
 
EstimateStoragesubtract (const EstimateStorage &est, const std::string &pat_uncorr="^stat|^uncor")
 Subtract one EstimateStorages from another one.
 
EstimateStorageoperator-= (const EstimateStorage &est)
 
EstimateStoragesubtract (EstimateStorage &&est, const std::string &pat_uncorr="^stat|^uncor")
 Subtract one (rvalue) EstimateStorages from another one.
 
EstimateStorageoperator-= (EstimateStorage &&est)
 
Binning info.
size_t dim () const noexcept
 Total dimension of the object (number of axes + estimate)
 
template<size_t I, typename E = typename BinningT::template getEdgeT<I>>
std::vector< E > edges (const bool includeOverflows=false) const noexcept
 Templated version to get edges of axis N by value. +-inf edges are included.
 
template<size_t I, typename E = typename BinningT::template getEdgeT<I>>
std::enable_if_t< std::is_floating_point< E >::value, std::vector< E > > widths (const bool includeOverflows=false) const noexcept
 Templated version to get bin widths of axis N by value.
 
template<size_t I, typename E = typename BinningT::template getEdgeT<I>>
std::enable_if_t< std::is_floating_point< E >::value, E > min () const noexcept
 Get the lowest non-overflow edge of the axis.
 
template<size_t I, typename E = typename BinningT::template getEdgeT<I>>
std::enable_if_t< std::is_floating_point< E >::value, E > max () const noexcept
 Get the highest non-overflow edge of the axis.
 
Whole EstimateStorage data
std::vector< double > vals (const bool includeOverflows=false, const bool includeMaskedBins=false) const
 Get list of central values.
 
std::vector< std::string > sources () const
 Get list of error sources.
 
double areaUnderCurve (const bool includeBinVol=true, const bool includeOverflows=false, const bool includeMaskedBins=false) const
 Calculate the volume underneath the EstimateStorage.
 
double auc (const bool includeBinVol=true, const bool includeOverflows=false, const bool includeMaskedBins=false) const
 Convenient alias for areaUnderCurve()
 
std::vector< std::vector< double > > covarianceMatrix (const bool ignoreOffDiagonalTerms=false, const bool includeOverflows=false, const bool includeMaskedBins=false, const std::string &pat_uncorr="^stat|^uncor") const
 Construct a covariance matrix from the error breakdown.
 
Type reductions
auto mkScatter (const std::string &path="", const std::string &pat_match="", const bool includeOverflows=false, const bool includeMaskedBins=false) const
 Produce a ScatterND from a EstimateStorage.
 
template<size_t axisN, typename = std::enable_if_t< (axisN < sizeof...(AxisT) && sizeof...(AxisT)>=2) >>
auto mkEstimates (const std::string &path="", const bool includeOverflows=false) const
 Split into vector of BinnedEstimates along axisN.
 
AnalysisObjectmkInert (const std::string &path="", const std::string &source="") const noexcept
 Method returns clone of the estimate with streamlined error source.
 
MPI (de-)serialisation
size_t lengthContent (bool fixed_length=false) const noexcept
 Length of serialized content vector for MPI reduce operations.
 
std::vector< double > serializeContent (bool fixed_length=false) const noexcept
 Content serialisation for MPI reduce operations.
 
void deserializeContent (const std::vector< double > &data)
 Content deserialisation for MPI reduce operations.
 
- Public Member Functions inherited from YODA::BinnedStorage< Estimate, AxisT... >
 BinnedStorage ()
 Nullary constructor for unique pointers etc.
 
 BinnedStorage (const BinningT &binning)
 Constructs BinnedStorage from Binning.
 
 BinnedStorage (BinningT &&binning)
 Constructs BinnedStorage from Binning. Rvalue.
 
 BinnedStorage (const std::vector< AxisT > &... edges)
 Constructs binning from an adapter and vectors of axes' edges.
 
 BinnedStorage (std::vector< AxisT > &&... edges)
 Constructs binning from an adapter and Rvalue vectors of axes' edges.
 
 BinnedStorage (std::initializer_list< AxisT > &&... edges)
 Constructs binning from an adapter and Rvalue initializer lists of axes' edges.
 
 BinnedStorage (const Axis< AxisT > &... axes)
 Constructs binning from an adapter and a sequence of axes.
 
 BinnedStorage (Axis< AxisT > &&... axes)
 Constructs binning from an adapter and a sequence of Rvalue axes.
 
 BinnedStorage (const BinnedStorage &other)
 Copy constructor.
 
 BinnedStorage (BinnedStorage &&other)
 Move constructor.
 
size_t dim () const noexcept
 Total dimension of the object ( = number of axes + content)
 
BinTbin (size_t idx) noexcept
 Returns reference to the bin at idx.
 
const BinTbin (size_t idx) const noexcept
 Returns Bin at idx.
 
BinTbin (const std::array< size_t, sizeof...(AxisT)> &idxLocal) noexcept
 Bin access using local bin indices.
 
const BinTbin (const std::array< size_t, sizeof...(AxisT)> &idxLocal) const noexcept
 Bin access using local bin indices.
 
BinTbinAt (typename BinningT::EdgeTypesTuple &&coords) noexcept
 Returns reference to the bin at coordinates.
 
const BinTbinAt (typename BinningT::EdgeTypesTuple &&coords) const noexcept
 Returns reference to the bin at coordinates (const version).
 
void set (typename BinningT::EdgeTypesTuple &&coords, Estimate &&content) noexcept
 Sets the bin corresponding to coords with an rvalue content.
 
void set (typename BinningT::EdgeTypesTuple &&coords, const Estimate &content) noexcept
 Sets the bin corresponding to coords with content.
 
void set (const size_t binIdx, Estimate &&content) noexcept
 Sets the bin corresponding to binIndex with an rvalue content.
 
void set (const size_t binIdx, const Estimate &content) noexcept
 Sets the bin corresponding to binIndex with content.
 
std::vector< size_t > calcIndicesToSkip (const bool includeOverflows, const bool includeMaskedBins) const noexcept
 Calculates indices of bins which are marked or located in the overflow.
 
BinsVecWrapper< BinsVecTbins (const bool includeOverflows=false, const bool includeMaskedBins=false) noexcept
 Returns bins vector wrapper, which skips masked elements when iterated over.
 
const BinsVecWrapper< const BinsVecTbins (const bool includeOverflows=false, const bool includeMaskedBins=false) const noexcept
 Const version.
 
const BinningTbinning () const noexcept
 Returns dimension underlying binning object reference.
 
size_t binDim () const noexcept
 Returns dimension of binning.
 
size_t numBins (const bool includeOverflows=false, const bool includeMaskedBins=false) const noexcept
 Number of bins in the BinnedStorage.
 
size_t numBinsAt (const size_t axisN, const bool includeOverflows=false) const noexcept
 Number of bins in the BinnedStorage.
 
void reset () noexcept
 Reset the BinnedStorage.
 
void clearBins () noexcept
 Deletes all bins and creates empty new ones.
 
void maskBins (const std::vector< size_t > &indicesToMask, const bool status=true) noexcept
 Mask a range of bins.
 
void maskBin (const size_t indexToMask, const bool status=true) noexcept
 Mask a bin at a given index.
 
void maskSlice (const size_t dim, const size_t idx, const bool status=true)
 Mask a slice of the binning at local bin index idx along axis dimesnion dim.
 
void maskBinAt (typename BinningT::EdgeTypesTuple &&coords, const bool status=true) noexcept
 Mask a bin at a given set of corrdinates.
 
bool isMasked (const size_t binIndex) const noexcept
 
std::vector< size_t > maskedBins () const noexcept
 
bool isVisible (const size_t binIndex) const noexcept
 
auto mergeBins (std::decay_t< decltype(AxisNs, std::declval< std::pair< size_t, size_t > >())>... mergeRanges) noexcept -> std::enable_if_t< MetaUtils::is_detected_v< MetaUtils::operatorTraits::addition_assignment_t, Estimate >, RetT >
 Merge bins from A to B at G axis.
 
auto mkBinnedSlices (Func &&how2add, const bool includeOverflows=false) const
 Split this BinnedStorage into a vector of BinnedStorages along axisN.
 
BinnedStorageoperator= (const BinnedStorage &other) noexcept
 Copy assignment.
 
BinnedStorageoperator= (BinnedStorage &&other) noexcept
 Move assignment.
 
bool operator== (const BinnedStorage &other) const noexcept
 Compares BinnedStorages for equality, e.g. dimensions of underlying binnings and all axes edges are equal.
 
bool operator!= (const BinnedStorage &other) const noexcept
 Compares BinnedStorages for inequality.
 
- Public Member Functions inherited from YODA::AnalysisObject
 AnalysisObject ()
 Default constructor.
 
 AnalysisObject (const std::string &type, const std::string &path, const std::string &title="")
 Constructor giving a type, a path and an optional title.
 
 AnalysisObject (const std::string &type, const std::string &path, const AnalysisObject &ao, const std::string &title="")
 Constructor giving a type, a path, another AO to copy annotation from, and an optional title.
 
virtual ~AnalysisObject ()
 Default destructor.
 
virtual AnalysisObjectoperator= (const AnalysisObject &ao) noexcept
 Default copy assignment operator.
 
std::vector< std::string > annotations () const
 
bool hasAnnotation (const std::string &name) const
 Check if an annotation is defined.
 
const std::string & annotation (const std::string &name) const
 Get an annotation by name (as a string)
 
const std::string & annotation (const std::string &name, const std::string &defaultreturn) const
 Get an annotation by name (as a string) with a default in case the annotation is not found.
 
template<typename T >
const T annotation (const std::string &name) const
 Get an annotation by name (copied to another type)
 
template<typename T >
const T annotation (const std::string &name, const T &defaultreturn) const
 Get an annotation by name (copied to another type) with a default in case the annotation is not found.
 
template<typename T >
void setAnnotation (const std::string &name, const T &value)
 Add or set an annotation by name (templated for remaining types)
 
void setAnnotations (const Annotations &anns)
 Set all annotations at once.
 
template<typename T >
void addAnnotation (const std::string &name, const T &value)
 Add or set an annotation by name.
 
void rmAnnotation (const std::string &name)
 Delete an annotation by name.
 
void clearAnnotations ()
 Delete an annotation by name.
 
const std::string title () const
 Get the AO title.
 
void setTitle (const std::string &title)
 Set the AO title.
 
const std::string path () const
 Get the AO path.
 
void setPath (const std::string &path)
 
const std::string name () const
 
virtual std::string type () const
 Get name of the analysis object type.
 
size_t lengthMeta (const bool skipPath=true, const bool skipTitle=true) const noexcept
 Length of serialized meta-data vector for MPI reduce operations.
 
std::vector< std::string > serializeMeta (const bool skipPath=true, const bool skipTitle=true) const noexcept
 Mate-data serialisation for MPI reduce operations.
 
virtual void deserializeMeta (const std::vector< std::string > &data, const bool resetPath=false, const bool resetTitle=false)
 Mate-data deserialisation for MPI reduce operations.
 

Additional Inherited Members

- Protected Types inherited from YODA::BinnedStorage< Estimate, AxisT... >
using BinningT = Binning< std::decay_t< decltype(std::declval< Axis< AxisT > >())>... >
 Convenience alias to be used in constructor.
 
using BinT = Bin< sizeof...(AxisT), Estimate, BinningT >
 
using BinsVecT = std::vector< BinT >
 
using BaseT = BinnedStorage< Estimate, AxisT... >
 
- Protected Member Functions inherited from YODA::BinnedStorage< Estimate, AxisT... >
void fillBins () noexcept
 Fills bins with wrapped BinContent objects.
 
void fillBins (const BinsVecT &bins) noexcept
 
void fillBins (BinsVecT &&bins) noexcept
 

Detailed Description

template<typename... AxisT>
class YODA::EstimateStorage< AxisT >

EstimateStorage convenience class based on BinnedStorage.

Note
We use this abstraction layer to implement the bulk once and only once. The user-facing BinnedEstimate type will inherit all its methods from this base class along with a few axis-specifc mixins.

Definition at line 75 of file BinnedEstimate.h.

Member Typedef Documentation

◆ BaseT

template<typename... AxisT>
using YODA::EstimateStorage< AxisT >::BaseT = BinnedStorage<Estimate, AxisT...>

Definition at line 80 of file BinnedEstimate.h.

◆ BinningT

template<typename... AxisT>
using YODA::EstimateStorage< AxisT >::BinningT = typename BaseT::BinningT

Definition at line 81 of file BinnedEstimate.h.

◆ BinT

template<typename... AxisT>
using YODA::EstimateStorage< AxisT >::BinT = typename BaseT::BinT

Definition at line 82 of file BinnedEstimate.h.

◆ BinType

template<typename... AxisT>
using YODA::EstimateStorage< AxisT >::BinType = BinT

Definition at line 83 of file BinnedEstimate.h.

Constructor & Destructor Documentation

◆ EstimateStorage() [1/10]

template<typename... AxisT>
YODA::EstimateStorage< AxisT >::EstimateStorage ( const std::string &  path = "",
const std::string &  title = "" 
)
inline

Nullary constructor for unique pointers etc.

Definition at line 90 of file BinnedEstimate.h.

91 : BaseT(), AnalysisObject(mkTypeString<AxisT...>(), path, title) { }
const std::string title() const
Get the AO title.
const std::string path() const
Get the AO path.
AnalysisObject()
Default constructor.
BinnedStorage< Estimate, AxisT... > BaseT

◆ EstimateStorage() [2/10]

template<typename... AxisT>
YODA::EstimateStorage< AxisT >::EstimateStorage ( std::vector< AxisT > &&...  binsEdges,
const std::string &  path = "",
const std::string &  title = "" 
)
inline

Constructor giving explicit bin edges as rvalue reference.

Discrete axes have as many edges as bins. Continuous axes have bins.size()+1 edges, the last one being the upper bound of the last bin.

Definition at line 98 of file BinnedEstimate.h.

99 : BaseT(Axis<AxisT>(std::move(binsEdges))...), AnalysisObject(mkTypeString<AxisT...>(), path, title) { }

◆ EstimateStorage() [3/10]

template<typename... AxisT>
YODA::EstimateStorage< AxisT >::EstimateStorage ( const std::vector< AxisT > &...  binsEdges,
const std::string &  path = "",
const std::string &  title = "" 
)
inline

Constructor giving explicit bin edges as lvalue reference.

Discrete axes have as many edges as bins. Continuous axes have bins.size()+1 edges, the last one being the upper bound of the last bin.

Definition at line 106 of file BinnedEstimate.h.

107 : BaseT(Axis<AxisT>(binsEdges)...), AnalysisObject(mkTypeString<AxisT...>(), path, title) { }

◆ EstimateStorage() [4/10]

template<typename... AxisT>
YODA::EstimateStorage< AxisT >::EstimateStorage ( std::initializer_list< AxisT > &&...  binsEdges,
const std::string &  path = "",
const std::string &  title = "" 
)
inline

Constructor giving explicit bin edges as initializer list.

Discrete axes have as many edges as bins. Continuous axes have bins.size()+1 edges, the last one being the upper bound of the last bin.

Definition at line 114 of file BinnedEstimate.h.

115 : BaseT(Axis<AxisT>(std::move(binsEdges))...), AnalysisObject(mkTypeString<AxisT...>(), path, title) { }

◆ EstimateStorage() [5/10]

template<typename... AxisT>
template<typename EdgeT = double, typename = enable_if_all_CAxisT<EdgeT, AxisT...>>
YODA::EstimateStorage< AxisT >::EstimateStorage ( const std::vector< size_t > &  nBins,
const std::vector< std::pair< EdgeT, EdgeT > > &  limitsLowUp,
const std::string &  path = "",
const std::string &  title = "" 
)
inline

Constructor giving range and number of bins.

Definition at line 119 of file BinnedEstimate.h.

123 : BaseT( _mkBinning(nBins, limitsLowUp, std::make_index_sequence<sizeof...(AxisT)>{}) ),
124 AnalysisObject(mkTypeString<AxisT...>(), path, title) { }

◆ EstimateStorage() [6/10]

template<typename... AxisT>
YODA::EstimateStorage< AxisT >::EstimateStorage ( const BinningT binning,
const std::string &  path = "",
const std::string &  title = "" 
)
inline

Constructor given a binning type.

Definition at line 127 of file BinnedEstimate.h.

128 : BaseT(binning), AnalysisObject(mkTypeString<AxisT...>(), path, title) { }
const BinningT & binning() const noexcept
Returns dimension underlying binning object reference.

◆ EstimateStorage() [7/10]

template<typename... AxisT>
YODA::EstimateStorage< AxisT >::EstimateStorage ( BinningT &&  binning,
const std::string &  path = "",
const std::string &  title = "" 
)
inline

Constructor given an rvalue BinningT.

Definition at line 131 of file BinnedEstimate.h.

132 : BaseT(std::move(binning)), AnalysisObject(mkTypeString<AxisT...>(), path, title) { }

◆ EstimateStorage() [8/10]

template<typename... AxisT>
template<typename EdgeT = double, typename = enable_if_all_CAxisT<EdgeT, AxisT...>>
YODA::EstimateStorage< AxisT >::EstimateStorage ( const ScatterND< sizeof...(AxisT)+1 > &  s,
const std::string &  path = "",
const std::string &  title = "" 
)
inline

Constructor given a scatter.

Definition at line 136 of file BinnedEstimate.h.

137 : BaseT(_mkBinning(s, std::make_index_sequence<sizeof...(AxisT)>{})),
138 AnalysisObject(mkTypeString<AxisT...>(), path, title) { }

◆ EstimateStorage() [9/10]

template<typename... AxisT>
YODA::EstimateStorage< AxisT >::EstimateStorage ( const EstimateStorage< AxisT > &  other,
const std::string &  path = "" 
)
inline

Copy constructor.

Todo:
Also allow title setting from the constructor?

Definition at line 143 of file BinnedEstimate.h.

143 : BaseT(other),
144 AnalysisObject(mkTypeString<AxisT...>(), path!=""? path : other.path(), other, other.title()) { }

◆ EstimateStorage() [10/10]

template<typename... AxisT>
YODA::EstimateStorage< AxisT >::EstimateStorage ( EstimateStorage< AxisT > &&  other,
const std::string &  path = "" 
)
inline

Move constructor.

Todo:
Also allow title setting from the constructor?

Definition at line 149 of file BinnedEstimate.h.

149 : BaseT(std::move(other)),
150 AnalysisObject(mkTypeString<AxisT...>(), path!=""? path : other.path(), other, other.title()) { }

Member Function Documentation

◆ add() [1/2]

template<typename... AxisT>
EstimateStorage & YODA::EstimateStorage< AxisT >::add ( const EstimateStorage< AxisT > &  est,
const std::string &  pat_uncorr = "^stat|^uncor" 
)
inline

Add two EstimateStorages.

Note
Adding EstimateStorages will unset any ScaledBy attribute from previous calls to scale or normalize.

Definition at line 343 of file BinnedEstimate.h.

344 {
345 if (*this != est)
346 throw BinningError("Arithmetic operation requires compatible binning!");
347 if (AO::hasAnnotation("ScaledBy")) AO::rmAnnotation("ScaledBy");
348 for (size_t i = 0; i< BaseT::numBins(true, true); ++i) {
349 BaseT::bin(i).add(est.bin(i), pat_uncorr);
350 }
351 BaseT::maskBins(est.maskedBins(), true);
352 return *this;
353 }
void rmAnnotation(const std::string &name)
Delete an annotation by name.
bool hasAnnotation(const std::string &name) const
Check if an annotation is defined.
BinT & bin(size_t idx) noexcept
Returns reference to the bin at idx.
void maskBins(const std::vector< size_t > &indicesToMask, const bool status=true) noexcept
Mask a range of bins.
size_t numBins(const bool includeOverflows=false, const bool includeMaskedBins=false) const noexcept
Number of bins in the BinnedStorage.

References YODA::BinnedStorage< BinContentT, AxisT >::bin(), YODA::BinnedStorage< Estimate, AxisT... >::bin(), YODA::AnalysisObject::hasAnnotation(), YODA::BinnedStorage< Estimate, AxisT... >::maskBins(), YODA::BinnedStorage< BinContentT, AxisT >::maskedBins(), YODA::BinnedStorage< Estimate, AxisT... >::numBins(), and YODA::AnalysisObject::rmAnnotation().

Referenced by YODA::EstimateStorage< AxisT >::operator+=(), and YODA::EstimateStorage< AxisT >::operator+=().

◆ add() [2/2]

template<typename... AxisT>
EstimateStorage & YODA::EstimateStorage< AxisT >::add ( EstimateStorage< AxisT > &&  est,
const std::string &  pat_uncorr = "^stat|^uncor" 
)
inline

Add two (rvalue) EstimateStorages.

Note
Adding EstimateStorages will unset any ScaledBy attribute from previous calls to scale or normalize.

Definition at line 363 of file BinnedEstimate.h.

364 {
365 if (*this != est)
366 throw BinningError("Arithmetic operation requires compatible binning!");
367 if (AO::hasAnnotation("ScaledBy")) AO::rmAnnotation("ScaledBy");
368 for (size_t i = 0; i< BaseT::numBins(true, true); ++i) {
369 BaseT::bin(i).add(std::move(est.bin(i)), pat_uncorr);
370 }
371 BaseT::maskBins(est.maskedBins(), true);
372 return *this;
373 }

References YODA::BinnedStorage< Estimate, AxisT... >::bin(), YODA::AnalysisObject::hasAnnotation(), YODA::BinnedStorage< Estimate, AxisT... >::maskBins(), YODA::BinnedStorage< Estimate, AxisT... >::numBins(), and YODA::AnalysisObject::rmAnnotation().

◆ areaUnderCurve()

template<typename... AxisT>
double YODA::EstimateStorage< AxisT >::areaUnderCurve ( const bool  includeBinVol = true,
const bool  includeOverflows = false,
const bool  includeMaskedBins = false 
) const
inline

Calculate the volume underneath the EstimateStorage.

Note
overflow bins have infinite bin width

Definition at line 504 of file BinnedEstimate.h.

506 {
507 double ret = 0.;
508 for (const auto& b : BaseT::bins(includeOverflows, includeMaskedBins)) {
509 const double val = fabs(b.val());
510 const double vol = includeBinVol? b.dVol() : 1.0;
511 if (std::isfinite(vol)) ret += val*vol; // aggregate bin volume
512 }
513 return ret;
514 }
BinsVecWrapper< BinsVecT > bins(const bool includeOverflows=false, const bool includeMaskedBins=false) noexcept
Returns bins vector wrapper, which skips masked elements when iterated over.

References YODA::BinnedStorage< Estimate, AxisT... >::bins().

Referenced by YODA::EstimateStorage< AxisT >::auc().

◆ auc()

template<typename... AxisT>
double YODA::EstimateStorage< AxisT >::auc ( const bool  includeBinVol = true,
const bool  includeOverflows = false,
const bool  includeMaskedBins = false 
) const
inline

Convenient alias for areaUnderCurve()

Definition at line 517 of file BinnedEstimate.h.

519 {
520 return areaUnderCurve(includeBinVol, includeOverflows, includeMaskedBins);
521 }
double areaUnderCurve(const bool includeBinVol=true, const bool includeOverflows=false, const bool includeMaskedBins=false) const
Calculate the volume underneath the EstimateStorage.

References YODA::EstimateStorage< AxisT >::areaUnderCurve().

◆ clone()

template<typename... AxisT>
EstimateStorage YODA::EstimateStorage< AxisT >::clone ( ) const
inlinenoexcept

Make a copy on the stack.

Definition at line 153 of file BinnedEstimate.h.

153 {
154 return EstimateStorage(*this);
155 }
EstimateStorage(const std::string &path="", const std::string &title="")
Nullary constructor for unique pointers etc.

◆ covarianceMatrix()

template<typename... AxisT>
std::vector< std::vector< double > > YODA::EstimateStorage< AxisT >::covarianceMatrix ( const bool  ignoreOffDiagonalTerms = false,
const bool  includeOverflows = false,
const bool  includeMaskedBins = false,
const std::string &  pat_uncorr = "^stat|^uncor" 
) const
inline

Construct a covariance matrix from the error breakdown.

Definition at line 526 of file BinnedEstimate.h.

529 {
530 const size_t nBins = BaseT::numBins(includeOverflows,includeMaskedBins);
531 std::vector<std::vector<double> > covM(nBins);
532
533 // initialise cov matrix to be the right shape
534 for (size_t i = 0; i < nBins; ++i) {
535 covM[i] = std::vector<double>(nBins, 0.0);
536 }
537
538 const std::vector<std::string> error_sources = sources();
539
540 // nominal-only case, i.e. total uncertainty, labelled as empty string
541 if (error_sources.size() == 1 && error_sources[0] == "") {
542 size_t i = 0;
543 for (const auto& b : BaseT::bins(includeOverflows,includeMaskedBins)) {
544 covM[i][i] = b.hasSource("")? sqr(0.5*(b.err("").first+b.err("").second)) : 1.0;
545 ++i;
546 }
547 return covM;
548 }
549
550 // more interesting case where we actually have some uncertainty breakdown!
551 std::smatch match;
552 const std::regex re(pat_uncorr, std::regex_constants::icase);
553 for (const std::string& sname : error_sources) {
554 if (sname == "") continue;
555 std::vector<double> systErrs(nBins, 0.0);
556 size_t k = 0;
557 for (const auto& b : BaseT::bins(includeOverflows,includeMaskedBins)) {
558 if (b.hasSource(sname)) {
559 const auto& errs = b.err(sname); // dn-up pair
560 systErrs[k] = 0.5 *( fabs(errs.first)+fabs(errs.second));
561 }
562 ++k;
563 }
564 const bool skipOffDiag = (ignoreOffDiagonalTerms
565 || std::regex_search(sname, match, re));
566 for (size_t i = 0; i < nBins; ++i) {
567 for (size_t j = 0; j < nBins; ++j) {
568 if (skipOffDiag && i != j) continue;
569 covM[i][j] += systErrs[i]*systErrs[j];
570 }
571 }
572 }
573
574 return covM;
575 }
std::vector< std::string > sources() const
Get list of error sources.
NUM sqr(NUM a)
Named number-type squaring operation.
Definition MathUtils.h:216

References YODA::BinnedStorage< Estimate, AxisT... >::bins(), YODA::BinnedStorage< Estimate, AxisT... >::numBins(), YODA::EstimateStorage< AxisT >::sources(), and YODA::sqr().

◆ deserializeContent()

template<typename... AxisT>
void YODA::EstimateStorage< AxisT >::deserializeContent ( const std::vector< double > &  data)
inlinevirtual

Content deserialisation for MPI reduce operations.

Implements YODA::AnalysisObject.

Definition at line 711 of file BinnedEstimate.h.

711 {
712
713 const size_t nBins = BaseT::numBins(true, true);
714 const size_t minLen = 2*nBins;
715 if (data.size() < minLen)
716 throw UserError("Length of serialized data should be at least " + std::to_string(minLen)+"!");
717
718 size_t i = 0;
719 auto itr = data.cbegin();
720 const auto itrEnd = data.cend();
721 const bool fixedLen = data.size() == 2*minLen;
722 while (itr != itrEnd) {
723 // for estimates, the first element represents the central,
724 // the subsequent value represents the number of error pairs
725 const size_t nErrs = fixedLen? 1 : (*(itr + 1) + 0.5); // add 0.5 to avoid rounding issues
726 auto last = itr + 2*(nErrs+1); // last element + 1
727 BaseT::bin(i)._deserializeContent(std::vector<double>{itr, last}, fixedLen);
728 // update for next iteration
729 itr = last;
730 ++i;
731 }
732 }

References YODA::BinnedStorage< Estimate, AxisT... >::bin(), and YODA::BinnedStorage< Estimate, AxisT... >::numBins().

◆ dim()

template<typename... AxisT>
size_t YODA::EstimateStorage< AxisT >::dim ( ) const
inlinevirtualnoexcept

Total dimension of the object (number of axes + estimate)

Implements YODA::AnalysisObject.

Definition at line 424 of file BinnedEstimate.h.

424{ return sizeof...(AxisT) + 1; }

◆ edges()

template<typename... AxisT>
template<size_t I, typename E = typename BinningT::template getEdgeT<I>>
std::vector< E > YODA::EstimateStorage< AxisT >::edges ( const bool  includeOverflows = false) const
inlinenoexcept

Templated version to get edges of axis N by value. +-inf edges are included.

Note
Needed by axis-specific verison from AxisMixin

Definition at line 434 of file BinnedEstimate.h.

434 {
435 return BaseT::_binning.template edges<I>(includeOverflows);
436 }

◆ lengthContent()

template<typename... AxisT>
size_t YODA::EstimateStorage< AxisT >::lengthContent ( bool  fixed_length = false) const
inlinevirtualnoexcept

Length of serialized content vector for MPI reduce operations.

Implements YODA::AnalysisObject.

Definition at line 688 of file BinnedEstimate.h.

688 {
689 size_t rtn = 0;
690 for (const auto& bin : BaseT::bins(true, true)) {
691 rtn += bin._lengthContent(fixed_length);
692 }
693 return rtn;
694 }

References YODA::BinnedStorage< Estimate, AxisT... >::bin(), and YODA::BinnedStorage< Estimate, AxisT... >::bins().

◆ max()

template<typename... AxisT>
template<size_t I, typename E = typename BinningT::template getEdgeT<I>>
std::enable_if_t< std::is_floating_point< E >::value, E > YODA::EstimateStorage< AxisT >::max ( ) const
inlinenoexcept

Get the highest non-overflow edge of the axis.

Note
This method is only supported for continuous axes

Definition at line 462 of file BinnedEstimate.h.

462 {
463 return BaseT::_binning.template max<I>();
464 }

◆ min()

template<typename... AxisT>
template<size_t I, typename E = typename BinningT::template getEdgeT<I>>
std::enable_if_t< std::is_floating_point< E >::value, E > YODA::EstimateStorage< AxisT >::min ( ) const
inlinenoexcept

Get the lowest non-overflow edge of the axis.

Note
This method is only supported for continuous axes

Definition at line 454 of file BinnedEstimate.h.

454 {
455 return BaseT::_binning.template min<I>();
456 }

◆ mkEstimates()

template<typename... AxisT>
template<size_t axisN, typename = std::enable_if_t< (axisN < sizeof...(AxisT) && sizeof...(AxisT)>=2) >>
auto YODA::EstimateStorage< AxisT >::mkEstimates ( const std::string &  path = "",
const bool  includeOverflows = false 
) const
inline

Split into vector of BinnedEstimates along axisN.

The binning dimension of the returned objects are reduced by one unit.

Note
Requires at least two binning dimensions.

Definition at line 648 of file BinnedEstimate.h.

648 {
649
650 // Need to provide a prescription for how to add the two bin contents
651 auto how2add = [](auto& pivot, const BinType& toCopy) { pivot = toCopy; };
652 auto rtn = BaseT::template mkBinnedSlices<axisN, BinnedEstimate>(how2add, includeOverflows);
653 for (const std::string& a : annotations()) {
654 if (a == "Type") continue;
655 for (size_t i = 0; i < rtn.size(); ++i) {
656 rtn[i].setAnnotation(a, annotation(a));
657 }
658 }
659 for (size_t i = 0; i < rtn.size(); ++i) {
660 rtn[i].setAnnotation("Path", path);
661 }
662
663 return rtn;
664 }
std::vector< std::string > annotations() const
const std::string & annotation(const std::string &name) const
Get an annotation by name (as a string)

References YODA::AnalysisObject::annotation(), YODA::AnalysisObject::annotations(), and YODA::AnalysisObject::path().

◆ mkInert()

template<typename... AxisT>
AnalysisObject * YODA::EstimateStorage< AxisT >::mkInert ( const std::string &  path = "",
const std::string &  source = "" 
) const
inlinevirtualnoexcept

Method returns clone of the estimate with streamlined error source.

Reimplemented from YODA::AnalysisObject.

Definition at line 668 of file BinnedEstimate.h.

669 {
670 EstimateStorage* rtn = newclone();
671 rtn->setPath(path);
672 for (auto& b : rtn->bins(true, true)) {
673 if (b.numErrs() == 1) {
674 try {
675 b.renameSource("", source);
676 }
677 catch (YODA::UserError& e) { }
678 }
679 }
680 return rtn;
681 }
EstimateStorage * newclone() const noexcept
Make a copy on the heap.
Error for problems introduced outside YODA, to put it nicely.
Definition Exceptions.h:86

References YODA::BinnedStorage< BinContentT, AxisT >::bins(), YODA::EstimateStorage< AxisT >::newclone(), YODA::AnalysisObject::path(), and YODA::AnalysisObject::setPath().

◆ mkScatter()

template<typename... AxisT>
auto YODA::EstimateStorage< AxisT >::mkScatter ( const std::string &  path = "",
const std::string &  pat_match = "",
const bool  includeOverflows = false,
const bool  includeMaskedBins = false 
) const
inline

Produce a ScatterND from a EstimateStorage.

Definition at line 583 of file BinnedEstimate.h.

585 {
586
587 constexpr size_t N = sizeof...(AxisT);
588
589 ScatterND<N+1> rtn;
590 for (const std::string& a : annotations()) {
591 if (a != "Type") rtn.setAnnotation(a, annotation(a));
592 }
593 rtn.setAnnotation("Path", path);
594
595 const bool incOF = all_CAxes<AxisT...>::value && includeOverflows;
596 for (const auto& b : BaseT::bins(incOF, includeMaskedBins)) {
597
598 // Create the vector of coordinates
599 Utils::ndarray<double, N+1> vals;
600 // first fill bin centres, use bin index if axis non-arithmetic
601 auto indexIfDiscrete = [&vals, &b](auto I) {
602 using isContinuous = typename BinningT::template is_CAxis<I>;
603 using isArithmetic = typename BinningT::template is_Arithmetic<I>;
604 vals[I] = coordPicker<I>(b, std::integral_constant<bool, isArithmetic::value>{},
605 std::integral_constant<bool, isContinuous::value>{});
606 };
607 MetaUtils::staticFor<BinningT::Dimension::value>(indexIfDiscrete);
608 // then fill bin content
609 vals[N] = b.val();
610
611 // Create the vector of error pairs, use 0 if axis not continuous
612 Utils::ndarray<std::pair<double,double>, N+1> errs;
613 auto nullifyDiscrete = [&errs, &vals, &b](auto I) {
614 using isContinuous = typename BinningT::template is_CAxis<I>;
615 errs[I] = nullifyIfDisc<I>(b, vals[I], std::integral_constant<bool, isContinuous::value>{});
616 };
617 MetaUtils::staticFor<BinningT::Dimension::value>(nullifyDiscrete);
618 const double tot = fabs(b.totalErrPos(pat_match)); // use positive error component
619 errs[N] = { tot, tot };
620
621 // Add the PointND
622 rtn.addPoint( PointND<N+1>(vals, errs) );
623 }
624
625 // Decorate output scatter with the discrete edges
626 const BinningT& binning = BaseT::_binning;
627 auto decorateEdges = [&rtn, &binning](auto I) {
628 using isContinuous = typename BinningT::template is_CAxis<I>;
629 if constexpr( !isContinuous::value ) {
630 const auto& axis = binning.template axis<I>();
631 if (axis.numBins()) {
632 std::stringstream ss;
633 axis._renderYODA(ss);
634 rtn.setAnnotation("EdgesA" + std::to_string(I+1), ss.str());
635 }
636 }
637 };
638 MetaUtils::staticFor<BinningT::Dimension::value>(decorateEdges);
639
640 return rtn;
641 }
std::vector< double > vals(const bool includeOverflows=false, const bool includeMaskedBins=false) const
Get list of central values.
typename BaseT::BinningT BinningT
typename std::conjunction< std::is_floating_point< EdgeT >... > all_CAxes

References YODA::ScatterND< N >::addPoint(), YODA::AnalysisObject::annotation(), YODA::AnalysisObject::annotations(), YODA::BinnedStorage< Estimate, AxisT... >::binning(), YODA::BinnedStorage< Estimate, AxisT... >::bins(), YODA::AnalysisObject::path(), YODA::AnalysisObject::setAnnotation(), and YODA::EstimateStorage< AxisT >::vals().

◆ newclone()

template<typename... AxisT>
EstimateStorage * YODA::EstimateStorage< AxisT >::newclone ( ) const
inlinevirtualnoexcept

Make a copy on the heap.

Implements YODA::AnalysisObject.

Definition at line 158 of file BinnedEstimate.h.

158 {
159 return new EstimateStorage(*this);
160 }

Referenced by YODA::EstimateStorage< AxisT >::mkInert().

◆ operator+=() [1/2]

template<typename... AxisT>
EstimateStorage & YODA::EstimateStorage< AxisT >::operator+= ( const EstimateStorage< AxisT > &  est)
inline

Definition at line 355 of file BinnedEstimate.h.

355 {
356 return add(est);
357 }
EstimateStorage & add(const EstimateStorage &est, const std::string &pat_uncorr="^stat|^uncor")
Add two EstimateStorages.

References YODA::EstimateStorage< AxisT >::add().

◆ operator+=() [2/2]

template<typename... AxisT>
EstimateStorage & YODA::EstimateStorage< AxisT >::operator+= ( EstimateStorage< AxisT > &&  est)
inline

Definition at line 375 of file BinnedEstimate.h.

375 {
376 return add(std::move(est));
377 }

References YODA::EstimateStorage< AxisT >::add().

◆ operator-=() [1/2]

template<typename... AxisT>
EstimateStorage & YODA::EstimateStorage< AxisT >::operator-= ( const EstimateStorage< AxisT > &  est)
inline

Definition at line 396 of file BinnedEstimate.h.

396 {
397 return subtract(est);
398 }
EstimateStorage & subtract(const EstimateStorage &est, const std::string &pat_uncorr="^stat|^uncor")
Subtract one EstimateStorages from another one.

References YODA::EstimateStorage< AxisT >::subtract().

◆ operator-=() [2/2]

template<typename... AxisT>
EstimateStorage & YODA::EstimateStorage< AxisT >::operator-= ( EstimateStorage< AxisT > &&  est)
inline

Definition at line 413 of file BinnedEstimate.h.

413 {
414 return subtract(std::move(est));
415 }

References YODA::EstimateStorage< AxisT >::subtract().

◆ operator=() [1/2]

template<typename... AxisT>
EstimateStorage & YODA::EstimateStorage< AxisT >::operator= ( const EstimateStorage< AxisT > &  est)
inlinenoexcept

Copy assignment.

Definition at line 322 of file BinnedEstimate.h.

322 {
323 if (this != &est) {
326 }
327 return *this;
328 }
virtual AnalysisObject & operator=(const AnalysisObject &ao) noexcept
Default copy assignment operator.
BinnedStorage & operator=(const BinnedStorage &other) noexcept
Copy assignment.

References YODA::AnalysisObject::operator=(), and YODA::BinnedStorage< Estimate, AxisT... >::operator=().

◆ operator=() [2/2]

template<typename... AxisT>
EstimateStorage & YODA::EstimateStorage< AxisT >::operator= ( EstimateStorage< AxisT > &&  est)
inlinenoexcept

Move assignment.

Definition at line 331 of file BinnedEstimate.h.

331 {
332 if (this != &est) {
334 BaseT::operator = (std::move(est));
335 }
336 return *this;
337 }

References YODA::AnalysisObject::operator=(), and YODA::BinnedStorage< Estimate, AxisT... >::operator=().

◆ rebin() [1/2]

template<typename... AxisT>
template<size_t axisN>
void YODA::EstimateStorage< AxisT >::rebin ( const std::vector< typename BinningT::template getAxisT< axisN >::EdgeT > &  newedges)
inline

Overloaded alias for rebinTo.

Definition at line 312 of file BinnedEstimate.h.

312 {
313 rebinTo<axisN>(std::move(newedges));
314 }

◆ rebin() [2/2]

template<typename... AxisT>
template<size_t axisN>
void YODA::EstimateStorage< AxisT >::rebin ( unsigned int  n,
size_t  begin = 1,
size_t  end = UINT_MAX 
)
inline

Overloaded alias for rebinBy.

Definition at line 279 of file BinnedEstimate.h.

279 {
280 rebinBy<axisN>(n, begin, end);
281 }

◆ rebinBy()

template<typename... AxisT>
template<size_t axisN>
void YODA::EstimateStorage< AxisT >::rebinBy ( unsigned int  n,
size_t  begin = 1,
size_t  end = UINT_MAX 
)
inline

Merge every group of n bins, from start to end inclusive.

If the number of bins is not a multiple of n, the last m < n bins on the RHS will also be merged, as the closest possible approach to factor
rebinning everywhere.

Note
Only visible bins are being rebinned. Underflow (index = 0) and overflow (index = numBins() + 1) are not included.

Definition at line 263 of file BinnedEstimate.h.

263 {
264 if (n < 1) throw UserError("Rebinning requested in groups of 0!");
265 if (!begin) throw UserError("Visible bins start with index 1!");
266 if (end > BaseT::numBinsAt(axisN)+1) end = BaseT::numBinsAt(axisN) + 1;
267 for (size_t m = begin; m < end; ++m) {
268 if (m > BaseT::numBinsAt(axisN)+1) break; // nothing to be done
269 const size_t myend = (m+n-1 < BaseT::numBinsAt(axisN)+1) ? m+n-1 : BaseT::numBinsAt(axisN);
270 if (myend > m) {
271 BaseT::template mergeBins<axisN>({m, myend});
272 end -= myend-m; //< reduce upper index by the number of removed bins
273 }
274 }
275 }
size_t numBinsAt(const size_t axisN, const bool includeOverflows=false) const noexcept
Number of bins in the BinnedStorage.

References YODA::BinnedStorage< Estimate, AxisT... >::numBinsAt().

◆ rebinTo()

template<typename... AxisT>
template<size_t axisN>
void YODA::EstimateStorage< AxisT >::rebinTo ( const std::vector< typename BinningT::template getAxisT< axisN >::EdgeT > &  newedges)
inline

Rebin to the given list of bin edges.

Definition at line 285 of file BinnedEstimate.h.

285 {
286 if (newedges.size() < 2)
287 throw UserError("Requested rebinning to an edge list which defines no bins");
288 using thisAxisT = typename BinningT::template getAxisT<axisN>;
289 using thisEdgeT = typename thisAxisT::EdgeT;
290 // get list of shared edges
291 thisAxisT& oldAxis = BaseT::_binning.template axis<axisN>();
292 const thisAxisT newAxis(std::move(newedges));
293 const std::vector<thisEdgeT> eshared = oldAxis.sharedEdges(newAxis);
294 if (eshared.size() != newAxis.edges().size())
295 throw BinningError("Requested rebinning to incompatible edges");
296 // loop over new lower bin edges (= first bin index of merge range)
297 for (size_t begin = 0; begin < eshared.size() - 1; ++begin) {
298 // find index of upper edge along old axis
299 // (subtracting 1 gives index of last bin to be merged)
300 size_t end = oldAxis.index(eshared[begin+1]) - 1;
301 // if the current edge is the last visible edge before the overflow
302 // merge the remaining bins into the overflow
303 if (begin == newAxis.numBins(true)-1) end = oldAxis.numBins(true)-1;
304 // merge this range
305 if (end > begin) BaseT::template mergeBins<axisN>({begin, end});
306 if (eshared.size() == oldAxis.edges().size()) break; // we're done
307 }
308 }

◆ reset()

template<typename... AxisT>
void YODA::EstimateStorage< AxisT >::reset ( )
inlinevirtualnoexcept

Reset the EstimateStorage.

Keep the binning but set all bin contents and related quantities to zero

Implements YODA::AnalysisObject.

Definition at line 319 of file BinnedEstimate.h.

319{ BaseT::clearBins(); }
void clearBins() noexcept
Deletes all bins and creates empty new ones.

References YODA::BinnedStorage< Estimate, AxisT... >::clearBins().

◆ scale()

template<typename... AxisT>
void YODA::EstimateStorage< AxisT >::scale ( const double  scalefactor)
inlinenoexcept

Rescale as if all fill weights had been different by factor scalefactor.

Definition at line 246 of file BinnedEstimate.h.

246 {
247 setAnnotation("ScaledBy", annotation<double>("ScaledBy", 1.0) * scalefactor);
248 for (auto& bin : BaseT::_bins) {
249 bin.scale(scalefactor);
250 }
251 }
void setAnnotation(const std::string &name, const T &value)
Add or set an annotation by name (templated for remaining types)

References YODA::BinnedStorage< Estimate, AxisT... >::bin(), and YODA::AnalysisObject::setAnnotation().

◆ serializeContent()

template<typename... AxisT>
std::vector< double > YODA::EstimateStorage< AxisT >::serializeContent ( bool  fixed_length = false) const
inlinevirtualnoexcept

Content serialisation for MPI reduce operations.

Implements YODA::AnalysisObject.

Definition at line 696 of file BinnedEstimate.h.

696 {
697 std::vector<double> rtn;
698 const size_t nBins = BaseT::numBins(true, true);
699 rtn.reserve(nBins * 4);
700 for (size_t i = 0; i < nBins; ++i) {
701 const auto& b = BaseT::bin(i);
702 std::vector<double> bdata = b._serializeContent(fixed_length);
703 rtn.insert(std::end(rtn),
704 std::make_move_iterator(std::begin(bdata)),
705 std::make_move_iterator(std::end(bdata)));
706 }
707 return rtn;
708 }

References YODA::BinnedStorage< Estimate, AxisT... >::bin(), and YODA::BinnedStorage< Estimate, AxisT... >::numBins().

◆ sources()

template<typename... AxisT>
std::vector< std::string > YODA::EstimateStorage< AxisT >::sources ( ) const
inline

Get list of error sources.

Definition at line 484 of file BinnedEstimate.h.

484 {
485 // Assemble union of error sources, as it's not guaranteed
486 // that every bin has the same error breakdown
487 std::vector<std::string> rtn;
488
489 for (const auto& b : BaseT::bins(true)) {
490 std::vector<std::string> keys = b.sources();
491 rtn.insert(std::end(rtn),
492 std::make_move_iterator(std::begin(keys)),
493 std::make_move_iterator(std::end(keys)));
494 }
495 std::sort(rtn.begin(), rtn.end());
496 rtn.erase( std::unique(rtn.begin(), rtn.end()), rtn.end() );
497
498 return rtn;
499 }

References YODA::BinnedStorage< Estimate, AxisT... >::bins().

Referenced by YODA::EstimateStorage< AxisT >::covarianceMatrix().

◆ subtract() [1/2]

template<typename... AxisT>
EstimateStorage & YODA::EstimateStorage< AxisT >::subtract ( const EstimateStorage< AxisT > &  est,
const std::string &  pat_uncorr = "^stat|^uncor" 
)
inline

Subtract one EstimateStorages from another one.

Note
Subtracting EstimateStorages will unset any ScaledBy attribute from previous calls to scale or normalize.

Definition at line 384 of file BinnedEstimate.h.

385 {
386 if (*this != est)
387 throw BinningError("Arithmetic operation requires compatible binning!");
388 if (AO::hasAnnotation("ScaledBy")) AO::rmAnnotation("ScaledBy");
389 for (size_t i = 0; i< BaseT::numBins(true, true); ++i) {
390 BaseT::bin(i).subtract(est.bin(i), pat_uncorr);
391 }
392 BaseT::maskBins(est.maskedBins(), true);
393 return *this;
394 }

References YODA::BinnedStorage< BinContentT, AxisT >::bin(), YODA::BinnedStorage< Estimate, AxisT... >::bin(), YODA::AnalysisObject::hasAnnotation(), YODA::BinnedStorage< Estimate, AxisT... >::maskBins(), YODA::BinnedStorage< BinContentT, AxisT >::maskedBins(), YODA::BinnedStorage< Estimate, AxisT... >::numBins(), and YODA::AnalysisObject::rmAnnotation().

Referenced by YODA::EstimateStorage< AxisT >::operator-=(), and YODA::EstimateStorage< AxisT >::operator-=().

◆ subtract() [2/2]

template<typename... AxisT>
EstimateStorage & YODA::EstimateStorage< AxisT >::subtract ( EstimateStorage< AxisT > &&  est,
const std::string &  pat_uncorr = "^stat|^uncor" 
)
inline

Subtract one (rvalue) EstimateStorages from another one.

Definition at line 401 of file BinnedEstimate.h.

402 {
403 if (*this != est)
404 throw BinningError("Arithmetic operation requires compatible binning!");
405 if (AO::hasAnnotation("ScaledBy")) AO::rmAnnotation("ScaledBy");
406 for (size_t i = 0; i< BaseT::numBins(true, true); ++i) {
407 BaseT::bin(i) -= std::move(est.bin(i), pat_uncorr);
408 }
409 BaseT::maskBins(est.maskedBins(), true);
410 return *this;
411 }

References YODA::BinnedStorage< Estimate, AxisT... >::bin(), YODA::AnalysisObject::hasAnnotation(), YODA::BinnedStorage< Estimate, AxisT... >::maskBins(), YODA::BinnedStorage< Estimate, AxisT... >::numBins(), and YODA::AnalysisObject::rmAnnotation().

◆ vals()

template<typename... AxisT>
std::vector< double > YODA::EstimateStorage< AxisT >::vals ( const bool  includeOverflows = false,
const bool  includeMaskedBins = false 
) const
inline

Get list of central values.

Definition at line 473 of file BinnedEstimate.h.

474 {
475 std::vector<double> rtn;
476 rtn.reserve(BaseT::numBins(includeOverflows, includeMaskedBins));
477 for (const auto& b : BaseT::bins(includeOverflows, includeMaskedBins)) {
478 rtn.push_back(b.val());
479 }
480 return rtn;
481 }

References YODA::BinnedStorage< Estimate, AxisT... >::bins(), and YODA::BinnedStorage< Estimate, AxisT... >::numBins().

Referenced by YODA::EstimateStorage< AxisT >::mkScatter().

◆ widths()

template<typename... AxisT>
template<size_t I, typename E = typename BinningT::template getEdgeT<I>>
std::enable_if_t< std::is_floating_point< E >::value, std::vector< E > > YODA::EstimateStorage< AxisT >::widths ( const bool  includeOverflows = false) const
inlinenoexcept

Templated version to get bin widths of axis N by value.

Overflows are included depending on includeOverflows Needed by axis-specific version from AxisMixin

Note
This version is only supported for continuous axes.

Definition at line 446 of file BinnedEstimate.h.

446 {
447 return BaseT::_binning.template widths<I>(includeOverflows);
448 }

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