X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=CORRFW%2FAliCFGridSparse.h;h=eb17b9356f11249f41efd187be5e35fe5581accf;hb=4c8491514659c67435f6f0c33e50e6726add0233;hp=e66f183ba797f46de45d7d4adcb49b79eb5d65e5;hpb=9be0fa4ef7413462bea0ea7fae2b5b5e8b46226c;p=u%2Fmrichter%2FAliRoot.git diff --git a/CORRFW/AliCFGridSparse.h b/CORRFW/AliCFGridSparse.h index e66f183ba79..eb17b9356f1 100755 --- a/CORRFW/AliCFGridSparse.h +++ b/CORRFW/AliCFGridSparse.h @@ -8,80 +8,207 @@ // Author:S.Arcelli, silvia.arcelli@cern.ch //--------------------------------------------------------------------// -#include "AliCFVGrid.h" +#include "AliCFFrame.h" #include "THnSparse.h" #include "AliLog.h" +#include "TAxis.h" + class TH1D; class TH2D; class TH3D; -class AliCFGridSparse : public AliCFVGrid +class AliCFGridSparse : public AliCFFrame { public: AliCFGridSparse(); - AliCFGridSparse(const Char_t* name,const Char_t* title); - AliCFGridSparse(const Char_t* name, const Char_t* title, const Int_t nVarIn, const Int_t* nBinIn, const Double_t *binLimitsIn=0); - AliCFGridSparse(const AliCFGridSparse & c); - + AliCFGridSparse(const Char_t* name, const Char_t* title); + AliCFGridSparse(const Char_t* name, const Char_t* title, Int_t nVarIn, const Int_t* nBinIn); + AliCFGridSparse(const AliCFGridSparse& c); virtual ~AliCFGridSparse(); - AliCFGridSparse& operator=(const AliCFGridSparse& corr) ; - virtual void SetBinLimits(Int_t ivar, Double_t * array); - - virtual void Fill(Double_t *var, Double_t weight=1.); + AliCFGridSparse& operator=(const AliCFGridSparse& c); + virtual void Copy(TObject& c) const; + + // AliCFFrame functions + virtual Int_t GetNVar() const {return fData->GetNdimensions();} + virtual void PrintBinLimits() const ; + virtual void PrintNBins() const ; + virtual void SetBinLimits(Int_t ivar, Double_t min, Double_t max); // for uniform bin width only + virtual void SetBinLimits(Int_t ivar, const Double_t * array); // for variable or uniform bin width + virtual void GetBinLimits(Int_t ivar, Double_t * array) const ; + virtual Double_t * GetBinLimits(Int_t ivar) const ; + virtual Long_t GetNBinsTotal() const ; + virtual Long_t GetNFilledBins() const {return fData->GetNbins();} + virtual Int_t GetNBins(Int_t ivar) const {return fData->GetAxis(ivar)->GetNbins();} + virtual Int_t * GetNBins() const ; + virtual Float_t GetBinCenter(Int_t ivar,Int_t ibin) const ; + virtual Float_t GetBinSize (Int_t ivar,Int_t ibin) const ; + //virtual void GetBinCenters(const Int_t *ibin, Float_t *binCenter) const ; + //virtual void GetBinSizes (const Int_t *ibin, Float_t *binSizes) const ; + virtual TAxis * GetAxis(Int_t ivar) const {return fData->GetAxis(ivar);} - virtual Float_t GetOverFlows(Int_t var) const; - virtual Float_t GetUnderFlows(Int_t var)const; + virtual void SetVarTitle(Int_t ivar, const Char_t* lab) {fData->GetAxis(ivar)->SetTitle(lab);} + virtual const Char_t* GetVarTitle(Int_t ivar) const {return GetAxis(ivar)->GetTitle();} + virtual Int_t GetVar(const Char_t* title) const ; // returns the variable corresponding to the given title + + // probably not needed anymore + //virtual Int_t GetBinIndex(const Int_t *ibin) const ; + //virtual void GetBinIndex(Int_t iel, const Int_t *ibin) const ; + //virtual Int_t GetBinIndex(Int_t ivar, Int_t ind) const ; + + virtual void Fill(const Double_t *var, Double_t weight=1.); virtual Float_t GetEntries()const; + virtual Float_t GetElement(Long_t iel) const; + virtual Float_t GetElement(const Int_t *bin) const; + virtual Float_t GetElement(const Double_t *var) const; + virtual Float_t GetElementError(Long_t iel) const; + virtual Float_t GetElementError(const Int_t *bin) const; + virtual Float_t GetElementError(const Double_t *var) const; + virtual void SetElement(Long_t iel, Float_t val); + virtual void SetElement(const Int_t *bin, Float_t val); + virtual void SetElement(const Double_t *var, Float_t val); + virtual void SetElementError(Long_t iel, Float_t val); + virtual void SetElementError(const Int_t *bin, Float_t val) ; + virtual void SetElementError(const Double_t *var, Float_t val); + + virtual TH1* Project(Int_t ivar1, Int_t ivar2=-1, Int_t ivar3=-1) const {return Slice(ivar1,ivar2,ivar3,0x0,0x0,kFALSE);} + virtual TH1* Slice(Int_t ivar1, Int_t ivar2=-1, Int_t ivar3=-1, + const Double_t *varMin=0x0, const Double_t *varMax=0x0, Bool_t useBins=0) const ; + virtual AliCFGridSparse* MakeSlice(Int_t nVars, const Int_t* vars, + const Double_t* varMin, const Double_t* varMax, Bool_t useBins=0) const ; - virtual Float_t GetElement(Int_t iel)const; - virtual Float_t GetElement(Int_t *bin)const; - virtual Float_t GetElement(Double_t *var)const; - - virtual Float_t GetElementError(Int_t iel)const; - virtual Float_t GetElementError(Int_t *bin)const; - virtual Float_t GetElementError(Double_t *var)const; - - virtual void SetElement(Int_t iel, Float_t val); - virtual void SetElement(Int_t *bin, Float_t val); - virtual void SetElement(Double_t *var, Float_t val); - virtual void SetElementError(Int_t iel, Float_t val); - virtual void SetElementError(Int_t *bin, Float_t val) ; - virtual void SetElementError(Double_t *var, Float_t val); - - virtual TH1D* Project( Int_t ivar) const; - virtual TH2D* Project( Int_t ivar1, Int_t ivar2) const; - virtual TH3D* Project( Int_t ivar1, Int_t ivar2,Int_t ivar3) const; - virtual AliCFGridSparse* Project(Int_t nVars, Int_t* vars, Double_t* varMin, Double_t* varMax) const ; - virtual TH1D* Slice(Int_t ivar, Double_t* varMin, Double_t* varMax) const ; - virtual TH2D* Slice(Int_t ivar1, Int_t ivar2, Double_t *varMin, Double_t *varMax) const ; - virtual TH3D* Slice(Int_t ivar1, Int_t ivar2, Int_t ivar3, Double_t *varMin, Double_t *varMax) const ; - virtual void SetRangeUser(Int_t iVar, Double_t varMin, Double_t varMax) ; - virtual void SetRangeUser(Double_t* varMin, Double_t* varMax) ; - - virtual void UseAxisRange(Bool_t b) const ; + virtual void SetRangeUser(Int_t iVar, Double_t varMin, Double_t varMax, Bool_t useBins=kFALSE) const ; + virtual void SetRangeUser(const Double_t* varMin, const Double_t* varMax, Bool_t useBins=kFALSE) const ; + virtual void Smooth() ; //basic operations + virtual void SumW2(); + virtual void Add(const AliCFGridSparse* aGrid, Double_t c=1.); + virtual void Add(const AliCFGridSparse* aGrid1 ,const AliCFGridSparse* aGrid2, Double_t c1=1.,Double_t c2=1.); + virtual void Multiply(const AliCFGridSparse* aGrid, Double_t c=1.); + virtual void Multiply(const AliCFGridSparse* aGrid1,const AliCFGridSparse* aGrid2, Double_t c1=1.,Double_t c2=1.); + virtual void Divide(const AliCFGridSparse* aGrid, Double_t c=1.); + virtual void Divide(const AliCFGridSparse* aGrid1, const AliCFGridSparse* aGrid2, Double_t c1=1., Double_t c2=1.,Option_t *option=0); + virtual void Rebin(const Int_t* group); + virtual void Scale(Long_t iel, const Double_t *fact); + virtual void Scale(const Int_t* bin, const Double_t *fact); + virtual void Scale(const Double_t* var, const Double_t *fact); + virtual void Scale(const Double_t *fact); // To normalize MC to int lumi, for ex. + virtual Int_t CheckStats(Double_t thr) const; + virtual Int_t GetSumW2() const {return fSumW2;}; + virtual Double_t GetIntegral() const; + //virtual Double_t GetIntegral(const Double_t *varMin, const Double_t *varMax) const; + virtual Long64_t Merge(TCollection* list); - virtual void SumW2(); - virtual void Add(const AliCFVGrid* aGrid, Double_t c=1.); - virtual void Add(const AliCFVGrid* aGrid1 ,const AliCFVGrid* aGrid2, Double_t c1=1.,Double_t c2=1.); - virtual void Multiply(const AliCFVGrid* aGrid, Double_t c=1.); - virtual void Multiply(const AliCFVGrid* aGrid1,const AliCFVGrid* aGrid2, Double_t c1=1.,Double_t c2=1.); - virtual void Divide(const AliCFVGrid* aGrid, Double_t c=1.); - virtual void Divide(const AliCFVGrid* aGrid1, const AliCFVGrid* aGrid2, Double_t c1=1., Double_t c2=1.,Option_t *option=0); + virtual void SetGrid(THnSparse* grid) {if (fData) delete fData ; fData=grid;} + THnSparse * GetGrid() const {return fData;} - virtual void Rebin(const Int_t* group); - virtual void SetGrid(THnSparse* grid) {fData=grid;} - THnSparse *GetGrid() const {return fData;};// Getter for the data Container: a THnSparse + virtual Float_t GetOverFlows (Int_t var, Bool_t excl=kFALSE) const; + virtual Float_t GetUnderFlows(Int_t var, Bool_t excl=kFALSE) const; + virtual Long_t GetEmptyBins() const; + + /* FUNCTIONS TO REMOVE */ + virtual AliCFGridSparse* Project(Int_t nVars, const Int_t* vars, const Double_t* varMin, const Double_t* varMax, Bool_t useBins=0) const + {return MakeSlice(nVars,vars,varMin,varMax,useBins);} - virtual void Copy(TObject& c) const; - protected: - THnSparse *fData;// The data Container: a THnSparse - ClassDef(AliCFGridSparse,2); + //protected functions + void GetScaledValues(const Double_t *fact, const Double_t *in, Double_t *out) const; + void SetAxisRange(TAxis* axis, Double_t min, Double_t max, Bool_t useBins) const; + void GetProjectionName (TString& s,Int_t var0, Int_t var1=-1, Int_t var2=-1) const; + void GetProjectionTitle(TString& s,Int_t var0, Int_t var1=-1, Int_t var2=-1) const; + + // data members: + Bool_t fSumW2 ; // Flag to check if calculation of squared weights enabled + THnSparse *fData ; // The data Container: a THnSparse + + ClassDef(AliCFGridSparse,3); }; - + + +//inline functions : + +inline Long_t AliCFGridSparse::GetNBinsTotal() const { + Long_t n=1; + for (Int_t iVar=0; iVarGetAxis(iVar)->GetNbins(); + } + return n ; +} + +inline void AliCFGridSparse::PrintNBins() const +{ + // + // printing the array containing the # of bins + // + for (Int_t i=0;iGetAxis(i)->GetNbins())); + } +} + +inline void AliCFGridSparse::PrintBinLimits() const +{ + // + // printing the bin limits for each variable + // + for (Int_t iVar=0; iVarGetAxis(ivar) ; + Int_t nBins = axis->GetNbins(); + for (Int_t iBin=0; iBinGetBinLowEdge(iBin+1); + array[nBins] = axis->GetBinUpEdge(nBins); +} + +inline Int_t* AliCFGridSparse::GetNBins() const { + Int_t *bins = new Int_t[GetNVar()]; + for (Int_t iVar=0; iVar=0) { + s.Append(Form("-%s",GetVarTitle(var1))); + if (var2>=0) s.Append(Form("-%s",GetVarTitle(var2))); + } +} + +inline void AliCFGridSparse::GetProjectionTitle(TString& s, Int_t var0, Int_t var1, Int_t var2) const { + s.Form("%s: projection on %s",GetTitle(),GetVarTitle(var0)); + if (var1>=0) { + s.Append(Form("-%s",GetVarTitle(var1))); + if (var2>=0) s.Append(Form("-%s",GetVarTitle(var2))); + } +} + #endif