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$ */

//-- Author: Yves Schutz (SUBATECH)  & Dmitri Peressounko (SUBATECH & Kurchatov Institute)
//--         Gustavo Conesa (LPSC-Grenoble), move common clusterizer functionalities to mother class
//////////////////////////////////////////////////////////////////////////////
//  Clusterization class. Performs clusterization (collects neighbouring active cells) and 
//  unfolds the clusters having several local maxima.  
//  Results are stored in TreeR#, branches EMCALTowerRP (EMC recPoints),
//  EMCALPreShoRP (CPV RecPoints) and AliEMCALClusterizer (Clusterizer with all 
//  parameters including input digits branch title, thresholds etc.)
//

// --- ROOT system ---

#include <TFile.h> 
#include <TMath.h> 
#include <TMinuit.h>
#include <TTree.h> 
#include <TBenchmark.h>
#include <TBrowser.h>
#include <TROOT.h>
#include <TList.h>
#include <TClonesArray.h>

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

// --- AliRoot header files ---
#include "AliLog.h"
#include "AliEMCALClusterizerv1.h"
#include "AliEMCALRecPoint.h"
#include "AliEMCALDigit.h"
#include "AliEMCALGeometry.h"
#include "AliCaloCalibPedestal.h"
#include "AliEMCALCalibData.h"
#include "AliESDCaloCluster.h"
#include "AliEMCALUnfolding.h"

ClassImp(AliEMCALClusterizerv1)

//____________________________________________________________________________
AliEMCALClusterizerv1::AliEMCALClusterizerv1(): AliEMCALClusterizer()
{
  // ctor with the indication of the file where header Tree and digits Tree are stored
  
  Init();
}

//____________________________________________________________________________
AliEMCALClusterizerv1::AliEMCALClusterizerv1(AliEMCALGeometry* geometry)
  : AliEMCALClusterizer(geometry)
{
  // 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
}

//____________________________________________________________________________
AliEMCALClusterizerv1::AliEMCALClusterizerv1(AliEMCALGeometry* geometry, AliEMCALCalibData * calib, AliCaloCalibPedestal * caloped)
: AliEMCALClusterizer(geometry, calib, caloped)
{
  // ctor, geometry and calibration are initialized elsewhere.
}

//____________________________________________________________________________
  AliEMCALClusterizerv1::~AliEMCALClusterizerv1()
{
  // dtor
}

//____________________________________________________________________________
void AliEMCALClusterizerv1::Digits2Clusters(Option_t * option)
{
  // Steering method to perform clusterization for the current event 
  // in AliEMCALLoader
  
  if(strstr(option,"tim"))
    gBenchmark->Start("EMCALClusterizer"); 
  
  if(strstr(option,"print"))
    Print(""); 
  
  //Get calibration parameters from file or digitizer default values.
  GetCalibrationParameters();
  
  //Get dead channel map from file or digitizer default values.
  GetCaloCalibPedestal();
	
  fNumberOfECAClusters = 0;
  
  MakeClusters();  //only the real clusters
  
  if(fToUnfold){
    fClusterUnfolding->SetInput(fNumberOfECAClusters,fRecPoints,fDigitsArr);
    fClusterUnfolding->MakeUnfolding();
  }
    
  //Evaluate position, dispersion and other RecPoint properties for EC section 
  Int_t index;
  for(index = 0; index < fRecPoints->GetEntries(); index++) {
    AliEMCALRecPoint * rp = dynamic_cast<AliEMCALRecPoint *>(fRecPoints->At(index));
    if(rp){
      rp->EvalAll(fECAW0,fDigitsArr,fJustClusters);
      //For each rec.point set the distance to the nearest bad crystal
      if (fCaloPed)
        rp->EvalDistanceToBadChannels(fCaloPed);
    }
    else AliFatal("Null rec point in list!");
  }
  
  fRecPoints->Sort();
  
  for(index = 0; index < fRecPoints->GetEntries(); index++) {
    AliEMCALRecPoint * rp = dynamic_cast<AliEMCALRecPoint *>(fRecPoints->At(index));
    if(rp){
      rp->SetIndexInList(index);
      rp->Print();
    }
    else AliFatal("Null rec point in list!");
  }
  
  if (fTreeR)
    fTreeR->Fill();
  
  if(strstr(option,"deb") || strstr(option,"all"))  
    PrintRecPoints(option);
  
  AliDebug(1,Form("EMCAL Clusterizer found %d Rec Points",fRecPoints->GetEntriesFast()));
  
  if(strstr(option,"tim")){
    gBenchmark->Stop("EMCALClusterizer");
    printf("Exec took %f seconds for Clusterizing", 
           gBenchmark->GetCpuTime("EMCALClusterizer"));
  }    
}

//____________________________________________________________________________
Int_t AliEMCALClusterizerv1::AreNeighbours(AliEMCALDigit * d1, AliEMCALDigit * d2, Bool_t & shared) const
{
  // Gives the neighbourness of two digits = 0 are not neighbour; continue searching 
  //                                       = 1 are neighbour
  //                                       = 2 is in different SM; continue searching 
  // In case it is in different SM, but same phi rack, check if neigbours at eta=0
  // neighbours are defined as digits having at least a common side 
  // The order of d1 and d2 is important: first (d1) should be a digit already in a cluster 
  //                                      which is compared to a digit (d2)  not yet in a cluster  
  
  Int_t nSupMod1=0, nModule1=0, nIphi1=0, nIeta1=0, iphi1=0, ieta1=0;
  Int_t nSupMod2=0, nModule2=0, nIphi2=0, nIeta2=0, iphi2=0, ieta2=0;
  
  shared = kFALSE;
  
  fGeom->GetCellIndex(d1->GetId(), nSupMod1,nModule1,nIphi1,nIeta1);
  fGeom->GetCellIndex(d2->GetId(), nSupMod2,nModule2,nIphi2,nIeta2);
  fGeom->GetCellPhiEtaIndexInSModule(nSupMod1,nModule1,nIphi1,nIeta1, iphi1,ieta1);
  fGeom->GetCellPhiEtaIndexInSModule(nSupMod2,nModule2,nIphi2,nIeta2, iphi2,ieta2);
  
  //If different SM, check if they are in the same phi, then consider cells close to eta=0 as neighbours; May 2010
  if (nSupMod1 != nSupMod2 ) {
    //Check if the 2 SM are in the same PHI position (0,1), (2,3), ...
    Float_t smPhi1 = fGeom->GetEMCGeometry()->GetPhiCenterOfSM(nSupMod1);
    Float_t smPhi2 = fGeom->GetEMCGeometry()->GetPhiCenterOfSM(nSupMod2);
    
    if(!TMath::AreEqualAbs(smPhi1, smPhi2, 1e-3)) return 2; //Not phi rack equal, not neighbours
    
    // In case of a shared cluster, index of SM in C side, columns start at 48 and ends at 48*2
    // C Side impair SM, nSupMod%2=1; A side pair SM nSupMod%2=0
    if(nSupMod1%2) ieta1+=AliEMCALGeoParams::fgkEMCALCols;
    else           ieta2+=AliEMCALGeoParams::fgkEMCALCols;
    
    shared = kTRUE; // maybe a shared cluster, we know this later, set it for the moment.
  } //Different SM, same phi
  
  Int_t rowdiff = TMath::Abs(iphi1 - iphi2);  
  Int_t coldiff = TMath::Abs(ieta1 - ieta2);  
  
  // neighbours with at least common side; May 11, 2007
  if ((coldiff==0 && TMath::Abs(rowdiff)==1) || (rowdiff==0 && TMath::Abs(coldiff)==1)) {  
    //Diagonal?
    //if ((coldiff==0 && TMath::Abs(rowdiff==1)) || (rowdiff==0 && TMath::Abs(coldiff==1)) || (TMath::Abs(rowdiff)==1 && TMath::Abs(coldiff==1))) rv = 1;
    
    if (gDebug == 2) 
      printf("AliEMCALClusterizerv1::AreNeighbours(): id1=%d, (row %d, col %d) ; id2=%d, (row %d, col %d), shared %d \n",
	     d1->GetId(), iphi1,ieta1, d2->GetId(), iphi2,ieta2, shared);   
    return 1;
  } //Neighbours
  else {
    shared = kFALSE;
    return 2; 
  } //Not neighbours
}

//____________________________________________________________________________
void AliEMCALClusterizerv1::MakeClusters()
{
  // Steering method to construct the clusters stored in a list of Reconstructed Points
  // A cluster is defined as a list of neighbour digits
  // Mar 03, 2007 by PAI
  
  if (fGeom==0) AliFatal("Did not get geometry from EMCALLoader");
  
  fRecPoints->Delete();
  
  // Set up TObjArray with pointers to digits to work on calibrated digits 
  TObjArray *digitsC = new TObjArray();
  AliEMCALDigit *digit;
  Float_t dEnergyCalibrated = 0.0, ehs = 0.0, time = 0.0;
  TIter nextdigit(fDigitsArr);
  while ( (digit = dynamic_cast<AliEMCALDigit *>(nextdigit())) ) { // calibrate and clean up digits
    dEnergyCalibrated =  digit->GetAmplitude();
    time              =  digit->GetTime();
    Calibrate(dEnergyCalibrated,time,digit->GetId());
    digit->SetCalibAmp(dEnergyCalibrated);
    digit->SetTime(time);

    if ( dEnergyCalibrated < fMinECut || time > fTimeMax || time < fTimeMin ){
      continue;
    }
    else if (!fGeom->CheckAbsCellId(digit->GetId()))
      continue;
    else{
      ehs += dEnergyCalibrated;
      digitsC->AddLast(digit);
    }
  } 
  
  AliDebug(1,Form("MakeClusters: Number of digits %d  -> (e %f), ehs %f\n",
                  fDigitsArr->GetEntries(),fMinECut,ehs));
  
  TIter nextdigitC(digitsC);
  while ( (digit = dynamic_cast<AliEMCALDigit *>(nextdigitC())) ) { // scan over the list of digitsC
    TArrayI clusterECAdigitslist(fDigitsArr->GetEntries());
    dEnergyCalibrated = digit->GetCalibAmp();
    time              = digit->GetTime();
    if(fGeom->CheckAbsCellId(digit->GetId()) && ( dEnergyCalibrated > fECAClusteringThreshold  ) ){
      // start a new Tower RecPoint
      if(fNumberOfECAClusters >= fRecPoints->GetSize()) fRecPoints->Expand(2*fNumberOfECAClusters+1);
      
      AliEMCALRecPoint *recPoint = new  AliEMCALRecPoint(""); 
      fRecPoints->AddAt(recPoint, fNumberOfECAClusters);
      recPoint = dynamic_cast<AliEMCALRecPoint *>(fRecPoints->At(fNumberOfECAClusters)); 
      if (recPoint) {
        fNumberOfECAClusters++; 
        
        recPoint->SetClusterType(AliVCluster::kEMCALClusterv1);
        recPoint->AddDigit(*digit, digit->GetCalibAmp(), kFALSE); //Time or TimeR?
        TObjArray clusterDigits;
        clusterDigits.AddLast(digit);	
        digitsC->Remove(digit); 
        
        AliDebug(1,Form("MakeClusters: OK id = %d, ene = %f , cell.th. = %f \n", digit->GetId(), dEnergyCalibrated, fECAClusteringThreshold));  //Time or TimeR?
      
        // Grow cluster by finding neighbours
        TIter nextClusterDigit(&clusterDigits);
        
        while ( (digit = dynamic_cast<AliEMCALDigit*>(nextClusterDigit())) ) { // scan over digits in cluster 
          TIter nextdigitN(digitsC); 
          AliEMCALDigit *digitN = 0; // digi neighbor
          while ( (digitN = (AliEMCALDigit *)nextdigitN()) ) { // scan over all digits to look for neighbours
            //Do not add digits with too different time 
            Bool_t shared = kFALSE;//cluster shared by 2 SuperModules?
            if(TMath::Abs(time - digitN->GetTime()) > fTimeCut ) continue; //Time or TimeR?
            if (AreNeighbours(digit, digitN, shared)==1) {      // call (digit,digitN) in THAT order !!!!! 
              recPoint->AddDigit(*digitN, digitN->GetCalibAmp(), shared); 
              clusterDigits.AddLast(digitN); 
              digitsC->Remove(digitN); 
            } // if(ineb==1)
          } // scan over digits
        } // scan over digits already in cluster
        
        AliDebug(2,Form("MakeClusters: %d digitd, energy %f \n", clusterDigits.GetEntries(), recPoint->GetEnergy())); 
      }//recpoint
      else AliFatal("Null recpoint in array!");
    } // If seed found
  } // while digit 
  
  delete digitsC;
  
  AliDebug(1,Form("total no of clusters %d from %d digits",fNumberOfECAClusters,fDigitsArr->GetEntriesFast())); 
}
 AliEMCALClusterizerv1.cxx:1
 AliEMCALClusterizerv1.cxx:2
 AliEMCALClusterizerv1.cxx:3
 AliEMCALClusterizerv1.cxx:4
 AliEMCALClusterizerv1.cxx:5
 AliEMCALClusterizerv1.cxx:6
 AliEMCALClusterizerv1.cxx:7
 AliEMCALClusterizerv1.cxx:8
 AliEMCALClusterizerv1.cxx:9
 AliEMCALClusterizerv1.cxx:10
 AliEMCALClusterizerv1.cxx:11
 AliEMCALClusterizerv1.cxx:12
 AliEMCALClusterizerv1.cxx:13
 AliEMCALClusterizerv1.cxx:14
 AliEMCALClusterizerv1.cxx:15
 AliEMCALClusterizerv1.cxx:16
 AliEMCALClusterizerv1.cxx:17
 AliEMCALClusterizerv1.cxx:18
 AliEMCALClusterizerv1.cxx:19
 AliEMCALClusterizerv1.cxx:20
 AliEMCALClusterizerv1.cxx:21
 AliEMCALClusterizerv1.cxx:22
 AliEMCALClusterizerv1.cxx:23
 AliEMCALClusterizerv1.cxx:24
 AliEMCALClusterizerv1.cxx:25
 AliEMCALClusterizerv1.cxx:26
 AliEMCALClusterizerv1.cxx:27
 AliEMCALClusterizerv1.cxx:28
 AliEMCALClusterizerv1.cxx:29
 AliEMCALClusterizerv1.cxx:30
 AliEMCALClusterizerv1.cxx:31
 AliEMCALClusterizerv1.cxx:32
 AliEMCALClusterizerv1.cxx:33
 AliEMCALClusterizerv1.cxx:34
 AliEMCALClusterizerv1.cxx:35
 AliEMCALClusterizerv1.cxx:36
 AliEMCALClusterizerv1.cxx:37
 AliEMCALClusterizerv1.cxx:38
 AliEMCALClusterizerv1.cxx:39
 AliEMCALClusterizerv1.cxx:40
 AliEMCALClusterizerv1.cxx:41
 AliEMCALClusterizerv1.cxx:42
 AliEMCALClusterizerv1.cxx:43
 AliEMCALClusterizerv1.cxx:44
 AliEMCALClusterizerv1.cxx:45
 AliEMCALClusterizerv1.cxx:46
 AliEMCALClusterizerv1.cxx:47
 AliEMCALClusterizerv1.cxx:48
 AliEMCALClusterizerv1.cxx:49
 AliEMCALClusterizerv1.cxx:50
 AliEMCALClusterizerv1.cxx:51
 AliEMCALClusterizerv1.cxx:52
 AliEMCALClusterizerv1.cxx:53
 AliEMCALClusterizerv1.cxx:54
 AliEMCALClusterizerv1.cxx:55
 AliEMCALClusterizerv1.cxx:56
 AliEMCALClusterizerv1.cxx:57
 AliEMCALClusterizerv1.cxx:58
 AliEMCALClusterizerv1.cxx:59
 AliEMCALClusterizerv1.cxx:60
 AliEMCALClusterizerv1.cxx:61
 AliEMCALClusterizerv1.cxx:62
 AliEMCALClusterizerv1.cxx:63
 AliEMCALClusterizerv1.cxx:64
 AliEMCALClusterizerv1.cxx:65
 AliEMCALClusterizerv1.cxx:66
 AliEMCALClusterizerv1.cxx:67
 AliEMCALClusterizerv1.cxx:68
 AliEMCALClusterizerv1.cxx:69
 AliEMCALClusterizerv1.cxx:70
 AliEMCALClusterizerv1.cxx:71
 AliEMCALClusterizerv1.cxx:72
 AliEMCALClusterizerv1.cxx:73
 AliEMCALClusterizerv1.cxx:74
 AliEMCALClusterizerv1.cxx:75
 AliEMCALClusterizerv1.cxx:76
 AliEMCALClusterizerv1.cxx:77
 AliEMCALClusterizerv1.cxx:78
 AliEMCALClusterizerv1.cxx:79
 AliEMCALClusterizerv1.cxx:80
 AliEMCALClusterizerv1.cxx:81
 AliEMCALClusterizerv1.cxx:82
 AliEMCALClusterizerv1.cxx:83
 AliEMCALClusterizerv1.cxx:84
 AliEMCALClusterizerv1.cxx:85
 AliEMCALClusterizerv1.cxx:86
 AliEMCALClusterizerv1.cxx:87
 AliEMCALClusterizerv1.cxx:88
 AliEMCALClusterizerv1.cxx:89
 AliEMCALClusterizerv1.cxx:90
 AliEMCALClusterizerv1.cxx:91
 AliEMCALClusterizerv1.cxx:92
 AliEMCALClusterizerv1.cxx:93
 AliEMCALClusterizerv1.cxx:94
 AliEMCALClusterizerv1.cxx:95
 AliEMCALClusterizerv1.cxx:96
 AliEMCALClusterizerv1.cxx:97
 AliEMCALClusterizerv1.cxx:98
 AliEMCALClusterizerv1.cxx:99
 AliEMCALClusterizerv1.cxx:100
 AliEMCALClusterizerv1.cxx:101
 AliEMCALClusterizerv1.cxx:102
 AliEMCALClusterizerv1.cxx:103
 AliEMCALClusterizerv1.cxx:104
 AliEMCALClusterizerv1.cxx:105
 AliEMCALClusterizerv1.cxx:106
 AliEMCALClusterizerv1.cxx:107
 AliEMCALClusterizerv1.cxx:108
 AliEMCALClusterizerv1.cxx:109
 AliEMCALClusterizerv1.cxx:110
 AliEMCALClusterizerv1.cxx:111
 AliEMCALClusterizerv1.cxx:112
 AliEMCALClusterizerv1.cxx:113
 AliEMCALClusterizerv1.cxx:114
 AliEMCALClusterizerv1.cxx:115
 AliEMCALClusterizerv1.cxx:116
 AliEMCALClusterizerv1.cxx:117
 AliEMCALClusterizerv1.cxx:118
 AliEMCALClusterizerv1.cxx:119
 AliEMCALClusterizerv1.cxx:120
 AliEMCALClusterizerv1.cxx:121
 AliEMCALClusterizerv1.cxx:122
 AliEMCALClusterizerv1.cxx:123
 AliEMCALClusterizerv1.cxx:124
 AliEMCALClusterizerv1.cxx:125
 AliEMCALClusterizerv1.cxx:126
 AliEMCALClusterizerv1.cxx:127
 AliEMCALClusterizerv1.cxx:128
 AliEMCALClusterizerv1.cxx:129
 AliEMCALClusterizerv1.cxx:130
 AliEMCALClusterizerv1.cxx:131
 AliEMCALClusterizerv1.cxx:132
 AliEMCALClusterizerv1.cxx:133
 AliEMCALClusterizerv1.cxx:134
 AliEMCALClusterizerv1.cxx:135
 AliEMCALClusterizerv1.cxx:136
 AliEMCALClusterizerv1.cxx:137
 AliEMCALClusterizerv1.cxx:138
 AliEMCALClusterizerv1.cxx:139
 AliEMCALClusterizerv1.cxx:140
 AliEMCALClusterizerv1.cxx:141
 AliEMCALClusterizerv1.cxx:142
 AliEMCALClusterizerv1.cxx:143
 AliEMCALClusterizerv1.cxx:144
 AliEMCALClusterizerv1.cxx:145
 AliEMCALClusterizerv1.cxx:146
 AliEMCALClusterizerv1.cxx:147
 AliEMCALClusterizerv1.cxx:148
 AliEMCALClusterizerv1.cxx:149
 AliEMCALClusterizerv1.cxx:150
 AliEMCALClusterizerv1.cxx:151
 AliEMCALClusterizerv1.cxx:152
 AliEMCALClusterizerv1.cxx:153
 AliEMCALClusterizerv1.cxx:154
 AliEMCALClusterizerv1.cxx:155
 AliEMCALClusterizerv1.cxx:156
 AliEMCALClusterizerv1.cxx:157
 AliEMCALClusterizerv1.cxx:158
 AliEMCALClusterizerv1.cxx:159
 AliEMCALClusterizerv1.cxx:160
 AliEMCALClusterizerv1.cxx:161
 AliEMCALClusterizerv1.cxx:162
 AliEMCALClusterizerv1.cxx:163
 AliEMCALClusterizerv1.cxx:164
 AliEMCALClusterizerv1.cxx:165
 AliEMCALClusterizerv1.cxx:166
 AliEMCALClusterizerv1.cxx:167
 AliEMCALClusterizerv1.cxx:168
 AliEMCALClusterizerv1.cxx:169
 AliEMCALClusterizerv1.cxx:170
 AliEMCALClusterizerv1.cxx:171
 AliEMCALClusterizerv1.cxx:172
 AliEMCALClusterizerv1.cxx:173
 AliEMCALClusterizerv1.cxx:174
 AliEMCALClusterizerv1.cxx:175
 AliEMCALClusterizerv1.cxx:176
 AliEMCALClusterizerv1.cxx:177
 AliEMCALClusterizerv1.cxx:178
 AliEMCALClusterizerv1.cxx:179
 AliEMCALClusterizerv1.cxx:180
 AliEMCALClusterizerv1.cxx:181
 AliEMCALClusterizerv1.cxx:182
 AliEMCALClusterizerv1.cxx:183
 AliEMCALClusterizerv1.cxx:184
 AliEMCALClusterizerv1.cxx:185
 AliEMCALClusterizerv1.cxx:186
 AliEMCALClusterizerv1.cxx:187
 AliEMCALClusterizerv1.cxx:188
 AliEMCALClusterizerv1.cxx:189
 AliEMCALClusterizerv1.cxx:190
 AliEMCALClusterizerv1.cxx:191
 AliEMCALClusterizerv1.cxx:192
 AliEMCALClusterizerv1.cxx:193
 AliEMCALClusterizerv1.cxx:194
 AliEMCALClusterizerv1.cxx:195
 AliEMCALClusterizerv1.cxx:196
 AliEMCALClusterizerv1.cxx:197
 AliEMCALClusterizerv1.cxx:198
 AliEMCALClusterizerv1.cxx:199
 AliEMCALClusterizerv1.cxx:200
 AliEMCALClusterizerv1.cxx:201
 AliEMCALClusterizerv1.cxx:202
 AliEMCALClusterizerv1.cxx:203
 AliEMCALClusterizerv1.cxx:204
 AliEMCALClusterizerv1.cxx:205
 AliEMCALClusterizerv1.cxx:206
 AliEMCALClusterizerv1.cxx:207
 AliEMCALClusterizerv1.cxx:208
 AliEMCALClusterizerv1.cxx:209
 AliEMCALClusterizerv1.cxx:210
 AliEMCALClusterizerv1.cxx:211
 AliEMCALClusterizerv1.cxx:212
 AliEMCALClusterizerv1.cxx:213
 AliEMCALClusterizerv1.cxx:214
 AliEMCALClusterizerv1.cxx:215
 AliEMCALClusterizerv1.cxx:216
 AliEMCALClusterizerv1.cxx:217
 AliEMCALClusterizerv1.cxx:218
 AliEMCALClusterizerv1.cxx:219
 AliEMCALClusterizerv1.cxx:220
 AliEMCALClusterizerv1.cxx:221
 AliEMCALClusterizerv1.cxx:222
 AliEMCALClusterizerv1.cxx:223
 AliEMCALClusterizerv1.cxx:224
 AliEMCALClusterizerv1.cxx:225
 AliEMCALClusterizerv1.cxx:226
 AliEMCALClusterizerv1.cxx:227
 AliEMCALClusterizerv1.cxx:228
 AliEMCALClusterizerv1.cxx:229
 AliEMCALClusterizerv1.cxx:230
 AliEMCALClusterizerv1.cxx:231
 AliEMCALClusterizerv1.cxx:232
 AliEMCALClusterizerv1.cxx:233
 AliEMCALClusterizerv1.cxx:234
 AliEMCALClusterizerv1.cxx:235
 AliEMCALClusterizerv1.cxx:236
 AliEMCALClusterizerv1.cxx:237
 AliEMCALClusterizerv1.cxx:238
 AliEMCALClusterizerv1.cxx:239
 AliEMCALClusterizerv1.cxx:240
 AliEMCALClusterizerv1.cxx:241
 AliEMCALClusterizerv1.cxx:242
 AliEMCALClusterizerv1.cxx:243
 AliEMCALClusterizerv1.cxx:244
 AliEMCALClusterizerv1.cxx:245
 AliEMCALClusterizerv1.cxx:246
 AliEMCALClusterizerv1.cxx:247
 AliEMCALClusterizerv1.cxx:248
 AliEMCALClusterizerv1.cxx:249
 AliEMCALClusterizerv1.cxx:250
 AliEMCALClusterizerv1.cxx:251
 AliEMCALClusterizerv1.cxx:252
 AliEMCALClusterizerv1.cxx:253
 AliEMCALClusterizerv1.cxx:254
 AliEMCALClusterizerv1.cxx:255
 AliEMCALClusterizerv1.cxx:256
 AliEMCALClusterizerv1.cxx:257
 AliEMCALClusterizerv1.cxx:258
 AliEMCALClusterizerv1.cxx:259
 AliEMCALClusterizerv1.cxx:260
 AliEMCALClusterizerv1.cxx:261
 AliEMCALClusterizerv1.cxx:262
 AliEMCALClusterizerv1.cxx:263
 AliEMCALClusterizerv1.cxx:264
 AliEMCALClusterizerv1.cxx:265
 AliEMCALClusterizerv1.cxx:266
 AliEMCALClusterizerv1.cxx:267
 AliEMCALClusterizerv1.cxx:268
 AliEMCALClusterizerv1.cxx:269
 AliEMCALClusterizerv1.cxx:270
 AliEMCALClusterizerv1.cxx:271
 AliEMCALClusterizerv1.cxx:272
 AliEMCALClusterizerv1.cxx:273
 AliEMCALClusterizerv1.cxx:274
 AliEMCALClusterizerv1.cxx:275
 AliEMCALClusterizerv1.cxx:276
 AliEMCALClusterizerv1.cxx:277
 AliEMCALClusterizerv1.cxx:278
 AliEMCALClusterizerv1.cxx:279
 AliEMCALClusterizerv1.cxx:280
 AliEMCALClusterizerv1.cxx:281
 AliEMCALClusterizerv1.cxx:282
 AliEMCALClusterizerv1.cxx:283
 AliEMCALClusterizerv1.cxx:284
 AliEMCALClusterizerv1.cxx:285
 AliEMCALClusterizerv1.cxx:286
 AliEMCALClusterizerv1.cxx:287
 AliEMCALClusterizerv1.cxx:288
 AliEMCALClusterizerv1.cxx:289
 AliEMCALClusterizerv1.cxx:290
 AliEMCALClusterizerv1.cxx:291
 AliEMCALClusterizerv1.cxx:292
 AliEMCALClusterizerv1.cxx:293
 AliEMCALClusterizerv1.cxx:294
 AliEMCALClusterizerv1.cxx:295