yoda is hosted by Hepforge, IPPP Durham
YODA - Yet more Objects for Data Analysis 2.0.2
Todo List
Namespace MetaUtils
Merge with Traits.h
Namespace YODA
Add SFINAE math type stuff (see Rivet) and add inrange() and inrange_closed_closed() etc. aliases cf. MCUtils
Member YODA::AnalysisObject::annotations () const
Change this to return the str->str map, with a separate annotationKeys, etc.
Member YODA::Axis< T, isCAxis< T > >::hasSameEdges (const Axis< EdgeT, CAxisT > &other) const noexcept
Be careful about using fuzzyEquals... should be an exact comparison?
Member YODA::Counter::Counter (const Counter &c, const std::string &path="")
Don't copy the path?
Member YODA::Counter::err () const
Implement on Dbn0D and feed through to this and Dbn1D, 2D, etc.
Member YODA::Counter::relErr () const

Throw excp if sumW2 is 0?

Implement on Dbn0D and feed through to this and Dbn1D, 2D, etc.

Member YODA::DbnStorage< DbnN, AxisT >::DbnStorage (const DbnStorage &other, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::DbnStorage< DbnN, AxisT >::DbnStorage (DbnStorage &&other, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::DbnStorage< DbnN, AxisT >::mkMarginalHisto (const std::string &path="") const
use a parameter pack and allow marginalising over multiple axes?
Member YODA::DbnStorage< DbnN, AxisT >::mkMarginalProfile (const std::string &path="") const
use a parameter pack and allow marginalising over multiple axes?
Member YODA::DbnStorage< DbnN, AxisT >::operator+= (const DbnStorage &dbn)
What happens if two storages disagree on masked bins?
Member YODA::divide (const Counter &numer, const Counter &denom)
Add skipnullpts extra optional arg
Member YODA::efficiency (const Counter &accepted, const Counter &total)

Or throw a LowStatsError exception if h.effNumEntries() (or sumW()?) == 0?

Provide optional alt behaviours to fill with NaN or remove the invalid point, or...

Add skipnullpts extra optional arg

Member YODA::efficiency (const Estimate &accepted, const Estimate &total, const std::string &pat_uncorr="^stat|^uncor")
Need to check that bins are all positive? Integral could be zero due to large +ve/-ve in different bins :O
Member YODA::efficiency (const Counter &accepted, const Counter &total)
Add divide functions/operators on pointers
Member YODA::EstimateStorage< AxisT >::EstimateStorage (const EstimateStorage &other, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::EstimateStorage< AxisT >::EstimateStorage (EstimateStorage &&other, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::inRange (NUM value, NUM low, NUM high, RangeBoundary lowbound=CLOSED, RangeBoundary highbound=OPEN)
Optimise to one-line at compile time?
Member YODA::inRange (int value, int low, int high, RangeBoundary lowbound=CLOSED, RangeBoundary highbound=CLOSED)
Optimise to one-line at compile time?
Class YODA::LogBinEstimator
Make a generalised version of this with a transform function
Member YODA::mkIntegralEff (const BinnedDbn< DbnN, AxisT... > &histo, const bool includeOverflows=true)

Or throw a LowStatsError exception if h.effNumEntries() == 0?

Need to check that bins are all positive? Integral could be zero due to large +ve/-ve in different bins :O

Provide optional alt behaviours

Member YODA::mkReader (const std::string &format_name)
Improve/remove... .ydat?
Member YODA::mkWriter (const std::string &format_name)
Improve/remove... .ydat?
Member YODA::operator/ (double a, const Weights &w)
Is this really needed?
Member YODA::pdfspace (size_t nbins, double xmin, double xmax, std::function< double(double)> &fn, size_t nsample=10000)
fspace() for uniform sampling from f(x); requires ability to invert fn... how, in general?
Member YODA::read (const std::string &filename, std::vector< AnalysisObject * > &aos, const std::string &match="", const std::string &unmatch="")
Use SFINAE magic to allow ~arbitrary collection<AnalysisObject*> (with push_back()?) to be passed
Member YODA::read (std::istream &is, std::vector< AnalysisObject * > &aos, const std::string &fmt, const std::string &match="", const std::string &unmatch="")
Use SFINAE magic to allow ~arbitrary collection<AnalysisObject*> (with push_back()?) to be passed
Member YODA::Reader::read (std::istream &stream, CONT &aos, const std::string &match="", const std::string &unmatch="")
Extend SFINAE Pushable cf. Writer to allow adding to containers of smart ptr type
Member YODA::Reader::read (const std::string &filename, CONT &aos, const std::string &match="", const std::string &unmatch="")
Extend SFINAE Pushable cf. Writer to allow adding to containers of smart ptr type
Member YODA::Scatter::~Scatter ()
Add a generic Scatter base class, providing reset(), rmPoint(), etc.
Member YODA::ScatterND< N >::combineWith (std::vector< ScatterND< N > > &&others)
Better name?
Member YODA::ScatterND< N >::combineWith (const ScatterND< N > &other)
Better name?
Member YODA::ScatterND< N >::combineWith (ScatterND< N > &&other)
Better name?
Member YODA::ScatterND< N >::combineWith (const std::vector< ScatterND< N > > &others)
Better name?
Member YODA::variance (const double sumWX, const double sumW, const double sumWX2, const double sumW2)

Is this the correct approach? There is no information online other than "weights are non-negative"...

Isn't this sensitive to the overall scale of the weights? Shouldn't it check if den is bigger then num by a set number of orders of magnitude and vice versa?

Class YODA::Weights

Accept general Boost.Ranges as constructor args... but start with literal arrays for convenience

Autogenerate numerical names if not given

Member YODA::Weights::operator- () const
Can/should this modify itself and return a reference?
Member YODA::Writer::write (const std::string &filename, const AOITER &begin, const AOITER &end)
Add SFINAE trait checking for AOITER = DerefableToAO
Member YODA::Writer::write (std::ostream &stream, const AOITER &begin, const AOITER &end)
Add SFINAE trait checking for AOITER = DerefableToAO
Member YODA::Writer::write (std::ostream &stream, const std::vector< const AnalysisObject * > &aos)

Remove the head/body/foot distinction?

Why specifically LowStatsError?

Member YODA::WriterYODA1::writeHisto2D (std::ostream &stream, const Histo2D &h)
Disabled for now, reinstate with a full set of outflow info to allow marginalisation
Member YODA::WriterYODA1::writeProfile2D (std::ostream &stream, const Profile2D &p)
Disabled for now, reinstate with a full set of outflow info to allow marginalisation
Member YODA::WriterYODA1::writeScatter2D (std::ostream &stream, const Scatter2D &s)

Change ordering to {vals} {errs} {errs} ...

Change ordering to {vals} {errs} {errs} ...

Member YODA::WriterYODA1::writeScatter3D (std::ostream &stream, const Scatter3D &s)

Change ordering to {vals} {errs} {errs} ...

Change ordering to {vals} {errs} {errs} ...