74: fData(0), fBinMinEdges(std::vector<
Double_t>()), fBinMaxEdges(std::vector<
Double_t>()), fDataBins((
TKDTreeID*)0), fDim(dataDim),
 
   75fDataSize(dataSize), fDataThresholds(std::vector<std::pair<
Double_t, 
Double_t> >(fDim, std::make_pair(0., 0.))),
 
   83         this->
Warning(
"TKDTreeBinning", 
"Data is nil. Nothing is built.");
 
   98: fData(0), fBinMinEdges(std::vector<
Double_t>()), fBinMaxEdges(std::vector<
Double_t>()), fDataBins((
TKDTreeID*)0), fNBins (nBins), fDim(dataDim),
 
   99fDataSize(dataSize), fDataThresholds(std::vector<std::pair<
Double_t, 
Double_t> >(fDim, std::make_pair(0., 0.))),
 
  107         this->
Warning(
"TKDTreeBinning", 
"Data is nil. Nothing is built.");
 
  135            this->
Info(
"SetNBins", 
"Number of bins is not enough to hold the data. Extra bin added.");
 
  144         this->
Warning(
"SetNBins", 
"Number of bins is bigger than data size. Nothing is built.");
 
  149         this->
Warning(
"SetNBins", 
"Data dimension is nil. Nothing is built.");
 
  151         this->
Warning(
"SetNBins", 
"Number of bins is nil. Nothing is built.");
 
  153         this->
Warning(
"SetNBins", 
"Data size is nil. Nothing is built.");
 
  163      std::vector<UInt_t> indices(
fNBins);        
 
  167         std::sort(indices.begin(), indices.end(), 
CompareAsc(
this));
 
  170         std::sort(indices.begin(), indices.end(), 
CompareDesc(
this));
 
  173      std::vector<Double_t> binMinEdges(
fNBins * 
fDim);
 
  174      std::vector<Double_t> binMaxEdges(
fNBins * 
fDim);
 
  175      std::vector<UInt_t> binContent(
fNBins );    
 
  255   fCommonBinEdges = std::vector<std::map<Double_t, std::vector<UInt_t> > >(
fDim, std::map<Double_t, std::vector<UInt_t> >());
 
  284            std::vector<UInt_t> commonBinEdges;
 
  287               if (std::fabs(binEdge - binEdges[minBinEdgePos]) < std::numeric_limits<Double_t>::epsilon())
 
  288                  commonBinEdges.push_back(minBinEdgePos);
 
  289               UInt_t maxBinEdgePos = ++minBinEdgePos;
 
  290               if (std::fabs(binEdge - binEdges[maxBinEdgePos]) < std::numeric_limits<Double_t>::epsilon())
 
  291                  commonBinEdges.push_back(maxBinEdgePos);
 
  307            double eps = -10*std::numeric_limits<Double_t>::epsilon();
 
  308            if (adjustedBinEdge != 0)
 
  309               adjustedBinEdge *= (1. + eps);
 
  311               adjustedBinEdge += eps;
 
  315               Bool_t isMinBinEdge = binEdgePos % 2 == 0;
 
  316               UInt_t bin = isMinBinEdge ? (binEdgePos / 2 - i) / 
fDim : ((binEdgePos - 1) / 2 - i) / 
fDim;
 
  317               binEdges[binEdgePos] = adjustedBinEdge;
 
  335            double eps = 10*std::numeric_limits<Double_t>::epsilon();
 
  337               binEdge *= (1. + eps);
 
  352   this->
Warning(
"GetBinsMinEdges", 
"Binning kd-tree is nil. No bin edges retrieved.");
 
  353   this->
Info(
"GetBinsMinEdges", 
"Returning null pointer.");
 
  363   this->
Warning(
"GetBinsMaxEdges", 
"Binning kd-tree is nil. No bin edges retrieved.");
 
  364   this->
Info(
"GetBinsMaxEdges", 
"Returning null pointer.");
 
  373   this->
Warning(
"GetBinsEdges", 
"Binning kd-tree is nil. No bin edges retrieved.");
 
  374   this->
Info(
"GetBinsEdges", 
"Returning null pointer pair.");
 
  384         this->
Warning(
"GetBinMinEdges", 
"No such bin. 'bin' is between 0 and %d", 
fNBins - 1);
 
  386      this->
Warning(
"GetBinMinEdges", 
"Binning kd-tree is nil. No bin edges retrieved.");
 
  387   this->
Info(
"GetBinMinEdges", 
"Returning null pointer.");
 
  397         this->
Warning(
"GetBinMaxEdges", 
"No such bin. 'bin' is between 0 and %d", 
fNBins - 1);
 
  399      this->
Warning(
"GetBinMaxEdges", 
"Binning kd-tree is nil. No bin edges retrieved.");
 
  400   this->
Info(
"GetBinMaxEdges", 
"Returning null pointer.");
 
  410         this->
Warning(
"GetBinEdges", 
"No such bin. 'bin' is between 0 and %d", 
fNBins - 1);
 
  412      this->
Warning(
"GetBinEdges", 
"Binning kd-tree is nil. No bin edges retrieved.");
 
  413   this->
Info(
"GetBinEdges", 
"Returning null pointer pair.");
 
  431   this->
Warning(
"GetBinContent", 
"No such bin. Returning 0.");
 
  432   this->
Info(
"GetBinContent", 
"'bin' is between 0 and %d.", 
fNBins - 1);
 
  441   this->
Warning(
"GetTree", 
"Binning kd-tree is nil. No embedded kd-tree retrieved. Returning null pointer.");
 
  449   this->
Warning(
"GetDimData", 
"No such dimensional coordinate. No coordinate data retrieved. Returning null pointer.");
 
  450   this->
Info(
"GetDimData", 
"'dim' is between 0 and %d.", 
fDim - 1);
 
  458   this->
Warning(
"GetDataMin", 
"No such dimensional coordinate. No coordinate data minimum retrieved. Returning +inf.");
 
  459   this->
Info(
"GetDataMin", 
"'dim' is between 0 and %d.", 
fDim - 1);
 
  460   return std::numeric_limits<Double_t>::infinity();
 
  467   this->
Warning(
"GetDataMax", 
"No such dimensional coordinate. No coordinate data maximum retrieved. Returning -inf.");
 
  468   this->
Info(
"GetDataMax", 
"'dim' is between 0 and %d.", 
fDim - 1);
 
  469   return -1 * std::numeric_limits<Double_t>::infinity();
 
  478         this->
Warning(
"GetBinDensity", 
"Volume is null. Returning -1.");
 
  481   this->
Warning(
"GetBinDensity", 
"No such bin. Returning -1.");
 
  482   this->
Info(
"GetBinDensity", 
"'bin' is between 0 and %d.", 
fNBins - 1);
 
  489      std::pair<const Double_t*, const Double_t*> binEdges = 
GetBinEdges(bin);
 
  492         volume *= (binEdges.second[i] - binEdges.first[i]);
 
  496   this->
Warning(
"GetBinVolume", 
"No such bin. Returning 0.");
 
  497   this->
Info(
"GetBinVolume", 
"'bin' is between 0 and %d.", 
fNBins - 1);
 
  509   this->
Warning(
"GetOneDimBinEdges", 
"Data is multidimensional. No sorted bin edges retrieved. Returning null pointer.");
 
  510   this->
Info(
"GetOneDimBinEdges", 
"This method can only be invoked if the data is a one dimensional set");
 
  517      this->
Warning(
"SortOneDimBinEdges", 
"Data is multidimensional. Cannot sorted bin edges. Returning null pointer.");
 
  518      this->
Info(
"SortOneDimBinEdges", 
"This method can only be invoked if the data is a one dimensional set");
 
  522   std::vector<UInt_t> indices(
fNBins);
 
  525   std::vector<Double_t> binMinEdges(
fNBins );
 
  526   std::vector<Double_t> binMaxEdges(
fNBins );
 
  527   std::vector<UInt_t> binContent(
fNBins );    
 
  557      std::pair<const Double_t*, const Double_t*> binEdges = 
GetBinEdges(bin);
 
  559         result[i] = (binEdges.second[i] + binEdges.first[i]) / 2.;
 
  563   this->
Warning(
"GetBinCenter", 
"No such bin. Returning null pointer.");
 
  564   this->
Info(
"GetBinCenter", 
"'bin' is between 0 and %d.", 
fNBins - 1);
 
  573      std::pair<const Double_t*, const Double_t*> binEdges = 
GetBinEdges(bin);
 
  575         result[i] = (binEdges.second[i] - binEdges.first[i]);
 
  579   this->
Warning(
"GetBinWidth", 
"No such bin. Returning null pointer.");
 
  580   this->
Info(
"GetBinWidth", 
"'bin' is between 0 and %d.", 
fNBins - 1);
 
  618   for (
unsigned int i = 0; i < 
fNBins; ++i) {
 
  641   std::vector<Double_t> point(
fDim);
 
  642   std::vector< std::vector<Double_t> > thePoints;
 
  643   if (
fData.size() == 0) {
 
  644      Error(
"GetPointsInBin",
"Internal data set is not valid");
 
  648      Error(
"GetPointsInBin",
"Internal TKDTree is not valid");
 
  652      Error(
"GetPointsInBin",
"Invalid bin number");
 
  659   thePoints.resize(npoints);
 
  660   for (
int ipoint = 0; ipoint < npoints; ++ipoint) {
 
  661      for (
unsigned int idim = 0; idim < 
fDim;  ++idim) {
 
  664      thePoints[ipoint] = point;
 
  672   if (
b.IsReading() ) {
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
 
TKDTree< Int_t, Double_t > TKDTreeID
 
Class describing the binned data sets : vectors of x coordinates, y values and optionally error on y ...
 
Buffer base class used for serializing objects.
 
<- TKDTreeBinning - A class providing multidimensional binning ->
 
std::vector< UInt_t > fBinsContent
Holds the contents of the bins.
 
UInt_t fNBins
The number of bins.
 
void ReadjustMinBinEdges(Double_t *binEdges)
 
TKDTreeBinning()
Default constructor (for I/O)
 
std::pair< const Double_t *, const Double_t * > GetBinsEdges() const
Returns a pair of an array with all bins minimum and maximum edges.
 
const Double_t * GetBinMaxEdges(UInt_t bin) const
Returns the bin's maximum edges. 'bin' is between 0 and fNBins - 1.
 
const Double_t * GetBinWidth(UInt_t bin) const
Returns a pointer to the vector of the bin widths.
 
const Double_t * GetBinsMaxEdges() const
Returns an array with all bins' maximum edges The edges are arranges as xmax_1,ymax_1,...
 
void SetCommonBinEdges(Double_t *binEdges)
 
const Double_t * GetBinCenter(UInt_t bin) const
Returns the geometric center of of the bin.
 
UInt_t GetBinMaxDensity() const
Return the bin with maximum density.
 
std::pair< const Double_t *, const Double_t * > GetBinEdges(UInt_t bin) const
Returns a pir with the bin's edges. 'bin' is between 0 and fNBins - 1.
 
UInt_t GetNBins() const
Returns the number of bins.
 
Bool_t fIsSorted
Flags if the bin edges are sorted densitywise (or by bin endges in case of 1-dim )
 
~TKDTreeBinning() override
Class's destructor.
 
void SetData(Double_t *data)
 
void SetNBins(UInt_t bins)
Sets binning inner structure.
 
UInt_t fDataSize
The data size.
 
Double_t GetDataMax(UInt_t dim) const
Returns the maximum of the data in the dim coordinate. 'dim' is between 0 and fDim - 1.
 
const Double_t * GetBinMinEdges(UInt_t bin) const
Returns the bin's minimum edges. 'bin' is between 0 and fNBins - 1.
 
Double_t GetDataMin(UInt_t dim) const
Returns the minimum of the data in the dim coordinate. 'dim' is between 0 and fDim - 1.
 
UInt_t GetBinContent(UInt_t bin) const
Returns the number of points in bin. 'bin' is between 0 and fNBins - 1.
 
void FillBinData(ROOT::Fit::BinData &data) const
Fill the bin data set (class ROOT::Fit::BinData) with the result of the TKDTree binning.
 
std::vector< Double_t > fData
[fDataSize*fDim] The data from which a KDTree partition is computed for binning
 
Double_t GetBinVolume(UInt_t bin) const
Returns the (hyper)volume of bin. 'bin' is between 0 and fNBins - 1.
 
std::vector< std::pair< Double_t, Double_t > > fDataThresholds
Minimum and maximum data values.
 
void SortBinsByDensity(Bool_t sortAsc=kTRUE)
Sorts bins by their density.
 
std::vector< UInt_t > fIndices
Index of the bins in the kd-tree (needed when bins are sorted)
 
std::vector< Double_t > fBinMinEdges
The minimum values for the bins' edges for each dimension.
 
std::vector< Double_t > fBinMaxEdges
The maximum values for the bins' edges for each dimension.
 
void ReadjustMaxBinEdges(Double_t *binEdges)
 
std::vector< std::vector< std::pair< Bool_t, Bool_t > > > fCheckedBinEdges
! Auxiliary structure for readjusting the bin edges. Flags if the bin edge was processed in the algor...
 
UInt_t fDim
The data dimension.
 
@ kAdjustBinEdges
adjust bin edges to avoid overlapping with data
 
void Streamer(TBuffer &) override
Stream a class object.
 
UInt_t FindBin(const Double_t *point) const
find the corresponding bin index given the coordinate of a point
 
Double_t GetBinDensity(UInt_t bin) const
Returns the density in bin.
 
TKDTreeID * fDataBins
! The binning inner structure.
 
Bool_t fIsSortedAsc
Flags if the bin edges are sorted densitywise (or by bin-edge for 1D) in ascending order.
 
std::vector< std::vector< Double_t > > GetPointsInBin(UInt_t bin) const
Return the corresponding point belonging to the bin i.
 
std::vector< std::map< Double_t, std::vector< UInt_t > > > fCommonBinEdges
! Auxiliary structure for readjusting the bin edges. Keeps the common bin boundaries
 
const Double_t * GetBinsMinEdges() const
Returns an array with all bins' minimum edges The edges are arranges as xmin_1,ymin_1,...
 
void SetBinMinMaxEdges(Double_t *binEdges)
 
UInt_t GetBinMinDensity() const
Return the bin with minimum density.
 
const Double_t * GetOneDimBinEdges() const
Returns a pointer to the vector of the bin edges for one dimensional binning only.
 
const Double_t * GetDimData(UInt_t dim) const
 
UInt_t GetDim() const
Returns the number of dimensions.
 
TKDTreeID * GetTree() const
Returns the kD-Tree structure of the binning.
 
const Double_t * SortOneDimBinEdges(Bool_t sortAsc=kTRUE)
Sort the one-dimensional bin edges and retuns a pointer to them.
 
Class implementing a kd-tree.
 
void SetData(Index npoints, Index ndim, UInt_t bsize, Value **data)
Set the data array. See the constructor function comments for details.
 
Index FindNode(const Value *point) const
returns the index of the terminal node to which point belongs (index in the fAxis,...
 
Index * GetPointsIndexes(Int_t node) const
return the indices of the points in that terminal node for all the nodes except last,...
 
void Build()
Build the kd-tree.
 
Index GetNPointsNode(Int_t node) const
Get number of points in this node for all the terminal nodes except last, the size is fBucketSize for...
 
Value * GetBoundary(const Int_t node)
Get a boundary.
 
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
 
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
 
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
 
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
 
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
 
void Sort(Index n, const Element *a, Index *index, Bool_t down=kTRUE)
Sort the n elements of the array a of generic templated type Element.
 
const TKDTreeBinning * bins
 
CompareAsc(const TKDTreeBinning *treebins)
 
Bool_t operator()(UInt_t bin1, UInt_t bin2)
 
const TKDTreeBinning * bins
 
Bool_t operator()(UInt_t bin1, UInt_t bin2)
 
CompareDesc(const TKDTreeBinning *treebins)