added function AliCFContainer::MakeSlice reading user-defined steps.
authorrvernet <rvernet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 15 Mar 2009 16:15:30 +0000 (16:15 +0000)
committerrvernet <rvernet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 15 Mar 2009 16:15:30 +0000 (16:15 +0000)
CORRFW/AliCFContainer.cxx
CORRFW/AliCFContainer.h
CORRFW/AliCFGrid.h
CORRFW/AliCFGridSparse.cxx

index 11a2061..13a79c4 100644 (file)
@@ -264,17 +264,31 @@ TH3D *AliCFContainer::ShowSlice(Int_t ivar1, Int_t ivar2, Int_t ivar3, Double_t
 AliCFContainer* AliCFContainer::MakeSlice(Int_t nVars, Int_t* vars, Double_t* varMin, Double_t* varMax) const
 {
   //
-  // Makes a slice along the "nVars" variables defined in the array vars[nVars].
+  // 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]
+  // The function returns a new container of nVars variables.
+  //
+  Int_t* steps = new Int_t[fNStep];
+  for (Int_t iStep=0;iStep<fNStep;iStep++) steps[iStep]=iStep;
+  return MakeSlice(nVars,vars,varMin,varMax,fNStep,steps);
+}
+
+//____________________________________________________________________
+AliCFContainer* AliCFContainer::MakeSlice(Int_t nVars, Int_t* vars, Double_t* varMin, Double_t* varMax, Int_t nSteps, Int_t* steps) const
+{
+  //
+  // Makes a slice along the "nVars" variables defined in the array "vars[nVars]" for the given "nSteps" defined in "steps[nSteps]".
   // The ranges of ALL the container variables must be defined in the array varMin[fNVar] and varMax[fNVar]
   // The function returns a new container of nVars variables.
   //
 
   if (nVars < 1 || nVars > fNVar)   AliError("Bad number of dimensions required for the slice");
+  if (nSteps< 1 || nSteps> fNStep)  AliError("Bad number of steps required for the slice");
 
   //define new binning for new container
   Int_t* bins=new Int_t[nVars];
   for (Int_t iVar=0; iVar<nVars; iVar++) bins[iVar] = fNVarBins[vars[iVar]];
-  AliCFContainer* out = new AliCFContainer(fName,fTitle,fNStep,nVars,bins);
+  AliCFContainer* out = new AliCFContainer(fName,fTitle,nSteps,nVars,bins);
 
   //set the bin limits
   for (Int_t iVar=0; iVar<nVars; iVar++) {
@@ -284,9 +298,9 @@ AliCFContainer* AliCFContainer::MakeSlice(Int_t nVars, Int_t* vars, Double_t* va
     delete array;
   }
 
-  //set grid for each step
+  //set grid for the given steps
   AliInfo(Form("Making a slice in %d dimension(s)",nVars));
-  for (Int_t iStep=0; iStep<fNStep; iStep++) out->SetGrid(iStep,fGrid[iStep]->Project(nVars,vars,varMin,varMax));
+  for (Int_t iStep=0; iStep<nSteps; iStep++) out->SetGrid(iStep,fGrid[steps[iStep]]->Project(nVars,vars,varMin,varMax));
 
   delete bins;
   return out;
index deae317..c361414 100644 (file)
@@ -55,6 +55,7 @@ class AliCFContainer : public AliCFFrame
   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 AliCFContainer*  MakeSlice (Int_t nVars, Int_t* vars, Double_t* varMin, Double_t* varMax) const ;
+  virtual AliCFContainer*  MakeSlice (Int_t nVars, Int_t* vars, Double_t* varMin, Double_t* varMax, Int_t nStep, Int_t* steps) const ;
   virtual void  SetRangeUser(Int_t ivar, Double_t varMin, Double_t varMax, Int_t istep) ;
   virtual void  SetRangeUser(Double_t* varMin, Double_t* varMax, Int_t istep) ;
   virtual void  SetGrid(Int_t step, AliCFVGrid* grid) {fGrid[step]=grid;}
index a1869ef..bd447e7 100644 (file)
@@ -57,7 +57,7 @@ class AliCFGrid : public AliCFVGrid
   virtual TH3D* Slice( Int_t /*ivar1*/, Int_t /*ivar2*/, Int_t /*ivar3*/, Double_t */*varMin*/, Double_t */*varMax*/) const 
   {AliWarning("not implemented"); return 0x0;}
 
-  virtual void UseAxisRange(Bool_t b) const {AliWarning("Not implemented because this class is obsolete");}
+  virtual void UseAxisRange(Bool_t /*b*/) const {AliWarning("Not implemented because this class is obsolete");}
 
   //basic operations
 
index 7ef3c19..4a4179e 100755 (executable)
@@ -167,6 +167,10 @@ TH3D *AliCFGridSparse::Project(Int_t ivar1, Int_t ivar2, Int_t ivar3) const
 //___________________________________________________________________
 AliCFGridSparse* AliCFGridSparse::Project(Int_t nVars, Int_t* vars, Double_t* varMin, Double_t* varMax) const
 {
+  //
+  // projects the grid on the nVars dimensions defined in vars.
+  // axis ranges can be defined in arrays varMin, varMax
+  //
 
   // binning for new grid
   Int_t* bins = new Int_t[nVars];
@@ -179,9 +183,13 @@ AliCFGridSparse* AliCFGridSparse::Project(Int_t nVars, Int_t* vars, Double_t* va
 
   //set the range in the THnSparse to project
   THnSparse* clone = ((THnSparse*)fData->Clone());
-  for (Int_t iAxis=0; iAxis<fNVar; iAxis++) {
-    clone->GetAxis(iAxis)->SetRangeUser(varMin[iAxis],varMax[iAxis]);
+  if (varMin && varMax) {
+    for (Int_t iAxis=0; iAxis<fNVar; iAxis++) {
+      clone->GetAxis(iAxis)->SetRangeUser(varMin[iAxis],varMax[iAxis]);
+    }
   }
+  else AliInfo("Keeping same axis ranges");
+
   out->SetGrid(clone->Projection(nVars,vars));
   return out;
 }