From a757643fe04537f530ffc4d2b897e65406a6d714 Mon Sep 17 00:00:00 2001 From: rvernet Date: Thu, 14 May 2009 09:41:58 +0000 Subject: [PATCH] added function MakeSlice + fixed projection --- CORRFW/AliCFEffGrid.cxx | 41 +++++++++++++++++++++++++++++++---------- CORRFW/AliCFEffGrid.h | 3 ++- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/CORRFW/AliCFEffGrid.cxx b/CORRFW/AliCFEffGrid.cxx index 11fc76080fb..e6a707524c4 100644 --- a/CORRFW/AliCFEffGrid.cxx +++ b/CORRFW/AliCFEffGrid.cxx @@ -217,11 +217,14 @@ TH1D *AliCFEffGrid::Project(Int_t ivar) const // Make a 1D projection along variable ivar // - THnSparse* hNum = ((AliCFGridSparse*)GetNum())->GetGrid(); - THnSparse* hDen = ((AliCFGridSparse*)GetDen())->GetGrid(); + const Int_t nDim = 1 ; + Int_t dim[nDim] = {ivar} ; + THnSparse* hNum = ((AliCFGridSparse*)GetNum())->GetGrid()->Projection(nDim,dim); + THnSparse* hDen = ((AliCFGridSparse*)GetDen())->GetGrid()->Projection(nDim,dim); THnSparse* ratio = (THnSparse*)hNum->Clone(); ratio->Divide(hNum,hDen,1.,1.,"B"); - return ratio->Projection(ivar); + delete hNum; delete hDen; + return ratio->Projection(0); } //___________________________________________________________________ TH2D *AliCFEffGrid::Project(Int_t ivar1,Int_t ivar2) const @@ -229,11 +232,15 @@ TH2D *AliCFEffGrid::Project(Int_t ivar1,Int_t ivar2) const // // Make a 2D projection along variable ivar1,ivar2 // - THnSparse* hNum = ((AliCFGridSparse*)GetNum())->GetGrid(); - THnSparse* hDen = ((AliCFGridSparse*)GetDen())->GetGrid(); + + const Int_t nDim = 2 ; + Int_t dim[nDim] = {ivar1,ivar2} ; + THnSparse* hNum = ((AliCFGridSparse*)GetNum())->GetGrid()->Projection(nDim,dim); + THnSparse* hDen = ((AliCFGridSparse*)GetDen())->GetGrid()->Projection(nDim,dim); THnSparse* ratio = (THnSparse*)hNum->Clone(); ratio->Divide(hNum,hDen,1.,1.,"B"); - return ratio->Projection(ivar1,ivar2); + delete hNum; delete hDen; + return ratio->Projection(0,1); } //___________________________________________________________________ TH3D *AliCFEffGrid::Project(Int_t ivar1, Int_t ivar2, Int_t ivar3) const @@ -242,10 +249,24 @@ TH3D *AliCFEffGrid::Project(Int_t ivar1, Int_t ivar2, Int_t ivar3) const // Make a 3D projection along variable ivar1,ivar2,ivar3 // - THnSparse* hNum = ((AliCFGridSparse*)GetNum())->GetGrid(); - THnSparse* hDen = ((AliCFGridSparse*)GetDen())->GetGrid(); + const Int_t nDim = 3 ; + Int_t dim[nDim] = {ivar1,ivar2,ivar3} ; + THnSparse* hNum = ((AliCFGridSparse*)GetNum())->GetGrid()->Projection(nDim,dim); + THnSparse* hDen = ((AliCFGridSparse*)GetDen())->GetGrid()->Projection(nDim,dim); THnSparse* ratio = (THnSparse*)hNum->Clone(); ratio->Divide(hNum,hDen,1.,1.,"B"); - return ratio->Projection(ivar1,ivar2,ivar3); + delete hNum; delete hDen; + return ratio->Projection(0,1,2); } - +//___________________________________________________________________ +AliCFEffGrid* AliCFEffGrid::MakeSlice(Int_t nVars, Int_t* vars, Double_t* varMin, Double_t* varMax, Int_t numStep, Int_t denStep) const { + // + // Makes a slice along the "nVars" variables defined in the array "vars[nVars]" for all the container steps. + // The ranges of ALL the container variables must be defined in the array varMin[fNVar] and varMax[fNVar]. + // This function returns the effiency relative to this new 'sliced' container, between steps defined in numStep and denStep + // + AliCFContainer* cont = fContainer->MakeSlice(nVars,vars,varMin,varMax); + AliCFEffGrid * eff = new AliCFEffGrid(Form("%s_sliced",GetName()), Form("%s_sliced",GetTitle()), *cont); + eff->CalculateEfficiency(numStep,denStep); + return eff; +} diff --git a/CORRFW/AliCFEffGrid.h b/CORRFW/AliCFEffGrid.h index c477e64eb92..3349e3b4d14 100644 --- a/CORRFW/AliCFEffGrid.h +++ b/CORRFW/AliCFEffGrid.h @@ -33,7 +33,8 @@ class AliCFEffGrid : public AliCFGridSparse 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 AliCFEffGrid* Project(Int_t,Int_t*,Double_t*,Double_t*) const {return 0x0;} //not to be used. + virtual AliCFEffGrid* Project(Int_t,Int_t*,Double_t*,Double_t*) const {AliWarning("Function not to be used"); return 0x0;} //not to be used. + virtual AliCFEffGrid* MakeSlice(Int_t nVars,Int_t* vars, Double_t* varMin,Double_t* varMax, Int_t numStep, Int_t denStep) const; //Efficiency calculation virtual void CalculateEfficiency(Int_t istep1, Int_t istep2, Option_t *option ="B"); -- 2.39.3