yoda is hosted by Hepforge, IPPP Durham
YODA - Yet more Objects for Data Analysis  1.7.2
Todo List
Module Accessors
Sorted iterators of pair<std::string, double>
Module Combined value and error setters
Support multiple errors
Module Conversion functions from YODA to ROOT data types
Add toScatter2D(TGraph&/*) and toScatter3D(TGraph2D&/*)
Module Conversion functions from YODA to ROOT data types
Add toScatter2D(TGraph&/*) and toScatter3D(TGraph2D&/*)
Module Coordinate accessors
addError, addErrors, setErrors
Module x error accessors
Uniform "coords" accessor across all Scatters: returning fixed-size tuple?
Namespace YODA
Add SFINAE math type stuff (see Rivet) and add inrange() and inrange_closed_closed() etc. aliases cf. MCUtils
Member YODA::add (const Histo1D &histo, const Scatter2D &scatt)
Create a compatibleBinning function? Or just compare vectors of edges().
Member YODA::AnalysisObject::annotations () const
Change this to return the str->str map, with a separate annotationKeys, etc.
Member YODA::AnalysisObject::setAnnotation (const std::string &name, long double value)
Can we cover all FP types in one function via SFINAE?
Member YODA::AnalysisObject::setAnnotation (const std::string &name, double value)
Can we cover all FP types in one function via SFINAE?
Member YODA::AnalysisObject::setAnnotation (const std::string &name, float value)
Can we cover all FP types in one function via SFINAE?
Member YODA::Axis1D< BIN1D, DBN >::addBin (const Bin &b)
Efficiency?
Member YODA::Axis1D< BIN1D, DBN >::Axis1D (size_t nbins, double lower, double upper)
Rewrite interface to use a pair for the low/high
Member YODA::Axis1D< BIN1D, DBN >::subsetBinning (const Axis1D &other) const
Do we require the finite axis begin/end to be the same?
Member YODA::Axis1D< BIN1D, DBN >::xEdges () const
Make the +-inf stripping controllable by a default-valued bool arg
Member YODA::Axis2D< BIN2D, DBN >::addBins (const Bins &bins)
Reinstate when C++11 allowed in API
Member YODA::Axis2D< BIN2D, DBN >::eraseBins (const std::pair< double, double > &xrange, const std::pair< double, double > &yrange)

How to test this?

Beware the specialisation problems with vector<bool>...

Beware the specialisation problems with vector<bool>...

Member YODA::Axis2D< BIN2D, DBN >::operator== (const Axis2D &other) const
Change as discussed below if we expose the Axis classes for direct use
Member YODA::Axis2D< BIN2D, DBN >::rebinX (unsigned int nx)
WRITE THIS!
Member YODA::Axis2D< BIN2D, DBN >::rebinY (unsigned int ny)
WRITE THIS!
Member YODA::Axis2D< BIN2D, DBN >::scaleW (double scalefactor)

Reinstate when C++11 allowed in API

Reinstate when C++11 allowed in API

Reinstate when C++11 allowed in API

Member YODA::Axis2D< BIN2D, DBN >::scaleXY (double sx, double sy)

Reinstate when C++11 allowed in API

Reinstate when C++11 allowed in API

Reinstate when C++11 allowed in API

Class YODA::Bin1D< DBN >
It would also be nice to have an untemplated generic Bin1D interface
Member YODA::Binned1D< T >::Binned1D (const std::vector< double > &binedges, const std::vector< T > &binvalues=std::vector< T >())
Member YODA::Binned1D< T >::Binned1D (const std::vector< std::pair< double, double > > &binedges, const std::vector< T > &binvalues=std::vector< T >())
Member YODA::Binned1D< T >::sameBinning (const Binned1D &other) const
Be careful about using fuzzyEquals... should these be exact comparisons?
Member YODA::chi2 (const HistoBin1D &b1, const HistoBin1D &b2)

Optional arg for additional (fractional/abs?) "syst" error?

Check that binnings are compatible

Check that binnings are compatible

Member YODA::chi2 (const Histo1D &h1, const Histo1D &h2)

Optional arg for additional (fractional/abs?) "syst" error?

Check that binnings are compatible

Check that binnings are compatible

Member YODA::chi2 (const ProfileBin1D &b1, const ProfileBin1D &b2)

Optional arg for additional (fractional/abs?) "syst" error?

Check that binnings are compatible

Check that binnings are compatible

Member YODA::chi2 (const Profile1D &h1, const Profile1D &h2)

Optional arg for additional (fractional/abs?) "syst" error?

Check that binnings are compatible

Check that binnings are compatible

Member YODA::chi2 (const Scatter2D &s1, const Scatter2D &s2)

Optional arg for additional (fractional/abs?) "syst" error?

Check that binnings are compatible

Check that binnings are compatible

Member YODA::chi2 (const Point2D &p1, const Point2D &p2)

This assumes that y is the value... probably true, but ugly. Comparison axis spec arg?

Optional arg for additional (fractional/abs?) "syst" error?

Check that "binnings" are compatible

Check that "binnings" are compatible

Class YODA::CIterable< T >
Replace with C++11 std stuff
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

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

Throw excp if sumW2 is 0?

Throw excp if sumW2 is 0?

Member YODA::Dbn0D::fill (double weight=1.0, double fraction=1.0)
Be careful about negative weights.
Member YODA::Dbn1D::xStdErr () const
Unbiased should check that Neff > 1 and divide by N-1?
Member YODA::Dbn1D::xVariance () const

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?

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

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

Member YODA::Dbn2D::transformX ()
Rename
Member YODA::Dbn2D::transformY ()
Rename
Member YODA::Dbn3D::transformX ()
Rename
Member YODA::Dbn3D::transformY ()
Rename
Member YODA::Dbn3D::transformZ ()
Rename
Member YODA::divide (const Counter &numer, const Counter &denom)

Or just return a Point1D?

Add skipnullpts extra optional arg

Add skipnullpts extra optional arg

Add skipnullpts extra optional arg

Add skipnullpts extra optional arg

Add skipnullpts extra optional arg

Add skipnullpts extra optional arg

Member YODA::divide (const Histo1D &numer, const Histo1D &denom)

Add multiply(H1, H1) -> Scatter2D?

Wouldn't it be nice to be able to supply a correlation matrix or function as optional arg?

Create a compatibleBinning function? Or just compare vectors of edges().

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

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Wouldn't it be nice to be able to supply a correlation matrix or function as optional arg?

Create a compatibleBinning function? Or just compare vectors of edges().

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

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Wouldn't it be nice to be able to supply a correlation matrix or function as optional arg?

Create a compatibleBinning function? Or just compare vectors of edges().

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

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Wouldn't it be nice to be able to supply a correlation matrix or function as optional arg?

Create a compatibleBinning function? Or just compare vectors of edges().

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

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Wouldn't it be nice to be able to supply a correlation matrix or function as optional arg?

Create a compatibleBinning function? Or just compare vectors of edges().

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

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Wouldn't it be nice to be able to supply a correlation matrix or function as optional arg?

Create a compatibleBinning function? Or just compare vectors of edges().

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

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Member YODA::divide (const Histo1D &numer, const Scatter2D &denom)

Create a compatibleBinning function? Or just compare vectors of edges().

Ok?

Ok?

Ok?

Ok?

Ok?

Ok?

Member YODA::divide (const Scatter2D &numer, const Histo1D &denom)

Create a compatibleBinning function? Or just compare vectors of edges().

Ok?

Ok?

Ok?

Ok?

Ok?

Ok?

Member YODA::divide (const Histo2D &numer, const Histo2D &denom)

Add multiply(H2, H2) -> Scatter3D?

Wouldn't it be nice to be able to supply a correlation matrix or function as optional arg?

Create a compatibleBinning function? Or just compare vectors of edges().

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Wouldn't it be nice to be able to supply a correlation matrix or function as optional arg?

Create a compatibleBinning function? Or just compare vectors of edges().

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Wouldn't it be nice to be able to supply a correlation matrix or function as optional arg?

Create a compatibleBinning function? Or just compare vectors of edges().

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Wouldn't it be nice to be able to supply a correlation matrix or function as optional arg?

Create a compatibleBinning function? Or just compare vectors of edges().

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Wouldn't it be nice to be able to supply a correlation matrix or function as optional arg?

Create a compatibleBinning function? Or just compare vectors of edges().

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Wouldn't it be nice to be able to supply a correlation matrix or function as optional arg?

Create a compatibleBinning function? Or just compare vectors of edges().

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Member YODA::divide (const Profile1D &numer, const Profile1D &denom)

Create a compatibleBinning function? Or just compare vectors of edges().

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Member YODA::divide (const Profile2D &numer, const Profile2D &denom)

Create a compatibleBinning function? Or just compare vectors of edges().

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Ok?

Is this the exact error treatment for all (uncorrelated) cases? Behaviour around 0? +1 and -1 fills?

check correctness with different signed numerator and denominator.

Member YODA::efficiency (const Counter &accepted, const Counter &total)

Add divide functions/operators on pointers

Or just return a Point1D?

Add skipnullpts extra optional arg

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

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

Or just return a Point1D?

Add skipnullpts extra optional arg

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

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

Or just return a Point1D?

Add skipnullpts extra optional arg

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

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

Or just return a Point1D?

Add skipnullpts extra optional arg

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

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

Or just return a Point1D?

Add skipnullpts extra optional arg

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

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

Or just return a Point1D?

Add skipnullpts extra optional arg

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

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

Member YODA::efficiency (const Histo1D &accepted, const Histo1D &total)

Add functions/operators on pointers

Add functions/operators on pointers

Add functions/operators on pointers

Add functions/operators on pointers

Add functions/operators on pointers

Add functions/operators on pointers

Add functions/operators on pointers

Member YODA::flip (Scatter2D &s)

Add external scale, scaleX, scaleY functions

Be careful about transforms which could switch around min and max errors, or send both in the same direction!

Be careful about transforms which could switch around min and max errors, or send both in the same direction!

Be careful about transforms which could switch around min and max errors, or send both in the same direction!

Be careful about transforms which could switch around min and max errors, or send both in the same direction!

Member YODA::Histo1D::binIndexAt (double x)
Convert to ssize_t?
Member YODA::Histo1D::fill (double x, double weight=1.0, double fraction=1.0)
Replace try block with a check that there is a bin at x
Member YODA::Histo1D::Histo1D (const Histo1D &h, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Histo1D::Histo1D (const Scatter2D &s, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Histo1D::Histo1D (const Profile1D &p, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Histo1D::integralRange (size_t binindex1, size_t binindex2) const
Allow int bin index args for type compatibility with binIndexAt()?
Member YODA::Histo1D::integralTo (size_t binindex, bool includeunderflow=true) const
Allow int bin index args for type compatibility with binIndexAt()?
Member YODA::Histo1D::normalize (double normto=1.0, bool includeoverflows=true)
Check that this is the desired behaviour
Member YODA::Histo1D::operator+= (const Histo1D &toAdd)
What about if one histo sets ScaledBy, and the other doesn't?!? Aaaargh
Member YODA::Histo1D::xEdges () const
Make the +-inf stripping controllable by a default-valued bool arg
Member YODA::Histo2D::eraseBin (size_t index)

TODO

TODO

TODO

TODO

TODO

TODO

TODO

Member YODA::Histo2D::fill (double x, double y, double weight=1.0, double fraction=1.0)

Replace try block with a check that there is a bin at x, y

Reinstate! With outflow axis bin lookup

Reinstate! With outflow axis bin lookup

Member YODA::Histo2D::Histo2D (const Histo2D &h, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Histo2D::Histo2D (const Scatter3D &s, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Histo2D::Histo2D (const Profile2D &h, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::HistoBin1D::relErr () const
Throw excp if sumW2 is 0?
Member YODA::inRange (int value, int low, int high, RangeBoundary lowbound=CLOSED, RangeBoundary highbound=CLOSED)
Optimise to one-line at compile time?
Member YODA::inRange (NUM value, NUM low, NUM high, RangeBoundary lowbound=CLOSED, RangeBoundary highbound=OPEN)
Optimise to one-line at compile time?
Class YODA::Iterable< T >
Replace with C++11 std stuff
Member YODA::mkReader (const std::string &format_name)
Improve/remove... .ydat?
Member YODA::mkWriter (const std::string &format_name)
Improve/remove... .ydat?
Member YODA::multiply (const Histo1D &histo, const Scatter2D &scatt)
Create a compatibleBinning function? Or just compare vectors of edges().
Member YODA::operator/ (const Counter &numer, const Counter &denom)
Or just return a Point1D?
Member YODA::operator/ (double a, const Weights &w)
Is this really needed?
Member YODA::operator== (const YODA::Point2D &a, const YODA::Point2D &b)
Need to add y comparisons, too
Member YODA::Point2D::xMax () const
Remove (or extend) when multiple errors are supported No: doesn't need to change since (for now) we only store multiple errors for the highest dimentsion
Member YODA::Point2D::xMin () const
Remove (or extend) when multiple errors are supported No: doesn't need to change since (for now) we only store multiple errors for the highest dimentsion
Member YODA::Point2D::xy () const
Uniform "coords" accessor across all Scatters: returning fixed-size tuple?
Member YODA::Point3D::setXYZ (double x, double y, double z)
Uniform "coords" accessor across all Scatters: returning fixed-size tuple?
Member YODA::Profile1D::fill (double x, double y, double weight=1.0, double fraction=1.0)
Replace try block with a check that there is a bin at x
Member YODA::Profile1D::numEntries (bool includeoverflows=true) const
Add integrals? Or are they too ambiguous to make a core function?
Member YODA::Profile1D::Profile1D (const Profile1D &p, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Profile1D::Profile1D (const Scatter2D &s, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Profile1D::Profile1D (const Histo1D &h, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Profile1D::xEdges () const
Make the +-inf stripping controllable by a default-valued bool arg
Member YODA::Profile2D::addBin (Axis::EdgePair1D xrange, Axis::EdgePair1D yrange)

TODO

TODO

TODO

Member YODA::Profile2D::eraseBin (size_t index)
TODO
Member YODA::Profile2D::fill (double x, double y, double z, double weight=1.0, double fraction=1.0)

Replace try block with a check that there is a bin at x, y

Reinstate! With outflow axis bin lookup

Reinstate! With outflow axis bin lookup

Member YODA::Profile2D::Profile2D (const Histo2D &h, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Profile2D::Profile2D (const Scatter3D &s, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Profile2D::Profile2D (const Profile2D &p, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Profile2D::scaleW (double scalefactor)
Is this ScaledBy annotation needed?
Member YODA::Profile2D::scaleZ (double scalefactor)
Need to rescale overflows too, when they exist.
Member YODA::ProfileBin2D::sumWZ () const
: Check if it is correct
Class YODA::Pushable< T, VAL >
Replace with C++11 std stuff
Member YODA::read (const std::string &filename, std::vector< AnalysisObject *> &aos)
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)
Use SFINAE magic to allow ~arbitrary collection<AnalysisObject*> (with push_back()?) to be passed
Member YODA::Reader::read (const std::string &filename, CONT &aos)
Extend SFINAE Pushable cf. Writer to allow adding to containers of smart ptr type
Member YODA::Reader::read (std::istream &stream, CONT &aos)
Extend SFINAE Pushable cf. Writer to allow adding to containers of smart ptr type
Member YODA::Scatter1D::combineWith (const Scatter1D &other)
Better name? Make this the add operation?
Member YODA::Scatter1D::combineWith (const std::vector< Scatter1D > &others)

Better name? Make this the add operation?

Convert/extend to accept a Range or generic

Member YODA::Scatter1D::Scatter1D (const Scatter1D &s1, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Scatter2D::combineWith (const Scatter2D &other)
Better name? Make this the add operation?
Member YODA::Scatter2D::combineWith (const std::vector< Scatter2D > &others)

Better name? Make this the add operation?

Convert/extend to accept a Range or generic

Member YODA::Scatter2D::Scatter2D (const Scatter2D &s2, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Scatter3D::combineWith (const std::vector< Scatter3D > &others)

Better name?

Convert to accept a Range or generic

Member YODA::Scatter3D::combineWith (const Scatter3D &other)
Better name?
Member YODA::Scatter3D::Scatter3D (const Scatter3D &s3, const std::string &path="")
Also allow title setting from the constructor?
Member YODA::Scatter< N >::addPoints (Points pts)
More addPoint combinations with arrays for errors
Member YODA::Scatter< N >::combineWith (const std::vector< Scatter< N > > &others)
Better name?
Member YODA::Scatter< N >::combineWith (const Scatter< N > &other)
Better name?
Member YODA::SFINAE::yes [1]
Replace by C++11 std::false/true_type
Member YODA::subtract (const Scatter2D &scatt, const Histo1D &histo)
Create a compatibleBinning function? Or just compare vectors of edges().
Member YODA::subtract (const Histo1D &histo, const Scatter2D &scatt)
Create a compatibleBinning function? Or just compare vectors of edges().
Member YODA::toIntegralEfficiencyHisto (const Histo1D &h, bool includeunderflow=true, bool includeoverflow=true)

Rename/alias as mkIntegralEff

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

Provide optional alt behaviours

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

Should the total integral error be sqrt(sumW2)? Or more complex, cf. Simon etc.?

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

Provide optional alt behaviours

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

Should the total integral error be sqrt(sumW2)? Or more complex, cf. Simon etc.?

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

Provide optional alt behaviours

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

Should the total integral error be sqrt(sumW2)? Or more complex, cf. Simon etc.?

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

Provide optional alt behaviours

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

Should the total integral error be sqrt(sumW2)? Or more complex, cf. Simon etc.?

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

Provide optional alt behaviours

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

Should the total integral error be sqrt(sumW2)? Or more complex, cf. Simon etc.?

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

Provide optional alt behaviours

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

Should the total integral error be sqrt(sumW2)? Or more complex, cf. Simon etc.?

Member YODA::toIntegralHisto (const Histo1D &h, bool includeunderflow=true)

Rename/alias as mkIntegral

Check that the histogram binning has no gaps, otherwise throw a BinningError

Check that the histogram binning has no gaps, otherwise throw a BinningError

Check that the histogram binning has no gaps, otherwise throw a BinningError

Check that the histogram binning has no gaps, otherwise throw a BinningError

Check that the histogram binning has no gaps, otherwise throw a BinningError

Check that the histogram binning has no gaps, otherwise throw a BinningError

Member YODA::toScatter2D (const TH1 &th1, bool scalebywidth=true)

Check that direct Scatter filling gives the same result at mkScatter(h) for ROOT -> YODA

toProfile1D: TProfile -> Profile1D

toScatter2D: TGraph(AsymmErrs) -> Scatter2D

toProfile1D: TProfile -> Profile1D

toScatter2D: TGraph(AsymmErrs) -> Scatter2D

toProfile1D: TProfile -> Profile1D

toScatter2D: TGraph(AsymmErrs) -> Scatter2D

toProfile1D: TProfile -> Profile1D

toScatter2D: TGraph(AsymmErrs) -> Scatter2D

Member YODA::toTGraph (const Scatter2D &s)

Convert a YODA Profile2D to a ROOT TProfile2D

Check/improve/extend.

Check/improve/extend.

Check/improve/extend.

Check/improve/extend.

Member YODA::toTH1D (const Histo1D &h)
Check/improve/extend – needs SetBinError or not?
Member YODA::toTH2D (const Histo2D &h)

Check/improve/extend – needs SetBinError or not?

Connect up when supported in YODA... if 2D overflows are possible in ROOT?!

Connect up when supported in YODA... if 2D overflows are possible in ROOT?!

Connect up when supported in YODA... if 2D overflows are possible in ROOT?!

Connect up when supported in YODA... if 2D overflows are possible in ROOT?!

Member YODA::toTProfile (const Profile1D &p)

Check/improve/extend. How to set all the y-weights in ROOT profiles?

Need to set the following, according to Roman Lysak:

Need to set the following, according to Roman Lysak:

Need to set the following, according to Roman Lysak:

Need to set the following, according to Roman Lysak:

Member YODA::transformX (Scatter2D &s, FNX fx)
Be careful about transforms which could switch around min and max errors, or send both in the same direction!
Member YODA::transformX (Scatter1D &s, FNX fx)
Be careful about transforms which could switch around min and max errors, or send both in the same direction!
Member YODA::transformX (Scatter3D &s, FNX fx)
Be careful about transforms which could switch around min and max errors, or send both in the same direction!
Member YODA::transformY (Scatter3D &s, FNY fy)
Be careful about transforms which could switch around min and max errors, or send both in the same direction!
Member YODA::transformY (Scatter2D &s, FNY fy)
Be careful about transforms which could switch around min and max errors, or send both in the same direction!
Member YODA::transformZ (Scatter3D &s, FNZ fz)
Be careful about transforms which could switch around min and max errors, or send both in the same direction!
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 (std::ostream &stream, const std::vector< const AnalysisObject *> &aos)

Remove the head/body/foot distinction?

Why specifically LowStatsError?

Why specifically LowStatsError?

Member YODA::Writer::write (std::ostream &stream, const AOITER &begin, const AOITER &end)
Add SFINAE trait checking for AOITER = DerefableToAO
Member YODA::Writer::write (const std::string &filename, const AOITER &begin, const AOITER &end)
Add SFINAE trait checking for AOITER = DerefableToAO
Member YODA::WriterAIDA::write (std::ostream &stream, const AOITER &begin, const AOITER &end)
Add SFINAE trait checking for AOITER = DerefableToAO
Member YODA::WriterAIDA::write (const std::string &filename, const AOITER &begin, const AOITER &end)
Add SFINAE trait checking for AOITER = DerefableToAO
Member YODA::WriterFLAT::write (std::ostream &stream, const AOITER &begin, const AOITER &end)
Add SFINAE trait checking for AOITER = DerefableToAO
Member YODA::WriterFLAT::write (const std::string &filename, const AOITER &begin, const AOITER &end)
Add SFINAE trait checking for AOITER = DerefableToAO
Member YODA::WriterYODA::write (std::ostream &stream, const AOITER &begin, const AOITER &end)
Add SFINAE trait checking for AOITER = DerefableToAO
Member YODA::WriterYODA::write (const std::string &filename, const AOITER &begin, const AOITER &end)
Add SFINAE trait checking for AOITER = DerefableToAO
Member YODA::WriterYODA::writeHisto2D (std::ostream &stream, const Histo2D &h)
Disabled for now, reinstate with a full set of outflow info to allow marginalisation
Member YODA::WriterYODA::writeProfile2D (std::ostream &stream, const Profile2D &p)
Disabled for now, reinstate with a full set of outflow info to allow marginalisation
Member YODA::WriterYODA::writeScatter2D (std::ostream &stream, const Scatter2D &s)

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

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

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

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

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