11 #ifndef ROOT_TKDTreeBinning 
   12 #define ROOT_TKDTreeBinning 
   29 class TKDTreeBinning : 
public TObject {
 
   32    std::vector<Double_t> fData;        
 
   33    std::vector<Double_t> fBinMinEdges; 
 
   34    std::vector<Double_t> fBinMaxEdges; 
 
   35    std::vector<UInt_t>   fIndices;     
 
   40    std::vector<std::pair<Double_t, Double_t> > fDataThresholds; 
 
   41    std::vector<std::vector<std::pair<Bool_t, Bool_t> > > fCheckedBinEdges; 
 
   42    std::vector<std::map<Double_t, std::vector<UInt_t> > > fCommonBinEdges; 
 
   45    std::vector<UInt_t> fBinsContent; 
 
   47    friend struct CompareAsc;
 
   49    friend struct CompareDesc;
 
   50    TKDTreeBinning(TKDTreeBinning& bins);           
 
   51    TKDTreeBinning operator=(TKDTreeBinning& bins); 
 
   52    void SetData(Double_t* data);
 
   53    void SetData(
const std::vector<double> & data);
 
   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);
 
   68       kAdjustBinEdges     = BIT(14)  
 
   72    TKDTreeBinning(UInt_t dataSize, UInt_t dataDim, Double_t* data, UInt_t nBins = 100, 
bool adjustBinEdges = 
false);
 
   73    TKDTreeBinning(UInt_t dataSize, UInt_t dataDim, 
const std::vector<double> & data, UInt_t nBins = 100, 
bool adjustBinEdges = 
false);
 
   75    void SetNBins(UInt_t bins);
 
   76    void SortBinsByDensity(Bool_t sortAsc = kTRUE);
 
   77    const Double_t* GetBinsMinEdges() 
const;
 
   78    const Double_t* GetBinsMaxEdges() 
const;
 
   79    std::pair<const Double_t*, const Double_t*> GetBinsEdges() 
const;
 
   80    std::pair<const Double_t*, const Double_t*> GetBinEdges(UInt_t bin) 
const;
 
   81    const Double_t* GetBinMinEdges(UInt_t bin) 
const;
 
   82    const Double_t* GetBinMaxEdges(UInt_t bin) 
const;
 
   83    UInt_t GetNBins() 
const;
 
   84    UInt_t GetDim() 
const;
 
   85    UInt_t GetBinContent(UInt_t bin) 
const;
 
   86    TKDTreeID* GetTree() 
const;
 
   87    const Double_t* GetDimData(UInt_t dim) 
const;
 
   88    Double_t GetDataMin(UInt_t dim) 
const;
 
   89    Double_t GetDataMax(UInt_t dim) 
const;
 
   90    Double_t GetBinDensity(UInt_t bin) 
const;
 
   91    Double_t GetBinVolume(UInt_t bin) 
const;
 
   92    const Double_t* GetBinCenter(UInt_t bin) 
const;
 
   93    const Double_t* GetBinWidth(UInt_t bin) 
const;
 
   94    UInt_t GetBinMaxDensity() 
const;
 
   95    UInt_t GetBinMinDensity() 
const;
 
   96    const Double_t* GetOneDimBinEdges() 
const;
 
   97    const Double_t* SortOneDimBinEdges(Bool_t sortAsc = kTRUE);
 
   98    void FillBinData(ROOT::Fit::BinData & data) 
const;
 
   99    UInt_t FindBin(
const Double_t * point) 
const;
 
  100    std::vector<std::vector<Double_t> > GetPointsInBin(UInt_t bin) 
const;
 
  102    ClassDef(TKDTreeBinning, 1)
 
  106 #endif // ROOT_TKDTreeBinning