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

/* $Id$ */

//_________________________________________________________________________
//  Base class for the clusterization algorithm (pure abstract)
//*--
//*-- Author: Yves Schutz  SUBATECH 
// 
//   Clusterization mother class. Contains common methods/data members of different 
//   clusterizers. GCB 2010
//////////////////////////////////////////////////////////////////////////////

// --- ROOT system ---
#include <TTree.h>
#include <TFile.h> 
class TFolder;
#include <TMath.h> 
#include <TMinuit.h>
#include <TTree.h> 
class TSystem; 
#include <TBenchmark.h>
#include <TBrowser.h>
#include <TROOT.h>

// --- Standard library ---
#include <cassert>

// --- AliRoot header files ---
#include "AliEMCALClusterizer.h"
#include "AliEMCALReconstructor.h"
#include "AliRunLoader.h"
#include "AliRun.h"
#include "AliLog.h"
#include "AliEMCAL.h"
#include "AliEMCALRecPoint.h"
#include "AliEMCALRecParam.h"
#include "AliEMCALGeometry.h"
#include "AliEMCALRecParam.h"
#include "AliCDBManager.h"
#include "AliCaloCalibPedestal.h"
#include "AliEMCALCalibData.h"
class AliCDBStorage;
#include "AliCDBEntry.h"

ClassImp(AliEMCALClusterizer)

//____________________________________________________________________________
AliEMCALClusterizer::AliEMCALClusterizer():
  fIsInputCalibrated(kFALSE),
  fJustClusters(kFALSE),
  fDigitsArr(NULL),
  fTreeR(NULL),
  fRecPoints(NULL),
  fGeom(NULL),
  fCalibData(NULL), 
  fCaloPed(NULL),
  fADCchannelECA(0.),fADCpedestalECA(0.), fTimeECA(0.),
  fTimeMin(-1.),fTimeMax(1.),fTimeCut(1.),
  fDefaultInit(kFALSE),fToUnfold(kFALSE),
  fNumberOfECAClusters(0), fECAClusteringThreshold(0.),
  fECALocMaxCut(0.),fECAW0(0.),fMinECut(0.),fRejectBelowThreshold(0),
  fClusterUnfolding(NULL)
{
  // ctor
  
  Init();
}

//____________________________________________________________________________
AliEMCALClusterizer::AliEMCALClusterizer(AliEMCALGeometry* geometry): 
  fIsInputCalibrated(kFALSE),
  fJustClusters(kFALSE),
  fDigitsArr(NULL),
  fTreeR(NULL),
  fRecPoints(NULL),
  fGeom(geometry),
  fCalibData(NULL), 
  fCaloPed(NULL),
  fADCchannelECA(0.),fADCpedestalECA(0.), fTimeECA(0.),
  fTimeMin(-1.),fTimeMax(1.),fTimeCut(1.),
  fDefaultInit(kFALSE),fToUnfold(kFALSE),
  fNumberOfECAClusters(0), fECAClusteringThreshold(0.),
  fECALocMaxCut(0.),fECAW0(0.),fMinECut(0.),fRejectBelowThreshold(0),
  fClusterUnfolding(NULL)
{
  // Ctor with the indication of the file where header Tree and digits Tree are stored.
  // Use this contructor to avoid usage of Init() which uses runloader.
  // Change needed by HLT - MP.
  // Note for the future: the use on runloader should be avoided or optional at least.
  // Another way is to make Init virtual and protected at least 
  // such that the deriving classes can overload Init();
  
  if (!fGeom)
  {
    AliFatal("Geometry not initialized.");
  }
  Int_t i=0;
  for (i = 0; i < 8; i++)
    fSSPars[i] = 0.;
  for (i = 0; i < 3; i++) {
    fPar5[i] = 0.;
    fPar6[i] = 0.;
  }
}

//____________________________________________________________________________
AliEMCALClusterizer::AliEMCALClusterizer(AliEMCALGeometry *geometry, 
                                         AliEMCALCalibData *calib, 
                                         AliCaloCalibPedestal *caloped): 
  fIsInputCalibrated(kFALSE),
  fJustClusters(kFALSE),
  fDigitsArr(NULL),
  fTreeR(NULL),
  fRecPoints(NULL),
  fGeom(geometry),
  fCalibData(calib),
  fCaloPed(caloped),
  fADCchannelECA(0.),fADCpedestalECA(0.), fTimeECA(0.),
  fTimeMin(-1.),fTimeMax(1.),fTimeCut(1.),
  fDefaultInit(kFALSE),fToUnfold(kFALSE),
  fNumberOfECAClusters(0), fECAClusteringThreshold(0.),
  fECALocMaxCut(0.),fECAW0(0.),fMinECut(0.),fRejectBelowThreshold(0),
  fClusterUnfolding(NULL)
{
  // ctor, geometry and calibration are initialized elsewhere.
  
  if (!fGeom)
    AliFatal("Geometry not initialized.");
  
  Int_t i=0;
  for (i = 0; i < 8; i++)
    fSSPars[i] = 0.;
  for (i = 0; i < 3; i++) {
    fPar5[i] = 0.;
    fPar6[i] = 0.;
  }
}

//____________________________________________________________________________
AliEMCALClusterizer::~AliEMCALClusterizer()
{
  // dtor
  //Already deleted in AliEMCALReconstructor.

  if(fClusterUnfolding) delete fClusterUnfolding;

  // make sure we delete the rec points array
  DeleteRecPoints();

  //Delete digits array
  DeleteDigits();

}

//____________________________________________________________________________
void AliEMCALClusterizer::DeleteRecPoints()
{
  // free the cluster array
  if (fRecPoints) 
    {
      AliDebug(2, "Deleting fRecPoints.");
      fRecPoints->Delete();
      delete fRecPoints;
      fRecPoints = 0;
    }
}

//____________________________________________________________________________
void AliEMCALClusterizer::DeleteDigits()
{
  // free the digits array
  if (fDigitsArr) 
    {
      AliDebug(2, "Deleting fDigitsArr.");
      fDigitsArr->Clear("C");
      delete fDigitsArr;
      fDigitsArr = 0;
    }
}

//____________________________________________________________________________
void AliEMCALClusterizer::Calibrate(Float_t & amp, Float_t & time, const Int_t absId) 
{
  // Convert digitized amplitude into energy, calibrate time
  // Calibration parameters are taken from OCDB : OCDB/EMCAL/Calib/Data

  //Return energy with default parameters if calibration is not available
  if (!fCalibData && !fCaloPed) {
    if (fIsInputCalibrated == kTRUE)
    {
      AliDebug(10, Form("Input already calibrated!"));
      return ;
    }
    else{
      AliFatal("OCDB calibration and bad map parameters are not available");
      return;
    }   
  }
  
  if (fGeom==0)
    AliFatal("Did not get geometry from EMCALLoader") ;
    
  Int_t iSupMod = -1;
  Int_t nModule = -1;
  Int_t nIphi   = -1;
  Int_t nIeta   = -1;
  Int_t iphi    = -1;
  Int_t ieta    = -1;
    
  Bool_t bCell = fGeom->GetCellIndex(absId, iSupMod, nModule, nIphi, nIeta) ;
  if(!bCell) {
    fGeom->PrintGeometry();
    AliError(Form("Wrong cell id number : %i", absId));
    //assert(0); // GCB: This aborts reconstruction of raw simulations 
    //where simulation had more SM than default geometry, 
    //change to return 0, to avoid aborting good generations.
    amp  = 0;
    time = 0;
    return ;
  }
    
  fGeom->GetCellPhiEtaIndexInSModule(iSupMod,nModule,nIphi, nIeta,iphi,ieta);
	  
  // Check if channel is bad (dead or hot), in this case return 0.	
  // Gustavo: 15-12-09 In case of RAW data this selection is already done, but not in simulation.
  // for the moment keep it here but remember to do the selection at the sdigitizer level 
  // and remove it from here
  if (fCaloPed) {
    Int_t channelStatus = (Int_t)(fCaloPed->GetDeadMap(iSupMod))->GetBinContent(ieta,iphi);
    if(channelStatus == AliCaloCalibPedestal::kHot || channelStatus == AliCaloCalibPedestal::kDead) {
      AliDebug(2,Form("Tower from SM %d, ieta %d, iphi %d is BAD : status %d !!!",iSupMod,ieta,iphi, channelStatus));
      amp  = 0 ;
      time = 0 ;
      return ;
    }
  }
    
  if (fIsInputCalibrated || !fCalibData)
  {
    AliDebug(10, Form("Input already calibrated!"));
    return ;
  }
	  
  Int_t bc = 0; // Get somehow the bunch crossing number

  fADCchannelECA  = fCalibData->GetADCchannel (iSupMod,ieta,iphi);
  fADCpedestalECA = fCalibData->GetADCpedestal(iSupMod,ieta,iphi);
  fTimeECA        = fCalibData->GetTimeChannel(iSupMod,ieta,iphi, bc);
  
  time -= fTimeECA ;
  amp   = amp * fADCchannelECA - fADCpedestalECA ;  
  
}

//____________________________________________________________________________
void AliEMCALClusterizer::GetCalibrationParameters() 
{
  // Set calibration parameters:
  // If calibration database exists, they are read from database,
  // otherwise, they are taken from digitizer.
  // It is a user responsilibity to open CDB before reconstruction, 
  // for example: 
  // AliCDBStorage* storage = AliCDBManager::Instance()->GetStorage("local://CalibDB");

  if (fIsInputCalibrated)
    return;
  
  //Check if calibration is stored in data base
  if(!fCalibData)
  {
    AliCDBEntry *entry = (AliCDBEntry*) 
    AliCDBManager::Instance()->Get("EMCAL/Calib/Data");
    if (entry) fCalibData =  (AliEMCALCalibData*) entry->GetObject();
  }
  
  if(!fCalibData)
    AliFatal("Calibration parameters not found in CDB!");
}

//____________________________________________________________________________
void AliEMCALClusterizer::GetCaloCalibPedestal() 
{
  // Set calibration parameters:
  // if calibration database exists, they are read from database,
  // otherwise, they are taken from digitizer.
  //
  // It is a user responsilibity to open CDB before reconstruction, 
  // for example: 
  // AliCDBStorage* storage = AliCDBManager::Instance()->GetStorage("local://CalibDB");

  if (fIsInputCalibrated)
    return;
  
  // Check if calibration is stored in data base
  if(!fCaloPed)
    {
      AliCDBEntry *entry = (AliCDBEntry*) 
	AliCDBManager::Instance()->Get("EMCAL/Calib/Pedestals");
      if (entry) fCaloPed =  (AliCaloCalibPedestal*) entry->GetObject();
    }
  
  if(!fCaloPed)
    AliFatal("Pedestal info not found in CDB!");
}

//____________________________________________________________________________
void AliEMCALClusterizer::Init()
{
  // Make all memory allocations which can not be done in default constructor.
  // Attach the Clusterizer task to the list of EMCAL tasks
  
  AliRunLoader *rl = AliRunLoader::Instance();
  if (rl->GetAliRun()){
    AliEMCAL* emcal = dynamic_cast<AliEMCAL*>(rl->GetAliRun()->GetDetector("EMCAL"));
    if(emcal)fGeom = emcal->GetGeometry();
  }
  
  if(!fGeom){ 
    fGeom = AliEMCALGeometry::GetInstance(AliEMCALGeometry::GetDefaultGeometryName());
  }
  
  AliDebug(1,Form("geom %p",fGeom));
  
  if(!gMinuit) 
    gMinuit = new TMinuit(100) ;
  
  Int_t i=0;
  for (i = 0; i < 8; i++)
    fSSPars[i] = 0.;
  for (i = 0; i < 3; i++) {
    fPar5[i] = 0.;
    fPar6[i] = 0.;
  }
}

//____________________________________________________________________________
void AliEMCALClusterizer::InitParameters()
{ 
  // Initializes the parameters for the Clusterizer from AliEMCALReconstructor::GetRecParam().

  return InitParameters(AliEMCALReconstructor::GetRecParam());
}

//____________________________________________________________________________
void AliEMCALClusterizer::InitParameters(const AliEMCALRecParam* recParam)
{ 
  // Initializes the parameters for the Clusterizer

  fNumberOfECAClusters = 0 ;
  fCalibData           = 0 ;
  fCaloPed             = 0 ;
	
  if(!recParam) {
    AliFatal("Reconstruction parameters for EMCAL not set!");
  } 

  fECAClusteringThreshold = recParam->GetClusteringThreshold();
  fECAW0                  = recParam->GetW0();
  fMinECut                = recParam->GetMinECut();    
  fRejectBelowThreshold   = recParam->GetRejectBelowThreshold();
  fToUnfold               = recParam->GetUnfold();
  fECALocMaxCut           = recParam->GetLocMaxCut();
  fTimeCut                = recParam->GetTimeCut();
  fTimeMin                = recParam->GetTimeMin();
  fTimeMax                = recParam->GetTimeMax();
  
  //For NxN
  SetNRowDiff(recParam->GetNRowDiff());
  SetNColDiff(recParam->GetNColDiff());
  
  AliDebug(1,Form("Reconstruction parameters: fECAClusteringThreshold=%.3f GeV, fECAW=%.3f, fMinECut=%.3f GeV, "
                  "fToUnfold=%d, fECALocMaxCut=%.3f GeV, fTimeCut=%e s,fTimeMin=%e s,fTimeMax=%e s,fRejectBelowThreshold=%d",
                  fECAClusteringThreshold,fECAW0,fMinECut,fToUnfold,fECALocMaxCut,fTimeCut, fTimeMin, fTimeMax, 
		  fRejectBelowThreshold));

  if (fToUnfold) {
    Int_t i=0;
    for (i = 0; i < 8; i++) {
      fSSPars[i] = recParam->GetSSPars(i);
    } //end of loop over parameters
    for (i = 0; i < 3; i++) {
      fPar5[i] = recParam->GetPar5(i);
      fPar6[i] = recParam->GetPar6(i);
    } //end of loop over parameters
      
    InitClusterUnfolding();
      
    for (i = 0; i < 8; i++) {
      AliDebug(1,Form("unfolding shower shape parameters: fSSPars=%f \n",fSSPars[i]));
    }
    for (i = 0; i < 3; i++) {
      AliDebug(1,Form("unfolding parameter 5: fPar5=%f \n",fPar5[i]));
      AliDebug(1,Form("unfolding parameter 6: fPar6=%f \n",fPar6[i]));
    }
  } // to unfold
}

//____________________________________________________________________________
void AliEMCALClusterizer::Print(Option_t * /*option*/)const
{
  // Print clusterizer parameters
  
  TString message("\n") ; 
  
  if (strcmp(GetName(),"") == 0) {
    printf("AliEMCALClusterizer not initialized\n");
    return;
  }
    
  // Print parameters
  TString taskName(Version()) ;
    
  printf("--------------- "); 
  printf("%s",taskName.Data()) ; 
  printf(" "); 
  printf("Clusterizing digits: "); 
  printf("\n                       ECA Local Maximum cut    = %f", fECALocMaxCut); 
  printf("\n                       ECA Logarithmic weight   = %f", fECAW0); 
  if (fToUnfold) {
    printf("\nUnfolding on\n");
    printf("Unfolding parameters: fSSpars: \n");
    Int_t i=0;
    for (i = 0; i < 8; i++) {
      printf("fSSPars[%d] = %f \n", i, fSSPars[i]);
    }
    printf("Unfolding parameter 5 and 6: fPar5 and fPar6: \n");
    for (i = 0; i < 3; i++) {
      printf("fPar5[%d] = %f \n", i, fPar5[i]);
      printf("fPar6[%d] = %f \n", i, fPar6[i]);
    }
  }
  else
    printf("\nUnfolding off\n");
    
  printf("------------------------------------------------------------------"); 
}

//____________________________________________________________________________
void AliEMCALClusterizer::PrintRecPoints(Option_t * option)
{
  // Prints list of RecPoints produced at the current pass of AliEMCALClusterizer

  if (strstr(option,"deb")) {
    printf("PrintRecPoints: Clusterization result:") ; 
    printf("           Found %d ECA Rec Points\n ", 
           fRecPoints->GetEntriesFast()) ; 
  }
  
  if (strstr(option,"all")) {
    if (strstr(option,"deb")) {
      printf("\n-----------------------------------------------------------------------\n") ;
      printf("Clusters in ECAL section\n") ;
      printf("Index    Ene(GeV) Multi Module     GX    GY   GZ  lX    lY   lZ   Dispersion Lambda 1   Lambda 2  # of prim  Primaries list\n") ;
    }
    Int_t index; 
    for (index =  0 ; index < fRecPoints->GetEntries() ; index++) {
      AliEMCALRecPoint * rp = dynamic_cast<AliEMCALRecPoint * >(fRecPoints->At(index)) ; 
      if (!rp) 
        continue;

      TVector3  globalpos;  
      //rp->GetGlobalPosition(globalpos);
      TVector3  localpos;  
      rp->GetLocalPosition(localpos);
      Float_t lambda[2]; 
      rp->GetElipsAxis(lambda);
        
      Int_t nprimaries=0;
      Int_t * primaries = rp->GetPrimaries(nprimaries);
      if(strstr(option,"deb")) 
        printf("\n%6d  %8.4f  %3d     %4.1f    %4.1f %4.1f  %4.1f %4.1f %4.1f    %4.1f   %4f  %4f    %2d     : ", 
               rp->GetIndexInList(), rp->GetEnergy(), rp->GetMultiplicity(),
               globalpos.X(), globalpos.Y(), globalpos.Z(), localpos.X(), localpos.Y(), localpos.Z(), 
               rp->GetDispersion(), lambda[0], lambda[1], nprimaries) ; 
      if(strstr(option,"deb")){ 
        for (Int_t iprimary=0; iprimary<nprimaries; iprimary++) {
          printf("%d ", primaries[iprimary] ) ; 
        }
      }
    }
    
    if(strstr(option,"deb"))
      printf("\n-----------------------------------------------------------------------\n");
  }
}

//___________________________________________________________________
void  AliEMCALClusterizer::PrintRecoInfo()
{
  // Print reco version

  printf(" AliEMCALClusterizer::PrintRecoInfo() : version %s \n", Version() );
}

//____________________________________________________________________________
void AliEMCALClusterizer::SetInput(TTree *digitsTree)
{
  // Read the digits from the input tree

  TBranch *branch = digitsTree->GetBranch("EMCAL");
  if (!branch)
  {
    AliError("can't get the branch with the EMCAL digits !");
    return;
  }
  
  if (!fDigitsArr) fDigitsArr = new TClonesArray("AliEMCALDigit",100);
  else             fDigitsArr->Clear("C"); // avoid leak
    
  branch->SetAddress(&fDigitsArr);
  branch->GetEntry(0);
}

//____________________________________________________________________________
void AliEMCALClusterizer::SetOutput(TTree *clustersTree)
{
  // Read the digits from the input tree

  AliDebug(9, "Making array for EMCAL clusters");
  fRecPoints = new TObjArray(1000);
  if (clustersTree) {
    fTreeR = clustersTree;
    Int_t split = 0;
    Int_t bufsize = 32000;
    fTreeR->Branch("EMCALECARP", "TObjArray", &fRecPoints, bufsize, split);
  }
}

//___________________________________________________________________
void AliEMCALClusterizer::SetInputCalibrated(Bool_t val)
{
  // Flag to indicate that input is calibrated - the case when we run already on ESD

  fIsInputCalibrated = val;
}

//___________________________________________________________________
void AliEMCALClusterizer::SetJustClusters(Bool_t val)
{
  // Flag to indicate that we are running on ESDs, when calling 
  // rp->EvalAll(fECAW0,fDigitsArr,fJustClusters); in derived classes

  fJustClusters = val;
}
 AliEMCALClusterizer.cxx:1
 AliEMCALClusterizer.cxx:2
 AliEMCALClusterizer.cxx:3
 AliEMCALClusterizer.cxx:4
 AliEMCALClusterizer.cxx:5
 AliEMCALClusterizer.cxx:6
 AliEMCALClusterizer.cxx:7
 AliEMCALClusterizer.cxx:8
 AliEMCALClusterizer.cxx:9
 AliEMCALClusterizer.cxx:10
 AliEMCALClusterizer.cxx:11
 AliEMCALClusterizer.cxx:12
 AliEMCALClusterizer.cxx:13
 AliEMCALClusterizer.cxx:14
 AliEMCALClusterizer.cxx:15
 AliEMCALClusterizer.cxx:16
 AliEMCALClusterizer.cxx:17
 AliEMCALClusterizer.cxx:18
 AliEMCALClusterizer.cxx:19
 AliEMCALClusterizer.cxx:20
 AliEMCALClusterizer.cxx:21
 AliEMCALClusterizer.cxx:22
 AliEMCALClusterizer.cxx:23
 AliEMCALClusterizer.cxx:24
 AliEMCALClusterizer.cxx:25
 AliEMCALClusterizer.cxx:26
 AliEMCALClusterizer.cxx:27
 AliEMCALClusterizer.cxx:28
 AliEMCALClusterizer.cxx:29
 AliEMCALClusterizer.cxx:30
 AliEMCALClusterizer.cxx:31
 AliEMCALClusterizer.cxx:32
 AliEMCALClusterizer.cxx:33
 AliEMCALClusterizer.cxx:34
 AliEMCALClusterizer.cxx:35
 AliEMCALClusterizer.cxx:36
 AliEMCALClusterizer.cxx:37
 AliEMCALClusterizer.cxx:38
 AliEMCALClusterizer.cxx:39
 AliEMCALClusterizer.cxx:40
 AliEMCALClusterizer.cxx:41
 AliEMCALClusterizer.cxx:42
 AliEMCALClusterizer.cxx:43
 AliEMCALClusterizer.cxx:44
 AliEMCALClusterizer.cxx:45
 AliEMCALClusterizer.cxx:46
 AliEMCALClusterizer.cxx:47
 AliEMCALClusterizer.cxx:48
 AliEMCALClusterizer.cxx:49
 AliEMCALClusterizer.cxx:50
 AliEMCALClusterizer.cxx:51
 AliEMCALClusterizer.cxx:52
 AliEMCALClusterizer.cxx:53
 AliEMCALClusterizer.cxx:54
 AliEMCALClusterizer.cxx:55
 AliEMCALClusterizer.cxx:56
 AliEMCALClusterizer.cxx:57
 AliEMCALClusterizer.cxx:58
 AliEMCALClusterizer.cxx:59
 AliEMCALClusterizer.cxx:60
 AliEMCALClusterizer.cxx:61
 AliEMCALClusterizer.cxx:62
 AliEMCALClusterizer.cxx:63
 AliEMCALClusterizer.cxx:64
 AliEMCALClusterizer.cxx:65
 AliEMCALClusterizer.cxx:66
 AliEMCALClusterizer.cxx:67
 AliEMCALClusterizer.cxx:68
 AliEMCALClusterizer.cxx:69
 AliEMCALClusterizer.cxx:70
 AliEMCALClusterizer.cxx:71
 AliEMCALClusterizer.cxx:72
 AliEMCALClusterizer.cxx:73
 AliEMCALClusterizer.cxx:74
 AliEMCALClusterizer.cxx:75
 AliEMCALClusterizer.cxx:76
 AliEMCALClusterizer.cxx:77
 AliEMCALClusterizer.cxx:78
 AliEMCALClusterizer.cxx:79
 AliEMCALClusterizer.cxx:80
 AliEMCALClusterizer.cxx:81
 AliEMCALClusterizer.cxx:82
 AliEMCALClusterizer.cxx:83
 AliEMCALClusterizer.cxx:84
 AliEMCALClusterizer.cxx:85
 AliEMCALClusterizer.cxx:86
 AliEMCALClusterizer.cxx:87
 AliEMCALClusterizer.cxx:88
 AliEMCALClusterizer.cxx:89
 AliEMCALClusterizer.cxx:90
 AliEMCALClusterizer.cxx:91
 AliEMCALClusterizer.cxx:92
 AliEMCALClusterizer.cxx:93
 AliEMCALClusterizer.cxx:94
 AliEMCALClusterizer.cxx:95
 AliEMCALClusterizer.cxx:96
 AliEMCALClusterizer.cxx:97
 AliEMCALClusterizer.cxx:98
 AliEMCALClusterizer.cxx:99
 AliEMCALClusterizer.cxx:100
 AliEMCALClusterizer.cxx:101
 AliEMCALClusterizer.cxx:102
 AliEMCALClusterizer.cxx:103
 AliEMCALClusterizer.cxx:104
 AliEMCALClusterizer.cxx:105
 AliEMCALClusterizer.cxx:106
 AliEMCALClusterizer.cxx:107
 AliEMCALClusterizer.cxx:108
 AliEMCALClusterizer.cxx:109
 AliEMCALClusterizer.cxx:110
 AliEMCALClusterizer.cxx:111
 AliEMCALClusterizer.cxx:112
 AliEMCALClusterizer.cxx:113
 AliEMCALClusterizer.cxx:114
 AliEMCALClusterizer.cxx:115
 AliEMCALClusterizer.cxx:116
 AliEMCALClusterizer.cxx:117
 AliEMCALClusterizer.cxx:118
 AliEMCALClusterizer.cxx:119
 AliEMCALClusterizer.cxx:120
 AliEMCALClusterizer.cxx:121
 AliEMCALClusterizer.cxx:122
 AliEMCALClusterizer.cxx:123
 AliEMCALClusterizer.cxx:124
 AliEMCALClusterizer.cxx:125
 AliEMCALClusterizer.cxx:126
 AliEMCALClusterizer.cxx:127
 AliEMCALClusterizer.cxx:128
 AliEMCALClusterizer.cxx:129
 AliEMCALClusterizer.cxx:130
 AliEMCALClusterizer.cxx:131
 AliEMCALClusterizer.cxx:132
 AliEMCALClusterizer.cxx:133
 AliEMCALClusterizer.cxx:134
 AliEMCALClusterizer.cxx:135
 AliEMCALClusterizer.cxx:136
 AliEMCALClusterizer.cxx:137
 AliEMCALClusterizer.cxx:138
 AliEMCALClusterizer.cxx:139
 AliEMCALClusterizer.cxx:140
 AliEMCALClusterizer.cxx:141
 AliEMCALClusterizer.cxx:142
 AliEMCALClusterizer.cxx:143
 AliEMCALClusterizer.cxx:144
 AliEMCALClusterizer.cxx:145
 AliEMCALClusterizer.cxx:146
 AliEMCALClusterizer.cxx:147
 AliEMCALClusterizer.cxx:148
 AliEMCALClusterizer.cxx:149
 AliEMCALClusterizer.cxx:150
 AliEMCALClusterizer.cxx:151
 AliEMCALClusterizer.cxx:152
 AliEMCALClusterizer.cxx:153
 AliEMCALClusterizer.cxx:154
 AliEMCALClusterizer.cxx:155
 AliEMCALClusterizer.cxx:156
 AliEMCALClusterizer.cxx:157
 AliEMCALClusterizer.cxx:158
 AliEMCALClusterizer.cxx:159
 AliEMCALClusterizer.cxx:160
 AliEMCALClusterizer.cxx:161
 AliEMCALClusterizer.cxx:162
 AliEMCALClusterizer.cxx:163
 AliEMCALClusterizer.cxx:164
 AliEMCALClusterizer.cxx:165
 AliEMCALClusterizer.cxx:166
 AliEMCALClusterizer.cxx:167
 AliEMCALClusterizer.cxx:168
 AliEMCALClusterizer.cxx:169
 AliEMCALClusterizer.cxx:170
 AliEMCALClusterizer.cxx:171
 AliEMCALClusterizer.cxx:172
 AliEMCALClusterizer.cxx:173
 AliEMCALClusterizer.cxx:174
 AliEMCALClusterizer.cxx:175
 AliEMCALClusterizer.cxx:176
 AliEMCALClusterizer.cxx:177
 AliEMCALClusterizer.cxx:178
 AliEMCALClusterizer.cxx:179
 AliEMCALClusterizer.cxx:180
 AliEMCALClusterizer.cxx:181
 AliEMCALClusterizer.cxx:182
 AliEMCALClusterizer.cxx:183
 AliEMCALClusterizer.cxx:184
 AliEMCALClusterizer.cxx:185
 AliEMCALClusterizer.cxx:186
 AliEMCALClusterizer.cxx:187
 AliEMCALClusterizer.cxx:188
 AliEMCALClusterizer.cxx:189
 AliEMCALClusterizer.cxx:190
 AliEMCALClusterizer.cxx:191
 AliEMCALClusterizer.cxx:192
 AliEMCALClusterizer.cxx:193
 AliEMCALClusterizer.cxx:194
 AliEMCALClusterizer.cxx:195
 AliEMCALClusterizer.cxx:196
 AliEMCALClusterizer.cxx:197
 AliEMCALClusterizer.cxx:198
 AliEMCALClusterizer.cxx:199
 AliEMCALClusterizer.cxx:200
 AliEMCALClusterizer.cxx:201
 AliEMCALClusterizer.cxx:202
 AliEMCALClusterizer.cxx:203
 AliEMCALClusterizer.cxx:204
 AliEMCALClusterizer.cxx:205
 AliEMCALClusterizer.cxx:206
 AliEMCALClusterizer.cxx:207
 AliEMCALClusterizer.cxx:208
 AliEMCALClusterizer.cxx:209
 AliEMCALClusterizer.cxx:210
 AliEMCALClusterizer.cxx:211
 AliEMCALClusterizer.cxx:212
 AliEMCALClusterizer.cxx:213
 AliEMCALClusterizer.cxx:214
 AliEMCALClusterizer.cxx:215
 AliEMCALClusterizer.cxx:216
 AliEMCALClusterizer.cxx:217
 AliEMCALClusterizer.cxx:218
 AliEMCALClusterizer.cxx:219
 AliEMCALClusterizer.cxx:220
 AliEMCALClusterizer.cxx:221
 AliEMCALClusterizer.cxx:222
 AliEMCALClusterizer.cxx:223
 AliEMCALClusterizer.cxx:224
 AliEMCALClusterizer.cxx:225
 AliEMCALClusterizer.cxx:226
 AliEMCALClusterizer.cxx:227
 AliEMCALClusterizer.cxx:228
 AliEMCALClusterizer.cxx:229
 AliEMCALClusterizer.cxx:230
 AliEMCALClusterizer.cxx:231
 AliEMCALClusterizer.cxx:232
 AliEMCALClusterizer.cxx:233
 AliEMCALClusterizer.cxx:234
 AliEMCALClusterizer.cxx:235
 AliEMCALClusterizer.cxx:236
 AliEMCALClusterizer.cxx:237
 AliEMCALClusterizer.cxx:238
 AliEMCALClusterizer.cxx:239
 AliEMCALClusterizer.cxx:240
 AliEMCALClusterizer.cxx:241
 AliEMCALClusterizer.cxx:242
 AliEMCALClusterizer.cxx:243
 AliEMCALClusterizer.cxx:244
 AliEMCALClusterizer.cxx:245
 AliEMCALClusterizer.cxx:246
 AliEMCALClusterizer.cxx:247
 AliEMCALClusterizer.cxx:248
 AliEMCALClusterizer.cxx:249
 AliEMCALClusterizer.cxx:250
 AliEMCALClusterizer.cxx:251
 AliEMCALClusterizer.cxx:252
 AliEMCALClusterizer.cxx:253
 AliEMCALClusterizer.cxx:254
 AliEMCALClusterizer.cxx:255
 AliEMCALClusterizer.cxx:256
 AliEMCALClusterizer.cxx:257
 AliEMCALClusterizer.cxx:258
 AliEMCALClusterizer.cxx:259
 AliEMCALClusterizer.cxx:260
 AliEMCALClusterizer.cxx:261
 AliEMCALClusterizer.cxx:262
 AliEMCALClusterizer.cxx:263
 AliEMCALClusterizer.cxx:264
 AliEMCALClusterizer.cxx:265
 AliEMCALClusterizer.cxx:266
 AliEMCALClusterizer.cxx:267
 AliEMCALClusterizer.cxx:268
 AliEMCALClusterizer.cxx:269
 AliEMCALClusterizer.cxx:270
 AliEMCALClusterizer.cxx:271
 AliEMCALClusterizer.cxx:272
 AliEMCALClusterizer.cxx:273
 AliEMCALClusterizer.cxx:274
 AliEMCALClusterizer.cxx:275
 AliEMCALClusterizer.cxx:276
 AliEMCALClusterizer.cxx:277
 AliEMCALClusterizer.cxx:278
 AliEMCALClusterizer.cxx:279
 AliEMCALClusterizer.cxx:280
 AliEMCALClusterizer.cxx:281
 AliEMCALClusterizer.cxx:282
 AliEMCALClusterizer.cxx:283
 AliEMCALClusterizer.cxx:284
 AliEMCALClusterizer.cxx:285
 AliEMCALClusterizer.cxx:286
 AliEMCALClusterizer.cxx:287
 AliEMCALClusterizer.cxx:288
 AliEMCALClusterizer.cxx:289
 AliEMCALClusterizer.cxx:290
 AliEMCALClusterizer.cxx:291
 AliEMCALClusterizer.cxx:292
 AliEMCALClusterizer.cxx:293
 AliEMCALClusterizer.cxx:294
 AliEMCALClusterizer.cxx:295
 AliEMCALClusterizer.cxx:296
 AliEMCALClusterizer.cxx:297
 AliEMCALClusterizer.cxx:298
 AliEMCALClusterizer.cxx:299
 AliEMCALClusterizer.cxx:300
 AliEMCALClusterizer.cxx:301
 AliEMCALClusterizer.cxx:302
 AliEMCALClusterizer.cxx:303
 AliEMCALClusterizer.cxx:304
 AliEMCALClusterizer.cxx:305
 AliEMCALClusterizer.cxx:306
 AliEMCALClusterizer.cxx:307
 AliEMCALClusterizer.cxx:308
 AliEMCALClusterizer.cxx:309
 AliEMCALClusterizer.cxx:310
 AliEMCALClusterizer.cxx:311
 AliEMCALClusterizer.cxx:312
 AliEMCALClusterizer.cxx:313
 AliEMCALClusterizer.cxx:314
 AliEMCALClusterizer.cxx:315
 AliEMCALClusterizer.cxx:316
 AliEMCALClusterizer.cxx:317
 AliEMCALClusterizer.cxx:318
 AliEMCALClusterizer.cxx:319
 AliEMCALClusterizer.cxx:320
 AliEMCALClusterizer.cxx:321
 AliEMCALClusterizer.cxx:322
 AliEMCALClusterizer.cxx:323
 AliEMCALClusterizer.cxx:324
 AliEMCALClusterizer.cxx:325
 AliEMCALClusterizer.cxx:326
 AliEMCALClusterizer.cxx:327
 AliEMCALClusterizer.cxx:328
 AliEMCALClusterizer.cxx:329
 AliEMCALClusterizer.cxx:330
 AliEMCALClusterizer.cxx:331
 AliEMCALClusterizer.cxx:332
 AliEMCALClusterizer.cxx:333
 AliEMCALClusterizer.cxx:334
 AliEMCALClusterizer.cxx:335
 AliEMCALClusterizer.cxx:336
 AliEMCALClusterizer.cxx:337
 AliEMCALClusterizer.cxx:338
 AliEMCALClusterizer.cxx:339
 AliEMCALClusterizer.cxx:340
 AliEMCALClusterizer.cxx:341
 AliEMCALClusterizer.cxx:342
 AliEMCALClusterizer.cxx:343
 AliEMCALClusterizer.cxx:344
 AliEMCALClusterizer.cxx:345
 AliEMCALClusterizer.cxx:346
 AliEMCALClusterizer.cxx:347
 AliEMCALClusterizer.cxx:348
 AliEMCALClusterizer.cxx:349
 AliEMCALClusterizer.cxx:350
 AliEMCALClusterizer.cxx:351
 AliEMCALClusterizer.cxx:352
 AliEMCALClusterizer.cxx:353
 AliEMCALClusterizer.cxx:354
 AliEMCALClusterizer.cxx:355
 AliEMCALClusterizer.cxx:356
 AliEMCALClusterizer.cxx:357
 AliEMCALClusterizer.cxx:358
 AliEMCALClusterizer.cxx:359
 AliEMCALClusterizer.cxx:360
 AliEMCALClusterizer.cxx:361
 AliEMCALClusterizer.cxx:362
 AliEMCALClusterizer.cxx:363
 AliEMCALClusterizer.cxx:364
 AliEMCALClusterizer.cxx:365
 AliEMCALClusterizer.cxx:366
 AliEMCALClusterizer.cxx:367
 AliEMCALClusterizer.cxx:368
 AliEMCALClusterizer.cxx:369
 AliEMCALClusterizer.cxx:370
 AliEMCALClusterizer.cxx:371
 AliEMCALClusterizer.cxx:372
 AliEMCALClusterizer.cxx:373
 AliEMCALClusterizer.cxx:374
 AliEMCALClusterizer.cxx:375
 AliEMCALClusterizer.cxx:376
 AliEMCALClusterizer.cxx:377
 AliEMCALClusterizer.cxx:378
 AliEMCALClusterizer.cxx:379
 AliEMCALClusterizer.cxx:380
 AliEMCALClusterizer.cxx:381
 AliEMCALClusterizer.cxx:382
 AliEMCALClusterizer.cxx:383
 AliEMCALClusterizer.cxx:384
 AliEMCALClusterizer.cxx:385
 AliEMCALClusterizer.cxx:386
 AliEMCALClusterizer.cxx:387
 AliEMCALClusterizer.cxx:388
 AliEMCALClusterizer.cxx:389
 AliEMCALClusterizer.cxx:390
 AliEMCALClusterizer.cxx:391
 AliEMCALClusterizer.cxx:392
 AliEMCALClusterizer.cxx:393
 AliEMCALClusterizer.cxx:394
 AliEMCALClusterizer.cxx:395
 AliEMCALClusterizer.cxx:396
 AliEMCALClusterizer.cxx:397
 AliEMCALClusterizer.cxx:398
 AliEMCALClusterizer.cxx:399
 AliEMCALClusterizer.cxx:400
 AliEMCALClusterizer.cxx:401
 AliEMCALClusterizer.cxx:402
 AliEMCALClusterizer.cxx:403
 AliEMCALClusterizer.cxx:404
 AliEMCALClusterizer.cxx:405
 AliEMCALClusterizer.cxx:406
 AliEMCALClusterizer.cxx:407
 AliEMCALClusterizer.cxx:408
 AliEMCALClusterizer.cxx:409
 AliEMCALClusterizer.cxx:410
 AliEMCALClusterizer.cxx:411
 AliEMCALClusterizer.cxx:412
 AliEMCALClusterizer.cxx:413
 AliEMCALClusterizer.cxx:414
 AliEMCALClusterizer.cxx:415
 AliEMCALClusterizer.cxx:416
 AliEMCALClusterizer.cxx:417
 AliEMCALClusterizer.cxx:418
 AliEMCALClusterizer.cxx:419
 AliEMCALClusterizer.cxx:420
 AliEMCALClusterizer.cxx:421
 AliEMCALClusterizer.cxx:422
 AliEMCALClusterizer.cxx:423
 AliEMCALClusterizer.cxx:424
 AliEMCALClusterizer.cxx:425
 AliEMCALClusterizer.cxx:426
 AliEMCALClusterizer.cxx:427
 AliEMCALClusterizer.cxx:428
 AliEMCALClusterizer.cxx:429
 AliEMCALClusterizer.cxx:430
 AliEMCALClusterizer.cxx:431
 AliEMCALClusterizer.cxx:432
 AliEMCALClusterizer.cxx:433
 AliEMCALClusterizer.cxx:434
 AliEMCALClusterizer.cxx:435
 AliEMCALClusterizer.cxx:436
 AliEMCALClusterizer.cxx:437
 AliEMCALClusterizer.cxx:438
 AliEMCALClusterizer.cxx:439
 AliEMCALClusterizer.cxx:440
 AliEMCALClusterizer.cxx:441
 AliEMCALClusterizer.cxx:442
 AliEMCALClusterizer.cxx:443
 AliEMCALClusterizer.cxx:444
 AliEMCALClusterizer.cxx:445
 AliEMCALClusterizer.cxx:446
 AliEMCALClusterizer.cxx:447
 AliEMCALClusterizer.cxx:448
 AliEMCALClusterizer.cxx:449
 AliEMCALClusterizer.cxx:450
 AliEMCALClusterizer.cxx:451
 AliEMCALClusterizer.cxx:452
 AliEMCALClusterizer.cxx:453
 AliEMCALClusterizer.cxx:454
 AliEMCALClusterizer.cxx:455
 AliEMCALClusterizer.cxx:456
 AliEMCALClusterizer.cxx:457
 AliEMCALClusterizer.cxx:458
 AliEMCALClusterizer.cxx:459
 AliEMCALClusterizer.cxx:460
 AliEMCALClusterizer.cxx:461
 AliEMCALClusterizer.cxx:462
 AliEMCALClusterizer.cxx:463
 AliEMCALClusterizer.cxx:464
 AliEMCALClusterizer.cxx:465
 AliEMCALClusterizer.cxx:466
 AliEMCALClusterizer.cxx:467
 AliEMCALClusterizer.cxx:468
 AliEMCALClusterizer.cxx:469
 AliEMCALClusterizer.cxx:470
 AliEMCALClusterizer.cxx:471
 AliEMCALClusterizer.cxx:472
 AliEMCALClusterizer.cxx:473
 AliEMCALClusterizer.cxx:474
 AliEMCALClusterizer.cxx:475
 AliEMCALClusterizer.cxx:476
 AliEMCALClusterizer.cxx:477
 AliEMCALClusterizer.cxx:478
 AliEMCALClusterizer.cxx:479
 AliEMCALClusterizer.cxx:480
 AliEMCALClusterizer.cxx:481
 AliEMCALClusterizer.cxx:482
 AliEMCALClusterizer.cxx:483
 AliEMCALClusterizer.cxx:484
 AliEMCALClusterizer.cxx:485
 AliEMCALClusterizer.cxx:486
 AliEMCALClusterizer.cxx:487
 AliEMCALClusterizer.cxx:488
 AliEMCALClusterizer.cxx:489
 AliEMCALClusterizer.cxx:490
 AliEMCALClusterizer.cxx:491
 AliEMCALClusterizer.cxx:492
 AliEMCALClusterizer.cxx:493
 AliEMCALClusterizer.cxx:494
 AliEMCALClusterizer.cxx:495
 AliEMCALClusterizer.cxx:496
 AliEMCALClusterizer.cxx:497
 AliEMCALClusterizer.cxx:498
 AliEMCALClusterizer.cxx:499
 AliEMCALClusterizer.cxx:500
 AliEMCALClusterizer.cxx:501
 AliEMCALClusterizer.cxx:502
 AliEMCALClusterizer.cxx:503
 AliEMCALClusterizer.cxx:504
 AliEMCALClusterizer.cxx:505
 AliEMCALClusterizer.cxx:506
 AliEMCALClusterizer.cxx:507
 AliEMCALClusterizer.cxx:508
 AliEMCALClusterizer.cxx:509
 AliEMCALClusterizer.cxx:510
 AliEMCALClusterizer.cxx:511
 AliEMCALClusterizer.cxx:512
 AliEMCALClusterizer.cxx:513
 AliEMCALClusterizer.cxx:514
 AliEMCALClusterizer.cxx:515
 AliEMCALClusterizer.cxx:516
 AliEMCALClusterizer.cxx:517
 AliEMCALClusterizer.cxx:518
 AliEMCALClusterizer.cxx:519
 AliEMCALClusterizer.cxx:520
 AliEMCALClusterizer.cxx:521
 AliEMCALClusterizer.cxx:522
 AliEMCALClusterizer.cxx:523
 AliEMCALClusterizer.cxx:524
 AliEMCALClusterizer.cxx:525
 AliEMCALClusterizer.cxx:526
 AliEMCALClusterizer.cxx:527
 AliEMCALClusterizer.cxx:528
 AliEMCALClusterizer.cxx:529
 AliEMCALClusterizer.cxx:530
 AliEMCALClusterizer.cxx:531
 AliEMCALClusterizer.cxx:532
 AliEMCALClusterizer.cxx:533
 AliEMCALClusterizer.cxx:534
 AliEMCALClusterizer.cxx:535
 AliEMCALClusterizer.cxx:536
 AliEMCALClusterizer.cxx:537
 AliEMCALClusterizer.cxx:538
 AliEMCALClusterizer.cxx:539
 AliEMCALClusterizer.cxx:540
 AliEMCALClusterizer.cxx:541
 AliEMCALClusterizer.cxx:542
 AliEMCALClusterizer.cxx:543
 AliEMCALClusterizer.cxx:544
 AliEMCALClusterizer.cxx:545
 AliEMCALClusterizer.cxx:546
 AliEMCALClusterizer.cxx:547
 AliEMCALClusterizer.cxx:548
 AliEMCALClusterizer.cxx:549
 AliEMCALClusterizer.cxx:550
 AliEMCALClusterizer.cxx:551
 AliEMCALClusterizer.cxx:552
 AliEMCALClusterizer.cxx:553
 AliEMCALClusterizer.cxx:554
 AliEMCALClusterizer.cxx:555
 AliEMCALClusterizer.cxx:556
 AliEMCALClusterizer.cxx:557
 AliEMCALClusterizer.cxx:558