]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EMCAL/AliEMCALClusterizerNxN.h
New Clusterizer that makes cluster grouping neighbour cells around highest energy...
[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
39   static Double_t ShowerShape(Double_t x, Double_t y) ; // Shape of EM shower used in unfolding; 
40                                             //class member function (not object member function)
41   static void     SetInputCalibrated(Bool_t val);
42
43   virtual const char * Version() const { return "clu-NxN" ; }  
44  
45   
46 protected:
47
48   virtual void   MakeClusters();            
49
50   static Bool_t fgkIsInputCalibrated; // to enable reclusterization from ESD cells
51
52 private:
53   AliEMCALClusterizerNxN(const AliEMCALClusterizerNxN &); //copy ctor
54   AliEMCALClusterizerNxN & operator = (const AliEMCALClusterizerNxN &);
55
56
57   virtual void   MakeUnfolding();
58   void           UnfoldCluster(AliEMCALRecPoint * iniEmc, Int_t Nmax, 
59                                AliEMCALDigit ** maxAt,
60                                Float_t * maxAtEnergy ); //Unfolds cluster using TMinuit package
61
62 private:
63
64    ClassDef(AliEMCALClusterizerNxN,1)   // Clusterizer implementation version 1
65
66 };
67
68 #endif // AliEMCALCLUSTERIZERNXN_H