// @(#)root/mathcore:$Id$ // Authors: B. Rabacal 11/2010 /********************************************************************** * * * Copyright (c) 2010 , LCG ROOT MathLib Team * * * * * **********************************************************************/ #ifndef ROOT_TKDTreeBinning #define ROOT_TKDTreeBinning // Header file for class TKDTreeBinning // // #include #include #include "TKDTree.h" namespace ROOT { namespace Fit { class BinData; } } class TKDTreeBinning : public TObject { private: std::vector fData; ///< [fDataSize*fDim] The data from which a KDTree partition is computed for binning std::vector fBinMinEdges; ///< The minimum values for the bins' edges for each dimension std::vector fBinMaxEdges; ///< The maximum values for the bins' edges for each dimension std::vector fIndices; ///< Index of the bins in the kd-tree (needed when bins are sorted) TKDTreeID* fDataBins; /// > fDataThresholds; ///< Minimum and maximum data values. std::vector > > fCheckedBinEdges; /// > > fCommonBinEdges; /// fBinsContent; ///< Holds the contents of the bins struct CompareAsc; /// & data); void SetTreeData(); void SetBinsEdges(); void SetBinMinMaxEdges(Double_t* binEdges); void SetCommonBinEdges(Double_t* binEdges); void SetBinsContent(); void ReadjustMinBinEdges(Double_t* binEdges); void ReadjustMaxBinEdges(Double_t* binEdges); public: // flag bits enum { kAdjustBinEdges = BIT(14) ///< adjust bin edges to avoid overlapping with data }; TKDTreeBinning(); // default constructor (for I/O) TKDTreeBinning(UInt_t dataSize, UInt_t dataDim, Double_t* data, UInt_t nBins = 100, bool adjustBinEdges = false); TKDTreeBinning(UInt_t dataSize, UInt_t dataDim, const std::vector & data, UInt_t nBins = 100, bool adjustBinEdges = false); ~TKDTreeBinning() override; void SetNBins(UInt_t bins); void SortBinsByDensity(Bool_t sortAsc = kTRUE); const Double_t* GetBinsMinEdges() const; const Double_t* GetBinsMaxEdges() const; std::pair GetBinsEdges() const; std::pair GetBinEdges(UInt_t bin) const; const Double_t* GetBinMinEdges(UInt_t bin) const; const Double_t* GetBinMaxEdges(UInt_t bin) const; UInt_t GetNBins() const; UInt_t GetDim() const; UInt_t GetBinContent(UInt_t bin) const; TKDTreeID* GetTree() const; const Double_t* GetDimData(UInt_t dim) const; Double_t GetDataMin(UInt_t dim) const; Double_t GetDataMax(UInt_t dim) const; Double_t GetBinDensity(UInt_t bin) const; Double_t GetBinVolume(UInt_t bin) const; const Double_t* GetBinCenter(UInt_t bin) const; const Double_t* GetBinWidth(UInt_t bin) const; UInt_t GetBinMaxDensity() const; UInt_t GetBinMinDensity() const; const Double_t* GetOneDimBinEdges() const; const Double_t* SortOneDimBinEdges(Bool_t sortAsc = kTRUE); void FillBinData(ROOT::Fit::BinData & data) const; UInt_t FindBin(const Double_t * point) const; std::vector > GetPointsInBin(UInt_t bin) const; ClassDefOverride(TKDTreeBinning, 1) }; #endif // ROOT_TKDTreeBinning