MUON + CheckCompiler
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALClusterizerNxN.h
1 #ifndef ALIEMCALCLUSTERIZERNXN_H
2 #define ALIEMCALCLUSTERIZERNXN_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id: AliEMCALClusterizerNxN.h 41181 2010-05-12 13:58:06Z gconesab $ */
7
8 //_________________________________________________________________________
9 // This class derives from AliEMCALClustrerizer but also keeps the API of AliEMCALClusterizerv1
10 // Algorithm:
11 // 1. peek the most energetic cell
12 // 2. assign it as a center of the cluster and add cells surrounding it: 3x3, 5x5...
13 // 3. remove the cells contributing to the cluster
14 // 4. start from 1 for the remaining clusters
15 // 5. cluster splitting (not implemented yet) - use the shape analysis to resolve the energy sharing
16 // - for high energy clusters check the surrounding of the 3x3 clusters for extra energy 
17 // (merge 3x3 clusters and resolve the internal energy sharing - case for 2 clusters merged)
18
19 #include "AliEMCALClusterizer.h"
20 class AliEMCALRecPoint ; 
21 class AliEMCALDigit ;
22
23 class AliEMCALClusterizerNxN : public AliEMCALClusterizer {
24   
25 public:
26   
27   AliEMCALClusterizerNxN() ;         
28   AliEMCALClusterizerNxN(AliEMCALGeometry* geometry);
29   AliEMCALClusterizerNxN(AliEMCALGeometry* geometry, AliEMCALCalibData * calib, AliCaloCalibPedestal * pedestal);
30         
31   virtual ~AliEMCALClusterizerNxN()  ;
32
33   virtual Int_t   AreNeighbours(AliEMCALDigit * d1, AliEMCALDigit * d2, Bool_t & shared)const ; 
34                                // Checks if digits are in neighbour cells 
35
36   virtual void   Digits2Clusters(Option_t *option);                // Does the job
37
38   virtual const char * Version() const { return "clu-NxN" ; }  
39   
40   void SetNRowDiff(Int_t nd) { fNRowDiff = nd; }
41   void SetNColDiff(Int_t nd) { fNColDiff = nd; }
42   Int_t GetNRowDiff() const { return fNRowDiff; } 
43   Int_t GetNColDiff() const { return fNColDiff; } 
44   void SetEnergyGrad(Bool_t b) { fEnergyGrad= b; }
45   Bool_t GetEnergyGrad() const { return fEnergyGrad; }
46
47 protected:
48
49   virtual void   MakeClusters();            
50
51 private:
52   AliEMCALClusterizerNxN(const AliEMCALClusterizerNxN &); //copy ctor
53   AliEMCALClusterizerNxN & operator = (const AliEMCALClusterizerNxN &);
54
55   Int_t  fNRowDiff;  //how many neighbors to consider along row (phi)
56   Int_t  fNColDiff;  //how many neighbors to consider along col (eta)
57   Bool_t fEnergyGrad; //if true only cluster if neighboring cell has less energy
58
59   ClassDef(AliEMCALClusterizerNxN,4)   // Clusterizer implementation version 1
60 };
61
62 #endif // AliEMCALCLUSTERIZERNXN_H