Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TKDTreeBinning.h
Go to the documentation of this file.
1// @(#)root/mathcore:$Id$
2// Authors: B. Rabacal 11/2010
3
4/**********************************************************************
5 * *
6 * Copyright (c) 2010 , LCG ROOT MathLib Team *
7 * *
8 * *
9 **********************************************************************/
10
11#ifndef ROOT_TKDTreeBinning
12#define ROOT_TKDTreeBinning
13
14// Header file for class TKDTreeBinning
15//
16//
17
18#include <map>
19#include <vector>
20
21#include "TKDTree.h"
22
23namespace ROOT {
24 namespace Fit {
25 class BinData;
26 }
27}
28
29class TKDTreeBinning : public TObject {
30private:
31
32 std::vector<Double_t> fData; ///< [fDataSize*fDim] The data from which a KDTree partition is computed for binning
33 std::vector<Double_t> fBinMinEdges; ///< The minimum values for the bins' edges for each dimension
34 std::vector<Double_t> fBinMaxEdges; ///< The maximum values for the bins' edges for each dimension
35 std::vector<UInt_t> fIndices; ///< Index of the bins in the kd-tree (needed when bins are sorted)
36 TKDTreeID* fDataBins; ///<! The binning inner structure.
37 UInt_t fNBins; ///< The number of bins
38 UInt_t fDim; ///< The data dimension
39 UInt_t fDataSize; ///< The data size
40 std::vector<std::pair<Double_t, Double_t> > fDataThresholds; ///< Minimum and maximum data values.
41 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 algorithm
42 std::vector<std::map<Double_t, std::vector<UInt_t> > > fCommonBinEdges; ///<! Auxiliary structure for readjusting the bin edges. Keeps the common bin boundaries
43 Bool_t fIsSorted; ///< Flags if the bin edges are sorted densitywise (or by bin endges in case of 1-dim )
44 Bool_t fIsSortedAsc; ///< Flags if the bin edges are sorted densitywise (or by bin-edge for 1D) in ascending order
45 std::vector<UInt_t> fBinsContent; ///< Holds the contents of the bins
46 struct CompareAsc; ///<! Predicate for ascending sort
47 friend struct CompareAsc;
48 struct CompareDesc; ///<! Predicate for descending sort
49 friend struct CompareDesc;
50 TKDTreeBinning(TKDTreeBinning& bins); ///< Disallowed copy constructor
51 TKDTreeBinning operator=(TKDTreeBinning& bins); ///< Disallowed assign operator
52 void SetData(Double_t* data);
53 void SetData(const std::vector<double> & data);
54 void SetTreeData();
55 void SetBinsEdges();
56 void SetBinMinMaxEdges(Double_t* binEdges);
57 void SetCommonBinEdges(Double_t* binEdges);
58 void SetBinsContent();
59 void ReadjustMinBinEdges(Double_t* binEdges);
60 void ReadjustMaxBinEdges(Double_t* binEdges);
61
62
63public:
64
65 // flag bits
66 enum {
67 kAdjustBinEdges = BIT(14) ///< adjust bin edges to avoid overlapping with data
68 };
69
70 TKDTreeBinning(); // default constructor (for I/O)
71 TKDTreeBinning(UInt_t dataSize, UInt_t dataDim, Double_t* data, UInt_t nBins = 100, bool adjustBinEdges = false);
72 TKDTreeBinning(UInt_t dataSize, UInt_t dataDim, const std::vector<double> & data, UInt_t nBins = 100, bool adjustBinEdges = false);
73 ~TKDTreeBinning() override;
74 void SetNBins(UInt_t bins);
75 void SortBinsByDensity(Bool_t sortAsc = kTRUE);
76 const Double_t* GetBinsMinEdges() const;
77 const Double_t* GetBinsMaxEdges() const;
78 std::pair<const Double_t*, const Double_t*> GetBinsEdges() const;
79 std::pair<const Double_t*, const Double_t*> GetBinEdges(UInt_t bin) const;
80 const Double_t* GetBinMinEdges(UInt_t bin) const;
81 const Double_t* GetBinMaxEdges(UInt_t bin) const;
82 UInt_t GetNBins() const;
83 UInt_t GetDim() const;
84 UInt_t GetBinContent(UInt_t bin) const;
85 TKDTreeID* GetTree() const;
86 const Double_t* GetDimData(UInt_t dim) const;
87 Double_t GetDataMin(UInt_t dim) const;
88 Double_t GetDataMax(UInt_t dim) const;
89 Double_t GetBinDensity(UInt_t bin) const;
90 Double_t GetBinVolume(UInt_t bin) const;
91 const Double_t* GetBinCenter(UInt_t bin) const;
92 const Double_t* GetBinWidth(UInt_t bin) const;
95 const Double_t* GetOneDimBinEdges() const;
96 const Double_t* SortOneDimBinEdges(Bool_t sortAsc = kTRUE);
98 UInt_t FindBin(const Double_t * point) const;
99 std::vector<std::vector<Double_t> > GetPointsInBin(UInt_t bin) const;
100
102
103};
104
105#endif // ROOT_TKDTreeBinning
106
bool Bool_t
Definition RtypesCore.h:63
unsigned int UInt_t
Definition RtypesCore.h:46
double Double_t
Definition RtypesCore.h:59
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
#define BIT(n)
Definition Rtypes.h:85
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Class describing the binned data sets : vectors of x coordinates, y values and optionally error on y ...
Definition BinData.h:52
<- 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)
TKDTreeBinning operator=(TKDTreeBinning &bins)
Disallowed assign operator.
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.
TKDTreeBinning(TKDTreeBinning &bins)
Disallowed copy constructor.
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.
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.
@ kAdjustBinEdges
adjust bin edges to avoid overlapping with data
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 returns a pointer to them.
Class implementing a kd-tree.
Definition TKDTree.h:10
Mother of all ROOT objects.
Definition TObject.h:41
TFitResultPtr Fit(FitObject *h1, TF1 *f1, Foption_t &option, const ROOT::Math::MinimizerOptions &moption, const char *goption, ROOT::Fit::DataRange &range)
Definition HFitImpl.cxx:133
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.