ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
//--------------------------------------------------------------------//
//                                                                    //
// AliCFGridSparse Class                                              //
// Class to accumulate data on an N-dimensional grid, to be used      //
// as input to get corrections for Reconstruction & Trigger efficiency// 
// Based on root THnSparse                                            //
// -- Author : S.Arcelli                                              //
// Still to be done:                                                  //
// --Interpolate among bins in a range                                // 
//--------------------------------------------------------------------//
//
//
#include "AliCFGridSparse.h"
#include "THnSparse.h"
#include "AliLog.h"
#include "TMath.h"
#include "TROOT.h"
#include "TH1D.h"
#include "TH2D.h"
#include "TH3D.h"
#include "TAxis.h"
#include "AliCFUnfolding.h"

//____________________________________________________________________
ClassImp(AliCFGridSparse)

//____________________________________________________________________
AliCFGridSparse::AliCFGridSparse() : 
  AliCFFrame(),
  fSumW2(kFALSE),
  fData(0x0)
{
  // default constructor
}
//____________________________________________________________________
AliCFGridSparse::AliCFGridSparse(const Char_t* name, const Char_t* title) : 
  AliCFFrame(name,title),
  fSumW2(kFALSE),
  fData(0x0)
{
  // default constructor
}
//____________________________________________________________________
AliCFGridSparse::AliCFGridSparse(const Char_t* name, const Char_t* title, Int_t nVarIn, const Int_t * nBinIn) :  
  AliCFFrame(name,title),
  fSumW2(kFALSE),
  fData(0x0)
{
  //
  // main constructor
  //

  fData = new THnSparseF(name,title,nVarIn,nBinIn);
}

//____________________________________________________________________
AliCFGridSparse::~AliCFGridSparse()
{
  //
  // destructor
  //
  if (fData) delete fData;
}

//____________________________________________________________________
AliCFGridSparse::AliCFGridSparse(const AliCFGridSparse& c) :
  AliCFFrame(c),
  fSumW2(kFALSE),
  fData(0x0)
{
  //
  // copy constructor
  //
  ((AliCFGridSparse &)c).Copy(*this);
}

//____________________________________________________________________
AliCFGridSparse& AliCFGridSparse::operator=(const AliCFGridSparse &c)
{
  //
  // assigment operator
  //
  if (this != &c) c.Copy(*this);
  return *this;
} 

//____________________________________________________________________
void AliCFGridSparse::SetBinLimits(Int_t ivar, Double_t min, Double_t max)
{
  //
  // set a uniform binning for variable ivar
  //
  Int_t nBins = GetNBins(ivar);
  Double_t * array = new Double_t[nBins+1];
  for (Int_t iEdge=0; iEdge<=nBins; iEdge++) array[iEdge] = min + iEdge * (max-min)/nBins ;
  fData->SetBinEdges(ivar, array);
  delete [] array ;
} 

//____________________________________________________________________
void AliCFGridSparse::SetBinLimits(Int_t ivar, const Double_t *array)
{
  //
  // setting the arrays containing the bin limits 
  //
  fData->SetBinEdges(ivar, array);
} 

//____________________________________________________________________
void AliCFGridSparse::Fill(const Double_t *var, Double_t weight)
{
  //
  // Fill the grid,
  // given a set of values of the input variable, 
  // with weight (by default w=1)
  //
  fData->Fill(var,weight);
}

//___________________________________________________________________
AliCFGridSparse* AliCFGridSparse::MakeSlice(Int_t nVars, const Int_t* vars, const Double_t* varMin, const Double_t* varMax, Bool_t useBins) const
{
  //
  // projects the grid on the nVars dimensions defined in vars.
  // axis ranges can be defined in arrays varMin, varMax
  // If useBins=true, varMin and varMax are taken as bin numbers
  //

  // binning for new grid
  Int_t* bins = new Int_t[nVars];
  for (Int_t iVar=0; iVar<nVars; iVar++) {
    bins[iVar] = GetNBins(vars[iVar]);
  }
  
  // create new grid sparse
  AliCFGridSparse* out = new AliCFGridSparse(fName,fTitle,nVars,bins);

  //set the range in the THnSparse to project
  THnSparse* clone = ((THnSparse*)fData->Clone());
  if (varMin && varMax) {
    for (Int_t iAxis=0; iAxis<GetNVar(); iAxis++) {
      SetAxisRange(clone->GetAxis(iAxis),varMin[iAxis],varMax[iAxis],useBins);
    }
  }
  else AliInfo("Keeping same axis ranges");

  out->SetGrid(clone->Projection(nVars,vars));
  delete [] bins;
  delete clone;
  return out;
}


//____________________________________________________________________
Float_t AliCFGridSparse::GetBinCenter(Int_t ivar, Int_t ibin) const
{
  //
  // Returns the center of specified bin for variable axis ivar
  // 
  
  return (Float_t) fData->GetAxis(ivar)->GetBinCenter(ibin);
}

//____________________________________________________________________
Float_t AliCFGridSparse::GetBinSize(Int_t ivar, Int_t ibin) const
{
  //
  // Returns the size of specified bin for variable axis ivar
  // 
  
  return (Float_t) fData->GetAxis(ivar)->GetBinUpEdge(ibin) - fData->GetAxis(ivar)->GetBinLowEdge(ibin);
}

//____________________________________________________________________
Float_t AliCFGridSparse::GetEntries() const
{
  //
  // total entries (including overflows and underflows)
  //

  return fData->GetEntries();
}

//____________________________________________________________________
Float_t AliCFGridSparse::GetElement(Long_t index) const
{
  //
  // Returns content of grid element index 
  //
  
  return fData->GetBinContent(index);
}
//____________________________________________________________________
Float_t AliCFGridSparse::GetElement(const Int_t *bin) const
{
  //
  // Get the content in a bin corresponding to a set of bin indexes
  //
  return fData->GetBinContent(bin);

}  
//____________________________________________________________________
Float_t AliCFGridSparse::GetElement(const Double_t *var) const
{
  //
  // Get the content in a bin corresponding to a set of input variables
  //

  Long_t index = fData->GetBin(var,kFALSE);
  if (index<0) return 0.;
  return fData->GetBinContent(index);
} 

//____________________________________________________________________
Float_t AliCFGridSparse::GetElementError(Long_t index) const
{
  //
  // Returns the error on the content 
  //

  return fData->GetBinError(index);
}
//____________________________________________________________________
Float_t AliCFGridSparse::GetElementError(const Int_t *bin) const
{
 //
  // Get the error in a bin corresponding to a set of bin indexes
  //
  return fData->GetBinError(bin);

}  
//____________________________________________________________________
Float_t AliCFGridSparse::GetElementError(const Double_t *var) const
{
  //
  // Get the error in a bin corresponding to a set of input variables
  //

  Long_t index=fData->GetBin(var,kFALSE); //this is the THnSparse index (do not allocate new cells if content is empy)
  if (index<0) return 0.;
  return fData->GetBinError(index);
} 

//____________________________________________________________________
void AliCFGridSparse::SetElement(Long_t index, Float_t val)
{
  //
  // Sets grid element value
  //
  Int_t* bin = new Int_t[GetNVar()];
  fData->GetBinContent(index,bin); //affects the bin coordinates
  SetElement(bin,val);
  delete [] bin ;
}

//____________________________________________________________________
void AliCFGridSparse::SetElement(const Int_t *bin, Float_t val)
{
  //
  // Sets grid element of bin indeces bin to val
  //
  fData->SetBinContent(bin,val);
}
//____________________________________________________________________
void AliCFGridSparse::SetElement(const Double_t *var, Float_t val) 
{
  //
  // Set the content in a bin to value val corresponding to a set of input variables
  //
  Long_t index=fData->GetBin(var,kTRUE); //THnSparse index: allocate the cell
  Int_t *bin = new Int_t[GetNVar()];
  fData->GetBinContent(index,bin); //trick to access the array of bins
  SetElement(bin,val);
  delete [] bin;
}

//____________________________________________________________________
void AliCFGridSparse::SetElementError(Long_t index, Float_t val)
{
  //
  // Sets grid element iel error to val (linear indexing) in AliCFFrame
  //
  Int_t *bin = new Int_t[GetNVar()];
  fData->GetBinContent(index,bin);
  SetElementError(bin,val);
  delete [] bin;
}

//____________________________________________________________________
void AliCFGridSparse::SetElementError(const Int_t *bin, Float_t val)
{
  //
  // Sets grid element error of bin indeces bin to val
  //
  fData->SetBinError(bin,val);
}
//____________________________________________________________________
void AliCFGridSparse::SetElementError(const Double_t *var, Float_t val) 
{
  //
  // Set the error in a bin to value val corresponding to a set of input variables
  //
  Long_t index=fData->GetBin(var); //THnSparse index
  Int_t *bin = new Int_t[GetNVar()];
  fData->GetBinContent(index,bin); //trick to access the array of bins
  SetElementError(bin,val);
  delete [] bin;
}

//____________________________________________________________________
void AliCFGridSparse::SumW2()
{
  //
  //set calculation of the squared sum of the weighted entries
  //
  if(!fSumW2){
    fData->CalculateErrors(kTRUE); 
  }
  fSumW2=kTRUE;
}

//____________________________________________________________________
void AliCFGridSparse::Add(const AliCFGridSparse* aGrid, Double_t c)
{
  //
  //add aGrid to the current one
  //

  if (aGrid->GetNVar() != GetNVar()){
    AliError("Different number of variables, cannot add the grids");
    return;
  } 
  
  if (!fSumW2  && aGrid->GetSumW2()) SumW2();
  fData->Add(aGrid->GetGrid(),c);
}

//____________________________________________________________________
void AliCFGridSparse::Add(const AliCFGridSparse* aGrid1, const AliCFGridSparse* aGrid2, Double_t c1,Double_t c2)
{
  //
  //Add aGrid1 and aGrid2 and deposit the result into the current one
  //

  if (GetNVar() != aGrid1->GetNVar() || GetNVar() != aGrid2->GetNVar()) {
    AliInfo("Different number of variables, cannot add the grids");
    return;
  } 
  
  if (!fSumW2  && (aGrid1->GetSumW2() || aGrid2->GetSumW2())) SumW2();

  fData->Reset();
  fData->Add(aGrid1->GetGrid(),c1);
  fData->Add(aGrid2->GetGrid(),c2);
}

//____________________________________________________________________
void AliCFGridSparse::Multiply(const AliCFGridSparse* aGrid, Double_t c)
{
  //
  // Multiply aGrid to the current one
  //

  if (aGrid->GetNVar() != GetNVar()) {
    AliError("Different number of variables, cannot multiply the grids");
    return;
  } 
  
  if(!fSumW2  && aGrid->GetSumW2()) SumW2();
  THnSparse *h = aGrid->GetGrid();
  fData->Multiply(h);
  fData->Scale(c);
}

//____________________________________________________________________
void AliCFGridSparse::Multiply(const AliCFGridSparse* aGrid1, const AliCFGridSparse* aGrid2, Double_t c1,Double_t c2)
{
  //
  //Multiply aGrid1 and aGrid2 and deposit the result into the current one
  //

  if (GetNVar() != aGrid1->GetNVar() || GetNVar() != aGrid2->GetNVar()) {
    AliError("Different number of variables, cannot multiply the grids");
    return;
  }
  
  if(!fSumW2  && (aGrid1->GetSumW2() || aGrid2->GetSumW2())) SumW2();

  fData->Reset();
  THnSparse *h1 = aGrid1->GetGrid();
  THnSparse *h2 = aGrid2->GetGrid();
  h2->Multiply(h1);
  h2->Scale(c1*c2);
  fData->Add(h2);
}

//____________________________________________________________________
void AliCFGridSparse::Divide(const AliCFGridSparse* aGrid, Double_t c)
{
  //
  // Divide aGrid to the current one
  //

  if (aGrid->GetNVar() != GetNVar()) {
    AliError("Different number of variables, cannot divide the grids");
    return;
  } 
  
  if (!fSumW2  && aGrid->GetSumW2()) SumW2();

  THnSparse *h1 = aGrid->GetGrid();
  THnSparse *h2 = (THnSparse*)fData->Clone();
  fData->Divide(h2,h1);
  fData->Scale(c);
}

//____________________________________________________________________
void AliCFGridSparse::Divide(const AliCFGridSparse* aGrid1, const AliCFGridSparse* aGrid2, Double_t c1,Double_t c2, Option_t *option)
{
  //
  //Divide aGrid1 and aGrid2 and deposit the result into the current one
  //binomial errors are supported
  //

  if (GetNVar() != aGrid1->GetNVar() || GetNVar() != aGrid2->GetNVar()) {
    AliError("Different number of variables, cannot divide the grids");
    return;
  } 
  
  if (!fSumW2  && (aGrid1->GetSumW2() || aGrid2->GetSumW2())) SumW2();

  THnSparse *h1= aGrid1->GetGrid();
  THnSparse *h2= aGrid2->GetGrid();
  fData->Divide(h1,h2,c1,c2,option);
}


//____________________________________________________________________
void AliCFGridSparse::Rebin(const Int_t* group)
{
  //
  // rebin the grid according to Rebin() as in THnSparse
  // Please notice that the original number of bins on
  // a given axis has to be divisible by the rebin group.
  //

  for(Int_t i=0;i<GetNVar();i++){
    if (group[i]!=1) AliInfo(Form(" merging bins along dimension %i in groups of %i bins", i,group[i]));
  }

  THnSparse *rebinned =fData->Rebin(group);
  fData->Reset();
  fData = rebinned;
}
//____________________________________________________________________
void AliCFGridSparse::Scale(Long_t index, const Double_t *fact)
{
  //
  //scale content of a certain cell by (positive) fact (with error)
  //

  if (GetElement(index)==0 || fact[0]==0) return;

  Double_t in[2], out[2];
  in[0]=GetElement(index);
  in[1]=GetElementError(index);
  GetScaledValues(fact,in,out);
  SetElement(index,out[0]);
  if (fSumW2) SetElementError(index,out[1]);
}
//____________________________________________________________________
void AliCFGridSparse::Scale(const Int_t *bin, const Double_t *fact)
{
  //
  //scale content of a certain cell by (positive) fact (with error)
  //
  if(GetElement(bin)==0 || fact[0]==0)return;

  Double_t in[2], out[2];
  in[0]=GetElement(bin);
  in[1]=GetElementError(bin);
  GetScaledValues(fact,in,out);
  SetElement(bin,out[0]);
  if(fSumW2)SetElementError(bin,out[1]);
  
}
//____________________________________________________________________
void AliCFGridSparse::Scale(const Double_t *var, const Double_t *fact) 
{
  //
  //scale content of a certain cell by (positive) fact (with error)
  //
  if(GetElement(var)==0 || fact[0]==0)return;

  Double_t in[2], out[2];
  in[0]=GetElement(var);
  in[1]=GetElementError(var);
  GetScaledValues(fact,in,out);
  SetElement(var,out[0]);
  if(fSumW2)SetElementError(var,out[1]);
  
}
//____________________________________________________________________
void AliCFGridSparse::Scale(const Double_t* fact)
{
  //
  //scale contents of the whole grid by fact
  //

  for (Long_t iel=0; iel<GetNFilledBins(); iel++) {
    Scale(iel,fact);
  }
}
//____________________________________________________________________
Long_t AliCFGridSparse::GetEmptyBins() const {
  //
  // Get empty bins 
  //

  return (GetNBinsTotal() - GetNFilledBins()) ;
} 

//____________________________________________________________________
Int_t AliCFGridSparse::CheckStats(Double_t thr) const
{
  //
  // Count the cells below a certain threshold
  //
  Int_t ncellsLow=0;
  for (Int_t i=0; i<GetNBinsTotal(); i++) {
    if (GetElement(i)<thr) ncellsLow++;
  }
  return ncellsLow;
}

//_____________________________________________________________________
Double_t AliCFGridSparse::GetIntegral() const 
{
  //
  // Get full Integral
  //
  return fData->ComputeIntegral();  
} 

//____________________________________________________________________
Long64_t AliCFGridSparse::Merge(TCollection* list)
{
  //
  // Merge a list of AliCFGridSparse with this (needed for PROOF). 
  // Returns the number of merged objects (including this).
  //

  if (!list)
    return 0;
  
  if (list->IsEmpty())
    return 1;

  TIterator* iter = list->MakeIterator();
  TObject* obj;
  
  Int_t count = 0;
  while ((obj = iter->Next())) {
    AliCFGridSparse* entry = dynamic_cast<AliCFGridSparse*> (obj);
    if (entry == 0) 
      continue;
    this->Add(entry);
    count++;
  }

  return count+1;
}

//____________________________________________________________________
void AliCFGridSparse::GetScaledValues(const Double_t *fact, const Double_t *in, Double_t *out) const{
  //
  // scale input *in and its error by (positive) fact (with error)
  // and erite it to *out
  //
  out[0]=in[0]*fact[0];
  out[1]=TMath::Sqrt(in[1]*in[1]/in[0]/in[0]
		     +fact[1]*fact[1]/fact[0]/fact[0])*out[0];
    
}

//____________________________________________________________________
void AliCFGridSparse::Copy(TObject& c) const
{
  //
  // copy function
  //
  AliCFFrame::Copy(c);
  AliCFGridSparse& target = (AliCFGridSparse &) c;
  target.fSumW2 = fSumW2 ;
  if (fData) {
    target.fData = (THnSparse*)fData->Clone();
  }
}

//____________________________________________________________________
TH1* AliCFGridSparse::Slice(Int_t iVar1, Int_t iVar2, Int_t iVar3, const Double_t *varMin, const Double_t *varMax, Bool_t useBins) const
{
  //
  // return a slice on variables iVar1 (and optionnally 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 GetNVar()
  // If useBins=true, varMin and varMax are taken as bin numbers
  // if varmin or varmax point to null, all the range is taken, including over- and underflows

  THnSparse* clone = (THnSparse*)fData->Clone();
  if (varMin != 0x0 && varMax != 0x0) {
    for (Int_t iAxis=0; iAxis<GetNVar(); iAxis++) SetAxisRange(clone->GetAxis(iAxis),varMin[iAxis],varMax[iAxis],useBins);
  }

  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);
    }
  }
  
  projection->SetName (name .Data());
  projection->SetTitle(title.Data());

  delete clone;
  return projection ;
}

//____________________________________________________________________
void AliCFGridSparse::SetAxisRange(TAxis* axis, Double_t min, Double_t max, Bool_t useBins) const {
  //
  // sets axis range, and forces bit TAxis::kAxisRange
  //
  
  if (useBins) axis->SetRange    ((Int_t)min,(Int_t)max);
  else         axis->SetRangeUser(       min,       max);
  //axis->SetBit(TAxis::kAxisRange); // uncomment when ROOT TAxis is fixed
}

//____________________________________________________________________
void AliCFGridSparse::SetRangeUser(Int_t iVar, Double_t varMin, Double_t varMax, Bool_t useBins) const {
  //
  // set range of axis iVar. 
  //
  SetAxisRange(fData->GetAxis(iVar),varMin,varMax,useBins);
	//AliInfo(Form("AliCFGridSparse axis %d range has been modified",iVar));
	TAxis* currAxis = fData->GetAxis(iVar);
  TString outString = Form("%s new range: %.1f < %s < %.1f", GetName(), currAxis->GetBinLowEdge(currAxis->GetFirst()), currAxis->GetTitle(), currAxis->GetBinUpEdge(currAxis->GetLast()));
  TString binLabel = currAxis->GetBinLabel(currAxis->GetFirst());
  if ( ! binLabel.IsNull() ) {
    outString += " ( ";
    for ( Int_t ibin = currAxis->GetFirst(); ibin <= currAxis->GetLast(); ibin++ ) {
      outString += Form("%s ", currAxis->GetBinLabel(ibin));
    }
    outString += ")";
  }
  AliWarning(outString.Data());

}

//____________________________________________________________________
void AliCFGridSparse::SetRangeUser(const Double_t *varMin, const Double_t *varMax, Bool_t useBins) const {
  //
  // set range of every axis. varMin and varMax must be of dimension GetNVar()
  //
  for (Int_t iAxis=0; iAxis<GetNVar() ; iAxis++) { // set new range for every axis
    SetRangeUser(iAxis,varMin[iAxis],varMax[iAxis], useBins);
  }
  AliInfo("AliCFGridSparse axes ranges have been modified");
}

//____________________________________________________________________
Float_t AliCFGridSparse::GetOverFlows(Int_t ivar, Bool_t exclusive) const
{
  //
  // Returns overflows in variable ivar
  // Set 'exclusive' to true for an exclusive check on variable ivar
  //
  Int_t* bin = new Int_t[GetNVar()];
  memset(bin, 0, sizeof(Int_t) * GetNVar());
  Float_t ovfl=0.;
  for (Long64_t i = 0; i < fData->GetNbins(); i++) {
    Double_t v = fData->GetBinContent(i, bin);
    Bool_t add=kTRUE;
    if (exclusive) {
      for(Int_t j=0;j<GetNVar();j++){
	if(ivar==j)continue;
	if((bin[j]==0) || (bin[j]==GetNBins(j)+1))add=kFALSE;
      }
    }
    if(bin[ivar]==GetNBins(ivar)+1 && add) ovfl+=v;
  }

  delete[] bin;
  return ovfl;
}

//____________________________________________________________________
Float_t AliCFGridSparse::GetUnderFlows(Int_t ivar, Bool_t exclusive) const
{
  //
  // Returns exclusive overflows in variable ivar
  // Set 'exclusive' to true for an exclusive check on variable ivar
  //
  Int_t* bin = new Int_t[GetNVar()];
  memset(bin, 0, sizeof(Int_t) * GetNVar());
  Float_t unfl=0.;
  for (Long64_t i = 0; i < fData->GetNbins(); i++) {
    Double_t v = fData->GetBinContent(i, bin);
    Bool_t add=kTRUE;
    if (exclusive) {
      for(Int_t j=0;j<GetNVar();j++){
	if(ivar==j)continue;
	if((bin[j]==0) || (bin[j]==GetNBins(j)+1))add=kFALSE;
      }
    }
    if(bin[ivar]==0 && add) unfl+=v;
  }

  delete[] bin;
  return unfl;
}


//____________________________________________________________________
void AliCFGridSparse::Smooth() {
  //
  // smoothing function: TO USE WITH CARE
  //

  AliInfo("Your GridSparse is going to be smoothed");
  AliInfo(Form("N TOTAL  BINS : %li",GetNBinsTotal()));
  AliInfo(Form("N FILLED BINS : %li",GetNFilledBins()));
  AliCFUnfolding::SmoothUsingNeighbours(fData);
}
 AliCFGridSparse.cxx:1
 AliCFGridSparse.cxx:2
 AliCFGridSparse.cxx:3
 AliCFGridSparse.cxx:4
 AliCFGridSparse.cxx:5
 AliCFGridSparse.cxx:6
 AliCFGridSparse.cxx:7
 AliCFGridSparse.cxx:8
 AliCFGridSparse.cxx:9
 AliCFGridSparse.cxx:10
 AliCFGridSparse.cxx:11
 AliCFGridSparse.cxx:12
 AliCFGridSparse.cxx:13
 AliCFGridSparse.cxx:14
 AliCFGridSparse.cxx:15
 AliCFGridSparse.cxx:16
 AliCFGridSparse.cxx:17
 AliCFGridSparse.cxx:18
 AliCFGridSparse.cxx:19
 AliCFGridSparse.cxx:20
 AliCFGridSparse.cxx:21
 AliCFGridSparse.cxx:22
 AliCFGridSparse.cxx:23
 AliCFGridSparse.cxx:24
 AliCFGridSparse.cxx:25
 AliCFGridSparse.cxx:26
 AliCFGridSparse.cxx:27
 AliCFGridSparse.cxx:28
 AliCFGridSparse.cxx:29
 AliCFGridSparse.cxx:30
 AliCFGridSparse.cxx:31
 AliCFGridSparse.cxx:32
 AliCFGridSparse.cxx:33
 AliCFGridSparse.cxx:34
 AliCFGridSparse.cxx:35
 AliCFGridSparse.cxx:36
 AliCFGridSparse.cxx:37
 AliCFGridSparse.cxx:38
 AliCFGridSparse.cxx:39
 AliCFGridSparse.cxx:40
 AliCFGridSparse.cxx:41
 AliCFGridSparse.cxx:42
 AliCFGridSparse.cxx:43
 AliCFGridSparse.cxx:44
 AliCFGridSparse.cxx:45
 AliCFGridSparse.cxx:46
 AliCFGridSparse.cxx:47
 AliCFGridSparse.cxx:48
 AliCFGridSparse.cxx:49
 AliCFGridSparse.cxx:50
 AliCFGridSparse.cxx:51
 AliCFGridSparse.cxx:52
 AliCFGridSparse.cxx:53
 AliCFGridSparse.cxx:54
 AliCFGridSparse.cxx:55
 AliCFGridSparse.cxx:56
 AliCFGridSparse.cxx:57
 AliCFGridSparse.cxx:58
 AliCFGridSparse.cxx:59
 AliCFGridSparse.cxx:60
 AliCFGridSparse.cxx:61
 AliCFGridSparse.cxx:62
 AliCFGridSparse.cxx:63
 AliCFGridSparse.cxx:64
 AliCFGridSparse.cxx:65
 AliCFGridSparse.cxx:66
 AliCFGridSparse.cxx:67
 AliCFGridSparse.cxx:68
 AliCFGridSparse.cxx:69
 AliCFGridSparse.cxx:70
 AliCFGridSparse.cxx:71
 AliCFGridSparse.cxx:72
 AliCFGridSparse.cxx:73
 AliCFGridSparse.cxx:74
 AliCFGridSparse.cxx:75
 AliCFGridSparse.cxx:76
 AliCFGridSparse.cxx:77
 AliCFGridSparse.cxx:78
 AliCFGridSparse.cxx:79
 AliCFGridSparse.cxx:80
 AliCFGridSparse.cxx:81
 AliCFGridSparse.cxx:82
 AliCFGridSparse.cxx:83
 AliCFGridSparse.cxx:84
 AliCFGridSparse.cxx:85
 AliCFGridSparse.cxx:86
 AliCFGridSparse.cxx:87
 AliCFGridSparse.cxx:88
 AliCFGridSparse.cxx:89
 AliCFGridSparse.cxx:90
 AliCFGridSparse.cxx:91
 AliCFGridSparse.cxx:92
 AliCFGridSparse.cxx:93
 AliCFGridSparse.cxx:94
 AliCFGridSparse.cxx:95
 AliCFGridSparse.cxx:96
 AliCFGridSparse.cxx:97
 AliCFGridSparse.cxx:98
 AliCFGridSparse.cxx:99
 AliCFGridSparse.cxx:100
 AliCFGridSparse.cxx:101
 AliCFGridSparse.cxx:102
 AliCFGridSparse.cxx:103
 AliCFGridSparse.cxx:104
 AliCFGridSparse.cxx:105
 AliCFGridSparse.cxx:106
 AliCFGridSparse.cxx:107
 AliCFGridSparse.cxx:108
 AliCFGridSparse.cxx:109
 AliCFGridSparse.cxx:110
 AliCFGridSparse.cxx:111
 AliCFGridSparse.cxx:112
 AliCFGridSparse.cxx:113
 AliCFGridSparse.cxx:114
 AliCFGridSparse.cxx:115
 AliCFGridSparse.cxx:116
 AliCFGridSparse.cxx:117
 AliCFGridSparse.cxx:118
 AliCFGridSparse.cxx:119
 AliCFGridSparse.cxx:120
 AliCFGridSparse.cxx:121
 AliCFGridSparse.cxx:122
 AliCFGridSparse.cxx:123
 AliCFGridSparse.cxx:124
 AliCFGridSparse.cxx:125
 AliCFGridSparse.cxx:126
 AliCFGridSparse.cxx:127
 AliCFGridSparse.cxx:128
 AliCFGridSparse.cxx:129
 AliCFGridSparse.cxx:130
 AliCFGridSparse.cxx:131
 AliCFGridSparse.cxx:132
 AliCFGridSparse.cxx:133
 AliCFGridSparse.cxx:134
 AliCFGridSparse.cxx:135
 AliCFGridSparse.cxx:136
 AliCFGridSparse.cxx:137
 AliCFGridSparse.cxx:138
 AliCFGridSparse.cxx:139
 AliCFGridSparse.cxx:140
 AliCFGridSparse.cxx:141
 AliCFGridSparse.cxx:142
 AliCFGridSparse.cxx:143
 AliCFGridSparse.cxx:144
 AliCFGridSparse.cxx:145
 AliCFGridSparse.cxx:146
 AliCFGridSparse.cxx:147
 AliCFGridSparse.cxx:148
 AliCFGridSparse.cxx:149
 AliCFGridSparse.cxx:150
 AliCFGridSparse.cxx:151
 AliCFGridSparse.cxx:152
 AliCFGridSparse.cxx:153
 AliCFGridSparse.cxx:154
 AliCFGridSparse.cxx:155
 AliCFGridSparse.cxx:156
 AliCFGridSparse.cxx:157
 AliCFGridSparse.cxx:158
 AliCFGridSparse.cxx:159
 AliCFGridSparse.cxx:160
 AliCFGridSparse.cxx:161
 AliCFGridSparse.cxx:162
 AliCFGridSparse.cxx:163
 AliCFGridSparse.cxx:164
 AliCFGridSparse.cxx:165
 AliCFGridSparse.cxx:166
 AliCFGridSparse.cxx:167
 AliCFGridSparse.cxx:168
 AliCFGridSparse.cxx:169
 AliCFGridSparse.cxx:170
 AliCFGridSparse.cxx:171
 AliCFGridSparse.cxx:172
 AliCFGridSparse.cxx:173
 AliCFGridSparse.cxx:174
 AliCFGridSparse.cxx:175
 AliCFGridSparse.cxx:176
 AliCFGridSparse.cxx:177
 AliCFGridSparse.cxx:178
 AliCFGridSparse.cxx:179
 AliCFGridSparse.cxx:180
 AliCFGridSparse.cxx:181
 AliCFGridSparse.cxx:182
 AliCFGridSparse.cxx:183
 AliCFGridSparse.cxx:184
 AliCFGridSparse.cxx:185
 AliCFGridSparse.cxx:186
 AliCFGridSparse.cxx:187
 AliCFGridSparse.cxx:188
 AliCFGridSparse.cxx:189
 AliCFGridSparse.cxx:190
 AliCFGridSparse.cxx:191
 AliCFGridSparse.cxx:192
 AliCFGridSparse.cxx:193
 AliCFGridSparse.cxx:194
 AliCFGridSparse.cxx:195
 AliCFGridSparse.cxx:196
 AliCFGridSparse.cxx:197
 AliCFGridSparse.cxx:198
 AliCFGridSparse.cxx:199
 AliCFGridSparse.cxx:200
 AliCFGridSparse.cxx:201
 AliCFGridSparse.cxx:202
 AliCFGridSparse.cxx:203
 AliCFGridSparse.cxx:204
 AliCFGridSparse.cxx:205
 AliCFGridSparse.cxx:206
 AliCFGridSparse.cxx:207
 AliCFGridSparse.cxx:208
 AliCFGridSparse.cxx:209
 AliCFGridSparse.cxx:210
 AliCFGridSparse.cxx:211
 AliCFGridSparse.cxx:212
 AliCFGridSparse.cxx:213
 AliCFGridSparse.cxx:214
 AliCFGridSparse.cxx:215
 AliCFGridSparse.cxx:216
 AliCFGridSparse.cxx:217
 AliCFGridSparse.cxx:218
 AliCFGridSparse.cxx:219
 AliCFGridSparse.cxx:220
 AliCFGridSparse.cxx:221
 AliCFGridSparse.cxx:222
 AliCFGridSparse.cxx:223
 AliCFGridSparse.cxx:224
 AliCFGridSparse.cxx:225
 AliCFGridSparse.cxx:226
 AliCFGridSparse.cxx:227
 AliCFGridSparse.cxx:228
 AliCFGridSparse.cxx:229
 AliCFGridSparse.cxx:230
 AliCFGridSparse.cxx:231
 AliCFGridSparse.cxx:232
 AliCFGridSparse.cxx:233
 AliCFGridSparse.cxx:234
 AliCFGridSparse.cxx:235
 AliCFGridSparse.cxx:236
 AliCFGridSparse.cxx:237
 AliCFGridSparse.cxx:238
 AliCFGridSparse.cxx:239
 AliCFGridSparse.cxx:240
 AliCFGridSparse.cxx:241
 AliCFGridSparse.cxx:242
 AliCFGridSparse.cxx:243
 AliCFGridSparse.cxx:244
 AliCFGridSparse.cxx:245
 AliCFGridSparse.cxx:246
 AliCFGridSparse.cxx:247
 AliCFGridSparse.cxx:248
 AliCFGridSparse.cxx:249
 AliCFGridSparse.cxx:250
 AliCFGridSparse.cxx:251
 AliCFGridSparse.cxx:252
 AliCFGridSparse.cxx:253
 AliCFGridSparse.cxx:254
 AliCFGridSparse.cxx:255
 AliCFGridSparse.cxx:256
 AliCFGridSparse.cxx:257
 AliCFGridSparse.cxx:258
 AliCFGridSparse.cxx:259
 AliCFGridSparse.cxx:260
 AliCFGridSparse.cxx:261
 AliCFGridSparse.cxx:262
 AliCFGridSparse.cxx:263
 AliCFGridSparse.cxx:264
 AliCFGridSparse.cxx:265
 AliCFGridSparse.cxx:266
 AliCFGridSparse.cxx:267
 AliCFGridSparse.cxx:268
 AliCFGridSparse.cxx:269
 AliCFGridSparse.cxx:270
 AliCFGridSparse.cxx:271
 AliCFGridSparse.cxx:272
 AliCFGridSparse.cxx:273
 AliCFGridSparse.cxx:274
 AliCFGridSparse.cxx:275
 AliCFGridSparse.cxx:276
 AliCFGridSparse.cxx:277
 AliCFGridSparse.cxx:278
 AliCFGridSparse.cxx:279
 AliCFGridSparse.cxx:280
 AliCFGridSparse.cxx:281
 AliCFGridSparse.cxx:282
 AliCFGridSparse.cxx:283
 AliCFGridSparse.cxx:284
 AliCFGridSparse.cxx:285
 AliCFGridSparse.cxx:286
 AliCFGridSparse.cxx:287
 AliCFGridSparse.cxx:288
 AliCFGridSparse.cxx:289
 AliCFGridSparse.cxx:290
 AliCFGridSparse.cxx:291
 AliCFGridSparse.cxx:292
 AliCFGridSparse.cxx:293
 AliCFGridSparse.cxx:294
 AliCFGridSparse.cxx:295
 AliCFGridSparse.cxx:296
 AliCFGridSparse.cxx:297
 AliCFGridSparse.cxx:298
 AliCFGridSparse.cxx:299
 AliCFGridSparse.cxx:300
 AliCFGridSparse.cxx:301
 AliCFGridSparse.cxx:302
 AliCFGridSparse.cxx:303
 AliCFGridSparse.cxx:304
 AliCFGridSparse.cxx:305
 AliCFGridSparse.cxx:306
 AliCFGridSparse.cxx:307
 AliCFGridSparse.cxx:308
 AliCFGridSparse.cxx:309
 AliCFGridSparse.cxx:310
 AliCFGridSparse.cxx:311
 AliCFGridSparse.cxx:312
 AliCFGridSparse.cxx:313
 AliCFGridSparse.cxx:314
 AliCFGridSparse.cxx:315
 AliCFGridSparse.cxx:316
 AliCFGridSparse.cxx:317
 AliCFGridSparse.cxx:318
 AliCFGridSparse.cxx:319
 AliCFGridSparse.cxx:320
 AliCFGridSparse.cxx:321
 AliCFGridSparse.cxx:322
 AliCFGridSparse.cxx:323
 AliCFGridSparse.cxx:324
 AliCFGridSparse.cxx:325
 AliCFGridSparse.cxx:326
 AliCFGridSparse.cxx:327
 AliCFGridSparse.cxx:328
 AliCFGridSparse.cxx:329
 AliCFGridSparse.cxx:330
 AliCFGridSparse.cxx:331
 AliCFGridSparse.cxx:332
 AliCFGridSparse.cxx:333
 AliCFGridSparse.cxx:334
 AliCFGridSparse.cxx:335
 AliCFGridSparse.cxx:336
 AliCFGridSparse.cxx:337
 AliCFGridSparse.cxx:338
 AliCFGridSparse.cxx:339
 AliCFGridSparse.cxx:340
 AliCFGridSparse.cxx:341
 AliCFGridSparse.cxx:342
 AliCFGridSparse.cxx:343
 AliCFGridSparse.cxx:344
 AliCFGridSparse.cxx:345
 AliCFGridSparse.cxx:346
 AliCFGridSparse.cxx:347
 AliCFGridSparse.cxx:348
 AliCFGridSparse.cxx:349
 AliCFGridSparse.cxx:350
 AliCFGridSparse.cxx:351
 AliCFGridSparse.cxx:352
 AliCFGridSparse.cxx:353
 AliCFGridSparse.cxx:354
 AliCFGridSparse.cxx:355
 AliCFGridSparse.cxx:356
 AliCFGridSparse.cxx:357
 AliCFGridSparse.cxx:358
 AliCFGridSparse.cxx:359
 AliCFGridSparse.cxx:360
 AliCFGridSparse.cxx:361
 AliCFGridSparse.cxx:362
 AliCFGridSparse.cxx:363
 AliCFGridSparse.cxx:364
 AliCFGridSparse.cxx:365
 AliCFGridSparse.cxx:366
 AliCFGridSparse.cxx:367
 AliCFGridSparse.cxx:368
 AliCFGridSparse.cxx:369
 AliCFGridSparse.cxx:370
 AliCFGridSparse.cxx:371
 AliCFGridSparse.cxx:372
 AliCFGridSparse.cxx:373
 AliCFGridSparse.cxx:374
 AliCFGridSparse.cxx:375
 AliCFGridSparse.cxx:376
 AliCFGridSparse.cxx:377
 AliCFGridSparse.cxx:378
 AliCFGridSparse.cxx:379
 AliCFGridSparse.cxx:380
 AliCFGridSparse.cxx:381
 AliCFGridSparse.cxx:382
 AliCFGridSparse.cxx:383
 AliCFGridSparse.cxx:384
 AliCFGridSparse.cxx:385
 AliCFGridSparse.cxx:386
 AliCFGridSparse.cxx:387
 AliCFGridSparse.cxx:388
 AliCFGridSparse.cxx:389
 AliCFGridSparse.cxx:390
 AliCFGridSparse.cxx:391
 AliCFGridSparse.cxx:392
 AliCFGridSparse.cxx:393
 AliCFGridSparse.cxx:394
 AliCFGridSparse.cxx:395
 AliCFGridSparse.cxx:396
 AliCFGridSparse.cxx:397
 AliCFGridSparse.cxx:398
 AliCFGridSparse.cxx:399
 AliCFGridSparse.cxx:400
 AliCFGridSparse.cxx:401
 AliCFGridSparse.cxx:402
 AliCFGridSparse.cxx:403
 AliCFGridSparse.cxx:404
 AliCFGridSparse.cxx:405
 AliCFGridSparse.cxx:406
 AliCFGridSparse.cxx:407
 AliCFGridSparse.cxx:408
 AliCFGridSparse.cxx:409
 AliCFGridSparse.cxx:410
 AliCFGridSparse.cxx:411
 AliCFGridSparse.cxx:412
 AliCFGridSparse.cxx:413
 AliCFGridSparse.cxx:414
 AliCFGridSparse.cxx:415
 AliCFGridSparse.cxx:416
 AliCFGridSparse.cxx:417
 AliCFGridSparse.cxx:418
 AliCFGridSparse.cxx:419
 AliCFGridSparse.cxx:420
 AliCFGridSparse.cxx:421
 AliCFGridSparse.cxx:422
 AliCFGridSparse.cxx:423
 AliCFGridSparse.cxx:424
 AliCFGridSparse.cxx:425
 AliCFGridSparse.cxx:426
 AliCFGridSparse.cxx:427
 AliCFGridSparse.cxx:428
 AliCFGridSparse.cxx:429
 AliCFGridSparse.cxx:430
 AliCFGridSparse.cxx:431
 AliCFGridSparse.cxx:432
 AliCFGridSparse.cxx:433
 AliCFGridSparse.cxx:434
 AliCFGridSparse.cxx:435
 AliCFGridSparse.cxx:436
 AliCFGridSparse.cxx:437
 AliCFGridSparse.cxx:438
 AliCFGridSparse.cxx:439
 AliCFGridSparse.cxx:440
 AliCFGridSparse.cxx:441
 AliCFGridSparse.cxx:442
 AliCFGridSparse.cxx:443
 AliCFGridSparse.cxx:444
 AliCFGridSparse.cxx:445
 AliCFGridSparse.cxx:446
 AliCFGridSparse.cxx:447
 AliCFGridSparse.cxx:448
 AliCFGridSparse.cxx:449
 AliCFGridSparse.cxx:450
 AliCFGridSparse.cxx:451
 AliCFGridSparse.cxx:452
 AliCFGridSparse.cxx:453
 AliCFGridSparse.cxx:454
 AliCFGridSparse.cxx:455
 AliCFGridSparse.cxx:456
 AliCFGridSparse.cxx:457
 AliCFGridSparse.cxx:458
 AliCFGridSparse.cxx:459
 AliCFGridSparse.cxx:460
 AliCFGridSparse.cxx:461
 AliCFGridSparse.cxx:462
 AliCFGridSparse.cxx:463
 AliCFGridSparse.cxx:464
 AliCFGridSparse.cxx:465
 AliCFGridSparse.cxx:466
 AliCFGridSparse.cxx:467
 AliCFGridSparse.cxx:468
 AliCFGridSparse.cxx:469
 AliCFGridSparse.cxx:470
 AliCFGridSparse.cxx:471
 AliCFGridSparse.cxx:472
 AliCFGridSparse.cxx:473
 AliCFGridSparse.cxx:474
 AliCFGridSparse.cxx:475
 AliCFGridSparse.cxx:476
 AliCFGridSparse.cxx:477
 AliCFGridSparse.cxx:478
 AliCFGridSparse.cxx:479
 AliCFGridSparse.cxx:480
 AliCFGridSparse.cxx:481
 AliCFGridSparse.cxx:482
 AliCFGridSparse.cxx:483
 AliCFGridSparse.cxx:484
 AliCFGridSparse.cxx:485
 AliCFGridSparse.cxx:486
 AliCFGridSparse.cxx:487
 AliCFGridSparse.cxx:488
 AliCFGridSparse.cxx:489
 AliCFGridSparse.cxx:490
 AliCFGridSparse.cxx:491
 AliCFGridSparse.cxx:492
 AliCFGridSparse.cxx:493
 AliCFGridSparse.cxx:494
 AliCFGridSparse.cxx:495
 AliCFGridSparse.cxx:496
 AliCFGridSparse.cxx:497
 AliCFGridSparse.cxx:498
 AliCFGridSparse.cxx:499
 AliCFGridSparse.cxx:500
 AliCFGridSparse.cxx:501
 AliCFGridSparse.cxx:502
 AliCFGridSparse.cxx:503
 AliCFGridSparse.cxx:504
 AliCFGridSparse.cxx:505
 AliCFGridSparse.cxx:506
 AliCFGridSparse.cxx:507
 AliCFGridSparse.cxx:508
 AliCFGridSparse.cxx:509
 AliCFGridSparse.cxx:510
 AliCFGridSparse.cxx:511
 AliCFGridSparse.cxx:512
 AliCFGridSparse.cxx:513
 AliCFGridSparse.cxx:514
 AliCFGridSparse.cxx:515
 AliCFGridSparse.cxx:516
 AliCFGridSparse.cxx:517
 AliCFGridSparse.cxx:518
 AliCFGridSparse.cxx:519
 AliCFGridSparse.cxx:520
 AliCFGridSparse.cxx:521
 AliCFGridSparse.cxx:522
 AliCFGridSparse.cxx:523
 AliCFGridSparse.cxx:524
 AliCFGridSparse.cxx:525
 AliCFGridSparse.cxx:526
 AliCFGridSparse.cxx:527
 AliCFGridSparse.cxx:528
 AliCFGridSparse.cxx:529
 AliCFGridSparse.cxx:530
 AliCFGridSparse.cxx:531
 AliCFGridSparse.cxx:532
 AliCFGridSparse.cxx:533
 AliCFGridSparse.cxx:534
 AliCFGridSparse.cxx:535
 AliCFGridSparse.cxx:536
 AliCFGridSparse.cxx:537
 AliCFGridSparse.cxx:538
 AliCFGridSparse.cxx:539
 AliCFGridSparse.cxx:540
 AliCFGridSparse.cxx:541
 AliCFGridSparse.cxx:542
 AliCFGridSparse.cxx:543
 AliCFGridSparse.cxx:544
 AliCFGridSparse.cxx:545
 AliCFGridSparse.cxx:546
 AliCFGridSparse.cxx:547
 AliCFGridSparse.cxx:548
 AliCFGridSparse.cxx:549
 AliCFGridSparse.cxx:550
 AliCFGridSparse.cxx:551
 AliCFGridSparse.cxx:552
 AliCFGridSparse.cxx:553
 AliCFGridSparse.cxx:554
 AliCFGridSparse.cxx:555
 AliCFGridSparse.cxx:556
 AliCFGridSparse.cxx:557
 AliCFGridSparse.cxx:558
 AliCFGridSparse.cxx:559
 AliCFGridSparse.cxx:560
 AliCFGridSparse.cxx:561
 AliCFGridSparse.cxx:562
 AliCFGridSparse.cxx:563
 AliCFGridSparse.cxx:564
 AliCFGridSparse.cxx:565
 AliCFGridSparse.cxx:566
 AliCFGridSparse.cxx:567
 AliCFGridSparse.cxx:568
 AliCFGridSparse.cxx:569
 AliCFGridSparse.cxx:570
 AliCFGridSparse.cxx:571
 AliCFGridSparse.cxx:572
 AliCFGridSparse.cxx:573
 AliCFGridSparse.cxx:574
 AliCFGridSparse.cxx:575
 AliCFGridSparse.cxx:576
 AliCFGridSparse.cxx:577
 AliCFGridSparse.cxx:578
 AliCFGridSparse.cxx:579
 AliCFGridSparse.cxx:580
 AliCFGridSparse.cxx:581
 AliCFGridSparse.cxx:582
 AliCFGridSparse.cxx:583
 AliCFGridSparse.cxx:584
 AliCFGridSparse.cxx:585
 AliCFGridSparse.cxx:586
 AliCFGridSparse.cxx:587
 AliCFGridSparse.cxx:588
 AliCFGridSparse.cxx:589
 AliCFGridSparse.cxx:590
 AliCFGridSparse.cxx:591
 AliCFGridSparse.cxx:592
 AliCFGridSparse.cxx:593
 AliCFGridSparse.cxx:594
 AliCFGridSparse.cxx:595
 AliCFGridSparse.cxx:596
 AliCFGridSparse.cxx:597
 AliCFGridSparse.cxx:598
 AliCFGridSparse.cxx:599
 AliCFGridSparse.cxx:600
 AliCFGridSparse.cxx:601
 AliCFGridSparse.cxx:602
 AliCFGridSparse.cxx:603
 AliCFGridSparse.cxx:604
 AliCFGridSparse.cxx:605
 AliCFGridSparse.cxx:606
 AliCFGridSparse.cxx:607
 AliCFGridSparse.cxx:608
 AliCFGridSparse.cxx:609
 AliCFGridSparse.cxx:610
 AliCFGridSparse.cxx:611
 AliCFGridSparse.cxx:612
 AliCFGridSparse.cxx:613
 AliCFGridSparse.cxx:614
 AliCFGridSparse.cxx:615
 AliCFGridSparse.cxx:616
 AliCFGridSparse.cxx:617
 AliCFGridSparse.cxx:618
 AliCFGridSparse.cxx:619
 AliCFGridSparse.cxx:620
 AliCFGridSparse.cxx:621
 AliCFGridSparse.cxx:622
 AliCFGridSparse.cxx:623
 AliCFGridSparse.cxx:624
 AliCFGridSparse.cxx:625
 AliCFGridSparse.cxx:626
 AliCFGridSparse.cxx:627
 AliCFGridSparse.cxx:628
 AliCFGridSparse.cxx:629
 AliCFGridSparse.cxx:630
 AliCFGridSparse.cxx:631
 AliCFGridSparse.cxx:632
 AliCFGridSparse.cxx:633
 AliCFGridSparse.cxx:634
 AliCFGridSparse.cxx:635
 AliCFGridSparse.cxx:636
 AliCFGridSparse.cxx:637
 AliCFGridSparse.cxx:638
 AliCFGridSparse.cxx:639
 AliCFGridSparse.cxx:640
 AliCFGridSparse.cxx:641
 AliCFGridSparse.cxx:642
 AliCFGridSparse.cxx:643
 AliCFGridSparse.cxx:644
 AliCFGridSparse.cxx:645
 AliCFGridSparse.cxx:646
 AliCFGridSparse.cxx:647
 AliCFGridSparse.cxx:648
 AliCFGridSparse.cxx:649
 AliCFGridSparse.cxx:650
 AliCFGridSparse.cxx:651
 AliCFGridSparse.cxx:652
 AliCFGridSparse.cxx:653
 AliCFGridSparse.cxx:654
 AliCFGridSparse.cxx:655
 AliCFGridSparse.cxx:656
 AliCFGridSparse.cxx:657
 AliCFGridSparse.cxx:658
 AliCFGridSparse.cxx:659
 AliCFGridSparse.cxx:660
 AliCFGridSparse.cxx:661
 AliCFGridSparse.cxx:662
 AliCFGridSparse.cxx:663
 AliCFGridSparse.cxx:664
 AliCFGridSparse.cxx:665
 AliCFGridSparse.cxx:666
 AliCFGridSparse.cxx:667
 AliCFGridSparse.cxx:668
 AliCFGridSparse.cxx:669
 AliCFGridSparse.cxx:670
 AliCFGridSparse.cxx:671
 AliCFGridSparse.cxx:672
 AliCFGridSparse.cxx:673
 AliCFGridSparse.cxx:674
 AliCFGridSparse.cxx:675
 AliCFGridSparse.cxx:676
 AliCFGridSparse.cxx:677
 AliCFGridSparse.cxx:678
 AliCFGridSparse.cxx:679
 AliCFGridSparse.cxx:680
 AliCFGridSparse.cxx:681
 AliCFGridSparse.cxx:682
 AliCFGridSparse.cxx:683
 AliCFGridSparse.cxx:684
 AliCFGridSparse.cxx:685
 AliCFGridSparse.cxx:686
 AliCFGridSparse.cxx:687
 AliCFGridSparse.cxx:688
 AliCFGridSparse.cxx:689
 AliCFGridSparse.cxx:690
 AliCFGridSparse.cxx:691
 AliCFGridSparse.cxx:692
 AliCFGridSparse.cxx:693
 AliCFGridSparse.cxx:694
 AliCFGridSparse.cxx:695
 AliCFGridSparse.cxx:696
 AliCFGridSparse.cxx:697
 AliCFGridSparse.cxx:698
 AliCFGridSparse.cxx:699
 AliCFGridSparse.cxx:700
 AliCFGridSparse.cxx:701
 AliCFGridSparse.cxx:702
 AliCFGridSparse.cxx:703
 AliCFGridSparse.cxx:704
 AliCFGridSparse.cxx:705
 AliCFGridSparse.cxx:706
 AliCFGridSparse.cxx:707
 AliCFGridSparse.cxx:708
 AliCFGridSparse.cxx:709
 AliCFGridSparse.cxx:710
 AliCFGridSparse.cxx:711
 AliCFGridSparse.cxx:712
 AliCFGridSparse.cxx:713
 AliCFGridSparse.cxx:714
 AliCFGridSparse.cxx:715
 AliCFGridSparse.cxx:716
 AliCFGridSparse.cxx:717
 AliCFGridSparse.cxx:718
 AliCFGridSparse.cxx:719
 AliCFGridSparse.cxx:720
 AliCFGridSparse.cxx:721
 AliCFGridSparse.cxx:722
 AliCFGridSparse.cxx:723
 AliCFGridSparse.cxx:724
 AliCFGridSparse.cxx:725
 AliCFGridSparse.cxx:726
 AliCFGridSparse.cxx:727
 AliCFGridSparse.cxx:728
 AliCFGridSparse.cxx:729
 AliCFGridSparse.cxx:730
 AliCFGridSparse.cxx:731
 AliCFGridSparse.cxx:732
 AliCFGridSparse.cxx:733
 AliCFGridSparse.cxx:734
 AliCFGridSparse.cxx:735
 AliCFGridSparse.cxx:736
 AliCFGridSparse.cxx:737
 AliCFGridSparse.cxx:738
 AliCFGridSparse.cxx:739
 AliCFGridSparse.cxx:740
 AliCFGridSparse.cxx:741
 AliCFGridSparse.cxx:742
 AliCFGridSparse.cxx:743
 AliCFGridSparse.cxx:744
 AliCFGridSparse.cxx:745
 AliCFGridSparse.cxx:746
 AliCFGridSparse.cxx:747
 AliCFGridSparse.cxx:748
 AliCFGridSparse.cxx:749
 AliCFGridSparse.cxx:750
 AliCFGridSparse.cxx:751
 AliCFGridSparse.cxx:752
 AliCFGridSparse.cxx:753
 AliCFGridSparse.cxx:754
 AliCFGridSparse.cxx:755
 AliCFGridSparse.cxx:756
 AliCFGridSparse.cxx:757
 AliCFGridSparse.cxx:758
 AliCFGridSparse.cxx:759
 AliCFGridSparse.cxx:760
 AliCFGridSparse.cxx:761
 AliCFGridSparse.cxx:762
 AliCFGridSparse.cxx:763
 AliCFGridSparse.cxx:764
 AliCFGridSparse.cxx:765
 AliCFGridSparse.cxx:766
 AliCFGridSparse.cxx:767
 AliCFGridSparse.cxx:768
 AliCFGridSparse.cxx:769
 AliCFGridSparse.cxx:770
 AliCFGridSparse.cxx:771
 AliCFGridSparse.cxx:772
 AliCFGridSparse.cxx:773
 AliCFGridSparse.cxx:774
 AliCFGridSparse.cxx:775
 AliCFGridSparse.cxx:776
 AliCFGridSparse.cxx:777
 AliCFGridSparse.cxx:778
 AliCFGridSparse.cxx:779
 AliCFGridSparse.cxx:780
 AliCFGridSparse.cxx:781
 AliCFGridSparse.cxx:782
 AliCFGridSparse.cxx:783
 AliCFGridSparse.cxx:784
 AliCFGridSparse.cxx:785
 AliCFGridSparse.cxx:786
 AliCFGridSparse.cxx:787
 AliCFGridSparse.cxx:788
 AliCFGridSparse.cxx:789
 AliCFGridSparse.cxx:790
 AliCFGridSparse.cxx:791
 AliCFGridSparse.cxx:792
 AliCFGridSparse.cxx:793
 AliCFGridSparse.cxx:794
 AliCFGridSparse.cxx:795
 AliCFGridSparse.cxx:796
 AliCFGridSparse.cxx:797
 AliCFGridSparse.cxx:798
 AliCFGridSparse.cxx:799
 AliCFGridSparse.cxx:800
 AliCFGridSparse.cxx:801
 AliCFGridSparse.cxx:802
 AliCFGridSparse.cxx:803
 AliCFGridSparse.cxx:804
 AliCFGridSparse.cxx:805