Implemented AliCFContainer::ShowSlice and AliCFGridSparse::Slice
authorrvernet <rvernet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 14 Oct 2008 16:59:40 +0000 (16:59 +0000)
committerrvernet <rvernet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 14 Oct 2008 16:59:40 +0000 (16:59 +0000)
CORRFW/AliCFContainer.cxx
CORRFW/AliCFContainer.h
CORRFW/AliCFGrid.h
CORRFW/AliCFGridSparse.cxx
CORRFW/AliCFGridSparse.h
CORRFW/AliCFVGrid.h

index aceddd0..8c9bb52 100644 (file)
@@ -28,7 +28,7 @@
 #include "AliCFGrid.h"
 #include "AliCFGridSparse.h"
 #include "AliCFContainer.h"
-
+#include "TAxis.h"
 //____________________________________________________________________
 ClassImp(AliCFContainer)
 
@@ -213,8 +213,44 @@ TH1D *AliCFContainer::ShowSlice(Int_t ivar, Double_t *varMin, Double_t* varMax,
     AliError("Non-existent selection step, return NULL");
     return 0x0;
   }
+  if (ivar >= fNVar || ivar < 0) {
+    AliError("Non-existent variable, return NULL");
+    return 0x0;
+  }
   return (TH1D*)fGrid[istep]->Slice(ivar,varMin,varMax);
 }
+//___________________________________________________________________
+TH2D *AliCFContainer::ShowSlice(Int_t ivar1, Int_t ivar2, Double_t *varMin, Double_t* varMax, Int_t istep) const
+{
+  //
+  // Make a slice along variables ivar1 and ivar2 at selection level istep in range [varMin,varMax]
+  //
+  if(istep >= fNStep || istep < 0){
+    AliError("Non-existent selection step, return NULL");
+    return 0x0;
+  }
+  if (ivar1 >= fNVar || ivar1 < 0 || ivar2 >= fNVar || ivar2 < 0) {
+    AliError("Non-existent variable, return NULL");
+    return 0x0;
+  }
+  return (TH2D*)fGrid[istep]->Slice(ivar1,ivar2,varMin,varMax);
+}
+//___________________________________________________________________
+TH3D *AliCFContainer::ShowSlice(Int_t ivar1, Int_t ivar2, Int_t ivar3, Double_t *varMin, Double_t* varMax, Int_t istep) const
+{
+  //
+  // Make a slice along variables ivar1, ivar2and ivar3 at selection level istep in range [varMin,varMax]
+  //
+  if(istep >= fNStep || istep < 0){
+    AliError("Non-existent selection step, return NULL");
+    return 0x0;
+  }
+  if (ivar1 >= fNVar || ivar1 < 0 || ivar2 >= fNVar || ivar2 < 0 || ivar3 >= fNVar || ivar3 < 0) {
+    AliError("Non-existent variable, return NULL");
+    return 0x0;
+  }
+  return (TH3D*)fGrid[istep]->Slice(ivar1,ivar2,ivar3,varMin,varMax);
+}
 //____________________________________________________________________
 Long64_t AliCFContainer::Merge(TCollection* list)
 {
@@ -340,3 +376,23 @@ Double_t AliCFContainer::GetIntegral( Int_t istep, Double_t *varMin, Double_t* v
   }
   return fGrid[istep]->GetIntegral(varMin,varMax);
 }
+//_____________________________________________________________________
+void AliCFContainer::SetRangeUser(Int_t ivar, Double_t varMin, Double_t varMax, Int_t istep) 
+{
+  //
+  // set axis range at step istep
+  //
+  if ( strcmp(fGrid[istep]->ClassName(),"AliCFGrid") ==0 ) {
+    AliWarning("Could not AliCFGrid::SetRangeUser(), function not implemented");
+    return;
+  }
+  if (istep >= fNStep || istep < 0){
+    AliError("Non-existent selection step");
+    return ;
+  }
+  if (ivar >= fNVar || ivar < 0){
+    AliError("Non-existent selection var");
+    return ;
+  }
+  ((AliCFGridSparse*)fGrid[istep])->GetGrid()->GetAxis(ivar)->SetRangeUser(varMin,varMax);
+}
index bd11d49..9ee3406 100644 (file)
@@ -51,6 +51,9 @@ class AliCFContainer : public AliCFFrame
   virtual TH2D* ShowProjection( Int_t ivar1, Int_t ivar2, Int_t istep) const;
   virtual TH3D* ShowProjection( Int_t ivar1, Int_t ivar2,Int_t ivar3, Int_t istep) const;
   virtual TH1D* ShowSlice( Int_t ivar, Double_t *varMin, Double_t *varMax, Int_t istep) const;
+  virtual TH2D* ShowSlice( Int_t ivar1, Int_t ivar2, Double_t *varMin, Double_t *varMax, Int_t istep) const;
+  virtual TH3D* ShowSlice( Int_t ivar1, Int_t ivar2, Int_t ivar3, Double_t *varMin, Double_t *varMax, Int_t istep) const;
+  virtual void  SetRangeUser(Int_t ivar, Double_t varMin, Double_t varMax, Int_t istep) ;
   virtual AliCFVGrid * GetGrid(Int_t istep) const {return (AliCFVGrid*)fGrid[istep];};
   
  private:
index d877584..bc9f222 100644 (file)
@@ -10,6 +10,7 @@
 //--------------------------------------------------------------------//
 
 #include "AliCFVGrid.h"
+#include "AliLog.h"
 
 class TH1D;
 class TH2D;
@@ -51,6 +52,10 @@ class AliCFGrid : public AliCFVGrid
   virtual TH2D* Project( Int_t ivar1, Int_t ivar2) const;
   virtual TH3D* Project( Int_t ivar1, Int_t ivar2,Int_t ivar3) 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 
+  {AliWarning("not implemented"); return 0x0;}
+  virtual TH3D* Slice( Int_t /*ivar1*/, Int_t /*ivar2*/, Int_t /*ivar3*/, Double_t */*varMin*/, Double_t */*varMax*/) const 
+  {AliWarning("not implemented"); return 0x0;}
 
   //basic operations
 
index 4bf5f8a..89a8341 100755 (executable)
@@ -632,3 +632,61 @@ void AliCFGridSparse::Copy(TObject& c) const
   if(fData)target.fData = fData;
 }
 
+//____________________________________________________________________
+TH1D* AliCFGridSparse::Slice(Int_t iVar, Double_t *varMin, Double_t *varMax) const
+{
+  //
+  // return a slice (1D-projection) on variable iVar 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 fNVar
+  //
+  
+  THnSparse* clone = (THnSparse*)fData->Clone();
+  for (Int_t iAxis=0; iAxis<fNVar; iAxis++) {
+    clone->GetAxis(iAxis)->SetRangeUser(varMin[iAxis],varMax[iAxis]);
+  }
+  return clone->Projection(iVar);
+}
+
+//____________________________________________________________________
+TH2D* AliCFGridSparse::Slice(Int_t iVar1, Int_t iVar2, Double_t *varMin, 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 fNVar
+  //
+  
+  THnSparse* clone = (THnSparse*)fData->Clone();
+  for (Int_t iAxis=0; iAxis<fNVar; iAxis++) {
+    clone->GetAxis(iAxis)->SetRangeUser(varMin[iAxis],varMax[iAxis]);
+  }
+  return clone->Projection(iVar1,iVar2);
+}
+
+//____________________________________________________________________
+TH3D* AliCFGridSparse::Slice(Int_t iVar1, Int_t iVar2, Int_t iVar3, Double_t *varMin, Double_t *varMax) const
+{
+  //
+  // return a slice (3D-projection) on variables iVar1, iVar2 and iVar3 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 fNVar
+  //
+
+  THnSparse* clone = (THnSparse*)fData->Clone();
+  for (Int_t iAxis=0; iAxis<fNVar; iAxis++) {
+    clone->GetAxis(iAxis)->SetRangeUser(varMin[iAxis],varMax[iAxis]);
+  }
+  return clone->Projection(iVar1,iVar2,iVar3);
+}
+
+//____________________________________________________________________
+void AliCFGridSparse::SetRangeUser(Double_t *varMin, Double_t *varMax) {
+  //
+  // set range of every axis. varMin and varMax must be of dimension fNVar
+  //
+  for (Int_t iAxis=0; iAxis<fNVar ; iAxis++) { // set new range for every axis
+    fData->GetAxis(iAxis)->SetRangeUser(varMin[iAxis],varMax[iAxis]);
+  }
+  AliWarning("THnSparse has been modified");
+}
index c41caa1..23c24a5 100755 (executable)
@@ -51,7 +51,10 @@ class AliCFGridSparse : public AliCFVGrid
   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 TH1D* Slice( Int_t, Double_t *, Double_t *) const {AliInfo("Not yet implemented!"); return 0x0;};
+  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(Double_t* varMin, Double_t* varMax) ;
 
 
   //basic operations
index d3cc9ab..45a40e4 100755 (executable)
@@ -51,7 +51,9 @@ class AliCFVGrid : public AliCFFrame
   virtual TH1D* Project( Int_t ivar) const = 0;
   virtual TH2D* Project( Int_t ivar1, Int_t ivar2) const = 0;
   virtual TH3D* Project( Int_t ivar1, Int_t ivar2,Int_t ivar3) const = 0;
-  virtual TH1D* Slice( Int_t ivar, Double_t *varMin, Double_t *varMax) const = 0;
+  virtual TH1D* Slice(Int_t ivar, Double_t *varMin, Double_t *varMax) const = 0;
+  virtual TH2D* Slice(Int_t ivar1, Int_t ivar2, Double_t *varMin, Double_t *varMax) const = 0;
+  virtual TH3D* Slice(Int_t ivar1, Int_t ivar2, Int_t ivar3, Double_t *varMin, Double_t *varMax) const = 0;
 
   //basic operations
   virtual void SumW2()=0;