ROOT logo
#ifndef ALIEMCALCLUSTERIZERNXN_H
#define ALIEMCALCLUSTERIZERNXN_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id: AliEMCALClusterizerNxN.h 41181 2010-05-12 13:58:06Z gconesab $ */

//_________________________________________________________________________
// This class derives from AliEMCALClustrerizer but also keeps the API of AliEMCALClusterizerv1
// Algorithm:
// 1. peek the most energetic cell
// 2. assign it as a center of the cluster and add cells surrounding it: 3x3, 5x5...
// 3. remove the cells contributing to the cluster
// 4. start from 1 for the remaining clusters
// 5. cluster splitting (not implemented yet) - use the shape analysis to resolve the energy sharing
// - for high energy clusters check the surrounding of the 3x3 clusters for extra energy 
// (merge 3x3 clusters and resolve the internal energy sharing - case for 2 clusters merged)

#include "AliEMCALClusterizer.h"
class AliEMCALRecPoint ; 
class AliEMCALDigit ;

class AliEMCALClusterizerNxN : public AliEMCALClusterizer {
  
public:
  
  AliEMCALClusterizerNxN() ;         
  AliEMCALClusterizerNxN(AliEMCALGeometry* geometry);
  AliEMCALClusterizerNxN(AliEMCALGeometry* geometry, AliEMCALCalibData * calib, AliCaloCalibPedestal * pedestal);
	
  virtual ~AliEMCALClusterizerNxN()  ;

  virtual Int_t   AreNeighbours(AliEMCALDigit * d1, AliEMCALDigit * d2, Bool_t & shared)const ; 
                               // Checks if digits are in neighbour cells 

  virtual void   Digits2Clusters(Option_t *option);                // Does the job

  virtual const char * Version() const { return "clu-NxN" ; }  
  
  void SetNRowDiff(Int_t nd) { fNRowDiff = nd; }
  void SetNColDiff(Int_t nd) { fNColDiff = nd; }
  Int_t GetNRowDiff() const { return fNRowDiff; } 
  Int_t GetNColDiff() const { return fNColDiff; } 
  void SetEnergyGrad(Bool_t b) { fEnergyGrad= b; }
  Bool_t GetEnergyGrad() const { return fEnergyGrad; }

protected:

  virtual void   MakeClusters();            

private:
  AliEMCALClusterizerNxN(const AliEMCALClusterizerNxN &); //copy ctor
  AliEMCALClusterizerNxN & operator = (const AliEMCALClusterizerNxN &);

  Int_t  fNRowDiff;  //how many neighbors to consider along row (phi)
  Int_t  fNColDiff;  //how many neighbors to consider along col (eta)
  Bool_t fEnergyGrad; //if true only cluster if neighboring cell has less energy

  ClassDef(AliEMCALClusterizerNxN,4)   // Clusterizer implementation version 1
};

#endif // AliEMCALCLUSTERIZERNXN_H
 AliEMCALClusterizerNxN.h:1
 AliEMCALClusterizerNxN.h:2
 AliEMCALClusterizerNxN.h:3
 AliEMCALClusterizerNxN.h:4
 AliEMCALClusterizerNxN.h:5
 AliEMCALClusterizerNxN.h:6
 AliEMCALClusterizerNxN.h:7
 AliEMCALClusterizerNxN.h:8
 AliEMCALClusterizerNxN.h:9
 AliEMCALClusterizerNxN.h:10
 AliEMCALClusterizerNxN.h:11
 AliEMCALClusterizerNxN.h:12
 AliEMCALClusterizerNxN.h:13
 AliEMCALClusterizerNxN.h:14
 AliEMCALClusterizerNxN.h:15
 AliEMCALClusterizerNxN.h:16
 AliEMCALClusterizerNxN.h:17
 AliEMCALClusterizerNxN.h:18
 AliEMCALClusterizerNxN.h:19
 AliEMCALClusterizerNxN.h:20
 AliEMCALClusterizerNxN.h:21
 AliEMCALClusterizerNxN.h:22
 AliEMCALClusterizerNxN.h:23
 AliEMCALClusterizerNxN.h:24
 AliEMCALClusterizerNxN.h:25
 AliEMCALClusterizerNxN.h:26
 AliEMCALClusterizerNxN.h:27
 AliEMCALClusterizerNxN.h:28
 AliEMCALClusterizerNxN.h:29
 AliEMCALClusterizerNxN.h:30
 AliEMCALClusterizerNxN.h:31
 AliEMCALClusterizerNxN.h:32
 AliEMCALClusterizerNxN.h:33
 AliEMCALClusterizerNxN.h:34
 AliEMCALClusterizerNxN.h:35
 AliEMCALClusterizerNxN.h:36
 AliEMCALClusterizerNxN.h:37
 AliEMCALClusterizerNxN.h:38
 AliEMCALClusterizerNxN.h:39
 AliEMCALClusterizerNxN.h:40
 AliEMCALClusterizerNxN.h:41
 AliEMCALClusterizerNxN.h:42
 AliEMCALClusterizerNxN.h:43
 AliEMCALClusterizerNxN.h:44
 AliEMCALClusterizerNxN.h:45
 AliEMCALClusterizerNxN.h:46
 AliEMCALClusterizerNxN.h:47
 AliEMCALClusterizerNxN.h:48
 AliEMCALClusterizerNxN.h:49
 AliEMCALClusterizerNxN.h:50
 AliEMCALClusterizerNxN.h:51
 AliEMCALClusterizerNxN.h:52
 AliEMCALClusterizerNxN.h:53
 AliEMCALClusterizerNxN.h:54
 AliEMCALClusterizerNxN.h:55
 AliEMCALClusterizerNxN.h:56
 AliEMCALClusterizerNxN.h:57
 AliEMCALClusterizerNxN.h:58
 AliEMCALClusterizerNxN.h:59
 AliEMCALClusterizerNxN.h:60
 AliEMCALClusterizerNxN.h:61
 AliEMCALClusterizerNxN.h:62