ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes hereby granted      *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

//_________________________________________________________________________
//
// Class for the study of Pile-up effect on
// Calorimeter clusters.
// Open time cuts in reader.
//
//-- Author: Gustavo Conesa (CNRS-LPSC-Grenoble)
//////////////////////////////////////////////////////////////////////////////

// --- ROOT system ---
#include <TH2F.h>
#include <TClonesArray.h>
#include <TObjString.h>

// --- Analysis system ---
#include "AliAnaClusterPileUp.h"
#include "AliCaloTrackReader.h"
#include "AliFiducialCut.h"
#include "AliVCluster.h"
#include "AliAODEvent.h"
#include "AliESDEvent.h"

ClassImp(AliAnaClusterPileUp)

//___________________________________________
AliAnaClusterPileUp::AliAnaClusterPileUp() :
AliAnaCaloTrackCorrBaseClass(),
fNCellsCut(0),
fMomentum(),
// Histograms
fhTimePtNoCut(0),                     fhTimePtSPD(0),
fhTimeNPileUpVertSPD(0),              fhTimeNPileUpVertTrack(0),
fhTimeNPileUpVertContributors(0),
fhTimePileUpMainVertexZDistance(0),   fhTimePileUpMainVertexZDiamond(0),
fhClusterMultSPDPileUp(),             fhClusterMultNoPileUp(),
fhEtaPhiBC0(0),  fhEtaPhiBCPlus(0),   fhEtaPhiBCMinus(0),
fhEtaPhiBC0PileUpSPD(0),
fhEtaPhiBCPlusPileUpSPD(0),           fhEtaPhiBCMinusPileUpSPD(0),
fhPtNPileUpSPDVtx(0),                 fhPtNPileUpTrkVtx(0),
fhPtNPileUpSPDVtxTimeCut(0),          fhPtNPileUpTrkVtxTimeCut(0),
fhPtNPileUpSPDVtxTimeCut2(0),         fhPtNPileUpTrkVtxTimeCut2(0)
{
  //default ctor

  for(Int_t i = 0; i < 7; i++)
  {
    fhPtPileUp       [i] = 0;
    fhPtNeutralPileUp[i] = 0;
    
    fhLambda0PileUp       [i] = 0;
    fhLambda0NeutralPileUp[i] = 0;
    
    fhClusterEFracLongTimePileUp  [i] = 0;
    
    fhClusterCellTimePileUp       [i] = 0;
    fhClusterTimeDiffPileUp       [i] = 0;
    fhClusterTimeDiffNeutralPileUp[i] = 0;
    
  }
  
  for(Int_t i = 0; i < 4; i++)
  {
    fhClusterMultSPDPileUp[i] = 0;
    fhClusterMultNoPileUp [i] = 0;
  }
  
  //Initialize parameters
  InitParameters();
  
}

//__________________________________________________
TObjString *  AliAnaClusterPileUp::GetAnalysisCuts()
{
  //Save parameters used for analysis
  TString parList ; //this will be list of parameters used for this analysis.
  const Int_t buffersize = 255;
  char onePar[buffersize] ;
  
  snprintf(onePar,buffersize,"--- AliAnaClusterPileUp---:") ;
  parList+=onePar ;
  snprintf(onePar,buffersize,"Calorimeter: %s",GetCalorimeterString().Data()) ;
  parList+=onePar ;
  
  //Get parameters set in base class.
  //parList += GetBaseParametersList() ;
  
  return new TObjString(parList) ;
}

//________________________________________________________________________
TList *  AliAnaClusterPileUp::GetCreateOutputObjects()
{
  // Create histograms to be saved in output file and
  // store them in outputContainer
  TList * outputContainer = new TList() ;
  outputContainer->SetName("PhotonHistos") ;
	
  Int_t nptbins  = GetHistogramRanges()->GetHistoPtBins();  Float_t ptimecluster  = GetHistogramRanges()->GetHistoPtMax();  Float_t ptmin  = GetHistogramRanges()->GetHistoPtMin();
  Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins(); Float_t phimax = GetHistogramRanges()->GetHistoPhiMax(); Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
  Int_t netabins = GetHistogramRanges()->GetHistoEtaBins(); Float_t etamax = GetHistogramRanges()->GetHistoEtaMax(); Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
  Int_t ssbins   = GetHistogramRanges()->GetHistoShowerShapeBins();  Float_t ssmax   = GetHistogramRanges()->GetHistoShowerShapeMax();  Float_t ssmin   = GetHistogramRanges()->GetHistoShowerShapeMin();
  Int_t ntimebins= GetHistogramRanges()->GetHistoTimeBins();         Float_t timemax = GetHistogramRanges()->GetHistoTimeMax();         Float_t timemin = GetHistogramRanges()->GetHistoTimeMin();
  
  
  fhTimePtNoCut  = new TH2F ("hTimePt_NoCut","time of cluster vs pT of clusters, no event selection", nptbins,ptmin,ptimecluster, ntimebins,timemin,timemax);
  fhTimePtNoCut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
  fhTimePtNoCut->SetYTitle("#it{time} (ns)");
  outputContainer->Add(fhTimePtNoCut);
  
  fhTimePtSPD  = new TH2F ("hTimePt_SPD","time of cluster vs pT of clusters, SPD Pile-up events", nptbins,ptmin,ptimecluster, ntimebins,timemin,timemax);
  fhTimePtSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
  fhTimePtSPD->SetYTitle("#it{time} (ns)");
  outputContainer->Add(fhTimePtSPD);
  
  fhTimeNPileUpVertSPD  = new TH2F ("hTime_NPileUpVertSPD","time of cluster vs N pile-up SPD vertex", ntimebins,timemin,timemax,20,0,20);
  fhTimeNPileUpVertSPD->SetYTitle("# vertex ");
  fhTimeNPileUpVertSPD->SetXTitle("#it{time} (ns)");
  outputContainer->Add(fhTimeNPileUpVertSPD);
  
  fhTimeNPileUpVertTrack  = new TH2F ("hTime_NPileUpVertTracks","time of cluster vs N pile-up Tracks vertex", ntimebins,timemin,timemax, 20,0,20 );
  fhTimeNPileUpVertTrack->SetYTitle("# vertex ");
  fhTimeNPileUpVertTrack->SetXTitle("#it{time} (ns)");
  outputContainer->Add(fhTimeNPileUpVertTrack);
  
  fhTimeNPileUpVertContributors  = new TH2F ("hTime_NPileUpVertContributors","time of cluster vs N constributors to pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
  fhTimeNPileUpVertContributors->SetYTitle("# vertex ");
  fhTimeNPileUpVertContributors->SetXTitle("#it{time} (ns)");
  outputContainer->Add(fhTimeNPileUpVertContributors);
  
  fhTimePileUpMainVertexZDistance  = new TH2F ("hTime_PileUpMainVertexZDistance","time of cluster vs distance in Z pile-up SPD vertex - main SPD vertex",ntimebins,timemin,timemax,100,0,50);
  fhTimePileUpMainVertexZDistance->SetYTitle("distance Z (cm) ");
  fhTimePileUpMainVertexZDistance->SetXTitle("#it{time} (ns)");
  outputContainer->Add(fhTimePileUpMainVertexZDistance);
  
  fhTimePileUpMainVertexZDiamond  = new TH2F ("hTime_PileUpMainVertexZDiamond","time of cluster vs distance in Z pile-up SPD vertex - z diamond",ntimebins,timemin,timemax,100,0,50);
  fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance Z (cm) ");
  fhTimePileUpMainVertexZDiamond->SetXTitle("#it{time} (ns)");
  outputContainer->Add(fhTimePileUpMainVertexZDiamond);

  fhEtaPhiBC0  = new TH2F ("hEtaPhiBC0","eta-phi for clusters tof corresponding to BC=0",netabins,etamin,etamax, nphibins,phimin,phimax);
  fhEtaPhiBC0->SetXTitle("#eta ");
  fhEtaPhiBC0->SetYTitle("#phi (rad)");
  outputContainer->Add(fhEtaPhiBC0);
  
  fhEtaPhiBCPlus  = new TH2F ("hEtaPhiBCPlus","eta-phi for clusters tof corresponding to BC>0",netabins,etamin,etamax, nphibins,phimin,phimax);
  fhEtaPhiBCPlus->SetXTitle("#eta ");
  fhEtaPhiBCPlus->SetYTitle("#phi (rad)");
  outputContainer->Add(fhEtaPhiBCPlus);
  
  fhEtaPhiBCMinus  = new TH2F ("hEtaPhiBCMinus","eta-phi for clusters tof corresponding to BC<0",netabins,etamin,etamax, nphibins,phimin,phimax);
  fhEtaPhiBCMinus->SetXTitle("#eta ");
  fhEtaPhiBCMinus->SetYTitle("#phi (rad)");
  outputContainer->Add(fhEtaPhiBCMinus);
  
  fhEtaPhiBC0PileUpSPD  = new TH2F ("hEtaPhiBC0PileUpSPD","eta-phi for clusters tof corresponding to BC=0, SPD pile-up",netabins,etamin,etamax, nphibins,phimin,phimax);
  fhEtaPhiBC0PileUpSPD->SetXTitle("#eta ");
  fhEtaPhiBC0PileUpSPD->SetYTitle("#phi (rad)");
  outputContainer->Add(fhEtaPhiBC0PileUpSPD);
  
  fhEtaPhiBCPlusPileUpSPD  = new TH2F ("hEtaPhiBCPlusPileUpSPD","eta-phi for clusters tof corresponding to BC>0, SPD pile-up",netabins,etamin,etamax, nphibins,phimin,phimax);
  fhEtaPhiBCPlusPileUpSPD->SetXTitle("#eta ");
  fhEtaPhiBCPlusPileUpSPD->SetYTitle("#phi (rad)");
  outputContainer->Add(fhEtaPhiBCPlusPileUpSPD);
  
  fhEtaPhiBCMinusPileUpSPD  = new TH2F ("hEtaPhiBCMinusPileUpSPD","eta-phi for clusters tof corresponding to BC<0, SPD pile-up",netabins,etamin,etamax, nphibins,phimin,phimax);
  fhEtaPhiBCMinusPileUpSPD->SetXTitle("#eta ");
  fhEtaPhiBCMinusPileUpSPD->SetYTitle("#phi (rad)");
  outputContainer->Add(fhEtaPhiBCMinusPileUpSPD);
  
  TString title[] = {"no |t diff| cut","|t diff|<20 ns","|t diff|>20 ns","|t diff|>40 ns"};
  TString name [] = {"TDiffNoCut","TDiffSmaller20ns","TDiffLarger20ns","TDiffLarger40ns"};
  for(Int_t i = 0; i < 4; i++)
  {
    fhClusterMultSPDPileUp[i] = new TH2F(Form("fhClusterMultSPDPileUp_%s", name[i].Data()),
                                         Form("Number of clusters per pile up event with #it{E} > 0.5 and %s respect cluster max vs cluster max E ",title[i].Data()),
                                         nptbins,ptmin,ptimecluster,100,0,100);
    fhClusterMultSPDPileUp[i]->SetYTitle("n clusters ");
    fhClusterMultSPDPileUp[i]->SetXTitle("#it{E}_{cluster max} (GeV)");
    outputContainer->Add(fhClusterMultSPDPileUp[i]) ;
    
    fhClusterMultNoPileUp[i] = new TH2F(Form("fhClusterMultNoPileUp_%s", name[i].Data()),
                                        Form("Number of clusters per non pile up event with #it{E} > 0.5 and %s respect cluster max vs cluster max E ",title[i].Data()),
                                        nptbins,ptmin,ptimecluster,100,0,100);
    fhClusterMultNoPileUp[i]->SetYTitle("n clusters ");
    fhClusterMultNoPileUp[i]->SetXTitle("#it{E}_{cluster max} (GeV)");
    outputContainer->Add(fhClusterMultNoPileUp[i]) ;
  }
  
  fhPtNPileUpSPDVtx  = new TH2F ("hPt_NPileUpVertSPD","pT of cluster vs N pile-up SPD vertex",
                                 nptbins,ptmin,ptimecluster,20,0,20);
  fhPtNPileUpSPDVtx->SetYTitle("# vertex ");
  fhPtNPileUpSPDVtx->SetXTitle("#it{p}_{T} (GeV/#it{c})");
  outputContainer->Add(fhPtNPileUpSPDVtx);
  
  fhPtNPileUpTrkVtx  = new TH2F ("hPt_NPileUpVertTracks","pT of cluster vs N pile-up Tracks vertex",
                                 nptbins,ptmin,ptimecluster, 20,0,20 );
  fhPtNPileUpTrkVtx->SetYTitle("# vertex ");
  fhPtNPileUpTrkVtx->SetXTitle("#it{p}_{T} (GeV/#it{c})");
  outputContainer->Add(fhPtNPileUpTrkVtx);
  
  fhPtNPileUpSPDVtxTimeCut  = new TH2F ("hPt_NPileUpVertSPD_TimeCut","pT of cluster vs N pile-up SPD vertex, |tof| < 25 ns",
                                        nptbins,ptmin,ptimecluster,20,0,20);
  fhPtNPileUpSPDVtxTimeCut->SetYTitle("# vertex ");
  fhPtNPileUpSPDVtxTimeCut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
  outputContainer->Add(fhPtNPileUpSPDVtxTimeCut);
  
  fhPtNPileUpTrkVtxTimeCut  = new TH2F ("hPt_NPileUpVertTracks_TimeCut","pT of cluster vs N pile-up Tracks vertex, |tof| < 25 ns",
                                        nptbins,ptmin,ptimecluster, 20,0,20 );
  fhPtNPileUpTrkVtxTimeCut->SetYTitle("# vertex ");
  fhPtNPileUpTrkVtxTimeCut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
  outputContainer->Add(fhPtNPileUpTrkVtxTimeCut);
  
  fhPtNPileUpSPDVtxTimeCut2  = new TH2F ("hPt_NPileUpVertSPD_TimeCut2","pT of cluster vs N pile-up SPD vertex, -25 < tof < 75 ns",
                                         nptbins,ptmin,ptimecluster,20,0,20);
  fhPtNPileUpSPDVtxTimeCut2->SetYTitle("# vertex ");
  fhPtNPileUpSPDVtxTimeCut2->SetXTitle("#it{p}_{T} (GeV/#it{c})");
  outputContainer->Add(fhPtNPileUpSPDVtxTimeCut2);
  
  fhPtNPileUpTrkVtxTimeCut2  = new TH2F ("hPt_NPileUpVertTracks_TimeCut2","pT of cluster vs N pile-up Tracks vertex, -25 < tof < 75 ns",
                                         nptbins,ptmin,ptimecluster, 20,0,20 );
  fhPtNPileUpTrkVtxTimeCut2->SetYTitle("# vertex ");
  fhPtNPileUpTrkVtxTimeCut2->SetXTitle("#it{p}_{T} (GeV/#it{c})");
  outputContainer->Add(fhPtNPileUpTrkVtxTimeCut2);
  
  
  TString pileUpName[] = {"SPD",kEMCAL,"SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
  
  for(Int_t i = 0 ; i < 7 ; i++)
  {
    fhPtPileUp[i]  = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
                              Form("Cluster  #it{p}_{T} distribution, %s Pile-Up event",pileUpName[i].Data()), nptbins,ptmin,ptimecluster);
    fhPtPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
    outputContainer->Add(fhPtPileUp[i]);
    
    fhPtNeutralPileUp[i]  = new TH1F(Form("hPtNeutralPileUp%s",pileUpName[i].Data()),
                                     Form("Neutral clusters #it{p}_{T} distribution, %s Pile-Up event",pileUpName[i].Data()), nptbins,ptmin,ptimecluster);
    fhPtNeutralPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
    outputContainer->Add(fhPtNeutralPileUp[i]);
    
    fhClusterEFracLongTimePileUp[i]  = new TH2F(Form("hClusterEFracLongTimePileUp%s",pileUpName[i].Data()),
                                                Form("Cluster E vs fraction of cluster energy from large T cells, %s Pile-Up event",pileUpName[i].Data()),
                                                nptbins,ptmin,ptimecluster,200,0,1);
    fhClusterEFracLongTimePileUp[i]->SetXTitle("#it{E} (GeV)");
    fhClusterEFracLongTimePileUp[i]->SetYTitle("E(large time) / E");
    outputContainer->Add(fhClusterEFracLongTimePileUp[i]);
    
    fhClusterCellTimePileUp[i]  = new TH2F(Form("hClusterCellTimePileUp%s",pileUpName[i].Data()),
                                           Form("Cluster E vs cell time in cluster, %s Pile-Up event",pileUpName[i].Data()),
                                           nptbins,ptmin,ptimecluster,ntimebins,timemin,timemax);
    fhClusterCellTimePileUp[i]->SetXTitle("#it{E} (GeV)");
    fhClusterCellTimePileUp[i]->SetYTitle("t_{cell} (ns)");
    outputContainer->Add(fhClusterCellTimePileUp[i]);
    
    fhClusterTimeDiffPileUp[i]  = new TH2F(Form("hClusterTimeDiffPileUp%s",pileUpName[i].Data()),
                                           Form("Cluster E vs t_{max}-t_{cell} in cluster, %s Pile-Up event",pileUpName[i].Data()),
                                           nptbins,ptmin,ptimecluster,400,-200,200);
    fhClusterTimeDiffPileUp[i]->SetXTitle("#it{E} (GeV)");
    fhClusterTimeDiffPileUp[i]->SetYTitle("t_{max}-t_{cell} (ns)");
    outputContainer->Add(fhClusterTimeDiffPileUp[i]);
    
    fhClusterTimeDiffNeutralPileUp[i]  = new TH2F(Form("hClusterTimeDiffNeutralPileUp%s",pileUpName[i].Data()),
                                                  Form("Neutral clusters E vs t_{max}-t_{cell} in cluster, %s Pile-Up event",pileUpName[i].Data()),
                                                  nptbins,ptmin,ptimecluster,400,-200,200);
    fhClusterTimeDiffNeutralPileUp[i]->SetXTitle("#it{E} (GeV)");
    fhClusterTimeDiffNeutralPileUp[i]->SetYTitle("t_{max}-t_{cell} (ns)");
    outputContainer->Add(fhClusterTimeDiffNeutralPileUp[i]);
    
    fhLambda0PileUp[i]  = new TH2F(Form("hLambda0PileUp%s",pileUpName[i].Data()),
                                   Form("Cluster E vs #lambda^{2}_{0} in cluster, %s Pile-Up event",pileUpName[i].Data()),
                                   nptbins,ptmin,ptimecluster,ssbins,ssmin,ssmax);
    fhLambda0PileUp[i]->SetXTitle("#it{E} (GeV)");
    fhLambda0PileUp[i]->SetYTitle("#lambda^{2}_{0}");
    outputContainer->Add(fhLambda0PileUp[i]);
    
    fhLambda0NeutralPileUp[i]  = new TH2F(Form("hLambda0NeutralPileUp%s",pileUpName[i].Data()),
                                          Form("Neutral clusters E vs #lambda^{2}_{0}in cluster, %s Pile-Up event",pileUpName[i].Data()), nptbins,ptmin,ptimecluster,ssbins,ssmin,ssmax);
    fhLambda0NeutralPileUp[i]->SetXTitle("#it{E} (GeV)");
    fhLambda0NeutralPileUp[i]->SetYTitle("#lambda^{2}_{0}");
    outputContainer->Add(fhLambda0NeutralPileUp[i]);
    
  }
  
  return outputContainer ;
  
}

//_______________________
void AliAnaClusterPileUp::Init()
{
  //Init
  
  //Do some checks
  if(GetCalorimeter() == kPHOS && !GetReader()->IsPHOSSwitchedOn())
    AliFatal("You want to use PHOS in analysis but it is not read!! \n!!Check the configuration file!!");
  
  if(GetCalorimeter() == kEMCAL && !GetReader()->IsEMCALSwitchedOn())
    AliFatal("You want to use EMCAL in analysis but it is not read!! \n!!Check the configuration file!!");
  
  if(GetReader()->GetDataType() == AliCaloTrackReader::kMC)
    AliFatal("You want to use MC data in analysis but this is not possible in pile-up!!");
  
}

//____________________________________________________________________________
void AliAnaClusterPileUp::InitParameters()
{
  
  //Initialize the parameters of the analysis.
  AddToHistogramsName("AnaClusterPileUp_");
  
 	fNCellsCut   = 2;
}

//__________________________________________________________________
void  AliAnaClusterPileUp::MakeAnalysisFillHistograms()
{
  // Do cluster analysis
  // Remember to open time cuts in reader
  
  //Select the calorimeter
  TObjArray * pl = 0x0;
  AliVCaloCells* cells    = 0;
  if      (GetCalorimeter() == kPHOS )
  {
    pl    = GetPHOSClusters();
    cells = GetPHOSCells();
  }
  else if (GetCalorimeter() == kEMCAL)
  {
    pl    = GetEMCALClusters();
    cells = GetEMCALCells();
  }
  
  if(!pl)
  {
    AliInfo(Form("TObjArray with %s clusters is NULL!",GetCalorimeterString().Data()));
    return;
  }
  
  AliVEvent  * event = GetReader()->GetInputEvent();
  AliESDEvent* esdEv = dynamic_cast<AliESDEvent*> (event);
  AliAODEvent* aodEv = dynamic_cast<AliAODEvent*> (event);
	
  //-------------------
  // N pile up vertices
  Int_t nVtxSPD = -1;
  Int_t nVtxTrk = -1;
	
  if      (esdEv)
  {
		nVtxSPD = esdEv->GetNumberOfPileupVerticesSPD();
		nVtxTrk = esdEv->GetNumberOfPileupVerticesTracks();
  }//ESD
  else if (aodEv)
  {
		nVtxSPD = aodEv->GetNumberOfPileupVerticesSPD();
		nVtxTrk = aodEv->GetNumberOfPileupVerticesTracks();
  }//AOD

  //-------------------
  // Loop on clusters
  Int_t nCaloClusters = pl->GetEntriesFast();

  AliDebug(1,Form("Input %s cluster entries %d", GetCalorimeterString().Data(), nCaloClusters));
  
  //Init variables
  Int_t   idMax = 0;
  Float_t ptMax = 0;
  Float_t  tMax = 0;
  
  for(Int_t icalo = 0; icalo < nCaloClusters; icalo++)
  {
	  AliVCluster * calo =  (AliVCluster*) (pl->At(icalo));
    //printf("calo %d, %f\n",icalo,calo->E());
    
    if(!calo)  continue; // it should not happen, but just in case
    
    calo->GetMomentum(fMomentum,GetVertex(0)) ;
  
    Float_t  ecluster  = fMomentum.E();
    Float_t ptcluster  = fMomentum.Pt();
    Float_t l0cluster  = calo->GetM02();
    Float_t etacluster = fMomentum.Eta();
    Float_t phicluster = fMomentum.Phi();
    if(phicluster < 0) phicluster+=TMath::TwoPi();
    Float_t tofcluster   = calo->GetTOF()*1.e9;
    
    Bool_t matched = IsTrackMatched(calo,GetReader()->GetInputEvent());

    //.......................................
    //If too small or big energy, skip it
    if(ecluster < GetMinEnergy() || ecluster > GetMaxEnergy() ) continue ;

    //.......................................
    if(calo->GetNCells() <= fNCellsCut && GetReader()->GetDataType() != AliCaloTrackReader::kMC) continue;
    
     //.......................................
    //Check acceptance selection
    if(IsFiducialCutOn())
    {
      Bool_t in = GetFiducialCut()->IsInFiducialCut(fMomentum.Eta(),fMomentum.Phi(),GetCalorimeter()) ;
      if(! in ) continue;
    }

    // Select highest pt cluster passing the cuts
    if(ptcluster > ptMax && tofcluster < 30)
    {
      ptMax = ptcluster;
			tMax  = tofcluster;
      idMax = icalo;
    }
    
    //-------------------------------------
    // Cluster timing for different pile-up
    
    fhTimePtNoCut->Fill(ptcluster,tofcluster);
    if(GetReader()->IsPileUpFromSPD()) fhTimePtSPD->Fill(ptcluster,tofcluster);
    
    //----------------------------------------
    // correlate cluster and number of vertices
    
    fhPtNPileUpSPDVtx->Fill(ptcluster,nVtxSPD);
		fhPtNPileUpTrkVtx->Fill(ptcluster,nVtxTrk);
    
		if(TMath::Abs(tofcluster) < 30)
		{
			fhPtNPileUpSPDVtxTimeCut->Fill(ptcluster,nVtxSPD);
			fhPtNPileUpTrkVtxTimeCut->Fill(ptcluster,nVtxTrk);
		}
    
    if(tofcluster < 75 && tofcluster > -30)
    {
      fhPtNPileUpSPDVtxTimeCut2->Fill(ptcluster,nVtxSPD);
      fhPtNPileUpTrkVtxTimeCut2->Fill(ptcluster,nVtxTrk);
    }
    
    // Loop on the vertices arrays, correlate with timing
    // only for sufficiently large cluster energy
    if(ecluster > 8)
    {
      fhTimeNPileUpVertSPD  ->Fill(tofcluster,nVtxSPD);
      fhTimeNPileUpVertTrack->Fill(tofcluster,nVtxTrk);
      
      Int_t ncont = -1;
      Float_t z1 = -1, z2 = -1;
      Float_t diamZ = -1;
      for(Int_t iVert=0; iVert<nVtxSPD;iVert++)
      {
        if      (esdEv)
        {
          const AliESDVertex* pv=esdEv->GetPileupVertexSPD(iVert);
          ncont=pv->GetNContributors();
          z1 = esdEv->GetPrimaryVertexSPD()->GetZ();
          z2 = pv->GetZ();
          diamZ = esdEv->GetDiamondZ();
        }//ESD
        else if (aodEv)
        {
          AliAODVertex *pv=aodEv->GetVertex(iVert);
          if(pv->GetType()!=AliAODVertex::kPileupSPD) continue;
          ncont=pv->GetNContributors();
          z1=aodEv->GetPrimaryVertexSPD()->GetZ();
          z2=pv->GetZ();
          diamZ = aodEv->GetDiamondZ();
        }// AOD
        
        Double_t distZ  = TMath::Abs(z2-z1);
        diamZ  = TMath::Abs(z2-diamZ);
        
        fhTimeNPileUpVertContributors  ->Fill(tofcluster,ncont);
        fhTimePileUpMainVertexZDistance->Fill(tofcluster,distZ);
        fhTimePileUpMainVertexZDiamond ->Fill(tofcluster,diamZ);
        
      }// vertex loop
    }
    
    //------------------------------------
    // Eta-Phi cluster position depending on timing
    // Continue only for BC0
    if      (tofcluster > 28)
    {
      fhEtaPhiBCPlus ->Fill(etacluster,phicluster);
      if(GetReader()->IsPileUpFromSPD()) fhEtaPhiBCPlusPileUpSPD ->Fill(etacluster,phicluster);
      continue;
    }
    else if (tofcluster <-28)
    {
      fhEtaPhiBCMinus->Fill(etacluster,phicluster);
      if(GetReader()->IsPileUpFromSPD()) fhEtaPhiBCMinusPileUpSPD->Fill(etacluster,phicluster);
      continue ;
    }
    
    //--------------------------------------
    // Fill histograms for clusters in BC=0
    
    fhEtaPhiBC0->Fill(etacluster,phicluster); if(GetReader()->IsPileUpFromSPD()) fhEtaPhiBC0PileUpSPD    ->Fill(etacluster,phicluster);
    
    if(GetReader()->IsPileUpFromSPD())               {fhPtPileUp[0]->Fill(ptcluster); fhLambda0PileUp[0]->Fill(ptcluster,l0cluster); }
    if(GetReader()->IsPileUpFromEMCal())             {fhPtPileUp[1]->Fill(ptcluster); fhLambda0PileUp[1]->Fill(ptcluster,l0cluster); }
    if(GetReader()->IsPileUpFromSPDOrEMCal())        {fhPtPileUp[2]->Fill(ptcluster); fhLambda0PileUp[2]->Fill(ptcluster,l0cluster); }
    if(GetReader()->IsPileUpFromSPDAndEMCal())       {fhPtPileUp[3]->Fill(ptcluster); fhLambda0PileUp[3]->Fill(ptcluster,l0cluster); }
    if(GetReader()->IsPileUpFromSPDAndNotEMCal())    {fhPtPileUp[4]->Fill(ptcluster); fhLambda0PileUp[4]->Fill(ptcluster,l0cluster); }
    if(GetReader()->IsPileUpFromEMCalAndNotSPD())    {fhPtPileUp[5]->Fill(ptcluster); fhLambda0PileUp[5]->Fill(ptcluster,l0cluster); }
    if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) {fhPtPileUp[6]->Fill(ptcluster); fhLambda0PileUp[6]->Fill(ptcluster,l0cluster); }
    
    if(!matched)
    {
      if(GetReader()->IsPileUpFromSPD())               {fhPtNeutralPileUp[0]->Fill(ptcluster); fhLambda0NeutralPileUp[0]->Fill(ptcluster,l0cluster); }
      if(GetReader()->IsPileUpFromEMCal())             {fhPtNeutralPileUp[1]->Fill(ptcluster); fhLambda0NeutralPileUp[1]->Fill(ptcluster,l0cluster); }
      if(GetReader()->IsPileUpFromSPDOrEMCal())        {fhPtNeutralPileUp[2]->Fill(ptcluster); fhLambda0NeutralPileUp[2]->Fill(ptcluster,l0cluster); }
      if(GetReader()->IsPileUpFromSPDAndEMCal())       {fhPtNeutralPileUp[3]->Fill(ptcluster); fhLambda0NeutralPileUp[3]->Fill(ptcluster,l0cluster); }
      if(GetReader()->IsPileUpFromSPDAndNotEMCal())    {fhPtNeutralPileUp[4]->Fill(ptcluster); fhLambda0NeutralPileUp[4]->Fill(ptcluster,l0cluster); }
      if(GetReader()->IsPileUpFromEMCalAndNotSPD())    {fhPtNeutralPileUp[5]->Fill(ptcluster); fhLambda0NeutralPileUp[5]->Fill(ptcluster,l0cluster); }
      if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) {fhPtNeutralPileUp[6]->Fill(ptcluster); fhLambda0NeutralPileUp[6]->Fill(ptcluster,l0cluster); }
    }

    //----------------------------------------------------------------------------
    // Loop on cells inside cluster, max cell must be over 100 MeV and time in BC=0
    // Get the fraction of the cluster energy that carries the cell with highest
    // energy and its absId
    
    Float_t maxCellFraction = 0.;
    Int_t absIdMax = GetCaloUtils()->GetMaxEnergyCell(cells, calo,maxCellFraction);
    
    Float_t clusterLongTimePt = 0;
    Float_t clusterOKTimePt   = 0;

    if(cells->GetCellAmplitude(absIdMax) < 0.1) continue ;
    
    for (Int_t ipos = 0; ipos < calo->GetNCells(); ipos++)
    {
      Int_t absId  = calo->GetCellsAbsId()[ipos];
      
      if( absId == absIdMax ) continue ;
      
      Double_t time  = cells->GetCellTime(absId);
      Float_t  amp   = cells->GetCellAmplitude(absId);
      Int_t    bc    = GetReader()->GetInputEvent()->GetBunchCrossNumber();
      GetCaloUtils()->GetEMCALRecoUtils()->AcceptCalibrateCell(absId,bc,amp,time,cells);
      time*=1e9;
      
      Float_t diff = (tofcluster-time);
      
      if(GetReader()->IsInTimeWindow(time,amp)) clusterOKTimePt   += amp;
      else                                      clusterLongTimePt += amp;
      
      if( cells->GetCellAmplitude(absIdMax) < 0.1 ) continue ;
      
      if(GetReader()->IsPileUpFromSPD())
      {
        fhClusterCellTimePileUp[0]->Fill(ptcluster, time);
        fhClusterTimeDiffPileUp[0]->Fill(ptcluster, diff);
        if(!matched) fhClusterTimeDiffNeutralPileUp[0]->Fill(ptcluster, diff);
      }
      
      if(GetReader()->IsPileUpFromEMCal())
      {
        fhClusterCellTimePileUp[1]->Fill(ptcluster, time);
        fhClusterTimeDiffPileUp[1]->Fill(ptcluster, diff);
        if(!matched) fhClusterTimeDiffNeutralPileUp[1]->Fill(ptcluster, diff);
      }
      
      if(GetReader()->IsPileUpFromSPDOrEMCal())
      {
        fhClusterCellTimePileUp[2]->Fill(ptcluster, time);
        fhClusterTimeDiffPileUp[2]->Fill(ptcluster, diff);
        if(!matched) fhClusterTimeDiffNeutralPileUp[2]->Fill(ptcluster, diff);
      }
      
      if(GetReader()->IsPileUpFromSPDAndEMCal())
      {
        fhClusterCellTimePileUp[3]->Fill(ptcluster, time);
        fhClusterTimeDiffPileUp[3]->Fill(ptcluster, diff);
        if(!matched) fhClusterTimeDiffNeutralPileUp[3]->Fill(ptcluster, diff);
      }
      
      if(GetReader()->IsPileUpFromSPDAndNotEMCal())
      {
        fhClusterCellTimePileUp[4]->Fill(ptcluster, time);
        fhClusterTimeDiffPileUp[4]->Fill(ptcluster, diff);
        if(!matched) fhClusterTimeDiffNeutralPileUp[4]->Fill(ptcluster, diff);
      }
      
      if(GetReader()->IsPileUpFromEMCalAndNotSPD())
      {
        fhClusterCellTimePileUp[5]->Fill(ptcluster, time);
        fhClusterTimeDiffPileUp[5]->Fill(ptcluster, diff);
        if(!matched) fhClusterTimeDiffNeutralPileUp[5]->Fill(ptcluster, diff);
      }
      
      if(GetReader()->IsPileUpFromNotSPDAndNotEMCal())
      {
        fhClusterCellTimePileUp[6]->Fill(ptcluster, time);
        fhClusterTimeDiffPileUp[6]->Fill(ptcluster, diff);
        if(!matched) fhClusterTimeDiffNeutralPileUp[6]->Fill(ptcluster, diff);
      }
    }//loop
    
    Float_t frac = 0;
    if(clusterLongTimePt+clusterOKTimePt > 0.001)
      frac = clusterLongTimePt/(clusterLongTimePt+clusterOKTimePt);
    //printf("E long %f, E OK %f, Fraction large time %f, E %f\n",clusterLongTimePt,clusterOKTimePt,frac,ptcluster);
    
    if(GetReader()->IsPileUpFromSPD())               fhClusterEFracLongTimePileUp[0]->Fill(ptcluster,frac);
    if(GetReader()->IsPileUpFromEMCal())             fhClusterEFracLongTimePileUp[1]->Fill(ptcluster,frac);
    if(GetReader()->IsPileUpFromSPDOrEMCal())        fhClusterEFracLongTimePileUp[2]->Fill(ptcluster,frac);
    if(GetReader()->IsPileUpFromSPDAndEMCal())       fhClusterEFracLongTimePileUp[3]->Fill(ptcluster,frac);
    if(GetReader()->IsPileUpFromSPDAndNotEMCal())    fhClusterEFracLongTimePileUp[4]->Fill(ptcluster,frac);
    if(GetReader()->IsPileUpFromEMCalAndNotSPD())    fhClusterEFracLongTimePileUp[5]->Fill(ptcluster,frac);
    if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhClusterEFracLongTimePileUp[6]->Fill(ptcluster,frac);
  }//loop
  
  //----------------------------------------------------------------------------------------------
  // Loop again on clusters to compare this max cluster t and the rest of the clusters, if E > 0.3
  Int_t n20  = 0;
  Int_t n40  = 0;
  Int_t n    = 0;
  Int_t nOK  = 0;
  
  for(Int_t icalo = 0; icalo < nCaloClusters; icalo++)
  {
	  AliVCluster * calo =  (AliVCluster*) (pl->At(icalo));
    
    if(!calo || calo->E() < 0.3 || icalo == idMax) continue;
    
    Float_t tdiff = TMath::Abs(tMax-calo->GetTOF()*1e9);
    n++;
    if(tdiff < 25) nOK++;
    else
    {
      n20++;
      if(tdiff > 40 ) n40++;
    }
  }
  
  // Check pile-up and fill histograms depending on the different cluster multiplicities
  if(GetReader()->IsPileUpFromSPD())
  {
    fhClusterMultSPDPileUp[0]->Fill(ptMax,n  );
    fhClusterMultSPDPileUp[1]->Fill(ptMax,nOK);
    fhClusterMultSPDPileUp[2]->Fill(ptMax,n20);
    fhClusterMultSPDPileUp[3]->Fill(ptMax,n40);
  }
  else
  {
    fhClusterMultNoPileUp[0]->Fill(ptMax,n  );
    fhClusterMultNoPileUp[1]->Fill(ptMax,nOK);
    fhClusterMultNoPileUp[2]->Fill(ptMax,n20);
    fhClusterMultNoPileUp[3]->Fill(ptMax,n40);
  }

  AliDebug(1,"End fill histograms");
  
}



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