ROOT logo
// This class calculates the inclusive charged particle density
// in each for the 5 FMD rings. 
//
#include "AliFMDDensityCalculator.h"
#include <AliESDFMD.h>
#include <TAxis.h>
#include <TList.h>
#include <TMath.h>
#include "AliForwardCorrectionManager.h"
#include "AliFMDCorrDoubleHit.h"
#include "AliFMDCorrELossFit.h"
#include "AliLog.h"
#include "AliForwardUtil.h"
#include <TH2D.h>
#include <TProfile.h>
#include <THStack.h>
#include <TROOT.h>
#include <TVector3.h>
#include <TStopwatch.h>
#include <TParameter.h>
#include <iostream>
#include <iomanip>
#include <cstring>

ClassImp(AliFMDDensityCalculator)
#if 0
; // For Emacs
#endif 

//____________________________________________________________________
const char* AliFMDDensityCalculator::fgkFolderName = "fmdDensityCalculator";

//____________________________________________________________________
AliFMDDensityCalculator::AliFMDDensityCalculator()
  : TNamed(), 
    fRingHistos(),
    fSumOfWeights(0),
    fWeightedSum(0),
    fCorrections(0),
    fMaxParticles(5),
    fUsePoisson(false),
    fUsePhiAcceptance(kPhiCorrectNch),
    fAccI(0),
    fAccO(0),
    fFMD1iMax(0),
    fFMD2iMax(0),
    fFMD2oMax(0),
    fFMD3iMax(0),
    fFMD3oMax(0),
    fMaxWeights(0),
    fLowCuts(0),
    fEtaLumping(32), 
    fPhiLumping(4),    
    fDebug(0),
    fCuts(),
    fRecalculatePhi(false),
    fMinQuality(10),
    fCache(),
    fDoTiming(false),
  fHTiming(0), 
  fMaxOutliers(0.05),
  fOutlierCut(0.50)
{
  // 
  // Constructor 
  //
  DGUARD(fDebug, 3, "Default CTOR of FMD density calculator");
}

//____________________________________________________________________
AliFMDDensityCalculator::AliFMDDensityCalculator(const char* title)
  : TNamed(fgkFolderName, title), 
    fRingHistos(), 
    fSumOfWeights(0),
    fWeightedSum(0),
    fCorrections(0),
    fMaxParticles(5),
    fUsePoisson(false),
    fUsePhiAcceptance(kPhiCorrectNch),
    fAccI(0),
    fAccO(0),
    fFMD1iMax(0),
    fFMD2iMax(0),
    fFMD2oMax(0),
    fFMD3iMax(0),
    fFMD3oMax(0),
    fMaxWeights(0),
    fLowCuts(0),
    fEtaLumping(32), 
    fPhiLumping(4),
    fDebug(0),
    fCuts(),
    fRecalculatePhi(false),
    fMinQuality(10),
    fCache(),
    fDoTiming(false),
    fHTiming(0), 
  fMaxOutliers(0.05),
  fOutlierCut(0.50)
{
  // 
  // Constructor 
  // 
  // Parameters:
  //    name Name of object
  //
  DGUARD(fDebug, 3, "Named CTOR of FMD density calculator: %s", title);
  fRingHistos.SetName(GetName());
  fRingHistos.SetOwner();
  fRingHistos.Add(new RingHistos(1, 'I'));
  fRingHistos.Add(new RingHistos(2, 'I'));
  fRingHistos.Add(new RingHistos(2, 'O'));
  fRingHistos.Add(new RingHistos(3, 'I'));
  fRingHistos.Add(new RingHistos(3, 'O'));
  fSumOfWeights = new TH1D("sumOfWeights", "Sum of Landau weights",
			   200, 0, 20);
  fSumOfWeights->SetFillColor(kRed+1);
  fSumOfWeights->SetXTitle("#sum_{i} a_{i} f_{i}(#Delta)");
  fWeightedSum  = new TH1D("weightedSum", "Weighted sum of Landau propability",
			   200, 0, 20);
  fWeightedSum->SetFillColor(kBlue+1);
  fWeightedSum->SetXTitle("#sum_{i} i a_{i} f_{i}(#Delta)");
  fCorrections  = new TH1D("corrections", "Distribution of corrections", 
			   100, 0, 10);
  fCorrections->SetFillColor(kBlue+1);
  fCorrections->SetXTitle("correction");

  fAccI = GenerateAcceptanceCorrection('I');
  fAccO = GenerateAcceptanceCorrection('O');

  fMaxWeights = new TH2D("maxWeights", "Maximum i of a_{i}'s to use", 
			 1, 0, 1, 1, 0, 1);
  fMaxWeights->SetXTitle("#eta");
  fMaxWeights->SetDirectory(0);

  fLowCuts = new TH2D("lowCuts", "Low cuts used", 1, 0, 1, 1, 0, 1);
  fLowCuts->SetXTitle("#eta");
  fLowCuts->SetDirectory(0);

}

//____________________________________________________________________
AliFMDDensityCalculator::AliFMDDensityCalculator(const 
						 AliFMDDensityCalculator& o)
  : TNamed(o), 
    fRingHistos(), 
    fSumOfWeights(o.fSumOfWeights),
    fWeightedSum(o.fWeightedSum),
    fCorrections(o.fCorrections),
    fMaxParticles(o.fMaxParticles),
    fUsePoisson(o.fUsePoisson),
    fUsePhiAcceptance(o.fUsePhiAcceptance),
    fAccI(o.fAccI),
    fAccO(o.fAccO),
    fFMD1iMax(o.fFMD1iMax),
    fFMD2iMax(o.fFMD2iMax),
    fFMD2oMax(o.fFMD2oMax),
    fFMD3iMax(o.fFMD3iMax),
    fFMD3oMax(o.fFMD3oMax),
    fMaxWeights(o.fMaxWeights),
    fLowCuts(o.fLowCuts),
    fEtaLumping(o.fEtaLumping), 
    fPhiLumping(o.fPhiLumping),
    fDebug(o.fDebug),
    fCuts(o.fCuts),
    fRecalculatePhi(o.fRecalculatePhi),
    fMinQuality(o.fMinQuality),
    fCache(o.fCache),
    fDoTiming(o.fDoTiming),
    fHTiming(o.fHTiming), 
  fMaxOutliers(o.fMaxOutliers),
  fOutlierCut(o.fOutlierCut)
{
  // 
  // Copy constructor 
  // 
  // Parameters:
  //    o Object to copy from 
  //
  DGUARD(fDebug, 3, "Copy CTOR of FMD density calculator");
  TIter    next(&o.fRingHistos);
  TObject* obj = 0;
  while ((obj = next())) fRingHistos.Add(obj);
}

//____________________________________________________________________
AliFMDDensityCalculator::~AliFMDDensityCalculator()
{
  // 
  // Destructor 
  //
  DGUARD(fDebug, 3, "DTOR of FMD density calculator");
  // fRingHistos.Delete();
}

//____________________________________________________________________
AliFMDDensityCalculator&
AliFMDDensityCalculator::operator=(const AliFMDDensityCalculator& o)
{
  // 
  // Assignement operator
  // 
  // Parameters:
  //    o Object to assign from 
  // 
  // Return:
  //    Reference to this object
  //
  DGUARD(fDebug, 3, "Assignment of FMD density calculator");
  if (&o == this) return *this; 
  TNamed::operator=(o);

  fDebug              = o.fDebug;
  fMaxParticles       = o.fMaxParticles;
  fUsePoisson         = o.fUsePoisson;
  fUsePhiAcceptance   = o.fUsePhiAcceptance;
  fAccI               = o.fAccI;
  fAccO               = o.fAccO;
  fFMD1iMax           = o.fFMD1iMax;
  fFMD2iMax           = o.fFMD2iMax;
  fFMD2oMax           = o.fFMD2oMax;
  fFMD3iMax           = o.fFMD3iMax;
  fFMD3oMax           = o.fFMD3oMax;
  fMaxWeights         = o.fMaxWeights;
  fLowCuts            = o.fLowCuts;
  fEtaLumping         = o.fEtaLumping;
  fPhiLumping         = o.fPhiLumping;
  fCuts               = o.fCuts;
  fRecalculatePhi     = o.fRecalculatePhi;
  fMinQuality         = o.fMinQuality;
  fCache              = o.fCache;
  fDoTiming           = o.fDoTiming;
  fHTiming            = o.fHTiming;
  fMaxOutliers        = o.fMaxOutliers;
  fOutlierCut         = o.fOutlierCut;

  fRingHistos.Delete();
  TIter    next(&o.fRingHistos);
  TObject* obj = 0;
  while ((obj = next())) fRingHistos.Add(obj);
  
  return *this;
}

//____________________________________________________________________
void
AliFMDDensityCalculator::SetupForData(const TAxis& axis)
{
  // Intialize this sub-algorithm 
  //
  // Parameters:
  //   etaAxis   Eta axis
  DGUARD(fDebug, 1, "Initialize FMD density calculator");
  CacheMaxWeights(axis);
 
  fCache.Init(axis);

  TIter    next(&fRingHistos);
  RingHistos* o = 0;
  while ((o = static_cast<RingHistos*>(next()))) {
    o->SetupForData(axis);
    // o->fMultCut = fCuts.GetFixedCut(o->fDet, o->fRing);
    // o->fPoisson.Init(o->fDet,o->fRing,fEtaLumping, fPhiLumping);
  }
}

//____________________________________________________________________
AliFMDDensityCalculator::RingHistos*
AliFMDDensityCalculator::GetRingHistos(UShort_t d, Char_t r) const
{
  // 
  // Get the ring histogram container 
  // 
  // Parameters:
  //    d Detector
  //    r Ring 
  // 
  // Return:
  //    Ring histogram container 
  //
  Int_t idx = -1;
  switch (d) { 
  case 1: idx = 0; break;
  case 2: idx = 1 + (r == 'I' || r == 'i' ? 0 : 1); break;
  case 3: idx = 3 + (r == 'I' || r == 'i' ? 0 : 1); break;
  }
  if (idx < 0 || idx >= fRingHistos.GetEntries()) {
    AliWarning(Form("Index %d of FMD%d%c out of range", idx, d, r));
    return 0;
  }
  
  return static_cast<RingHistos*>(fRingHistos.At(idx));
}

namespace {
  Double_t Rng2Cut(UShort_t d, Char_t r, Int_t xbin, TH2* h) 
  {
    Double_t ret = 1024;
    if (xbin < 1 && xbin > h->GetXaxis()->GetNbins()) return ret;
    Int_t ybin = 0;							
    switch(d) {								
    case 1: ybin = 1; break;						
    case 2: ybin = (r=='i' || r=='I') ? 2 : 3; break;			
    case 3: ybin = (r=='i' || r=='I') ? 4 : 5; break;			
    default: return ret;
    }									
    ret = h->GetBinContent(xbin,ybin);					
    return ret;
  }
}

//____________________________________________________________________
Double_t
AliFMDDensityCalculator::GetMultCut(UShort_t d, Char_t r, Int_t ieta,
				    Bool_t /*errors*/) const
{
  // 
  // Get the multiplicity cut.  If the user has set fMultCut (via
  // SetMultCut) then that value is used.  If not, then the lower
  // value of the fit range for the enery loss fits is returned.
  // 
  // Return:
  //    Lower cut on multiplicity
  //
  return Rng2Cut(d, r, ieta, fLowCuts);
  // return fCuts.GetMultCut(d,r,ieta,errors);
}
    
//____________________________________________________________________
Double_t
AliFMDDensityCalculator::GetMultCut(UShort_t d, Char_t r, Double_t eta,
				    Bool_t /*errors*/) const
{
  // 
  // Get the multiplicity cut.  If the user has set fMultCut (via
  // SetMultCut) then that value is used.  If not, then the lower
  // value of the fit range for the enery loss fits is returned.
  // 
  // Return:
  //    Lower cut on multiplicity
  //
  Int_t ieta = fLowCuts->GetXaxis()->FindBin(eta);				
  return Rng2Cut(d, r, ieta, fLowCuts);
  // return fCuts.GetMultCut(d,r,eta,errors);
}

#ifndef NO_TIMING
# define START_TIMER(T) if (fDoTiming) T.Start(true)
# define GET_TIMER(T,V) if (fDoTiming) V = T.CpuTime()
# define ADD_TIMER(T,V) if (fDoTiming) V += T.CpuTime()
#else
# define START_TIMER(T) do {} while (false)
# define GET_TIMER(T,V) do {} while (false)
# define ADD_TIMER(T,V) do {} while (false)
#endif

//____________________________________________________________________
Bool_t
AliFMDDensityCalculator::Calculate(const AliESDFMD&        fmd,
				   AliForwardUtil::Histos& hists,
				   Bool_t                  lowFlux,
				   Double_t                /*cent*/, 
				   const TVector3&         ip)
{
  // 
  // Do the calculations 
  // 
  // Parameters:
  //    fmd      AliESDFMD object (possibly) corrected for sharing
  //    hists    Histogram cache
  //    vtxBin   Vertex bin 
  //    lowFlux  Low flux flag. 
  // 
  // Return:
  //    true on successs 
  DGUARD(fDebug, 1, "Calculate density in FMD density calculator");

  TStopwatch timer;
  TStopwatch totalT;
  
  // First measurements of timing
  //  Re-calculation      : fraction of sum 32.0%   of total 18.1%
  //  N_{particle}        : fraction of sum 15.2%   of total  8.6%
  //  Correction          : fraction of sum 26.4%   of total 14.9%
  //  #phi acceptance     : fraction of sum  0.2%   of total  0.1%
  //  Copy to cache       : fraction of sum  3.9%   of total  2.2%
  //  Poisson calculation : fraction of sum 18.7%   of total 10.6%
  //  Diagnostics         : fraction of sum  3.7%   of total  2.1%
  Double_t nPartTime  = 0;
  Double_t corrTime   = 0;
  Double_t rePhiTime  = 0;
  Double_t copyTime   = 0;
  Double_t poissonTime= 0;
  Double_t diagTime   = 0;
  START_TIMER(totalT);
  
  Double_t etaCache[20*512]; // Same number of strips per ring 
  Double_t phiCache[20*512]; // whether it is inner our outer. 
  // We do not use TArrayD because we do not wont a bounds check 
  // TArrayD etaCache(20*512); // Same number of strips per ring
  // TArrayD phiCache(20*512); // whether it is inner our outer. 
  
  // --- Loop over detectors -----------------------------------------
  for (UShort_t d=1; d<=3; d++) { 
    UShort_t nr = (d == 1 ? 1 : 2);
    for (UShort_t q=0; q<nr; q++) { 
      Char_t      r = (q == 0 ? 'I' : 'O');
      UShort_t    ns= (q == 0 ?  20 :  40);
      UShort_t    nt= (q == 0 ? 512 : 256);
      TH2D*       h = hists.Get(d,r);
      RingHistos* rh= GetRingHistos(d,r);
      if (!rh) { 
	AliError(Form("No ring histogram found for FMD%d%c", d, r));
	fRingHistos.ls();
	return false;
      }
      // rh->fPoisson.SetObject(d,r,vtxbin,cent);
      rh->fPoisson.Reset(0);
      rh->fTotal->Reset();
      rh->fGood->Reset();
      // rh->ResetPoissonHistos(h, fEtaLumping, fPhiLumping);

      // Reset our eta cache 
      // for (Int_t i = 0; i < 20*512; i++) 
      // etaCache[i] = phiCache[i] = AliESDFMD::kInvalidEta;
      memset(etaCache, 0, sizeof(Double_t)*20*512);
      memset(phiCache, 0, sizeof(Double_t)*20*512);
      // etaCache.Reset(AliESDFMD::kInvalidEta);
      // phiCache.Reset(AliESDFMD::kInvalidEta);

      // --- Loop over sectors and strips ----------------------------
      for (UShort_t s=0; s<ns; s++) { 
	for (UShort_t t=0; t<nt; t++) {
	  
	  Float_t  mult   = fmd.Multiplicity(d,r,s,t);
	  Float_t  phi    = fmd.Phi(d,r,s,t) * TMath::DegToRad();
	  Float_t  eta    = fmd.Eta(d,r,s,t);
	  Double_t oldPhi = phi;

	  // --- Re-calculate eta - needed for satelittes ------------
	  START_TIMER(timer);
	  etaCache[s*nt+t] = eta;

	  // --- Check this strip ------------------------------------
	  rh->fTotal->Fill(eta);
	  if (mult == AliESDFMD::kInvalidMult) { //  || mult > 20) {
	    // Do not count invalid stuff 
	    rh->fELoss->Fill(-1);
	    // rh->fEvsN->Fill(mult,-1);
	    // rh->fEvsM->Fill(mult,-1);
	    continue;
	  }
	  if (mult > 20) 
	    AliWarningF("Raw multiplicity of FMD%d%c[%02d,%03d] = %f > 20",
			d, r, s, t, mult);
	  // --- Automatic calculation of acceptance -----------------
	  rh->fGood->Fill(eta);

	  // --- If we asked to re-calculate phi for (x,y) IP --------
	  START_TIMER(timer);
	  if (fRecalculatePhi) {
	    oldPhi = phi;
	    phi = AliForwardUtil::GetPhiFromStrip(r, t, phi, ip.X(), ip.Y());
	  }
	  phiCache[s*nt+t] = phi;
	  ADD_TIMER(timer,rePhiTime);

	  // --- Apply phi corner correction to eloss ----------------
	  if (fUsePhiAcceptance == kPhiCorrectELoss) 
	    mult *= AcceptanceCorrection(r,t);

	  // --- Get the low multiplicity cut ------------------------
	  Double_t cut  = 1024;
	  if (eta != AliESDFMD::kInvalidEta) cut = GetMultCut(d, r, eta,false);
	  else AliWarningF("Eta for FMD%d%c[%02d,%03d] is invalid: %f", 
			   d, r, s, t, eta);

	  // --- Now caluculate Nch for this strip using fits --------
	  START_TIMER(timer);
	  Double_t n   = 0;
	  if (cut > 0 && mult > cut) n = NParticles(mult,d,r,eta,lowFlux);
	  rh->fELoss->Fill(mult);
	  // rh->fEvsN->Fill(mult,n);
	  // rh->fEtaVsN->Fill(eta, n);
	  ADD_TIMER(timer,nPartTime);
	  
	  // --- Calculate correction if needed ----------------------
	  START_TIMER(timer);
	  // Temporary stuff - remove Correction call 
	  Double_t c = 1;
	  if (fUsePhiAcceptance == kPhiCorrectNch) 
	    c = AcceptanceCorrection(r,t);
	  // Double_t c = Correction(d,r,t,eta,lowFlux);
	  ADD_TIMER(timer,corrTime);
	  fCorrections->Fill(c);
	  if (c > 0) n /= c;
	  // rh->fEvsM->Fill(mult,n);
	  // rh->fEtaVsM->Fill(eta, n);
	  rh->fCorr->Fill(eta, c);

	  // --- Accumulate Poisson statistics -----------------------
	  Bool_t hit = (n > 0.9 && c > 0);
	  if (hit) {
	    rh->fELossUsed->Fill(mult);
	    if (fRecalculatePhi) {
	      rh->fPhiBefore->Fill(oldPhi);
	      rh->fPhiAfter->Fill(phi);
	    }
	  }
	  rh->fPoisson.Fill(t,s,hit,1./c);
	  h->Fill(eta,phi,n);

	  // --- If we use ELoss fits, apply now ---------------------
	  if (!fUsePoisson) rh->fDensity->Fill(eta,phi,n);
	} // for t
      } // for s 

      // --- Automatic acceptance - Calculate as an efficiency -------
      // This is very fast, so we do not bother to time it 
      rh->fGood->Divide(rh->fGood, rh->fTotal, 1, 1, "B");

      // --- Make a copy and reset as needed -------------------------
      START_TIMER(timer);
      TH2D* hclone = fCache.Get(d,r);
      // hclone->Reset();
      // TH2D* hclone = static_cast<TH2D*>(h->Clone("hclone"));
      if (!fUsePoisson) hclone->Reset();
      else { 
	for (Int_t i = 0; i <= h->GetNbinsX()+1; i++) { 
	  for (Int_t j = 0; j <= h->GetNbinsY()+1; j++) {
	    hclone->SetBinContent(i,j,h->GetBinContent(i,j));
	    hclone->SetBinError(i,j,h->GetBinError(i,j));
	  }
	}
	// hclone->Add(h); 
	h->Reset(); 
      }
      ADD_TIMER(timer,copyTime);
      
      // --- Store Poisson result ------------------------------------
      START_TIMER(timer);
      TH2D* poisson = rh->fPoisson.Result();
      for (Int_t t=0; t < poisson->GetNbinsX(); t++) { 
	for (Int_t s=0; s < poisson->GetNbinsY(); s++) { 
	  
	  Double_t poissonV = poisson->GetBinContent(t+1,s+1);
	  // Use cached eta - since the calls to GetEtaFromStrip and
	  // GetPhiFromStrip are _very_ expensive
	  Double_t  phi  = phiCache[s*nt+t];
	  Double_t  eta  = etaCache[s*nt+t]; 
	  // Double_t  phi  = fmd.Phi(d,r,s,t) * TMath::DegToRad();
	  // Double_t  eta  = fmd.Eta(d,r,s,t);
	  if (fUsePoisson) {
	    h->Fill(eta,phi,poissonV);
	    rh->fDensity->Fill(eta, phi, poissonV);
	  }
	  else
	    hclone->Fill(eta,phi,poissonV);
	}
      }
      ADD_TIMER(timer,poissonTime);
      
      // --- Make diagnostics - eloss vs poisson ---------------------
      START_TIMER(timer);
      Int_t nY = h->GetNbinsY();
      Int_t nIn  = 0; // Count non-outliers
      Int_t nOut = 0; // Count outliers
      for (Int_t ieta=1; ieta <= h->GetNbinsX(); ieta++) { 
	// Set the overflow bin to contain the phi acceptance 
	Double_t phiAcc  = rh->fGood->GetBinContent(ieta);
	Double_t phiAccE = rh->fGood->GetBinError(ieta);
	h->SetBinContent(ieta, nY+1, phiAcc);
	h->SetBinError(ieta, nY+1, phiAccE);
	Double_t eta     = h->GetXaxis()->GetBinCenter(ieta);
	rh->fPhiAcc->Fill(eta, ip.Z(), phiAcc);
	for (Int_t iphi=1; iphi<= nY; iphi++) { 
	  
	  Double_t poissonV =  0; //h->GetBinContent(,s+1);
	  Double_t eLossV =  0;
	  if(fUsePoisson) { 
	    poissonV = h->GetBinContent(ieta,iphi);
	    eLossV  = hclone->GetBinContent(ieta,iphi);
	  }
	  else { 
	    poissonV = hclone->GetBinContent(ieta,iphi);
	    eLossV  = h->GetBinContent(ieta,iphi);
	  }
	  
	  if (poissonV < 1e-12 && eLossV < 1e-12) 
	    // we do not care about trivially empty bins 
	    continue;
				      
	  Bool_t   outlier = CheckOutlier(eLossV, poissonV, fOutlierCut);
	  Double_t rel     = eLossV < 1e-12 ? 0 : (poissonV - eLossV) / eLossV;
	  if (outlier) {
	    rh->fELossVsPoissonOut->Fill(eLossV, poissonV);
	    rh->fDiffELossPoissonOut->Fill(rel);
	    nOut++;
	}
	  else {
	    rh->fELossVsPoisson->Fill(eLossV, poissonV);
	    rh->fDiffELossPoisson->Fill(rel);
	    nIn++;
	  } // if (outlier)
	} // for (iphi)
      } // for (ieta)
      Int_t    nTotal   = (nIn+nOut);
      Double_t outRatio = (nTotal > 0 ? Double_t(nOut) / nTotal : 0);
      rh->fOutliers->Fill(outRatio);
      if (outRatio < fMaxOutliers) rh->fPoisson.FillDiagnostics();
      else                         h->SetBit(AliForwardUtil::kSkipRing);
      ADD_TIMER(timer,diagTime);
      // delete hclone;
      
    } // for q
  } // for d

  if (fDoTiming) {
    // fHTiming->Fill(1,reEtaTime);
    fHTiming->Fill(2,nPartTime);
    fHTiming->Fill(3,corrTime);
    fHTiming->Fill(4,rePhiTime);
    fHTiming->Fill(5,copyTime);
    fHTiming->Fill(6,poissonTime);
    fHTiming->Fill(7,diagTime);
    fHTiming->Fill(8,totalT.CpuTime());
  }

  return kTRUE;
}

//_____________________________________________________________________
Bool_t 
AliFMDDensityCalculator::CheckOutlier(Double_t eloss, 
				      Double_t poisson,
				      Double_t cut) const
{
  if (eloss < 1e-6) return true;
  Double_t diff = TMath::Abs(poisson - eloss) / eloss;
  return diff > cut;
}
//_____________________________________________________________________
Int_t
AliFMDDensityCalculator::FindMaxWeight(const AliFMDCorrELossFit* cor,
				       UShort_t d, Char_t r, Int_t iEta) const
{
  // 
  // Find the max weight to use for FMD<i>dr</i> in eta bin @a iEta
  // 
  // Parameters:
  //    cor   Correction
  //    d     Detector 
  //    r     Ring 
  //    iEta  Eta bin 
  //
  DGUARD(fDebug, 10, "Find maximum weight in FMD density calculator");
  if(!cor) return -1; 

  AliFMDCorrELossFit::ELossFit* fit = cor->FindFit(d,r,iEta, -1);
  if (!fit) { 
    // AliWarning(Form("No energy loss fit for FMD%d%c at eta=%f", d, r, eta));
    return -1;
  }
  return fit->FindMaxWeight(2*AliFMDCorrELossFit::ELossFit::fgMaxRelError, 
			    AliFMDCorrELossFit::ELossFit::fgLeastWeight, 
			    fMaxParticles);
}
//_____________________________________________________________________
Int_t
AliFMDDensityCalculator::FindMaxWeight(const AliFMDCorrELossFit* cor,
				       UShort_t d, Char_t r, Double_t eta) const
{
  // 
  // Find the max weight to use for FMD<i>dr</i> in eta bin @a iEta
  // 
  // Parameters:
  //    cor   Correction
  //    d     Detector 
  //    r     Ring 
  //    eta   Eta
  //
  DGUARD(fDebug, 10, "Find maximum weight in FMD density calculator");
  if(!cor) return -1; 

  AliFMDCorrELossFit::ELossFit* fit = cor->FindFit(d,r,eta, -1);
  if (!fit) { 
    // AliWarning(Form("No energy loss fit for FMD%d%c at eta=%f", d, r, eta));
    return -1;
  }
  return fit->FindMaxWeight(2*AliFMDCorrELossFit::ELossFit::fgMaxRelError, 
			    AliFMDCorrELossFit::ELossFit::fgLeastWeight, 
			    fMaxParticles);
}
  
//_____________________________________________________________________
void
AliFMDDensityCalculator::CacheMaxWeights(const TAxis& axis)
{
  // 
  // Find the max weights and cache them 
  // 
  DGUARD(fDebug, 2, "Cache maximum weights in FMD density calculator");
  AliForwardCorrectionManager&  fcm = AliForwardCorrectionManager::Instance();
  const AliFMDCorrELossFit*     cor = fcm.GetELossFit();
  cor->CacheBins(fMinQuality);
  cor->Print(fDebug > 5 ? "RCS" : "C");

  TAxis eta(axis.GetNbins(),
	    axis.GetXmin(),
	    axis.GetXmax());

  if(cor) 
    eta.Set(cor->GetEtaAxis().GetNbins(), 
	    cor->GetEtaAxis().GetXmin(), 
	    cor->GetEtaAxis().GetXmax());

  Int_t nEta = eta.GetNbins();
  fFMD1iMax.Set(nEta);
  fFMD2iMax.Set(nEta);
  fFMD2oMax.Set(nEta);
  fFMD3iMax.Set(nEta);
  fFMD3oMax.Set(nEta);
  
  fMaxWeights->SetBins(nEta, eta.GetXmin(), eta.GetXmax(), 5, .5, 5.5);
  fMaxWeights->GetYaxis()->SetBinLabel(1, "FMD1i");
  fMaxWeights->GetYaxis()->SetBinLabel(2, "FMD2i");
  fMaxWeights->GetYaxis()->SetBinLabel(3, "FMD2o");
  fMaxWeights->GetYaxis()->SetBinLabel(4, "FMD3i");
  fMaxWeights->GetYaxis()->SetBinLabel(5, "FMD3o");

  AliInfo(Form("Get eta axis with %d bins from %f to %f",
	       nEta, eta.GetXmin(), eta.GetXmax()));
  fLowCuts->SetBins(nEta, eta.GetXmin(), eta.GetXmax(), 5, .5, 5.5);
  fLowCuts->GetYaxis()->SetBinLabel(1, "FMD1i");
  fLowCuts->GetYaxis()->SetBinLabel(2, "FMD2i");
  fLowCuts->GetYaxis()->SetBinLabel(3, "FMD2o");
  fLowCuts->GetYaxis()->SetBinLabel(4, "FMD3i");
  fLowCuts->GetYaxis()->SetBinLabel(5, "FMD3o");

  for (Int_t i = 0; i < nEta; i++) {
    Double_t leta = fMaxWeights->GetXaxis()->GetBinCenter(i+1);
    Double_t w[5];
    w[0] = fFMD1iMax[i] = FindMaxWeight(cor, 1, 'I', leta);
    w[1] = fFMD2iMax[i] = FindMaxWeight(cor, 2, 'I', leta);
    w[2] = fFMD2oMax[i] = FindMaxWeight(cor, 2, 'O', leta);
    w[3] = fFMD3iMax[i] = FindMaxWeight(cor, 3, 'I', leta);
    w[4] = fFMD3oMax[i] = FindMaxWeight(cor, 3, 'O', leta);
    for (Int_t j = 0; j < 5; j++) 
      if (w[j] > 0) fMaxWeights->SetBinContent(i+1, j+1, w[j]);
  }

  // Cache cuts in histogram
  fCuts.FillHistogram(fLowCuts);
}

//_____________________________________________________________________
Int_t
AliFMDDensityCalculator::GetMaxWeight(UShort_t d, Char_t r, Int_t iEta) const
{
  // 
  // Find the (cached) maximum weight for FMD<i>dr</i> in 
  // @f$\eta@f$ bin @a iEta
  // 
  // Parameters:
  //    d     Detector
  //    r     Ring
  //    iEta  Eta bin
  // 
  // Return:
  //    max weight or <= 0 in case of problems 
  //
  if (iEta < 0) return -1;

  const TArrayI* max  = 0;
  switch (d) { 
  case 1:  max = &fFMD1iMax;                                       break;
  case 2:  max = (r == 'I' || r == 'i' ? &fFMD2iMax : &fFMD2oMax); break;
  case 3:  max = (r == 'I' || r == 'i' ? &fFMD3iMax : &fFMD3oMax); break;
  }
  if (!max) { 
    AliWarning(Form("No array for FMD%d%c", d, r));
    return -1;
  }
  
  if (iEta >= max->fN) { 
    AliWarning(Form("Eta bin %3d out of bounds [0,%d]", 
		    iEta, max->fN-1));
    return -1;
  }

  AliDebug(30,Form("Max weight for FMD%d%c eta bin %3d: %d", d, r, iEta, 
		   max->At(iEta)));
  return max->At(iEta);
}

//_____________________________________________________________________
Int_t
AliFMDDensityCalculator::GetMaxWeight(UShort_t d, Char_t r, Float_t eta) const
{
  // 
  // Find the (cached) maximum weight for FMD<i>dr</i> iat
  // @f$\eta@f$ 
  // 
  // Parameters:
  //    d     Detector
  //    r     Ring
  //    eta   Eta bin
  // 
  // Return:
  //    max weight or <= 0 in case of problems 
  //
  AliForwardCorrectionManager&  fcm  = AliForwardCorrectionManager::Instance();
  Int_t                         iEta = fcm.GetELossFit()->FindEtaBin(eta) -1;

  return GetMaxWeight(d, r, iEta);
}

//_____________________________________________________________________
Float_t 
AliFMDDensityCalculator::NParticles(Float_t  mult, 
				    UShort_t d, 
				    Char_t   r, 
				    Float_t  eta,
				    Bool_t   lowFlux) const
{
  // 
  // Get the number of particles corresponding to the signal mult
  // 
  // Parameters:
  //    mult     Signal
  //    d        Detector
  //    r        Ring 
  //    s        Sector 
  //    t        Strip (not used)
  //    v        Vertex bin 
  //    eta      Pseudo-rapidity 
  //    lowFlux  Low-flux flag 
  // 
  // Return:
  //    The number of particles 
  //
  // if (mult <= GetMultCut()) return 0;
  DGUARD(fDebug, 3, "Calculate Nch in FMD density calculator");
  if (lowFlux) return 1;
  
  AliForwardCorrectionManager&  fcm = AliForwardCorrectionManager::Instance();
  AliFMDCorrELossFit::ELossFit* fit = fcm.GetELossFit()->FindFit(d,r,eta, -1);
  if (!fit) { 
    AliWarning(Form("No energy loss fit for FMD%d%c at eta=%f qual=%d", 
		    d, r, eta, fMinQuality));
    return 0;
  }
  
  Int_t    m   = GetMaxWeight(d,r,eta); // fit->FindMaxWeight();
  if (m < 1) { 
    AliWarning(Form("No good fits for FMD%d%c at eta=%f", d, r, eta));
    return 0;
  }
  
  UShort_t n   = TMath::Min(fMaxParticles, UShort_t(m));
  Double_t ret = fit->EvaluateWeighted(mult, n);
  
  if (fDebug > 10) {
    AliInfo(Form("FMD%d%c, eta=%7.4f, %8.5f -> %8.5f", d, r, eta, mult, ret));
  }
    
  fWeightedSum->Fill(ret);
  fSumOfWeights->Fill(ret);
  
  return ret;
}

//_____________________________________________________________________
Float_t 
AliFMDDensityCalculator::Correction(UShort_t d, 
				    Char_t   r, 
				    UShort_t t, 
				    Float_t  eta,
				    Bool_t   lowFlux) const
{
  // 
  // Get the inverse correction factor.  This consist of
  // 
  // - acceptance correction (corners of sensors) 
  // - double hit correction (for low-flux events) 
  // - dead strip correction 
  // 
  // Parameters:
  //    d        Detector
  //    r        Ring 
  //    s        Sector 
  //    t        Strip (not used)
  //    v        Vertex bin 
  //    eta      Pseudo-rapidity 
  //    lowFlux  Low-flux flag 
  // 
  // Return:
  //    
  //
  DGUARD(fDebug, 10, "Apply correction in FMD density calculator");
  Float_t correction = 1; 
  if (fUsePhiAcceptance == kPhiCorrectNch) 
    correction = AcceptanceCorrection(r,t);
  if (lowFlux) { 
    AliForwardCorrectionManager&  fcm = AliForwardCorrectionManager::Instance();

    TH1D* dblHitCor = 0;
    if (fcm.GetDoubleHit()) 
      dblHitCor = fcm.GetDoubleHit()->GetCorrection(d,r);

    if (dblHitCor) {
      Double_t dblC = dblHitCor->GetBinContent(dblHitCor->FindBin(eta));
      if (dblC > 0) correction *= dblC;
    }
    // else {
    //   AliWarning(Form("Missing double hit correction for FMD%d%c",d,r));
    // }
  }
  return correction;
}

//_____________________________________________________________________
TH1D*
AliFMDDensityCalculator::GenerateAcceptanceCorrection(Char_t r) const
{
  // 
  // Generate the acceptance corrections 
  // 
  // Parameters:
  //    r Ring to generate for 
  // 
  // Return:
  //    Newly allocated histogram of acceptance corrections
  //
  DGUARD(fDebug, 3, "Make acceptance correction in FMD density calculator");
  const Double_t ic1[] = { 4.9895, 15.3560 };
  const Double_t ic2[] = { 1.8007, 17.2000 };
  const Double_t oc1[] = { 4.2231, 26.6638 };
  const Double_t oc2[] = { 1.8357, 27.9500 };
  const Double_t* c1   = (r == 'I' || r == 'i' ? ic1      : oc1);
  const Double_t* c2   = (r == 'I' || r == 'i' ? ic2      : oc2);
  Double_t  minR       = (r == 'I' || r == 'i' ?   4.5213 :  15.4);
  Double_t  maxR       = (r == 'I' || r == 'i' ?  17.2    :  28.0);
  Int_t     nStrips    = (r == 'I' || r == 'i' ? 512      : 256);
  Int_t     nSec       = (r == 'I' || r == 'i' ?  20      :  40);
  Float_t   basearc    = 2 * TMath::Pi() / nSec;
  Double_t  rad        = maxR - minR;
  Float_t   segment    = rad / nStrips;
  Float_t   cr         = TMath::Sqrt(c1[0]*c1[0]+c1[1]*c1[1]);

  // Numbers used to find end-point of strip.
  // (See http://mathworld.wolfram.com/Circle-LineIntersection.html)
  Float_t D            = c1[0] * c2[1] - c1[1] * c2[0];
  Float_t dx           = c2[0] - c1[0];
  Float_t dy           = c2[1] - c1[1];
  Float_t dr           = TMath::Sqrt(dx*dx+dy*dy);

  TH1D* ret = new TH1D(Form("acc%c", r), 
		       Form("Acceptance correction for FMDx%c", r), 
		       nStrips, -.5, nStrips-.5);
  ret->SetXTitle("Strip");
  ret->SetYTitle("#varphi acceptance");
  ret->SetDirectory(0);
  ret->SetFillColor(r == 'I' || r == 'i' ? kRed+1 : kBlue+1);
  ret->SetFillStyle(3001);

  for (Int_t t = 0; t < nStrips; t++) { 
    Float_t   radius     = minR + t * segment;
    
    // If the radius of the strip is smaller than the radius corresponding 
    // to the first corner we have a full strip length 
    if (radius <= cr) {
      ret->SetBinContent(t+1, 1);
      continue;
    }

    // Next, we should find the end-point of the strip - that is, 
    // the coordinates where the line from c1 to c2 intersects a circle 
    // with radius given by the strip. 
    // (See http://mathworld.wolfram.com/Circle-LineIntersection.html)
    // Calculate the determinant 
    Float_t det = radius * radius * dr * dr - D*D;

    if (det <=  0) { 
      // <0 means No intersection
      // =0 means Exactly tangent
      ret->SetBinContent(t+1, 1);
      continue;
    }

    // Calculate end-point and the corresponding opening angle 
    Float_t x   = (+D * dy + dx * TMath::Sqrt(det)) / dr / dr;
    Float_t y   = (-D * dx + dy * TMath::Sqrt(det)) / dr / dr;
    Float_t th  = TMath::ATan2(x, y);

    ret->SetBinContent(t+1, th / basearc);
  }
  return ret;
}

//_____________________________________________________________________
Float_t 
AliFMDDensityCalculator::AcceptanceCorrection(Char_t r, UShort_t t) const
{
  // 
  // Get the acceptance correction for strip @a t in an ring of type @a r
  // 
  // Parameters:
  //    r  Ring type ('I' or 'O')
  //    t  Strip number 
  // 
  // Return:
  //    Inverse acceptance correction 
  //
  TH1D* acc = (r == 'I' || r == 'i' ? fAccI : fAccO);
  return acc->GetBinContent(t+1);
}

//____________________________________________________________________
void
AliFMDDensityCalculator::Terminate(const TList* dir, TList* output, 
				   Int_t nEvents)
{
  // 
  // Scale the histograms to the total number of events 
  // 
  // Parameters:
  //    dir     where to put the output
  //    nEvents Number of events 
  //
  DGUARD(fDebug, 1, "Scale histograms in FMD density calculator");
  if (nEvents <= 0) return;
  TList* d = static_cast<TList*>(dir->FindObject(GetName()));
  if (!d) return;

  TList* out = new TList;
  out->SetName(d->GetName());
  out->SetOwner();
  
  TIter    next(&fRingHistos);
  RingHistos* o = 0;
  THStack* sums = new THStack("sums", "sums of ring signals");
  while ((o = static_cast<RingHistos*>(next()))) {
    o->Terminate(d, nEvents);
    if (!o->fDensity) { 
      Warning("Terminate", "No density in %s", o->GetName());
      continue;
    }
    TH1D* sum = o->fDensity->ProjectionX(o->GetName(), 1, 
					 o->fDensity->GetNbinsY(),"e");
    sum->Scale(1., "width");
    sum->SetTitle(o->GetName());
    sum->SetDirectory(0);
    sum->SetYTitle("#sum N_{ch,incl}");
    sums->Add(sum);
  }
  out->Add(sums);
  output->Add(out);
}

//____________________________________________________________________
void
AliFMDDensityCalculator::CreateOutputObjects(TList* dir)
{
  // 
  // Output diagnostic histograms to directory 
  // 
  // Parameters:
  //    dir List to write in
  //  
  DGUARD(fDebug, 1, "Define output FMD density calculator");
  TList* d = new TList;
  d->SetOwner();
  d->SetName(GetName());
  dir->Add(d);
  d->Add(fWeightedSum);
  d->Add(fSumOfWeights);
  d->Add(fCorrections);
  d->Add(fAccI);
  d->Add(fAccO);
  d->Add(fMaxWeights);
  d->Add(fLowCuts);

  TParameter<int>* nFiles = new TParameter<int>("nFiles", 1);
  nFiles->SetMergeMode('+');
  
  // d->Add(sigma);
  d->Add(AliForwardUtil::MakeParameter("maxParticle",  fMaxParticles));
  d->Add(AliForwardUtil::MakeParameter("minQuality",   fMinQuality));
  d->Add(AliForwardUtil::MakeParameter("method",       fUsePoisson));
  d->Add(AliForwardUtil::MakeParameter("phiAcceptance",fUsePhiAcceptance));
  d->Add(AliForwardUtil::MakeParameter("etaLumping",   fEtaLumping));
  d->Add(AliForwardUtil::MakeParameter("phiLumping",   fPhiLumping));
  d->Add(AliForwardUtil::MakeParameter("recalcPhi",    fRecalculatePhi));
  d->Add(AliForwardUtil::MakeParameter("maxOutliers",  fMaxOutliers));
  d->Add(AliForwardUtil::MakeParameter("outlierCut",   fOutlierCut));
  d->Add(nFiles);
  // d->Add(nxi);
  fCuts.Output(d,"lCuts");

  TIter    next(&fRingHistos);
  RingHistos* o = 0;
  while ((o = static_cast<RingHistos*>(next()))) {
    o->fPoisson.SetLumping(fEtaLumping, fPhiLumping);
    o->CreateOutputObjects(d);
  }

  if (!fDoTiming) return;

  fHTiming = new TProfile("timing", "#LTt_{part}#GT", 8, .5, 8.5);
  fHTiming->SetDirectory(0);
  fHTiming->SetYTitle("#LTt_{part}#GT");
  fHTiming->SetXTitle("Part");
  fHTiming->SetFillColor(kRed+1);
  fHTiming->SetFillStyle(3001);
  fHTiming->SetMarkerStyle(20);
  fHTiming->SetMarkerColor(kBlack);
  fHTiming->SetLineColor(kBlack);
  fHTiming->SetStats(0);
  TAxis* xaxis = fHTiming->GetXaxis();
  xaxis->SetBinLabel(1, "Re-calculation of #eta");
  xaxis->SetBinLabel(2, "N_{particle}");
  xaxis->SetBinLabel(3, "Correction");
  xaxis->SetBinLabel(4, "Re-calculation of #phi");
  xaxis->SetBinLabel(5, "Copy to cache");
  xaxis->SetBinLabel(6, "Poisson calculation");
  xaxis->SetBinLabel(7, "Diagnostics");
  xaxis->SetBinLabel(8, "Total");
  d->Add(fHTiming);
}
#define PF(N,V,...)					\
  AliForwardUtil::PrintField(N,V, ## __VA_ARGS__)
#define PFB(N,FLAG)				\
  do {									\
    AliForwardUtil::PrintName(N);					\
    std::cout << std::boolalpha << (FLAG) << std::noboolalpha << std::endl; \
  } while(false)
#define PFV(N,VALUE)					\
  do {							\
    AliForwardUtil::PrintName(N);			\
    std::cout << (VALUE) << std::endl; } while(false)

//____________________________________________________________________
void
AliFMDDensityCalculator::Print(Option_t* option) const
{
  // 
  // Print information 
  // 
  // Parameters:
  //    option Not used
  //
  AliForwardUtil::PrintTask(*this);
  gROOT->IncreaseDirLevel();

  TString phiM("none");
  switch (fUsePhiAcceptance) { 
  case kPhiNoCorrect:    phiM = "none"; break;
  case kPhiCorrectNch:   phiM = "correct Nch"; break;
  case kPhiCorrectELoss: phiM = "correct energy loss"; break;
  }

  PFV("Max(particles)",		fMaxParticles );
  PFV("Min(quality)",           fMinQuality );
  PFB("Poisson method",		fUsePoisson );
  PFV("Eta lumping",		fEtaLumping );
  PFV("Phi lumping",		fPhiLumping );
  PFB("Recalculate phi",	fRecalculatePhi );
  PFB("Use phi acceptance",     phiM);
  PFV("Lower cut", "");
  fCuts.Print();

  TString opt(option);
  opt.ToLower();
  if (!opt.Contains("nomax")) {
    PFV("Max weights", "");

    char ind[64];
    for (Int_t i = 0; i < gROOT->GetDirLevel(); i++) ind[i] = ' ';
    ind[gROOT->GetDirLevel()] = '\0';
    for (UShort_t d=1; d<=3; d++) { 
      UShort_t nr = (d == 1 ? 1 : 2);
      for (UShort_t q=0; q<nr; q++) { 
	ind[gROOT->GetDirLevel()]   = ' ';
	ind[gROOT->GetDirLevel()+1] = '\0';
	Char_t      r = (q == 0 ? 'I' : 'O');
	std::cout << ind << " FMD" << d << r << ":";
	ind[gROOT->GetDirLevel()+1] = ' ';
	ind[gROOT->GetDirLevel()+2] = '\0';
	
	const TArrayI& a = (d == 1 ? fFMD1iMax : 
			    (d == 2 ? (r == 'I' ? fFMD2iMax : fFMD2oMax) : 
			     (r == 'I' ? fFMD3iMax : fFMD3oMax)));
	Int_t j = 0;
	for (Int_t i = 0; i < a.fN; i++) { 
	  if (a.fArray[i] < 1) continue; 
	  if (j % 6 == 0)      std::cout << "\n " << ind;
	  j++;
	  std::cout << "  " << std::setw(3) << i << ": " << a.fArray[i];
	}
	std::cout << std::endl;
      }
    }
  }
  gROOT->DecreaseDirLevel();
}

//====================================================================
AliFMDDensityCalculator::RingHistos::RingHistos()
  : AliForwardUtil::RingHistos(),
    fList(0),
    // fEvsN(0), 
    // fEvsM(0), 
    // fEtaVsN(0),
    // fEtaVsM(0),
    fCorr(0),
    fDensity(0),
    fELossVsPoisson(0),
    fDiffELossPoisson(0),
    fELossVsPoissonOut(0),
    fDiffELossPoissonOut(0),
    fOutliers(0),
    fPoisson(),
    fELoss(0),
    fELossUsed(0),
    fMultCut(0), 
    fTotal(0),
    fGood(0),
    fPhiAcc(0), 
    fPhiBefore(0),
    fPhiAfter(0)
{
  // 
  // Default CTOR
  //
}

//____________________________________________________________________
AliFMDDensityCalculator::RingHistos::RingHistos(UShort_t d, Char_t r)
  : AliForwardUtil::RingHistos(d,r),
    fList(0),
    // fEvsN(0), 
    // fEvsM(0),
    // fEtaVsN(0),
    // fEtaVsM(0),
    fCorr(0),
    fDensity(0),
    fELossVsPoisson(0),
    fDiffELossPoisson(0),
    fELossVsPoissonOut(0),
    fDiffELossPoissonOut(0),
    fOutliers(0),
    fPoisson("ignored"),
    fELoss(0),
    fELossUsed(0),
    fMultCut(0), 
    fTotal(0),
    fGood(0),
    fPhiAcc(0), 
    fPhiBefore(0),
    fPhiAfter(0)
{
  // 
  // Constructor
  // 
  // Parameters:
  //    d detector
  //    r ring 
  //
#if 0
  fEvsN = new TH2D("elossVsNnocorr", 
		   "#Delta E/#Delta E_{mip} vs uncorrected inclusive N_{ch}",
		   250, -.5, 24.5, 251, -1.5, 24.5);
  fEvsN->SetXTitle("#Delta E/#Delta E_{mip}");
  fEvsN->SetYTitle("Inclusive N_{ch} (uncorrected)");
  fEvsN->Sumw2();
  fEvsN->SetDirectory(0);

  fEvsM = static_cast<TH2D*>(fEvsN->Clone("elossVsNcorr"));
  fEvsM->SetTitle("#Delta E/#Delta E_{mip} vs corrected inclusive N_{ch}");
  fEvsM->SetDirectory(0);

  fEtaVsN = new TProfile("etaVsNnocorr",
			 "Average inclusive N_{ch} vs #eta (uncorrected)",
			 200, -4, 6);
  fEtaVsN->SetXTitle("#eta");
  fEtaVsN->SetYTitle("#LT N_{ch,incl}#GT (uncorrected)");
  fEtaVsN->SetDirectory(0);
  fEtaVsN->SetLineColor(Color());
  fEtaVsN->SetFillColor(Color());

  fEtaVsM = static_cast<TProfile*>(fEtaVsN->Clone("etaVsNcorr"));
  fEtaVsM->SetTitle("Average inclusive N_{ch} vs #eta (corrected)");
  fEtaVsM->SetYTitle("#LT N_{ch,incl}#GT (corrected)");
  fEtaVsM->SetDirectory(0);
#endif

  fCorr = new TProfile("corr", "Average correction", 200, -4, 6);
  fCorr->SetXTitle("#eta");
  fCorr->SetYTitle("#LT correction#GT");
  fCorr->SetDirectory(0);
  fCorr->SetLineColor(Color());
  fCorr->SetFillColor(Color());

  fDensity = new TH2D("inclDensity", "Inclusive N_{ch} density",
		      200, -4, 6, (r == 'I' || r == 'i' ? 20 : 40), 
		      0, 2*TMath::Pi());
  fDensity->SetDirectory(0);
  fDensity->Sumw2();  fDensity->SetMarkerColor(Color());
  fDensity->SetXTitle("#eta");
  fDensity->SetYTitle("#phi [radians]");
  fDensity->SetZTitle("Inclusive N_{ch} density");

  // --- Create increasing sized bins --------------------------------
  TArrayD bins;
  // bins, lowest order, higest order, return array
  const char* nchP = "N_{ch}^{Poisson}";
  const char* nchE = "N_{ch}^{#Delta}";
  AliForwardUtil::MakeLogScale(300, 0, 2, bins);
  fELossVsPoisson = new TH2D("elossVsPoisson", 
			     "N_{ch} from energy loss vs from Poisson",
			     bins.GetSize()-1, bins.GetArray(), 
			     bins.GetSize()-1, bins.GetArray());
  fELossVsPoisson->SetDirectory(0);
  fELossVsPoisson->SetXTitle(nchE);
  fELossVsPoisson->SetYTitle(nchP);
  fELossVsPoisson->SetZTitle("Correlation");
  fELossVsPoissonOut = 
    static_cast<TH2D*>(fELossVsPoisson
		       ->Clone(Form("%sOutlier", 
				    fELossVsPoisson->GetName())));
  fELossVsPoissonOut->SetDirectory(0);
  fELossVsPoissonOut->SetMarkerStyle(20);
  fELossVsPoissonOut->SetMarkerSize(0.3);
  fELossVsPoissonOut->SetMarkerColor(kBlack);
  fELossVsPoissonOut->SetTitle(Form("%s for outliers", 
				    fELossVsPoisson->GetTitle()));

  fDiffELossPoisson = new TH1D("diffElossPoisson",
			       Form("(%s-%s)/%s", nchP, nchE, nchE),
			       100, -1, 1);
  fDiffELossPoisson->SetDirectory(0);
  fDiffELossPoisson->SetXTitle(fDiffELossPoisson->GetTitle());
  fDiffELossPoisson->SetYTitle("Frequency");
  fDiffELossPoisson->SetMarkerColor(Color());
  fDiffELossPoisson->SetFillColor(Color());
  fDiffELossPoisson->SetFillStyle(3001);
  fDiffELossPoisson->Sumw2();
			       
  fDiffELossPoissonOut = 
    static_cast<TH1D*>(fDiffELossPoisson
		       ->Clone(Form("%sOutlier",fDiffELossPoisson->GetName())));
  fDiffELossPoissonOut->SetDirectory(0);
  fDiffELossPoissonOut->SetTitle(Form("%s for outliers", 
				      fDiffELossPoisson->GetTitle()));
  fDiffELossPoissonOut->SetMarkerColor(Color()-2);
  fDiffELossPoissonOut->SetFillColor(Color()-2);
  fDiffELossPoissonOut->SetFillStyle(3002);
  
  fOutliers = new TH1D("outliers", "Fraction of outliers", 100, 0, 1);
  fOutliers->SetDirectory(0);
  fOutliers->SetXTitle("N_{outlier}/(N_{outlier}+N_{inside})");
  fOutliers->SetYTitle("#sum_{events}#sum_{bins}");
  fOutliers->SetFillColor(Color());
  fOutliers->SetFillStyle(3001);
  fOutliers->SetLineColor(kBlack);

  fELoss = new TH1D("eloss", "#Delta/#Delta_{mip} in all strips", 
		    640, -1, 15);
  fELoss->SetXTitle("#Delta/#Delta_{mip} (selected)");
  fELoss->SetYTitle("P(#Delta/#Delta_{mip})");
  fELoss->SetFillColor(Color()-2);
  fELoss->SetFillStyle(3003);
  fELoss->SetLineColor(kBlack);
  fELoss->SetLineStyle(2);
  fELoss->SetLineWidth(1);
  fELoss->SetDirectory(0);

  fELossUsed = static_cast<TH1D*>(fELoss->Clone("elossUsed"));
  fELossUsed->SetTitle("#Delta/#Delta_{mip} in used strips");
  fELossUsed->SetFillStyle(3002);
  fELossUsed->SetLineStyle(1);
  fELossUsed->SetDirectory(0);

  fPhiBefore = new TH1D("phiBefore", "#phi distribution (before recalc)",
			(r == 'I' || r == 'i' ? 20 : 40), 0, 2*TMath::Pi());
  fPhiBefore->SetDirectory(0);
  fPhiBefore->SetXTitle("#phi");
  fPhiBefore->SetYTitle("Events");
  fPhiBefore->SetMarkerColor(Color());
  fPhiBefore->SetLineColor(Color());
  fPhiBefore->SetFillColor(Color());
  fPhiBefore->SetFillStyle(3001);
  fPhiBefore->SetMarkerStyle(20);

  fPhiAfter = static_cast<TH1D*>(fPhiBefore->Clone("phiAfter"));
  fPhiAfter->SetTitle("#phi distribution (after re-calc)");
  fPhiAfter->SetDirectory(0);
  
}
//____________________________________________________________________
AliFMDDensityCalculator::RingHistos::RingHistos(const RingHistos& o)
  : AliForwardUtil::RingHistos(o),
    fList(o.fList), 
    // fEvsN(o.fEvsN), 
    // fEvsM(o.fEvsM),
    // fEtaVsN(o.fEtaVsN),
    // fEtaVsM(o.fEtaVsM),
    fCorr(o.fCorr),
    fDensity(o.fDensity),
    fELossVsPoisson(o.fELossVsPoisson),
    fDiffELossPoisson(o.fDiffELossPoisson),
    fELossVsPoissonOut(o.fELossVsPoissonOut),
    fDiffELossPoissonOut(o.fDiffELossPoissonOut),
    fOutliers(o.fOutliers),
    fPoisson(o.fPoisson),
    fELoss(o.fELoss),
    fELossUsed(o.fELossUsed),
    fMultCut(o.fMultCut), 
    fTotal(o.fTotal),
    fGood(o.fGood),
    fPhiAcc(o.fPhiAcc), 
    fPhiBefore(o.fPhiBefore),
    fPhiAfter(o.fPhiAfter)
{
  // 
  // Copy constructor 
  // 
  // Parameters:
  //    o Object to copy from 
  //
}

//____________________________________________________________________
AliFMDDensityCalculator::RingHistos&
AliFMDDensityCalculator::RingHistos::operator=(const RingHistos& o)
{
  // 
  // Assignment operator 
  // 
  // Parameters:
  //    o Object to assign from 
  // 
  // Return:
  //    Reference to this 
  //
  if (&o == this) return *this; 
  AliForwardUtil::RingHistos::operator=(o);
  
  // if (fEvsN)             delete fEvsN;
  // if (fEvsM)             delete fEvsM;
  // if (fEtaVsN)           delete fEtaVsN;
  // if (fEtaVsM)           delete fEtaVsM;
  if (fCorr)             delete fCorr;
  if (fDensity)          delete fDensity;
  if (fELossVsPoisson)   delete fELossVsPoisson;
  if (fDiffELossPoisson) delete fDiffELossPoisson;
  if (fTotal)            delete fTotal;
  if (fGood)             delete fGood;
  if (fPhiAcc)           delete fPhiAcc;
  if (fPhiBefore)        delete fPhiBefore;
  if (fPhiAfter)         delete fPhiAfter;

  // fEvsN             = static_cast<TH2D*>(o.fEvsN->Clone());
  // fEvsM             = static_cast<TH2D*>(o.fEvsM->Clone());
  // fEtaVsN           = static_cast<TProfile*>(o.fEtaVsN->Clone());
  // fEtaVsM           = static_cast<TProfile*>(o.fEtaVsM->Clone());
  fCorr             = static_cast<TProfile*>(o.fCorr->Clone());
  fDensity          = static_cast<TH2D*>(o.fDensity->Clone());
  fELossVsPoisson   = static_cast<TH2D*>(o.fELossVsPoisson->Clone());
  fDiffELossPoisson = static_cast<TH1D*>(o.fDiffELossPoisson->Clone());
  fELossVsPoissonOut   = static_cast<TH2D*>(o.fELossVsPoisson->Clone());
  fDiffELossPoissonOut = static_cast<TH1D*>(o.fDiffELossPoisson->Clone());
  fOutliers            = static_cast<TH1D*>(o.fOutliers->Clone());
  fPoisson          = o.fPoisson;
  fELoss            = static_cast<TH1D*>(o.fELoss->Clone());
  fELossUsed        = static_cast<TH1D*>(o.fELossUsed->Clone());
  fTotal            = static_cast<TH1D*>(o.fTotal->Clone());
  fGood             = static_cast<TH1D*>(o.fGood->Clone());
  fPhiAcc           = static_cast<TH2D*>(o.fPhiAcc->Clone());
  fPhiBefore        = static_cast<TH1D*>(o.fPhiBefore->Clone());
  fPhiAfter         = static_cast<TH1D*>(o.fPhiAfter->Clone());
  return *this;
}
//____________________________________________________________________
AliFMDDensityCalculator::RingHistos::~RingHistos()
{
  // 
  // Destructor 
  //
}


//____________________________________________________________________
void
AliFMDDensityCalculator::RingHistos::SetupForData(const TAxis& eAxis)
{
  // Initialize 
  // This is called on first event 
  fPoisson.Init(-1,-1);
  fTotal = new TH1D("total", "Total # of strips per #eta",
		    eAxis.GetNbins(), eAxis.GetXmin(), eAxis.GetXmax());
  fTotal->SetDirectory(0);
  fTotal->SetXTitle("#eta");
  fTotal->SetYTitle("# of strips");
  fGood = static_cast<TH1D*>(fTotal->Clone("good"));
  fGood->SetTitle("# of good strips per #eta");
  fGood->SetDirectory(0);
  
  fPhiAcc = new TH2D("phiAcc", "#phi acceptance vs Ip_{z}", 
		     eAxis.GetNbins(), eAxis.GetXmin(), eAxis.GetXmax(),
		     10, -10, 10);
  fPhiAcc->SetXTitle("#eta");
  fPhiAcc->SetYTitle("v_{z} [cm]");
  fPhiAcc->SetZTitle("#phi acceptance");
  fPhiAcc->SetDirectory(0);

  if (fList) fList->Add(fPhiAcc);
}

//____________________________________________________________________
void
AliFMDDensityCalculator::RingHistos::CreateOutputObjects(TList* dir)
{
  // 
  // Make output.  This is called as part of SlaveBegin
  // 
  // Parameters:
  //    dir Where to put it 
  //
  TList* d = DefineOutputList(dir);
  // d->Add(fEvsN);
  // d->Add(fEvsM);
  // d->Add(fEtaVsN);
  // d->Add(fEtaVsM);
  d->Add(fCorr);
  d->Add(fDensity);
  d->Add(fELossVsPoisson);
  d->Add(fELossVsPoissonOut);
  d->Add(fDiffELossPoisson);
  d->Add(fDiffELossPoissonOut);
  d->Add(fOutliers);
  fPoisson.Output(d);
  fPoisson.GetOccupancy()->SetFillColor(Color());
  fPoisson.GetMean()->SetFillColor(Color());
  fPoisson.GetOccupancy()->SetFillColor(Color());
  d->Add(fELoss);
  d->Add(fELossUsed);
  d->Add(fPhiBefore);
  d->Add(fPhiAfter);

  TAxis x(NStrip(), -.5, NStrip()-.5);
  TAxis y(NSector(), -.5, NSector()-.5);
  x.SetTitle("strip");
  y.SetTitle("sector");
  fPoisson.Define(x, y);

  d->Add(AliForwardUtil::MakeParameter("cut", fMultCut));
  fList = d;
}

//____________________________________________________________________
void
AliFMDDensityCalculator::RingHistos::Terminate(TList* dir, Int_t nEvents)
{
  // 
  // Scale the histograms to the total number of events 
  // 
  // Parameters:
  //    dir     Where the output is 
  //    nEvents Number of events 
  //
  TList* l = GetOutputList(dir);
  if (!l) return; 

  TH2D* density = static_cast<TH2D*>(GetOutputHist(l,"inclDensity"));
  if (density) density->Scale(1./nEvents);
  fDensity = density;
}

//____________________________________________________________________
//
// EOF
//
	  


 AliFMDDensityCalculator.cxx:1
 AliFMDDensityCalculator.cxx:2
 AliFMDDensityCalculator.cxx:3
 AliFMDDensityCalculator.cxx:4
 AliFMDDensityCalculator.cxx:5
 AliFMDDensityCalculator.cxx:6
 AliFMDDensityCalculator.cxx:7
 AliFMDDensityCalculator.cxx:8
 AliFMDDensityCalculator.cxx:9
 AliFMDDensityCalculator.cxx:10
 AliFMDDensityCalculator.cxx:11
 AliFMDDensityCalculator.cxx:12
 AliFMDDensityCalculator.cxx:13
 AliFMDDensityCalculator.cxx:14
 AliFMDDensityCalculator.cxx:15
 AliFMDDensityCalculator.cxx:16
 AliFMDDensityCalculator.cxx:17
 AliFMDDensityCalculator.cxx:18
 AliFMDDensityCalculator.cxx:19
 AliFMDDensityCalculator.cxx:20
 AliFMDDensityCalculator.cxx:21
 AliFMDDensityCalculator.cxx:22
 AliFMDDensityCalculator.cxx:23
 AliFMDDensityCalculator.cxx:24
 AliFMDDensityCalculator.cxx:25
 AliFMDDensityCalculator.cxx:26
 AliFMDDensityCalculator.cxx:27
 AliFMDDensityCalculator.cxx:28
 AliFMDDensityCalculator.cxx:29
 AliFMDDensityCalculator.cxx:30
 AliFMDDensityCalculator.cxx:31
 AliFMDDensityCalculator.cxx:32
 AliFMDDensityCalculator.cxx:33
 AliFMDDensityCalculator.cxx:34
 AliFMDDensityCalculator.cxx:35
 AliFMDDensityCalculator.cxx:36
 AliFMDDensityCalculator.cxx:37
 AliFMDDensityCalculator.cxx:38
 AliFMDDensityCalculator.cxx:39
 AliFMDDensityCalculator.cxx:40
 AliFMDDensityCalculator.cxx:41
 AliFMDDensityCalculator.cxx:42
 AliFMDDensityCalculator.cxx:43
 AliFMDDensityCalculator.cxx:44
 AliFMDDensityCalculator.cxx:45
 AliFMDDensityCalculator.cxx:46
 AliFMDDensityCalculator.cxx:47
 AliFMDDensityCalculator.cxx:48
 AliFMDDensityCalculator.cxx:49
 AliFMDDensityCalculator.cxx:50
 AliFMDDensityCalculator.cxx:51
 AliFMDDensityCalculator.cxx:52
 AliFMDDensityCalculator.cxx:53
 AliFMDDensityCalculator.cxx:54
 AliFMDDensityCalculator.cxx:55
 AliFMDDensityCalculator.cxx:56
 AliFMDDensityCalculator.cxx:57
 AliFMDDensityCalculator.cxx:58
 AliFMDDensityCalculator.cxx:59
 AliFMDDensityCalculator.cxx:60
 AliFMDDensityCalculator.cxx:61
 AliFMDDensityCalculator.cxx:62
 AliFMDDensityCalculator.cxx:63
 AliFMDDensityCalculator.cxx:64
 AliFMDDensityCalculator.cxx:65
 AliFMDDensityCalculator.cxx:66
 AliFMDDensityCalculator.cxx:67
 AliFMDDensityCalculator.cxx:68
 AliFMDDensityCalculator.cxx:69
 AliFMDDensityCalculator.cxx:70
 AliFMDDensityCalculator.cxx:71
 AliFMDDensityCalculator.cxx:72
 AliFMDDensityCalculator.cxx:73
 AliFMDDensityCalculator.cxx:74
 AliFMDDensityCalculator.cxx:75
 AliFMDDensityCalculator.cxx:76
 AliFMDDensityCalculator.cxx:77
 AliFMDDensityCalculator.cxx:78
 AliFMDDensityCalculator.cxx:79
 AliFMDDensityCalculator.cxx:80
 AliFMDDensityCalculator.cxx:81
 AliFMDDensityCalculator.cxx:82
 AliFMDDensityCalculator.cxx:83
 AliFMDDensityCalculator.cxx:84
 AliFMDDensityCalculator.cxx:85
 AliFMDDensityCalculator.cxx:86
 AliFMDDensityCalculator.cxx:87
 AliFMDDensityCalculator.cxx:88
 AliFMDDensityCalculator.cxx:89
 AliFMDDensityCalculator.cxx:90
 AliFMDDensityCalculator.cxx:91
 AliFMDDensityCalculator.cxx:92
 AliFMDDensityCalculator.cxx:93
 AliFMDDensityCalculator.cxx:94
 AliFMDDensityCalculator.cxx:95
 AliFMDDensityCalculator.cxx:96
 AliFMDDensityCalculator.cxx:97
 AliFMDDensityCalculator.cxx:98
 AliFMDDensityCalculator.cxx:99
 AliFMDDensityCalculator.cxx:100
 AliFMDDensityCalculator.cxx:101
 AliFMDDensityCalculator.cxx:102
 AliFMDDensityCalculator.cxx:103
 AliFMDDensityCalculator.cxx:104
 AliFMDDensityCalculator.cxx:105
 AliFMDDensityCalculator.cxx:106
 AliFMDDensityCalculator.cxx:107
 AliFMDDensityCalculator.cxx:108
 AliFMDDensityCalculator.cxx:109
 AliFMDDensityCalculator.cxx:110
 AliFMDDensityCalculator.cxx:111
 AliFMDDensityCalculator.cxx:112
 AliFMDDensityCalculator.cxx:113
 AliFMDDensityCalculator.cxx:114
 AliFMDDensityCalculator.cxx:115
 AliFMDDensityCalculator.cxx:116
 AliFMDDensityCalculator.cxx:117
 AliFMDDensityCalculator.cxx:118
 AliFMDDensityCalculator.cxx:119
 AliFMDDensityCalculator.cxx:120
 AliFMDDensityCalculator.cxx:121
 AliFMDDensityCalculator.cxx:122
 AliFMDDensityCalculator.cxx:123
 AliFMDDensityCalculator.cxx:124
 AliFMDDensityCalculator.cxx:125
 AliFMDDensityCalculator.cxx:126
 AliFMDDensityCalculator.cxx:127
 AliFMDDensityCalculator.cxx:128
 AliFMDDensityCalculator.cxx:129
 AliFMDDensityCalculator.cxx:130
 AliFMDDensityCalculator.cxx:131
 AliFMDDensityCalculator.cxx:132
 AliFMDDensityCalculator.cxx:133
 AliFMDDensityCalculator.cxx:134
 AliFMDDensityCalculator.cxx:135
 AliFMDDensityCalculator.cxx:136
 AliFMDDensityCalculator.cxx:137
 AliFMDDensityCalculator.cxx:138
 AliFMDDensityCalculator.cxx:139
 AliFMDDensityCalculator.cxx:140
 AliFMDDensityCalculator.cxx:141
 AliFMDDensityCalculator.cxx:142
 AliFMDDensityCalculator.cxx:143
 AliFMDDensityCalculator.cxx:144
 AliFMDDensityCalculator.cxx:145
 AliFMDDensityCalculator.cxx:146
 AliFMDDensityCalculator.cxx:147
 AliFMDDensityCalculator.cxx:148
 AliFMDDensityCalculator.cxx:149
 AliFMDDensityCalculator.cxx:150
 AliFMDDensityCalculator.cxx:151
 AliFMDDensityCalculator.cxx:152
 AliFMDDensityCalculator.cxx:153
 AliFMDDensityCalculator.cxx:154
 AliFMDDensityCalculator.cxx:155
 AliFMDDensityCalculator.cxx:156
 AliFMDDensityCalculator.cxx:157
 AliFMDDensityCalculator.cxx:158
 AliFMDDensityCalculator.cxx:159
 AliFMDDensityCalculator.cxx:160
 AliFMDDensityCalculator.cxx:161
 AliFMDDensityCalculator.cxx:162
 AliFMDDensityCalculator.cxx:163
 AliFMDDensityCalculator.cxx:164
 AliFMDDensityCalculator.cxx:165
 AliFMDDensityCalculator.cxx:166
 AliFMDDensityCalculator.cxx:167
 AliFMDDensityCalculator.cxx:168
 AliFMDDensityCalculator.cxx:169
 AliFMDDensityCalculator.cxx:170
 AliFMDDensityCalculator.cxx:171
 AliFMDDensityCalculator.cxx:172
 AliFMDDensityCalculator.cxx:173
 AliFMDDensityCalculator.cxx:174
 AliFMDDensityCalculator.cxx:175
 AliFMDDensityCalculator.cxx:176
 AliFMDDensityCalculator.cxx:177
 AliFMDDensityCalculator.cxx:178
 AliFMDDensityCalculator.cxx:179
 AliFMDDensityCalculator.cxx:180
 AliFMDDensityCalculator.cxx:181
 AliFMDDensityCalculator.cxx:182
 AliFMDDensityCalculator.cxx:183
 AliFMDDensityCalculator.cxx:184
 AliFMDDensityCalculator.cxx:185
 AliFMDDensityCalculator.cxx:186
 AliFMDDensityCalculator.cxx:187
 AliFMDDensityCalculator.cxx:188
 AliFMDDensityCalculator.cxx:189
 AliFMDDensityCalculator.cxx:190
 AliFMDDensityCalculator.cxx:191
 AliFMDDensityCalculator.cxx:192
 AliFMDDensityCalculator.cxx:193
 AliFMDDensityCalculator.cxx:194
 AliFMDDensityCalculator.cxx:195
 AliFMDDensityCalculator.cxx:196
 AliFMDDensityCalculator.cxx:197
 AliFMDDensityCalculator.cxx:198
 AliFMDDensityCalculator.cxx:199
 AliFMDDensityCalculator.cxx:200
 AliFMDDensityCalculator.cxx:201
 AliFMDDensityCalculator.cxx:202
 AliFMDDensityCalculator.cxx:203
 AliFMDDensityCalculator.cxx:204
 AliFMDDensityCalculator.cxx:205
 AliFMDDensityCalculator.cxx:206
 AliFMDDensityCalculator.cxx:207
 AliFMDDensityCalculator.cxx:208
 AliFMDDensityCalculator.cxx:209
 AliFMDDensityCalculator.cxx:210
 AliFMDDensityCalculator.cxx:211
 AliFMDDensityCalculator.cxx:212
 AliFMDDensityCalculator.cxx:213
 AliFMDDensityCalculator.cxx:214
 AliFMDDensityCalculator.cxx:215
 AliFMDDensityCalculator.cxx:216
 AliFMDDensityCalculator.cxx:217
 AliFMDDensityCalculator.cxx:218
 AliFMDDensityCalculator.cxx:219
 AliFMDDensityCalculator.cxx:220
 AliFMDDensityCalculator.cxx:221
 AliFMDDensityCalculator.cxx:222
 AliFMDDensityCalculator.cxx:223
 AliFMDDensityCalculator.cxx:224
 AliFMDDensityCalculator.cxx:225
 AliFMDDensityCalculator.cxx:226
 AliFMDDensityCalculator.cxx:227
 AliFMDDensityCalculator.cxx:228
 AliFMDDensityCalculator.cxx:229
 AliFMDDensityCalculator.cxx:230
 AliFMDDensityCalculator.cxx:231
 AliFMDDensityCalculator.cxx:232
 AliFMDDensityCalculator.cxx:233
 AliFMDDensityCalculator.cxx:234
 AliFMDDensityCalculator.cxx:235
 AliFMDDensityCalculator.cxx:236
 AliFMDDensityCalculator.cxx:237
 AliFMDDensityCalculator.cxx:238
 AliFMDDensityCalculator.cxx:239
 AliFMDDensityCalculator.cxx:240
 AliFMDDensityCalculator.cxx:241
 AliFMDDensityCalculator.cxx:242
 AliFMDDensityCalculator.cxx:243
 AliFMDDensityCalculator.cxx:244
 AliFMDDensityCalculator.cxx:245
 AliFMDDensityCalculator.cxx:246
 AliFMDDensityCalculator.cxx:247
 AliFMDDensityCalculator.cxx:248
 AliFMDDensityCalculator.cxx:249
 AliFMDDensityCalculator.cxx:250
 AliFMDDensityCalculator.cxx:251
 AliFMDDensityCalculator.cxx:252
 AliFMDDensityCalculator.cxx:253
 AliFMDDensityCalculator.cxx:254
 AliFMDDensityCalculator.cxx:255
 AliFMDDensityCalculator.cxx:256
 AliFMDDensityCalculator.cxx:257
 AliFMDDensityCalculator.cxx:258
 AliFMDDensityCalculator.cxx:259
 AliFMDDensityCalculator.cxx:260
 AliFMDDensityCalculator.cxx:261
 AliFMDDensityCalculator.cxx:262
 AliFMDDensityCalculator.cxx:263
 AliFMDDensityCalculator.cxx:264
 AliFMDDensityCalculator.cxx:265
 AliFMDDensityCalculator.cxx:266
 AliFMDDensityCalculator.cxx:267
 AliFMDDensityCalculator.cxx:268
 AliFMDDensityCalculator.cxx:269
 AliFMDDensityCalculator.cxx:270
 AliFMDDensityCalculator.cxx:271
 AliFMDDensityCalculator.cxx:272
 AliFMDDensityCalculator.cxx:273
 AliFMDDensityCalculator.cxx:274
 AliFMDDensityCalculator.cxx:275
 AliFMDDensityCalculator.cxx:276
 AliFMDDensityCalculator.cxx:277
 AliFMDDensityCalculator.cxx:278
 AliFMDDensityCalculator.cxx:279
 AliFMDDensityCalculator.cxx:280
 AliFMDDensityCalculator.cxx:281
 AliFMDDensityCalculator.cxx:282
 AliFMDDensityCalculator.cxx:283
 AliFMDDensityCalculator.cxx:284
 AliFMDDensityCalculator.cxx:285
 AliFMDDensityCalculator.cxx:286
 AliFMDDensityCalculator.cxx:287
 AliFMDDensityCalculator.cxx:288
 AliFMDDensityCalculator.cxx:289
 AliFMDDensityCalculator.cxx:290
 AliFMDDensityCalculator.cxx:291
 AliFMDDensityCalculator.cxx:292
 AliFMDDensityCalculator.cxx:293
 AliFMDDensityCalculator.cxx:294
 AliFMDDensityCalculator.cxx:295
 AliFMDDensityCalculator.cxx:296
 AliFMDDensityCalculator.cxx:297
 AliFMDDensityCalculator.cxx:298
 AliFMDDensityCalculator.cxx:299
 AliFMDDensityCalculator.cxx:300
 AliFMDDensityCalculator.cxx:301
 AliFMDDensityCalculator.cxx:302
 AliFMDDensityCalculator.cxx:303
 AliFMDDensityCalculator.cxx:304
 AliFMDDensityCalculator.cxx:305
 AliFMDDensityCalculator.cxx:306
 AliFMDDensityCalculator.cxx:307
 AliFMDDensityCalculator.cxx:308
 AliFMDDensityCalculator.cxx:309
 AliFMDDensityCalculator.cxx:310
 AliFMDDensityCalculator.cxx:311
 AliFMDDensityCalculator.cxx:312
 AliFMDDensityCalculator.cxx:313
 AliFMDDensityCalculator.cxx:314
 AliFMDDensityCalculator.cxx:315
 AliFMDDensityCalculator.cxx:316
 AliFMDDensityCalculator.cxx:317
 AliFMDDensityCalculator.cxx:318
 AliFMDDensityCalculator.cxx:319
 AliFMDDensityCalculator.cxx:320
 AliFMDDensityCalculator.cxx:321
 AliFMDDensityCalculator.cxx:322
 AliFMDDensityCalculator.cxx:323
 AliFMDDensityCalculator.cxx:324
 AliFMDDensityCalculator.cxx:325
 AliFMDDensityCalculator.cxx:326
 AliFMDDensityCalculator.cxx:327
 AliFMDDensityCalculator.cxx:328
 AliFMDDensityCalculator.cxx:329
 AliFMDDensityCalculator.cxx:330
 AliFMDDensityCalculator.cxx:331
 AliFMDDensityCalculator.cxx:332
 AliFMDDensityCalculator.cxx:333
 AliFMDDensityCalculator.cxx:334
 AliFMDDensityCalculator.cxx:335
 AliFMDDensityCalculator.cxx:336
 AliFMDDensityCalculator.cxx:337
 AliFMDDensityCalculator.cxx:338
 AliFMDDensityCalculator.cxx:339
 AliFMDDensityCalculator.cxx:340
 AliFMDDensityCalculator.cxx:341
 AliFMDDensityCalculator.cxx:342
 AliFMDDensityCalculator.cxx:343
 AliFMDDensityCalculator.cxx:344
 AliFMDDensityCalculator.cxx:345
 AliFMDDensityCalculator.cxx:346
 AliFMDDensityCalculator.cxx:347
 AliFMDDensityCalculator.cxx:348
 AliFMDDensityCalculator.cxx:349
 AliFMDDensityCalculator.cxx:350
 AliFMDDensityCalculator.cxx:351
 AliFMDDensityCalculator.cxx:352
 AliFMDDensityCalculator.cxx:353
 AliFMDDensityCalculator.cxx:354
 AliFMDDensityCalculator.cxx:355
 AliFMDDensityCalculator.cxx:356
 AliFMDDensityCalculator.cxx:357
 AliFMDDensityCalculator.cxx:358
 AliFMDDensityCalculator.cxx:359
 AliFMDDensityCalculator.cxx:360
 AliFMDDensityCalculator.cxx:361
 AliFMDDensityCalculator.cxx:362
 AliFMDDensityCalculator.cxx:363
 AliFMDDensityCalculator.cxx:364
 AliFMDDensityCalculator.cxx:365
 AliFMDDensityCalculator.cxx:366
 AliFMDDensityCalculator.cxx:367
 AliFMDDensityCalculator.cxx:368
 AliFMDDensityCalculator.cxx:369
 AliFMDDensityCalculator.cxx:370
 AliFMDDensityCalculator.cxx:371
 AliFMDDensityCalculator.cxx:372
 AliFMDDensityCalculator.cxx:373
 AliFMDDensityCalculator.cxx:374
 AliFMDDensityCalculator.cxx:375
 AliFMDDensityCalculator.cxx:376
 AliFMDDensityCalculator.cxx:377
 AliFMDDensityCalculator.cxx:378
 AliFMDDensityCalculator.cxx:379
 AliFMDDensityCalculator.cxx:380
 AliFMDDensityCalculator.cxx:381
 AliFMDDensityCalculator.cxx:382
 AliFMDDensityCalculator.cxx:383
 AliFMDDensityCalculator.cxx:384
 AliFMDDensityCalculator.cxx:385
 AliFMDDensityCalculator.cxx:386
 AliFMDDensityCalculator.cxx:387
 AliFMDDensityCalculator.cxx:388
 AliFMDDensityCalculator.cxx:389
 AliFMDDensityCalculator.cxx:390
 AliFMDDensityCalculator.cxx:391
 AliFMDDensityCalculator.cxx:392
 AliFMDDensityCalculator.cxx:393
 AliFMDDensityCalculator.cxx:394
 AliFMDDensityCalculator.cxx:395
 AliFMDDensityCalculator.cxx:396
 AliFMDDensityCalculator.cxx:397
 AliFMDDensityCalculator.cxx:398
 AliFMDDensityCalculator.cxx:399
 AliFMDDensityCalculator.cxx:400
 AliFMDDensityCalculator.cxx:401
 AliFMDDensityCalculator.cxx:402
 AliFMDDensityCalculator.cxx:403
 AliFMDDensityCalculator.cxx:404
 AliFMDDensityCalculator.cxx:405
 AliFMDDensityCalculator.cxx:406
 AliFMDDensityCalculator.cxx:407
 AliFMDDensityCalculator.cxx:408
 AliFMDDensityCalculator.cxx:409
 AliFMDDensityCalculator.cxx:410
 AliFMDDensityCalculator.cxx:411
 AliFMDDensityCalculator.cxx:412
 AliFMDDensityCalculator.cxx:413
 AliFMDDensityCalculator.cxx:414
 AliFMDDensityCalculator.cxx:415
 AliFMDDensityCalculator.cxx:416
 AliFMDDensityCalculator.cxx:417
 AliFMDDensityCalculator.cxx:418
 AliFMDDensityCalculator.cxx:419
 AliFMDDensityCalculator.cxx:420
 AliFMDDensityCalculator.cxx:421
 AliFMDDensityCalculator.cxx:422
 AliFMDDensityCalculator.cxx:423
 AliFMDDensityCalculator.cxx:424
 AliFMDDensityCalculator.cxx:425
 AliFMDDensityCalculator.cxx:426
 AliFMDDensityCalculator.cxx:427
 AliFMDDensityCalculator.cxx:428
 AliFMDDensityCalculator.cxx:429
 AliFMDDensityCalculator.cxx:430
 AliFMDDensityCalculator.cxx:431
 AliFMDDensityCalculator.cxx:432
 AliFMDDensityCalculator.cxx:433
 AliFMDDensityCalculator.cxx:434
 AliFMDDensityCalculator.cxx:435
 AliFMDDensityCalculator.cxx:436
 AliFMDDensityCalculator.cxx:437
 AliFMDDensityCalculator.cxx:438
 AliFMDDensityCalculator.cxx:439
 AliFMDDensityCalculator.cxx:440
 AliFMDDensityCalculator.cxx:441
 AliFMDDensityCalculator.cxx:442
 AliFMDDensityCalculator.cxx:443
 AliFMDDensityCalculator.cxx:444
 AliFMDDensityCalculator.cxx:445
 AliFMDDensityCalculator.cxx:446
 AliFMDDensityCalculator.cxx:447
 AliFMDDensityCalculator.cxx:448
 AliFMDDensityCalculator.cxx:449
 AliFMDDensityCalculator.cxx:450
 AliFMDDensityCalculator.cxx:451
 AliFMDDensityCalculator.cxx:452
 AliFMDDensityCalculator.cxx:453
 AliFMDDensityCalculator.cxx:454
 AliFMDDensityCalculator.cxx:455
 AliFMDDensityCalculator.cxx:456
 AliFMDDensityCalculator.cxx:457
 AliFMDDensityCalculator.cxx:458
 AliFMDDensityCalculator.cxx:459
 AliFMDDensityCalculator.cxx:460
 AliFMDDensityCalculator.cxx:461
 AliFMDDensityCalculator.cxx:462
 AliFMDDensityCalculator.cxx:463
 AliFMDDensityCalculator.cxx:464
 AliFMDDensityCalculator.cxx:465
 AliFMDDensityCalculator.cxx:466
 AliFMDDensityCalculator.cxx:467
 AliFMDDensityCalculator.cxx:468
 AliFMDDensityCalculator.cxx:469
 AliFMDDensityCalculator.cxx:470
 AliFMDDensityCalculator.cxx:471
 AliFMDDensityCalculator.cxx:472
 AliFMDDensityCalculator.cxx:473
 AliFMDDensityCalculator.cxx:474
 AliFMDDensityCalculator.cxx:475
 AliFMDDensityCalculator.cxx:476
 AliFMDDensityCalculator.cxx:477
 AliFMDDensityCalculator.cxx:478
 AliFMDDensityCalculator.cxx:479
 AliFMDDensityCalculator.cxx:480
 AliFMDDensityCalculator.cxx:481
 AliFMDDensityCalculator.cxx:482
 AliFMDDensityCalculator.cxx:483
 AliFMDDensityCalculator.cxx:484
 AliFMDDensityCalculator.cxx:485
 AliFMDDensityCalculator.cxx:486
 AliFMDDensityCalculator.cxx:487
 AliFMDDensityCalculator.cxx:488
 AliFMDDensityCalculator.cxx:489
 AliFMDDensityCalculator.cxx:490
 AliFMDDensityCalculator.cxx:491
 AliFMDDensityCalculator.cxx:492
 AliFMDDensityCalculator.cxx:493
 AliFMDDensityCalculator.cxx:494
 AliFMDDensityCalculator.cxx:495
 AliFMDDensityCalculator.cxx:496
 AliFMDDensityCalculator.cxx:497
 AliFMDDensityCalculator.cxx:498
 AliFMDDensityCalculator.cxx:499
 AliFMDDensityCalculator.cxx:500
 AliFMDDensityCalculator.cxx:501
 AliFMDDensityCalculator.cxx:502
 AliFMDDensityCalculator.cxx:503
 AliFMDDensityCalculator.cxx:504
 AliFMDDensityCalculator.cxx:505
 AliFMDDensityCalculator.cxx:506
 AliFMDDensityCalculator.cxx:507
 AliFMDDensityCalculator.cxx:508
 AliFMDDensityCalculator.cxx:509
 AliFMDDensityCalculator.cxx:510
 AliFMDDensityCalculator.cxx:511
 AliFMDDensityCalculator.cxx:512
 AliFMDDensityCalculator.cxx:513
 AliFMDDensityCalculator.cxx:514
 AliFMDDensityCalculator.cxx:515
 AliFMDDensityCalculator.cxx:516
 AliFMDDensityCalculator.cxx:517
 AliFMDDensityCalculator.cxx:518
 AliFMDDensityCalculator.cxx:519
 AliFMDDensityCalculator.cxx:520
 AliFMDDensityCalculator.cxx:521
 AliFMDDensityCalculator.cxx:522
 AliFMDDensityCalculator.cxx:523
 AliFMDDensityCalculator.cxx:524
 AliFMDDensityCalculator.cxx:525
 AliFMDDensityCalculator.cxx:526
 AliFMDDensityCalculator.cxx:527
 AliFMDDensityCalculator.cxx:528
 AliFMDDensityCalculator.cxx:529
 AliFMDDensityCalculator.cxx:530
 AliFMDDensityCalculator.cxx:531
 AliFMDDensityCalculator.cxx:532
 AliFMDDensityCalculator.cxx:533
 AliFMDDensityCalculator.cxx:534
 AliFMDDensityCalculator.cxx:535
 AliFMDDensityCalculator.cxx:536
 AliFMDDensityCalculator.cxx:537
 AliFMDDensityCalculator.cxx:538
 AliFMDDensityCalculator.cxx:539
 AliFMDDensityCalculator.cxx:540
 AliFMDDensityCalculator.cxx:541
 AliFMDDensityCalculator.cxx:542
 AliFMDDensityCalculator.cxx:543
 AliFMDDensityCalculator.cxx:544
 AliFMDDensityCalculator.cxx:545
 AliFMDDensityCalculator.cxx:546
 AliFMDDensityCalculator.cxx:547
 AliFMDDensityCalculator.cxx:548
 AliFMDDensityCalculator.cxx:549
 AliFMDDensityCalculator.cxx:550
 AliFMDDensityCalculator.cxx:551
 AliFMDDensityCalculator.cxx:552
 AliFMDDensityCalculator.cxx:553
 AliFMDDensityCalculator.cxx:554
 AliFMDDensityCalculator.cxx:555
 AliFMDDensityCalculator.cxx:556
 AliFMDDensityCalculator.cxx:557
 AliFMDDensityCalculator.cxx:558
 AliFMDDensityCalculator.cxx:559
 AliFMDDensityCalculator.cxx:560
 AliFMDDensityCalculator.cxx:561
 AliFMDDensityCalculator.cxx:562
 AliFMDDensityCalculator.cxx:563
 AliFMDDensityCalculator.cxx:564
 AliFMDDensityCalculator.cxx:565
 AliFMDDensityCalculator.cxx:566
 AliFMDDensityCalculator.cxx:567
 AliFMDDensityCalculator.cxx:568
 AliFMDDensityCalculator.cxx:569
 AliFMDDensityCalculator.cxx:570
 AliFMDDensityCalculator.cxx:571
 AliFMDDensityCalculator.cxx:572
 AliFMDDensityCalculator.cxx:573
 AliFMDDensityCalculator.cxx:574
 AliFMDDensityCalculator.cxx:575
 AliFMDDensityCalculator.cxx:576
 AliFMDDensityCalculator.cxx:577
 AliFMDDensityCalculator.cxx:578
 AliFMDDensityCalculator.cxx:579
 AliFMDDensityCalculator.cxx:580
 AliFMDDensityCalculator.cxx:581
 AliFMDDensityCalculator.cxx:582
 AliFMDDensityCalculator.cxx:583
 AliFMDDensityCalculator.cxx:584
 AliFMDDensityCalculator.cxx:585
 AliFMDDensityCalculator.cxx:586
 AliFMDDensityCalculator.cxx:587
 AliFMDDensityCalculator.cxx:588
 AliFMDDensityCalculator.cxx:589
 AliFMDDensityCalculator.cxx:590
 AliFMDDensityCalculator.cxx:591
 AliFMDDensityCalculator.cxx:592
 AliFMDDensityCalculator.cxx:593
 AliFMDDensityCalculator.cxx:594
 AliFMDDensityCalculator.cxx:595
 AliFMDDensityCalculator.cxx:596
 AliFMDDensityCalculator.cxx:597
 AliFMDDensityCalculator.cxx:598
 AliFMDDensityCalculator.cxx:599
 AliFMDDensityCalculator.cxx:600
 AliFMDDensityCalculator.cxx:601
 AliFMDDensityCalculator.cxx:602
 AliFMDDensityCalculator.cxx:603
 AliFMDDensityCalculator.cxx:604
 AliFMDDensityCalculator.cxx:605
 AliFMDDensityCalculator.cxx:606
 AliFMDDensityCalculator.cxx:607
 AliFMDDensityCalculator.cxx:608
 AliFMDDensityCalculator.cxx:609
 AliFMDDensityCalculator.cxx:610
 AliFMDDensityCalculator.cxx:611
 AliFMDDensityCalculator.cxx:612
 AliFMDDensityCalculator.cxx:613
 AliFMDDensityCalculator.cxx:614
 AliFMDDensityCalculator.cxx:615
 AliFMDDensityCalculator.cxx:616
 AliFMDDensityCalculator.cxx:617
 AliFMDDensityCalculator.cxx:618
 AliFMDDensityCalculator.cxx:619
 AliFMDDensityCalculator.cxx:620
 AliFMDDensityCalculator.cxx:621
 AliFMDDensityCalculator.cxx:622
 AliFMDDensityCalculator.cxx:623
 AliFMDDensityCalculator.cxx:624
 AliFMDDensityCalculator.cxx:625
 AliFMDDensityCalculator.cxx:626
 AliFMDDensityCalculator.cxx:627
 AliFMDDensityCalculator.cxx:628
 AliFMDDensityCalculator.cxx:629
 AliFMDDensityCalculator.cxx:630
 AliFMDDensityCalculator.cxx:631
 AliFMDDensityCalculator.cxx:632
 AliFMDDensityCalculator.cxx:633
 AliFMDDensityCalculator.cxx:634
 AliFMDDensityCalculator.cxx:635
 AliFMDDensityCalculator.cxx:636
 AliFMDDensityCalculator.cxx:637
 AliFMDDensityCalculator.cxx:638
 AliFMDDensityCalculator.cxx:639
 AliFMDDensityCalculator.cxx:640
 AliFMDDensityCalculator.cxx:641
 AliFMDDensityCalculator.cxx:642
 AliFMDDensityCalculator.cxx:643
 AliFMDDensityCalculator.cxx:644
 AliFMDDensityCalculator.cxx:645
 AliFMDDensityCalculator.cxx:646
 AliFMDDensityCalculator.cxx:647
 AliFMDDensityCalculator.cxx:648
 AliFMDDensityCalculator.cxx:649
 AliFMDDensityCalculator.cxx:650
 AliFMDDensityCalculator.cxx:651
 AliFMDDensityCalculator.cxx:652
 AliFMDDensityCalculator.cxx:653
 AliFMDDensityCalculator.cxx:654
 AliFMDDensityCalculator.cxx:655
 AliFMDDensityCalculator.cxx:656
 AliFMDDensityCalculator.cxx:657
 AliFMDDensityCalculator.cxx:658
 AliFMDDensityCalculator.cxx:659
 AliFMDDensityCalculator.cxx:660
 AliFMDDensityCalculator.cxx:661
 AliFMDDensityCalculator.cxx:662
 AliFMDDensityCalculator.cxx:663
 AliFMDDensityCalculator.cxx:664
 AliFMDDensityCalculator.cxx:665
 AliFMDDensityCalculator.cxx:666
 AliFMDDensityCalculator.cxx:667
 AliFMDDensityCalculator.cxx:668
 AliFMDDensityCalculator.cxx:669
 AliFMDDensityCalculator.cxx:670
 AliFMDDensityCalculator.cxx:671
 AliFMDDensityCalculator.cxx:672
 AliFMDDensityCalculator.cxx:673
 AliFMDDensityCalculator.cxx:674
 AliFMDDensityCalculator.cxx:675
 AliFMDDensityCalculator.cxx:676
 AliFMDDensityCalculator.cxx:677
 AliFMDDensityCalculator.cxx:678
 AliFMDDensityCalculator.cxx:679
 AliFMDDensityCalculator.cxx:680
 AliFMDDensityCalculator.cxx:681
 AliFMDDensityCalculator.cxx:682
 AliFMDDensityCalculator.cxx:683
 AliFMDDensityCalculator.cxx:684
 AliFMDDensityCalculator.cxx:685
 AliFMDDensityCalculator.cxx:686
 AliFMDDensityCalculator.cxx:687
 AliFMDDensityCalculator.cxx:688
 AliFMDDensityCalculator.cxx:689
 AliFMDDensityCalculator.cxx:690
 AliFMDDensityCalculator.cxx:691
 AliFMDDensityCalculator.cxx:692
 AliFMDDensityCalculator.cxx:693
 AliFMDDensityCalculator.cxx:694
 AliFMDDensityCalculator.cxx:695
 AliFMDDensityCalculator.cxx:696
 AliFMDDensityCalculator.cxx:697
 AliFMDDensityCalculator.cxx:698
 AliFMDDensityCalculator.cxx:699
 AliFMDDensityCalculator.cxx:700
 AliFMDDensityCalculator.cxx:701
 AliFMDDensityCalculator.cxx:702
 AliFMDDensityCalculator.cxx:703
 AliFMDDensityCalculator.cxx:704
 AliFMDDensityCalculator.cxx:705
 AliFMDDensityCalculator.cxx:706
 AliFMDDensityCalculator.cxx:707
 AliFMDDensityCalculator.cxx:708
 AliFMDDensityCalculator.cxx:709
 AliFMDDensityCalculator.cxx:710
 AliFMDDensityCalculator.cxx:711
 AliFMDDensityCalculator.cxx:712
 AliFMDDensityCalculator.cxx:713
 AliFMDDensityCalculator.cxx:714
 AliFMDDensityCalculator.cxx:715
 AliFMDDensityCalculator.cxx:716
 AliFMDDensityCalculator.cxx:717
 AliFMDDensityCalculator.cxx:718
 AliFMDDensityCalculator.cxx:719
 AliFMDDensityCalculator.cxx:720
 AliFMDDensityCalculator.cxx:721
 AliFMDDensityCalculator.cxx:722
 AliFMDDensityCalculator.cxx:723
 AliFMDDensityCalculator.cxx:724
 AliFMDDensityCalculator.cxx:725
 AliFMDDensityCalculator.cxx:726
 AliFMDDensityCalculator.cxx:727
 AliFMDDensityCalculator.cxx:728
 AliFMDDensityCalculator.cxx:729
 AliFMDDensityCalculator.cxx:730
 AliFMDDensityCalculator.cxx:731
 AliFMDDensityCalculator.cxx:732
 AliFMDDensityCalculator.cxx:733
 AliFMDDensityCalculator.cxx:734
 AliFMDDensityCalculator.cxx:735
 AliFMDDensityCalculator.cxx:736
 AliFMDDensityCalculator.cxx:737
 AliFMDDensityCalculator.cxx:738
 AliFMDDensityCalculator.cxx:739
 AliFMDDensityCalculator.cxx:740
 AliFMDDensityCalculator.cxx:741
 AliFMDDensityCalculator.cxx:742
 AliFMDDensityCalculator.cxx:743
 AliFMDDensityCalculator.cxx:744
 AliFMDDensityCalculator.cxx:745
 AliFMDDensityCalculator.cxx:746
 AliFMDDensityCalculator.cxx:747
 AliFMDDensityCalculator.cxx:748
 AliFMDDensityCalculator.cxx:749
 AliFMDDensityCalculator.cxx:750
 AliFMDDensityCalculator.cxx:751
 AliFMDDensityCalculator.cxx:752
 AliFMDDensityCalculator.cxx:753
 AliFMDDensityCalculator.cxx:754
 AliFMDDensityCalculator.cxx:755
 AliFMDDensityCalculator.cxx:756
 AliFMDDensityCalculator.cxx:757
 AliFMDDensityCalculator.cxx:758
 AliFMDDensityCalculator.cxx:759
 AliFMDDensityCalculator.cxx:760
 AliFMDDensityCalculator.cxx:761
 AliFMDDensityCalculator.cxx:762
 AliFMDDensityCalculator.cxx:763
 AliFMDDensityCalculator.cxx:764
 AliFMDDensityCalculator.cxx:765
 AliFMDDensityCalculator.cxx:766
 AliFMDDensityCalculator.cxx:767
 AliFMDDensityCalculator.cxx:768
 AliFMDDensityCalculator.cxx:769
 AliFMDDensityCalculator.cxx:770
 AliFMDDensityCalculator.cxx:771
 AliFMDDensityCalculator.cxx:772
 AliFMDDensityCalculator.cxx:773
 AliFMDDensityCalculator.cxx:774
 AliFMDDensityCalculator.cxx:775
 AliFMDDensityCalculator.cxx:776
 AliFMDDensityCalculator.cxx:777
 AliFMDDensityCalculator.cxx:778
 AliFMDDensityCalculator.cxx:779
 AliFMDDensityCalculator.cxx:780
 AliFMDDensityCalculator.cxx:781
 AliFMDDensityCalculator.cxx:782
 AliFMDDensityCalculator.cxx:783
 AliFMDDensityCalculator.cxx:784
 AliFMDDensityCalculator.cxx:785
 AliFMDDensityCalculator.cxx:786
 AliFMDDensityCalculator.cxx:787
 AliFMDDensityCalculator.cxx:788
 AliFMDDensityCalculator.cxx:789
 AliFMDDensityCalculator.cxx:790
 AliFMDDensityCalculator.cxx:791
 AliFMDDensityCalculator.cxx:792
 AliFMDDensityCalculator.cxx:793
 AliFMDDensityCalculator.cxx:794
 AliFMDDensityCalculator.cxx:795
 AliFMDDensityCalculator.cxx:796
 AliFMDDensityCalculator.cxx:797
 AliFMDDensityCalculator.cxx:798
 AliFMDDensityCalculator.cxx:799
 AliFMDDensityCalculator.cxx:800
 AliFMDDensityCalculator.cxx:801
 AliFMDDensityCalculator.cxx:802
 AliFMDDensityCalculator.cxx:803
 AliFMDDensityCalculator.cxx:804
 AliFMDDensityCalculator.cxx:805
 AliFMDDensityCalculator.cxx:806
 AliFMDDensityCalculator.cxx:807
 AliFMDDensityCalculator.cxx:808
 AliFMDDensityCalculator.cxx:809
 AliFMDDensityCalculator.cxx:810
 AliFMDDensityCalculator.cxx:811
 AliFMDDensityCalculator.cxx:812
 AliFMDDensityCalculator.cxx:813
 AliFMDDensityCalculator.cxx:814
 AliFMDDensityCalculator.cxx:815
 AliFMDDensityCalculator.cxx:816
 AliFMDDensityCalculator.cxx:817
 AliFMDDensityCalculator.cxx:818
 AliFMDDensityCalculator.cxx:819
 AliFMDDensityCalculator.cxx:820
 AliFMDDensityCalculator.cxx:821
 AliFMDDensityCalculator.cxx:822
 AliFMDDensityCalculator.cxx:823
 AliFMDDensityCalculator.cxx:824
 AliFMDDensityCalculator.cxx:825
 AliFMDDensityCalculator.cxx:826
 AliFMDDensityCalculator.cxx:827
 AliFMDDensityCalculator.cxx:828
 AliFMDDensityCalculator.cxx:829
 AliFMDDensityCalculator.cxx:830
 AliFMDDensityCalculator.cxx:831
 AliFMDDensityCalculator.cxx:832
 AliFMDDensityCalculator.cxx:833
 AliFMDDensityCalculator.cxx:834
 AliFMDDensityCalculator.cxx:835
 AliFMDDensityCalculator.cxx:836
 AliFMDDensityCalculator.cxx:837
 AliFMDDensityCalculator.cxx:838
 AliFMDDensityCalculator.cxx:839
 AliFMDDensityCalculator.cxx:840
 AliFMDDensityCalculator.cxx:841
 AliFMDDensityCalculator.cxx:842
 AliFMDDensityCalculator.cxx:843
 AliFMDDensityCalculator.cxx:844
 AliFMDDensityCalculator.cxx:845
 AliFMDDensityCalculator.cxx:846
 AliFMDDensityCalculator.cxx:847
 AliFMDDensityCalculator.cxx:848
 AliFMDDensityCalculator.cxx:849
 AliFMDDensityCalculator.cxx:850
 AliFMDDensityCalculator.cxx:851
 AliFMDDensityCalculator.cxx:852
 AliFMDDensityCalculator.cxx:853
 AliFMDDensityCalculator.cxx:854
 AliFMDDensityCalculator.cxx:855
 AliFMDDensityCalculator.cxx:856
 AliFMDDensityCalculator.cxx:857
 AliFMDDensityCalculator.cxx:858
 AliFMDDensityCalculator.cxx:859
 AliFMDDensityCalculator.cxx:860
 AliFMDDensityCalculator.cxx:861
 AliFMDDensityCalculator.cxx:862
 AliFMDDensityCalculator.cxx:863
 AliFMDDensityCalculator.cxx:864
 AliFMDDensityCalculator.cxx:865
 AliFMDDensityCalculator.cxx:866
 AliFMDDensityCalculator.cxx:867
 AliFMDDensityCalculator.cxx:868
 AliFMDDensityCalculator.cxx:869
 AliFMDDensityCalculator.cxx:870
 AliFMDDensityCalculator.cxx:871
 AliFMDDensityCalculator.cxx:872
 AliFMDDensityCalculator.cxx:873
 AliFMDDensityCalculator.cxx:874
 AliFMDDensityCalculator.cxx:875
 AliFMDDensityCalculator.cxx:876
 AliFMDDensityCalculator.cxx:877
 AliFMDDensityCalculator.cxx:878
 AliFMDDensityCalculator.cxx:879
 AliFMDDensityCalculator.cxx:880
 AliFMDDensityCalculator.cxx:881
 AliFMDDensityCalculator.cxx:882
 AliFMDDensityCalculator.cxx:883
 AliFMDDensityCalculator.cxx:884
 AliFMDDensityCalculator.cxx:885
 AliFMDDensityCalculator.cxx:886
 AliFMDDensityCalculator.cxx:887
 AliFMDDensityCalculator.cxx:888
 AliFMDDensityCalculator.cxx:889
 AliFMDDensityCalculator.cxx:890
 AliFMDDensityCalculator.cxx:891
 AliFMDDensityCalculator.cxx:892
 AliFMDDensityCalculator.cxx:893
 AliFMDDensityCalculator.cxx:894
 AliFMDDensityCalculator.cxx:895
 AliFMDDensityCalculator.cxx:896
 AliFMDDensityCalculator.cxx:897
 AliFMDDensityCalculator.cxx:898
 AliFMDDensityCalculator.cxx:899
 AliFMDDensityCalculator.cxx:900
 AliFMDDensityCalculator.cxx:901
 AliFMDDensityCalculator.cxx:902
 AliFMDDensityCalculator.cxx:903
 AliFMDDensityCalculator.cxx:904
 AliFMDDensityCalculator.cxx:905
 AliFMDDensityCalculator.cxx:906
 AliFMDDensityCalculator.cxx:907
 AliFMDDensityCalculator.cxx:908
 AliFMDDensityCalculator.cxx:909
 AliFMDDensityCalculator.cxx:910
 AliFMDDensityCalculator.cxx:911
 AliFMDDensityCalculator.cxx:912
 AliFMDDensityCalculator.cxx:913
 AliFMDDensityCalculator.cxx:914
 AliFMDDensityCalculator.cxx:915
 AliFMDDensityCalculator.cxx:916
 AliFMDDensityCalculator.cxx:917
 AliFMDDensityCalculator.cxx:918
 AliFMDDensityCalculator.cxx:919
 AliFMDDensityCalculator.cxx:920
 AliFMDDensityCalculator.cxx:921
 AliFMDDensityCalculator.cxx:922
 AliFMDDensityCalculator.cxx:923
 AliFMDDensityCalculator.cxx:924
 AliFMDDensityCalculator.cxx:925
 AliFMDDensityCalculator.cxx:926
 AliFMDDensityCalculator.cxx:927
 AliFMDDensityCalculator.cxx:928
 AliFMDDensityCalculator.cxx:929
 AliFMDDensityCalculator.cxx:930
 AliFMDDensityCalculator.cxx:931
 AliFMDDensityCalculator.cxx:932
 AliFMDDensityCalculator.cxx:933
 AliFMDDensityCalculator.cxx:934
 AliFMDDensityCalculator.cxx:935
 AliFMDDensityCalculator.cxx:936
 AliFMDDensityCalculator.cxx:937
 AliFMDDensityCalculator.cxx:938
 AliFMDDensityCalculator.cxx:939
 AliFMDDensityCalculator.cxx:940
 AliFMDDensityCalculator.cxx:941
 AliFMDDensityCalculator.cxx:942
 AliFMDDensityCalculator.cxx:943
 AliFMDDensityCalculator.cxx:944
 AliFMDDensityCalculator.cxx:945
 AliFMDDensityCalculator.cxx:946
 AliFMDDensityCalculator.cxx:947
 AliFMDDensityCalculator.cxx:948
 AliFMDDensityCalculator.cxx:949
 AliFMDDensityCalculator.cxx:950
 AliFMDDensityCalculator.cxx:951
 AliFMDDensityCalculator.cxx:952
 AliFMDDensityCalculator.cxx:953
 AliFMDDensityCalculator.cxx:954
 AliFMDDensityCalculator.cxx:955
 AliFMDDensityCalculator.cxx:956
 AliFMDDensityCalculator.cxx:957
 AliFMDDensityCalculator.cxx:958
 AliFMDDensityCalculator.cxx:959
 AliFMDDensityCalculator.cxx:960
 AliFMDDensityCalculator.cxx:961
 AliFMDDensityCalculator.cxx:962
 AliFMDDensityCalculator.cxx:963
 AliFMDDensityCalculator.cxx:964
 AliFMDDensityCalculator.cxx:965
 AliFMDDensityCalculator.cxx:966
 AliFMDDensityCalculator.cxx:967
 AliFMDDensityCalculator.cxx:968
 AliFMDDensityCalculator.cxx:969
 AliFMDDensityCalculator.cxx:970
 AliFMDDensityCalculator.cxx:971
 AliFMDDensityCalculator.cxx:972
 AliFMDDensityCalculator.cxx:973
 AliFMDDensityCalculator.cxx:974
 AliFMDDensityCalculator.cxx:975
 AliFMDDensityCalculator.cxx:976
 AliFMDDensityCalculator.cxx:977
 AliFMDDensityCalculator.cxx:978
 AliFMDDensityCalculator.cxx:979
 AliFMDDensityCalculator.cxx:980
 AliFMDDensityCalculator.cxx:981
 AliFMDDensityCalculator.cxx:982
 AliFMDDensityCalculator.cxx:983
 AliFMDDensityCalculator.cxx:984
 AliFMDDensityCalculator.cxx:985
 AliFMDDensityCalculator.cxx:986
 AliFMDDensityCalculator.cxx:987
 AliFMDDensityCalculator.cxx:988
 AliFMDDensityCalculator.cxx:989
 AliFMDDensityCalculator.cxx:990
 AliFMDDensityCalculator.cxx:991
 AliFMDDensityCalculator.cxx:992
 AliFMDDensityCalculator.cxx:993
 AliFMDDensityCalculator.cxx:994
 AliFMDDensityCalculator.cxx:995
 AliFMDDensityCalculator.cxx:996
 AliFMDDensityCalculator.cxx:997
 AliFMDDensityCalculator.cxx:998
 AliFMDDensityCalculator.cxx:999
 AliFMDDensityCalculator.cxx:1000
 AliFMDDensityCalculator.cxx:1001
 AliFMDDensityCalculator.cxx:1002
 AliFMDDensityCalculator.cxx:1003
 AliFMDDensityCalculator.cxx:1004
 AliFMDDensityCalculator.cxx:1005
 AliFMDDensityCalculator.cxx:1006
 AliFMDDensityCalculator.cxx:1007
 AliFMDDensityCalculator.cxx:1008
 AliFMDDensityCalculator.cxx:1009
 AliFMDDensityCalculator.cxx:1010
 AliFMDDensityCalculator.cxx:1011
 AliFMDDensityCalculator.cxx:1012
 AliFMDDensityCalculator.cxx:1013
 AliFMDDensityCalculator.cxx:1014
 AliFMDDensityCalculator.cxx:1015
 AliFMDDensityCalculator.cxx:1016
 AliFMDDensityCalculator.cxx:1017
 AliFMDDensityCalculator.cxx:1018
 AliFMDDensityCalculator.cxx:1019
 AliFMDDensityCalculator.cxx:1020
 AliFMDDensityCalculator.cxx:1021
 AliFMDDensityCalculator.cxx:1022
 AliFMDDensityCalculator.cxx:1023
 AliFMDDensityCalculator.cxx:1024
 AliFMDDensityCalculator.cxx:1025
 AliFMDDensityCalculator.cxx:1026
 AliFMDDensityCalculator.cxx:1027
 AliFMDDensityCalculator.cxx:1028
 AliFMDDensityCalculator.cxx:1029
 AliFMDDensityCalculator.cxx:1030
 AliFMDDensityCalculator.cxx:1031
 AliFMDDensityCalculator.cxx:1032
 AliFMDDensityCalculator.cxx:1033
 AliFMDDensityCalculator.cxx:1034
 AliFMDDensityCalculator.cxx:1035
 AliFMDDensityCalculator.cxx:1036
 AliFMDDensityCalculator.cxx:1037
 AliFMDDensityCalculator.cxx:1038
 AliFMDDensityCalculator.cxx:1039
 AliFMDDensityCalculator.cxx:1040
 AliFMDDensityCalculator.cxx:1041
 AliFMDDensityCalculator.cxx:1042
 AliFMDDensityCalculator.cxx:1043
 AliFMDDensityCalculator.cxx:1044
 AliFMDDensityCalculator.cxx:1045
 AliFMDDensityCalculator.cxx:1046
 AliFMDDensityCalculator.cxx:1047
 AliFMDDensityCalculator.cxx:1048
 AliFMDDensityCalculator.cxx:1049
 AliFMDDensityCalculator.cxx:1050
 AliFMDDensityCalculator.cxx:1051
 AliFMDDensityCalculator.cxx:1052
 AliFMDDensityCalculator.cxx:1053
 AliFMDDensityCalculator.cxx:1054
 AliFMDDensityCalculator.cxx:1055
 AliFMDDensityCalculator.cxx:1056
 AliFMDDensityCalculator.cxx:1057
 AliFMDDensityCalculator.cxx:1058
 AliFMDDensityCalculator.cxx:1059
 AliFMDDensityCalculator.cxx:1060
 AliFMDDensityCalculator.cxx:1061
 AliFMDDensityCalculator.cxx:1062
 AliFMDDensityCalculator.cxx:1063
 AliFMDDensityCalculator.cxx:1064
 AliFMDDensityCalculator.cxx:1065
 AliFMDDensityCalculator.cxx:1066
 AliFMDDensityCalculator.cxx:1067
 AliFMDDensityCalculator.cxx:1068
 AliFMDDensityCalculator.cxx:1069
 AliFMDDensityCalculator.cxx:1070
 AliFMDDensityCalculator.cxx:1071
 AliFMDDensityCalculator.cxx:1072
 AliFMDDensityCalculator.cxx:1073
 AliFMDDensityCalculator.cxx:1074
 AliFMDDensityCalculator.cxx:1075
 AliFMDDensityCalculator.cxx:1076
 AliFMDDensityCalculator.cxx:1077
 AliFMDDensityCalculator.cxx:1078
 AliFMDDensityCalculator.cxx:1079
 AliFMDDensityCalculator.cxx:1080
 AliFMDDensityCalculator.cxx:1081
 AliFMDDensityCalculator.cxx:1082
 AliFMDDensityCalculator.cxx:1083
 AliFMDDensityCalculator.cxx:1084
 AliFMDDensityCalculator.cxx:1085
 AliFMDDensityCalculator.cxx:1086
 AliFMDDensityCalculator.cxx:1087
 AliFMDDensityCalculator.cxx:1088
 AliFMDDensityCalculator.cxx:1089
 AliFMDDensityCalculator.cxx:1090
 AliFMDDensityCalculator.cxx:1091
 AliFMDDensityCalculator.cxx:1092
 AliFMDDensityCalculator.cxx:1093
 AliFMDDensityCalculator.cxx:1094
 AliFMDDensityCalculator.cxx:1095
 AliFMDDensityCalculator.cxx:1096
 AliFMDDensityCalculator.cxx:1097
 AliFMDDensityCalculator.cxx:1098
 AliFMDDensityCalculator.cxx:1099
 AliFMDDensityCalculator.cxx:1100
 AliFMDDensityCalculator.cxx:1101
 AliFMDDensityCalculator.cxx:1102
 AliFMDDensityCalculator.cxx:1103
 AliFMDDensityCalculator.cxx:1104
 AliFMDDensityCalculator.cxx:1105
 AliFMDDensityCalculator.cxx:1106
 AliFMDDensityCalculator.cxx:1107
 AliFMDDensityCalculator.cxx:1108
 AliFMDDensityCalculator.cxx:1109
 AliFMDDensityCalculator.cxx:1110
 AliFMDDensityCalculator.cxx:1111
 AliFMDDensityCalculator.cxx:1112
 AliFMDDensityCalculator.cxx:1113
 AliFMDDensityCalculator.cxx:1114
 AliFMDDensityCalculator.cxx:1115
 AliFMDDensityCalculator.cxx:1116
 AliFMDDensityCalculator.cxx:1117
 AliFMDDensityCalculator.cxx:1118
 AliFMDDensityCalculator.cxx:1119
 AliFMDDensityCalculator.cxx:1120
 AliFMDDensityCalculator.cxx:1121
 AliFMDDensityCalculator.cxx:1122
 AliFMDDensityCalculator.cxx:1123
 AliFMDDensityCalculator.cxx:1124
 AliFMDDensityCalculator.cxx:1125
 AliFMDDensityCalculator.cxx:1126
 AliFMDDensityCalculator.cxx:1127
 AliFMDDensityCalculator.cxx:1128
 AliFMDDensityCalculator.cxx:1129
 AliFMDDensityCalculator.cxx:1130
 AliFMDDensityCalculator.cxx:1131
 AliFMDDensityCalculator.cxx:1132
 AliFMDDensityCalculator.cxx:1133
 AliFMDDensityCalculator.cxx:1134
 AliFMDDensityCalculator.cxx:1135
 AliFMDDensityCalculator.cxx:1136
 AliFMDDensityCalculator.cxx:1137
 AliFMDDensityCalculator.cxx:1138
 AliFMDDensityCalculator.cxx:1139
 AliFMDDensityCalculator.cxx:1140
 AliFMDDensityCalculator.cxx:1141
 AliFMDDensityCalculator.cxx:1142
 AliFMDDensityCalculator.cxx:1143
 AliFMDDensityCalculator.cxx:1144
 AliFMDDensityCalculator.cxx:1145
 AliFMDDensityCalculator.cxx:1146
 AliFMDDensityCalculator.cxx:1147
 AliFMDDensityCalculator.cxx:1148
 AliFMDDensityCalculator.cxx:1149
 AliFMDDensityCalculator.cxx:1150
 AliFMDDensityCalculator.cxx:1151
 AliFMDDensityCalculator.cxx:1152
 AliFMDDensityCalculator.cxx:1153
 AliFMDDensityCalculator.cxx:1154
 AliFMDDensityCalculator.cxx:1155
 AliFMDDensityCalculator.cxx:1156
 AliFMDDensityCalculator.cxx:1157
 AliFMDDensityCalculator.cxx:1158
 AliFMDDensityCalculator.cxx:1159
 AliFMDDensityCalculator.cxx:1160
 AliFMDDensityCalculator.cxx:1161
 AliFMDDensityCalculator.cxx:1162
 AliFMDDensityCalculator.cxx:1163
 AliFMDDensityCalculator.cxx:1164
 AliFMDDensityCalculator.cxx:1165
 AliFMDDensityCalculator.cxx:1166
 AliFMDDensityCalculator.cxx:1167
 AliFMDDensityCalculator.cxx:1168
 AliFMDDensityCalculator.cxx:1169
 AliFMDDensityCalculator.cxx:1170
 AliFMDDensityCalculator.cxx:1171
 AliFMDDensityCalculator.cxx:1172
 AliFMDDensityCalculator.cxx:1173
 AliFMDDensityCalculator.cxx:1174
 AliFMDDensityCalculator.cxx:1175
 AliFMDDensityCalculator.cxx:1176
 AliFMDDensityCalculator.cxx:1177
 AliFMDDensityCalculator.cxx:1178
 AliFMDDensityCalculator.cxx:1179
 AliFMDDensityCalculator.cxx:1180
 AliFMDDensityCalculator.cxx:1181
 AliFMDDensityCalculator.cxx:1182
 AliFMDDensityCalculator.cxx:1183
 AliFMDDensityCalculator.cxx:1184
 AliFMDDensityCalculator.cxx:1185
 AliFMDDensityCalculator.cxx:1186
 AliFMDDensityCalculator.cxx:1187
 AliFMDDensityCalculator.cxx:1188
 AliFMDDensityCalculator.cxx:1189
 AliFMDDensityCalculator.cxx:1190
 AliFMDDensityCalculator.cxx:1191
 AliFMDDensityCalculator.cxx:1192
 AliFMDDensityCalculator.cxx:1193
 AliFMDDensityCalculator.cxx:1194
 AliFMDDensityCalculator.cxx:1195
 AliFMDDensityCalculator.cxx:1196
 AliFMDDensityCalculator.cxx:1197
 AliFMDDensityCalculator.cxx:1198
 AliFMDDensityCalculator.cxx:1199
 AliFMDDensityCalculator.cxx:1200
 AliFMDDensityCalculator.cxx:1201
 AliFMDDensityCalculator.cxx:1202
 AliFMDDensityCalculator.cxx:1203
 AliFMDDensityCalculator.cxx:1204
 AliFMDDensityCalculator.cxx:1205
 AliFMDDensityCalculator.cxx:1206
 AliFMDDensityCalculator.cxx:1207
 AliFMDDensityCalculator.cxx:1208
 AliFMDDensityCalculator.cxx:1209
 AliFMDDensityCalculator.cxx:1210
 AliFMDDensityCalculator.cxx:1211
 AliFMDDensityCalculator.cxx:1212
 AliFMDDensityCalculator.cxx:1213
 AliFMDDensityCalculator.cxx:1214
 AliFMDDensityCalculator.cxx:1215
 AliFMDDensityCalculator.cxx:1216
 AliFMDDensityCalculator.cxx:1217
 AliFMDDensityCalculator.cxx:1218
 AliFMDDensityCalculator.cxx:1219
 AliFMDDensityCalculator.cxx:1220
 AliFMDDensityCalculator.cxx:1221
 AliFMDDensityCalculator.cxx:1222
 AliFMDDensityCalculator.cxx:1223
 AliFMDDensityCalculator.cxx:1224
 AliFMDDensityCalculator.cxx:1225
 AliFMDDensityCalculator.cxx:1226
 AliFMDDensityCalculator.cxx:1227
 AliFMDDensityCalculator.cxx:1228
 AliFMDDensityCalculator.cxx:1229
 AliFMDDensityCalculator.cxx:1230
 AliFMDDensityCalculator.cxx:1231
 AliFMDDensityCalculator.cxx:1232
 AliFMDDensityCalculator.cxx:1233
 AliFMDDensityCalculator.cxx:1234
 AliFMDDensityCalculator.cxx:1235
 AliFMDDensityCalculator.cxx:1236
 AliFMDDensityCalculator.cxx:1237
 AliFMDDensityCalculator.cxx:1238
 AliFMDDensityCalculator.cxx:1239
 AliFMDDensityCalculator.cxx:1240
 AliFMDDensityCalculator.cxx:1241
 AliFMDDensityCalculator.cxx:1242
 AliFMDDensityCalculator.cxx:1243
 AliFMDDensityCalculator.cxx:1244
 AliFMDDensityCalculator.cxx:1245
 AliFMDDensityCalculator.cxx:1246
 AliFMDDensityCalculator.cxx:1247
 AliFMDDensityCalculator.cxx:1248
 AliFMDDensityCalculator.cxx:1249
 AliFMDDensityCalculator.cxx:1250
 AliFMDDensityCalculator.cxx:1251
 AliFMDDensityCalculator.cxx:1252
 AliFMDDensityCalculator.cxx:1253
 AliFMDDensityCalculator.cxx:1254
 AliFMDDensityCalculator.cxx:1255
 AliFMDDensityCalculator.cxx:1256
 AliFMDDensityCalculator.cxx:1257
 AliFMDDensityCalculator.cxx:1258
 AliFMDDensityCalculator.cxx:1259
 AliFMDDensityCalculator.cxx:1260
 AliFMDDensityCalculator.cxx:1261
 AliFMDDensityCalculator.cxx:1262
 AliFMDDensityCalculator.cxx:1263
 AliFMDDensityCalculator.cxx:1264
 AliFMDDensityCalculator.cxx:1265
 AliFMDDensityCalculator.cxx:1266
 AliFMDDensityCalculator.cxx:1267
 AliFMDDensityCalculator.cxx:1268
 AliFMDDensityCalculator.cxx:1269
 AliFMDDensityCalculator.cxx:1270
 AliFMDDensityCalculator.cxx:1271
 AliFMDDensityCalculator.cxx:1272
 AliFMDDensityCalculator.cxx:1273
 AliFMDDensityCalculator.cxx:1274
 AliFMDDensityCalculator.cxx:1275
 AliFMDDensityCalculator.cxx:1276
 AliFMDDensityCalculator.cxx:1277
 AliFMDDensityCalculator.cxx:1278
 AliFMDDensityCalculator.cxx:1279
 AliFMDDensityCalculator.cxx:1280
 AliFMDDensityCalculator.cxx:1281
 AliFMDDensityCalculator.cxx:1282
 AliFMDDensityCalculator.cxx:1283
 AliFMDDensityCalculator.cxx:1284
 AliFMDDensityCalculator.cxx:1285
 AliFMDDensityCalculator.cxx:1286
 AliFMDDensityCalculator.cxx:1287
 AliFMDDensityCalculator.cxx:1288
 AliFMDDensityCalculator.cxx:1289
 AliFMDDensityCalculator.cxx:1290
 AliFMDDensityCalculator.cxx:1291
 AliFMDDensityCalculator.cxx:1292
 AliFMDDensityCalculator.cxx:1293
 AliFMDDensityCalculator.cxx:1294
 AliFMDDensityCalculator.cxx:1295
 AliFMDDensityCalculator.cxx:1296
 AliFMDDensityCalculator.cxx:1297
 AliFMDDensityCalculator.cxx:1298
 AliFMDDensityCalculator.cxx:1299
 AliFMDDensityCalculator.cxx:1300
 AliFMDDensityCalculator.cxx:1301
 AliFMDDensityCalculator.cxx:1302
 AliFMDDensityCalculator.cxx:1303
 AliFMDDensityCalculator.cxx:1304
 AliFMDDensityCalculator.cxx:1305
 AliFMDDensityCalculator.cxx:1306
 AliFMDDensityCalculator.cxx:1307
 AliFMDDensityCalculator.cxx:1308
 AliFMDDensityCalculator.cxx:1309
 AliFMDDensityCalculator.cxx:1310
 AliFMDDensityCalculator.cxx:1311
 AliFMDDensityCalculator.cxx:1312
 AliFMDDensityCalculator.cxx:1313
 AliFMDDensityCalculator.cxx:1314
 AliFMDDensityCalculator.cxx:1315
 AliFMDDensityCalculator.cxx:1316
 AliFMDDensityCalculator.cxx:1317
 AliFMDDensityCalculator.cxx:1318
 AliFMDDensityCalculator.cxx:1319
 AliFMDDensityCalculator.cxx:1320
 AliFMDDensityCalculator.cxx:1321
 AliFMDDensityCalculator.cxx:1322
 AliFMDDensityCalculator.cxx:1323
 AliFMDDensityCalculator.cxx:1324
 AliFMDDensityCalculator.cxx:1325
 AliFMDDensityCalculator.cxx:1326
 AliFMDDensityCalculator.cxx:1327
 AliFMDDensityCalculator.cxx:1328
 AliFMDDensityCalculator.cxx:1329
 AliFMDDensityCalculator.cxx:1330
 AliFMDDensityCalculator.cxx:1331
 AliFMDDensityCalculator.cxx:1332
 AliFMDDensityCalculator.cxx:1333
 AliFMDDensityCalculator.cxx:1334
 AliFMDDensityCalculator.cxx:1335
 AliFMDDensityCalculator.cxx:1336
 AliFMDDensityCalculator.cxx:1337
 AliFMDDensityCalculator.cxx:1338
 AliFMDDensityCalculator.cxx:1339
 AliFMDDensityCalculator.cxx:1340
 AliFMDDensityCalculator.cxx:1341
 AliFMDDensityCalculator.cxx:1342
 AliFMDDensityCalculator.cxx:1343
 AliFMDDensityCalculator.cxx:1344
 AliFMDDensityCalculator.cxx:1345
 AliFMDDensityCalculator.cxx:1346
 AliFMDDensityCalculator.cxx:1347
 AliFMDDensityCalculator.cxx:1348
 AliFMDDensityCalculator.cxx:1349
 AliFMDDensityCalculator.cxx:1350
 AliFMDDensityCalculator.cxx:1351
 AliFMDDensityCalculator.cxx:1352
 AliFMDDensityCalculator.cxx:1353
 AliFMDDensityCalculator.cxx:1354
 AliFMDDensityCalculator.cxx:1355
 AliFMDDensityCalculator.cxx:1356
 AliFMDDensityCalculator.cxx:1357
 AliFMDDensityCalculator.cxx:1358
 AliFMDDensityCalculator.cxx:1359
 AliFMDDensityCalculator.cxx:1360
 AliFMDDensityCalculator.cxx:1361
 AliFMDDensityCalculator.cxx:1362
 AliFMDDensityCalculator.cxx:1363
 AliFMDDensityCalculator.cxx:1364
 AliFMDDensityCalculator.cxx:1365
 AliFMDDensityCalculator.cxx:1366
 AliFMDDensityCalculator.cxx:1367
 AliFMDDensityCalculator.cxx:1368
 AliFMDDensityCalculator.cxx:1369
 AliFMDDensityCalculator.cxx:1370
 AliFMDDensityCalculator.cxx:1371
 AliFMDDensityCalculator.cxx:1372
 AliFMDDensityCalculator.cxx:1373
 AliFMDDensityCalculator.cxx:1374
 AliFMDDensityCalculator.cxx:1375
 AliFMDDensityCalculator.cxx:1376
 AliFMDDensityCalculator.cxx:1377
 AliFMDDensityCalculator.cxx:1378
 AliFMDDensityCalculator.cxx:1379
 AliFMDDensityCalculator.cxx:1380
 AliFMDDensityCalculator.cxx:1381
 AliFMDDensityCalculator.cxx:1382
 AliFMDDensityCalculator.cxx:1383
 AliFMDDensityCalculator.cxx:1384
 AliFMDDensityCalculator.cxx:1385
 AliFMDDensityCalculator.cxx:1386
 AliFMDDensityCalculator.cxx:1387
 AliFMDDensityCalculator.cxx:1388
 AliFMDDensityCalculator.cxx:1389
 AliFMDDensityCalculator.cxx:1390
 AliFMDDensityCalculator.cxx:1391
 AliFMDDensityCalculator.cxx:1392
 AliFMDDensityCalculator.cxx:1393
 AliFMDDensityCalculator.cxx:1394
 AliFMDDensityCalculator.cxx:1395
 AliFMDDensityCalculator.cxx:1396
 AliFMDDensityCalculator.cxx:1397
 AliFMDDensityCalculator.cxx:1398
 AliFMDDensityCalculator.cxx:1399
 AliFMDDensityCalculator.cxx:1400
 AliFMDDensityCalculator.cxx:1401
 AliFMDDensityCalculator.cxx:1402
 AliFMDDensityCalculator.cxx:1403
 AliFMDDensityCalculator.cxx:1404
 AliFMDDensityCalculator.cxx:1405
 AliFMDDensityCalculator.cxx:1406
 AliFMDDensityCalculator.cxx:1407
 AliFMDDensityCalculator.cxx:1408
 AliFMDDensityCalculator.cxx:1409
 AliFMDDensityCalculator.cxx:1410
 AliFMDDensityCalculator.cxx:1411
 AliFMDDensityCalculator.cxx:1412
 AliFMDDensityCalculator.cxx:1413
 AliFMDDensityCalculator.cxx:1414
 AliFMDDensityCalculator.cxx:1415
 AliFMDDensityCalculator.cxx:1416
 AliFMDDensityCalculator.cxx:1417
 AliFMDDensityCalculator.cxx:1418
 AliFMDDensityCalculator.cxx:1419
 AliFMDDensityCalculator.cxx:1420
 AliFMDDensityCalculator.cxx:1421
 AliFMDDensityCalculator.cxx:1422
 AliFMDDensityCalculator.cxx:1423
 AliFMDDensityCalculator.cxx:1424
 AliFMDDensityCalculator.cxx:1425
 AliFMDDensityCalculator.cxx:1426
 AliFMDDensityCalculator.cxx:1427
 AliFMDDensityCalculator.cxx:1428
 AliFMDDensityCalculator.cxx:1429
 AliFMDDensityCalculator.cxx:1430
 AliFMDDensityCalculator.cxx:1431
 AliFMDDensityCalculator.cxx:1432
 AliFMDDensityCalculator.cxx:1433
 AliFMDDensityCalculator.cxx:1434
 AliFMDDensityCalculator.cxx:1435
 AliFMDDensityCalculator.cxx:1436
 AliFMDDensityCalculator.cxx:1437
 AliFMDDensityCalculator.cxx:1438
 AliFMDDensityCalculator.cxx:1439
 AliFMDDensityCalculator.cxx:1440
 AliFMDDensityCalculator.cxx:1441
 AliFMDDensityCalculator.cxx:1442
 AliFMDDensityCalculator.cxx:1443
 AliFMDDensityCalculator.cxx:1444
 AliFMDDensityCalculator.cxx:1445
 AliFMDDensityCalculator.cxx:1446
 AliFMDDensityCalculator.cxx:1447
 AliFMDDensityCalculator.cxx:1448
 AliFMDDensityCalculator.cxx:1449
 AliFMDDensityCalculator.cxx:1450
 AliFMDDensityCalculator.cxx:1451
 AliFMDDensityCalculator.cxx:1452
 AliFMDDensityCalculator.cxx:1453
 AliFMDDensityCalculator.cxx:1454
 AliFMDDensityCalculator.cxx:1455
 AliFMDDensityCalculator.cxx:1456
 AliFMDDensityCalculator.cxx:1457
 AliFMDDensityCalculator.cxx:1458
 AliFMDDensityCalculator.cxx:1459
 AliFMDDensityCalculator.cxx:1460
 AliFMDDensityCalculator.cxx:1461
 AliFMDDensityCalculator.cxx:1462
 AliFMDDensityCalculator.cxx:1463
 AliFMDDensityCalculator.cxx:1464
 AliFMDDensityCalculator.cxx:1465
 AliFMDDensityCalculator.cxx:1466
 AliFMDDensityCalculator.cxx:1467
 AliFMDDensityCalculator.cxx:1468
 AliFMDDensityCalculator.cxx:1469
 AliFMDDensityCalculator.cxx:1470
 AliFMDDensityCalculator.cxx:1471
 AliFMDDensityCalculator.cxx:1472
 AliFMDDensityCalculator.cxx:1473
 AliFMDDensityCalculator.cxx:1474
 AliFMDDensityCalculator.cxx:1475
 AliFMDDensityCalculator.cxx:1476
 AliFMDDensityCalculator.cxx:1477
 AliFMDDensityCalculator.cxx:1478
 AliFMDDensityCalculator.cxx:1479
 AliFMDDensityCalculator.cxx:1480
 AliFMDDensityCalculator.cxx:1481
 AliFMDDensityCalculator.cxx:1482
 AliFMDDensityCalculator.cxx:1483
 AliFMDDensityCalculator.cxx:1484
 AliFMDDensityCalculator.cxx:1485
 AliFMDDensityCalculator.cxx:1486
 AliFMDDensityCalculator.cxx:1487
 AliFMDDensityCalculator.cxx:1488
 AliFMDDensityCalculator.cxx:1489
 AliFMDDensityCalculator.cxx:1490
 AliFMDDensityCalculator.cxx:1491
 AliFMDDensityCalculator.cxx:1492
 AliFMDDensityCalculator.cxx:1493
 AliFMDDensityCalculator.cxx:1494
 AliFMDDensityCalculator.cxx:1495
 AliFMDDensityCalculator.cxx:1496
 AliFMDDensityCalculator.cxx:1497
 AliFMDDensityCalculator.cxx:1498
 AliFMDDensityCalculator.cxx:1499
 AliFMDDensityCalculator.cxx:1500
 AliFMDDensityCalculator.cxx:1501
 AliFMDDensityCalculator.cxx:1502
 AliFMDDensityCalculator.cxx:1503
 AliFMDDensityCalculator.cxx:1504
 AliFMDDensityCalculator.cxx:1505
 AliFMDDensityCalculator.cxx:1506
 AliFMDDensityCalculator.cxx:1507
 AliFMDDensityCalculator.cxx:1508
 AliFMDDensityCalculator.cxx:1509
 AliFMDDensityCalculator.cxx:1510
 AliFMDDensityCalculator.cxx:1511
 AliFMDDensityCalculator.cxx:1512
 AliFMDDensityCalculator.cxx:1513
 AliFMDDensityCalculator.cxx:1514
 AliFMDDensityCalculator.cxx:1515
 AliFMDDensityCalculator.cxx:1516
 AliFMDDensityCalculator.cxx:1517
 AliFMDDensityCalculator.cxx:1518
 AliFMDDensityCalculator.cxx:1519
 AliFMDDensityCalculator.cxx:1520
 AliFMDDensityCalculator.cxx:1521
 AliFMDDensityCalculator.cxx:1522
 AliFMDDensityCalculator.cxx:1523
 AliFMDDensityCalculator.cxx:1524
 AliFMDDensityCalculator.cxx:1525
 AliFMDDensityCalculator.cxx:1526
 AliFMDDensityCalculator.cxx:1527
 AliFMDDensityCalculator.cxx:1528
 AliFMDDensityCalculator.cxx:1529
 AliFMDDensityCalculator.cxx:1530
 AliFMDDensityCalculator.cxx:1531
 AliFMDDensityCalculator.cxx:1532
 AliFMDDensityCalculator.cxx:1533
 AliFMDDensityCalculator.cxx:1534
 AliFMDDensityCalculator.cxx:1535
 AliFMDDensityCalculator.cxx:1536
 AliFMDDensityCalculator.cxx:1537
 AliFMDDensityCalculator.cxx:1538
 AliFMDDensityCalculator.cxx:1539
 AliFMDDensityCalculator.cxx:1540
 AliFMDDensityCalculator.cxx:1541
 AliFMDDensityCalculator.cxx:1542
 AliFMDDensityCalculator.cxx:1543
 AliFMDDensityCalculator.cxx:1544
 AliFMDDensityCalculator.cxx:1545
 AliFMDDensityCalculator.cxx:1546
 AliFMDDensityCalculator.cxx:1547
 AliFMDDensityCalculator.cxx:1548
 AliFMDDensityCalculator.cxx:1549
 AliFMDDensityCalculator.cxx:1550
 AliFMDDensityCalculator.cxx:1551
 AliFMDDensityCalculator.cxx:1552
 AliFMDDensityCalculator.cxx:1553
 AliFMDDensityCalculator.cxx:1554
 AliFMDDensityCalculator.cxx:1555
 AliFMDDensityCalculator.cxx:1556
 AliFMDDensityCalculator.cxx:1557
 AliFMDDensityCalculator.cxx:1558
 AliFMDDensityCalculator.cxx:1559
 AliFMDDensityCalculator.cxx:1560
 AliFMDDensityCalculator.cxx:1561
 AliFMDDensityCalculator.cxx:1562
 AliFMDDensityCalculator.cxx:1563
 AliFMDDensityCalculator.cxx:1564
 AliFMDDensityCalculator.cxx:1565
 AliFMDDensityCalculator.cxx:1566
 AliFMDDensityCalculator.cxx:1567
 AliFMDDensityCalculator.cxx:1568
 AliFMDDensityCalculator.cxx:1569
 AliFMDDensityCalculator.cxx:1570
 AliFMDDensityCalculator.cxx:1571
 AliFMDDensityCalculator.cxx:1572
 AliFMDDensityCalculator.cxx:1573
 AliFMDDensityCalculator.cxx:1574
 AliFMDDensityCalculator.cxx:1575
 AliFMDDensityCalculator.cxx:1576
 AliFMDDensityCalculator.cxx:1577
 AliFMDDensityCalculator.cxx:1578
 AliFMDDensityCalculator.cxx:1579
 AliFMDDensityCalculator.cxx:1580
 AliFMDDensityCalculator.cxx:1581
 AliFMDDensityCalculator.cxx:1582
 AliFMDDensityCalculator.cxx:1583
 AliFMDDensityCalculator.cxx:1584
 AliFMDDensityCalculator.cxx:1585
 AliFMDDensityCalculator.cxx:1586
 AliFMDDensityCalculator.cxx:1587