-//____________________________________________________________________
-TH2D* AliCFGridSparse::Slice(Int_t iVar1, Int_t iVar2, const Double_t *varMin, const Double_t *varMax) const
-{
- //
- // return a slice (2D-projection) on variables iVar1 and iVar2 while axis ranges are defined with varMin,varMax
- // arrays varMin and varMax contain the min and max values of each variable.
- // therefore varMin and varMax must have their dimensions equal to GetNVar()
- //
-
- THnSparse* clone = (THnSparse*)fData->Clone();
- for (Int_t iAxis=0; iAxis<GetNVar(); iAxis++) {
- clone->GetAxis(iAxis)->SetRangeUser(varMin[iAxis],varMax[iAxis]);
+ TH1* projection = 0x0 ;
+ TString name,title;
+ GetProjectionName (name ,iVar1,iVar2,iVar3);
+ GetProjectionTitle(title,iVar1,iVar2,iVar3);
+
+ if (iVar3<0) {
+ if (iVar2<0) {
+ if (iVar1 >= GetNVar() || iVar1 < 0 ) {
+ AliError("Non-existent variable, return NULL");
+ return 0x0;
+ }
+ projection = (TH1D*)clone->Projection(iVar1);
+ projection->SetTitle(Form("%s_proj-%s",GetTitle(),GetVarTitle(iVar1)));
+ for (Int_t iBin=1; iBin<=projection->GetNbinsX(); iBin++) {
+ Int_t origBin = GetAxis(iVar1)->GetFirst()+iBin-1;
+ TString binLabel = GetAxis(iVar1)->GetBinLabel(origBin) ;
+ if (binLabel.CompareTo("") != 0) projection->GetXaxis()->SetBinLabel(iBin,binLabel);
+ }
+ }
+ else {
+ if (iVar1 >= GetNVar() || iVar1 < 0 ||
+ iVar2 >= GetNVar() || iVar2 < 0 ) {
+ AliError("Non-existent variable, return NULL");
+ return 0x0;
+ }
+ projection = (TH2D*)clone->Projection(iVar2,iVar1);
+ for (Int_t iBin=1; iBin<=projection->GetNbinsX(); iBin++) {
+ Int_t origBin = GetAxis(iVar1)->GetFirst()+iBin-1;
+ TString binLabel = GetAxis(iVar1)->GetBinLabel(origBin) ;
+ if (binLabel.CompareTo("") != 0) projection->GetXaxis()->SetBinLabel(iBin,binLabel);
+ }
+ for (Int_t iBin=1; iBin<=projection->GetNbinsY(); iBin++) {
+ Int_t origBin = GetAxis(iVar2)->GetFirst()+iBin-1;
+ TString binLabel = GetAxis(iVar2)->GetBinLabel(origBin) ;
+ if (binLabel.CompareTo("") != 0) projection->GetYaxis()->SetBinLabel(iBin,binLabel);
+ }
+ }
+ }
+ else {
+ if (iVar1 >= GetNVar() || iVar1 < 0 ||
+ iVar2 >= GetNVar() || iVar2 < 0 ||
+ iVar3 >= GetNVar() || iVar3 < 0 ) {
+ AliError("Non-existent variable, return NULL");
+ return 0x0;
+ }
+ projection = (TH3D*)clone->Projection(iVar1,iVar2,iVar3);
+ for (Int_t iBin=1; iBin<=projection->GetNbinsX(); iBin++) {
+ Int_t origBin = GetAxis(iVar1)->GetFirst()+iBin-1;
+ TString binLabel = GetAxis(iVar1)->GetBinLabel(origBin) ;
+ if (binLabel.CompareTo("") != 0) projection->GetXaxis()->SetBinLabel(iBin,binLabel);
+ }
+ for (Int_t iBin=1; iBin<=projection->GetNbinsY(); iBin++) {
+ Int_t origBin = GetAxis(iVar2)->GetFirst()+iBin-1;
+ TString binLabel = GetAxis(iVar2)->GetBinLabel(origBin) ;
+ if (binLabel.CompareTo("") != 0) projection->GetYaxis()->SetBinLabel(iBin,binLabel);
+ }
+ for (Int_t iBin=1; iBin<=projection->GetNbinsZ(); iBin++) {
+ Int_t origBin = GetAxis(iVar3)->GetFirst()+iBin-1;
+ TString binLabel = GetAxis(iVar3)->GetBinLabel(origBin) ;
+ if (binLabel.CompareTo("") != 0) projection->GetZaxis()->SetBinLabel(iBin,binLabel);
+ }