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 aceddd0f19e175ecf575b338a3be1b887d492685..8c9bb5295e0e9d449dba737ce5ebb9fa8818cb79 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 bd11d495d2682ed10f9240069799c2547df61fa5..9ee34064fefba55f3d0048a98976ba14c7eb18aa 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 d877584524620b4a93fb8ae92db2243e189efd57..bc9f222d393f59d9fe0b355dcc05dc8c86b472ab 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 4bf5f8af330caac8a223a09973e93daab0041d16..89a83418d1d17a119877f1f7f86826d3f506eb1c 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 c41caa168a0fb7263e4250a16e27d84c6c1f812e..23c24a5edd6358929f212716d01114d07083ca6b 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 d3cc9abc9fc6c9f49a049f9850d5199cd2967093..45a40e4030d58b86bbcb80f1897245889373ede9 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;