Line data Source code
1 : #ifndef ALIMUONCLUSTERFINDERPEAKCOG_H
2 : #define ALIMUONCLUSTERFINDERPEAKCOG_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 : /// \ingroup rec
9 : /// \class AliMUONClusterFinderPeakCOG
10 : /// \brief Cluster finder in MUON arm of ALICE
11 : ///
12 : // Author Alexander Zinchenko, JINR Dubna; Laurent Aphecetche, SUBATECH
13 : //
14 :
15 : #include "AliMUONVClusterFinder.h"
16 :
17 : #ifndef ROOT_TObjArray
18 : # include "TObjArray.h"
19 : #endif
20 : #ifndef ROOT_TVector2
21 : # include "TVector2.h"
22 : #endif
23 :
24 : class AliMUONPad;
25 :
26 : class TH2D;
27 :
28 : class AliMUONClusterFinderPeakCOG : public AliMUONVClusterFinder
29 : {
30 : public:
31 : AliMUONClusterFinderPeakCOG(Bool_t plot, AliMUONVClusterFinder* clusterFinder); // Constructor
32 : virtual ~AliMUONClusterFinderPeakCOG(); // Destructor
33 :
34 : /// It needs segmentation
35 0 : virtual Bool_t NeedSegmentation() const { return kTRUE; }
36 :
37 : using AliMUONVClusterFinder::Prepare;
38 :
39 : virtual Bool_t Prepare(Int_t detElemId, TObjArray* pads[2],
40 : const AliMpArea& area, const AliMpVSegmentation* seg[2]);
41 :
42 : virtual AliMUONCluster* NextCluster();
43 :
44 : virtual void Print(Option_t* opt="") const;
45 :
46 : private:
47 : /// Not implemented
48 : AliMUONClusterFinderPeakCOG(const AliMUONClusterFinderPeakCOG& rhs);
49 : /// Not implemented
50 : AliMUONClusterFinderPeakCOG& operator=(const AliMUONClusterFinderPeakCOG& rhs);
51 :
52 : Bool_t WorkOnPreCluster();
53 :
54 : /// Check precluster to simplify it (if possible), and return the simplified cluster
55 : AliMUONCluster* CheckPrecluster(const AliMUONCluster& cluster);
56 : AliMUONCluster* CheckPreclusterTwoCathodes(AliMUONCluster* cluster);
57 :
58 : /// Checks whether a pad and a pixel have an overlapping area.
59 : Bool_t Overlap(const AliMUONPad& pad, const AliMUONPad& pixel);
60 :
61 : /// build array of pixels
62 : void BuildPixArray(AliMUONCluster& cluster);
63 : void BuildPixArrayOneCathode(AliMUONCluster& cluster);
64 : void PadOverHist(Int_t idir, Int_t ix0, Int_t iy0, AliMUONPad *pad, TH2D *h1, TH2D *h2);
65 :
66 : void RemovePixel(Int_t i);
67 :
68 : AliMUONPad* Pixel(Int_t i) const;
69 :
70 : Int_t FindLocalMaxima(TObjArray *pixArray, Int_t *localMax, Double_t *maxVal); // find local maxima
71 : void FlagLocalMax(TH2D *hist, Int_t i, Int_t j, Int_t *isLocalMax); // flag local max
72 : void FindCluster(AliMUONCluster& cluster, const Int_t *localMax, Int_t iMax); // find cluster around local max
73 : void PadsInXandY(AliMUONCluster& cluster, Int_t &nInX, Int_t &nInY) const; // get number of pads in X and Y
74 :
75 : void CheckOverlaps();
76 :
77 : private:
78 : // Status flags for pads
79 : static const Int_t fgkZero; ///< pad "basic" state
80 : static const Int_t fgkMustKeep; ///< do not kill (for pixels)
81 : static const Int_t fgkUseForFit; ///< should be used for fit
82 : static const Int_t fgkOver; ///< processing is over
83 : static const Int_t fgkModified; ///< modified pad charge
84 : static const Int_t fgkCoupled; ///< coupled pad
85 :
86 :
87 : // Some constants
88 : static const Double_t fgkZeroSuppression; ///< average zero suppression value
89 : static const Double_t fgkDistancePrecision; ///< used to check overlaps and so on
90 : static const TVector2 fgkIncreaseSize; ///< idem
91 : static const TVector2 fgkDecreaseSize; ///< idem
92 :
93 : AliMUONVClusterFinder* fPreClusterFinder; //!<! the pre-clustering worker
94 : AliMUONCluster* fPreCluster; //!<! current pre-cluster
95 : TObjArray fClusterList; //!<! clusters corresponding to the current pre-cluster
96 :
97 : Int_t fEventNumber; //!<! current event being processed
98 : Int_t fDetElemId; //!<! current DE being processed
99 : Int_t fClusterNumber; //!<! current cluster number
100 :
101 : const AliMpVSegmentation *fkSegmentation[2]; //!<! new segmentation
102 :
103 : TH2D *fHistAnode; //!<! histo for peak search
104 : TObjArray* fPixArray; //!<! collection of pixels
105 : Int_t fDebug; //!<! debug level
106 : Bool_t fPlot; //!<! whether we should plot thing (for debug only, quite slow!)
107 :
108 : Int_t fNClusters; //!<! total number of clusters
109 : Int_t fNAddVirtualPads; //!<! number of clusters for which we added virtual pads
110 :
111 18 : ClassDef(AliMUONClusterFinderPeakCOG,0) // cluster finder in MUON arm of ALICE
112 : };
113 :
114 : #endif
|