New class AliPHOSCpvRecPoint
[u/mrichter/AliRoot.git] / PHOS / AliPHOSCpvRecPoint.h
1 #ifndef ALIPHOSCPVRECPOINT_H
2 #define ALIPHOSCPVRECPOINT_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 //_________________________________________________________________________
9 //  RecPoint implementation for PHOS-CPV
10 //  An CpvRecPoint is a cluster of digits   
11 //           
12 //*-- Author: Yuri Kharlov 30 October 2000 
13 //          (after Dmitri Peressounko (RRC KI & SUBATECH))
14
15 // --- ROOT system ---
16
17 #include "TObject.h"
18 #include "TArrayI.h"
19  
20 // --- Standard library ---
21
22 // --- AliRoot header files ---
23
24 #include "AliPHOSDigit.h"
25 #include "AliPHOSRecPoint.h"
26
27 class AliPHOSCpvRecPoint : public AliPHOSRecPoint  {
28
29 public:
30
31   AliPHOSCpvRecPoint(){
32    // default ctor
33     fEnergyList = 0;  
34   } ;                    
35   AliPHOSCpvRecPoint(Float_t W0, Float_t LocMaxCut) ;
36   AliPHOSCpvRecPoint(const AliPHOSCpvRecPoint & rp) {
37     // cpy ctor requested by Coding Convention 
38     // but not yet needed
39     assert(0==1) ; 
40   } 
41  
42   virtual ~AliPHOSCpvRecPoint() ;  
43
44   virtual void  AddDigit(AliPHOSDigit & digit, Float_t Energy) ;  // add a digit to the digits list  
45   Int_t       Compare(TObject * obj) ;                         // method for sorting  
46   
47   Float_t     GetDelta (){ 
48     // gets the fDelta data member 
49     return fDelta ; }    
50   Float_t     GetDispersion() ;                               // computes the dispersion of the shower
51   void        GetElipsAxis(Float_t * lambda) ;                // computes the axis of shower ellipsoide
52   Float_t *   GetEnergiesList(){
53     // gets the list of energies makink this recpoint
54     return fEnergyList ;} 
55   virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py) ; 
56   Float_t     GetLocMaxCut () {
57     // gets the cut of the local maximum search 
58     return fLocMaxCut ; }
59   Float_t     GetLogWeightCut (){
60     // gets the logarythmic weight for the center of gravity calculation
61     return fW0 ; }
62   Float_t     GetMaximalEnergy(void) ;                        // get the highest energy in the cluster
63   Int_t       GetMaximumMultiplicity() { 
64     // gets the maximum number of digits allowed
65     return   fMaxDigit ; } 
66   Int_t       GetMultiplicity(void) const { 
67     // gets the number of digits making this recpoint
68     return fMulDigit ; } 
69   Int_t       GetMultiplicityAtLevel(const Float_t level) ;   // computes multiplicity of digits with energy above relative level
70   Int_t       GetNumberOfLocalMax(Int_t *  maxAt, Float_t * maxAtEnergy) ; // searches for the local maxima 
71  
72   Float_t     GetTotalEnergy(void) const { 
73     // gets the total amplitude of this recpoint (in EMC RecPoint Amp = Energy)
74     return fAmp ; }    
75   void        GetLocalPosition(TVector3 &Lpos) ;  // computes the position in the PHOS module 
76   void        GetClusterLengths(Int_t &lengX, Int_t &lengZ); // cluster lengths along x and z
77   Bool_t      IsCPV(void) {
78     // true if the recpoint is in CPV
79     return kTRUE ; } 
80   Bool_t      IsSortable() const { 
81     // says that emcrecpoints are sortable objects 
82     return kTRUE ; } 
83   void        Print(Option_t * opt = "void") ; 
84
85   AliPHOSCpvRecPoint & operator = (const AliPHOSCpvRecPoint & rvalue)  {
86     // assignement operator requested by coding convention
87     // but not needed
88     assert(0==1) ;
89     return *this ; 
90   }
91
92  private:
93
94   Bool_t AreNeighbours(AliPHOSDigit * digit1, AliPHOSDigit * digit2 ) ;
95
96   Float_t  fDelta ;          // parameter used to sort the clusters    
97   Float_t  *fEnergyList ;    //[fMulDigit] energy of digits
98   Float_t  fLocMaxCut ;      // minimum energy difference to distinguish two maxima 
99   Float_t  fW0 ;             // logarithmic weight factor for center of gravity calculation
100   Int_t    fLengX ;          // cluster length along x
101   Int_t    fLengZ ;          // cluster length along z
102   
103   ClassDef(AliPHOSCpvRecPoint,1)  // CPV RecPoint (cluster)
104
105 };
106
107 #endif // AliPHOSCPVRECPOINT_H