yoda is hosted by Hepforge, IPPP Durham
YODA - Yet more Objects for Data Analysis 2.0.0
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 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
 Construct a covariance matrix from the error breakdown.
 
Type reductions
auto mkScatter (const std::string &path="", 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.
 

Protected Types

using BaseT = BinnedStorage< Estimate, AxisT... >
 
using BinningT = typename BaseT::BinningT
 
using BinT = typename BaseT::BinT
 
- 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... >
 

Additional Inherited Members

- 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 74 of file BinnedEstimate.h.

Member Typedef Documentation

◆ BaseT

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

Definition at line 79 of file BinnedEstimate.h.

◆ BinningT

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

Definition at line 80 of file BinnedEstimate.h.

◆ BinT

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

Definition at line 81 of file BinnedEstimate.h.

◆ BinType

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

Definition at line 85 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 92 of file BinnedEstimate.h.

93 : 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 100 of file BinnedEstimate.h.

101 : 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 108 of file BinnedEstimate.h.

109 : 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 116 of file BinnedEstimate.h.

117 : 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 121 of file BinnedEstimate.h.

125 : BaseT( _mkBinning(nBins, limitsLowUp, std::make_index_sequence<sizeof...(AxisT)>{}) ),
126 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 129 of file BinnedEstimate.h.

130 : 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 133 of file BinnedEstimate.h.

134 : 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 138 of file BinnedEstimate.h.

139 : BaseT(_mkBinning(s, std::make_index_sequence<sizeof...(AxisT)>{})),
140 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 145 of file BinnedEstimate.h.

145 : BaseT(other),
146 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 151 of file BinnedEstimate.h.

151 : BaseT(std::move(other)),
152 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 345 of file BinnedEstimate.h.

346 {
347 if (*this != est)
348 throw BinningError("Arithmetic operation requires compatible binning!");
349 if (AO::hasAnnotation("ScaledBy")) AO::rmAnnotation("ScaledBy");
350 for (size_t i = 0; i< BaseT::numBins(true, true); ++i) {
351 BaseT::bin(i).add(est.bin(i), pat_uncorr);
352 }
353 BaseT::maskBins(est.maskedBins(), true);
354 return *this;
355 }
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 365 of file BinnedEstimate.h.

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

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 506 of file BinnedEstimate.h.

508 {
509 double ret = 0.;
510 for (const auto& b : BaseT::bins(includeOverflows, includeMaskedBins)) {
511 const double val = fabs(b.val());
512 const double vol = includeBinVol? b.dVol() : 1.0;
513 if (std::isfinite(vol)) ret += val*vol; // aggregate bin volume
514 }
515 return ret;
516 }
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 519 of file BinnedEstimate.h.

521 {
522 return areaUnderCurve(includeBinVol, includeOverflows, includeMaskedBins);
523 }
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 155 of file BinnedEstimate.h.

155 {
156 return EstimateStorage(*this);
157 }
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
inline

Construct a covariance matrix from the error breakdown.

Definition at line 528 of file BinnedEstimate.h.

530 {
531 const size_t nBins = BaseT::numBins(includeOverflows,includeMaskedBins);
532 std::vector<std::vector<double> > covM(nBins);
533
534 // initialise cov matrix to be the right shape
535 for (size_t i = 0; i < nBins; ++i) {
536 covM[i] = std::vector<double>(nBins, 0.0);
537 }
538
539 const std::vector<std::string> error_sources = sources();
540
541 // nominal-only case, i.e. total uncertainty, labelled as empty string
542 if (error_sources.size() == 1 && error_sources[0] == "") {
543 size_t i = 0;
544 for (const auto& b : BaseT::bins(includeOverflows,includeMaskedBins)) {
545 covM[i][i] = b.hasSource("")? sqr(0.5*(b.err("").first+b.err("").second)) : 1.0;
546 ++i;
547 }
548 return covM;
549 }
550
551 // more interesting case where we actually have some uncertainty breakdown!
552 for (const std::string& sname : error_sources) {
553 if (sname == "") continue;
554 std::vector<double> systErrs(nBins, 0.0);
555 size_t i = 0;
556 for (const auto& b : BaseT::bins(includeOverflows,includeMaskedBins)) {
557 if (b.hasSource(sname)) {
558 const auto& errs = b.err(sname); // dn-up pair
559 systErrs[i] = 0.5 *( fabs(errs.first)+fabs(errs.second));
560 }
561 ++i;
562 }
563 const bool skipOffDiag = (ignoreOffDiagonalTerms
564 || sname.find("STAT") != std::string::npos
565 || sname.find("UNCOR") != std::string::npos);
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 710 of file BinnedEstimate.h.

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

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 426 of file BinnedEstimate.h.

426{ 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 436 of file BinnedEstimate.h.

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

◆ 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 687 of file BinnedEstimate.h.

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

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 464 of file BinnedEstimate.h.

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

◆ 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 456 of file BinnedEstimate.h.

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

◆ 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 647 of file BinnedEstimate.h.

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

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

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 bool  includeOverflows = false,
const bool  includeMaskedBins = false 
) const
inline

Produce a ScatterND from a EstimateStorage.

Definition at line 583 of file BinnedEstimate.h.

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

160 {
161 return new EstimateStorage(*this);
162 }

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 357 of file BinnedEstimate.h.

357 {
358 return add(est);
359 }
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 377 of file BinnedEstimate.h.

377 {
378 return add(std::move(est));
379 }

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

◆ operator-=() [1/2]

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

Definition at line 398 of file BinnedEstimate.h.

398 {
399 return subtract(est);
400 }
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 415 of file BinnedEstimate.h.

415 {
416 return subtract(std::move(est));
417 }

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 324 of file BinnedEstimate.h.

324 {
325 if (this != &est) {
328 }
329 return *this;
330 }
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 333 of file BinnedEstimate.h.

333 {
334 if (this != &est) {
336 BaseT::operator = (std::move(est));
337 }
338 return *this;
339 }

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 314 of file BinnedEstimate.h.

314 {
315 rebinTo<axisN>(std::move(newedges));
316 }

◆ 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 281 of file BinnedEstimate.h.

281 {
282 rebinBy<axisN>(n, begin, end);
283 }

◆ 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 265 of file BinnedEstimate.h.

265 {
266 if (n < 1) throw UserError("Rebinning requested in groups of 0!");
267 if (!begin) throw UserError("Visible bins start with index 1!");
268 if (end > BaseT::numBinsAt(axisN)+1) end = BaseT::numBinsAt(axisN) + 1;
269 for (size_t m = begin; m < end; ++m) {
270 if (m > BaseT::numBinsAt(axisN)+1) break; // nothing to be done
271 const size_t myend = (m+n-1 < BaseT::numBinsAt(axisN)+1) ? m+n-1 : BaseT::numBinsAt(axisN);
272 if (myend > m) {
273 BaseT::template mergeBins<axisN>({m, myend});
274 end -= myend-m; //< reduce upper index by the number of removed bins
275 }
276 }
277 }
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 287 of file BinnedEstimate.h.

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

◆ 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 321 of file BinnedEstimate.h.

321{ 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 248 of file BinnedEstimate.h.

248 {
249 setAnnotation("ScaledBy", annotation<double>("ScaledBy", 1.0) * scalefactor);
250 for (auto& bin : BaseT::_bins) {
251 bin.scale(scalefactor);
252 }
253 }
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 695 of file BinnedEstimate.h.

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

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 486 of file BinnedEstimate.h.

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

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 386 of file BinnedEstimate.h.

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

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 403 of file BinnedEstimate.h.

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

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 475 of file BinnedEstimate.h.

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

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 448 of file BinnedEstimate.h.

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

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