]>
Commit | Line | Data |
---|---|---|
a9e2aefa | 1 | #ifndef ALIMUONCLUSTERFINDER_H |
2 | #define ALIMUONCLUSTERFINDER_H | |
3da30618 | 3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | ||
a897a37a | 8 | //////////////////////////////////////////////// |
9 | // MUON Cluster Finder Class // | |
10 | //////////////////////////////////////////////// | |
a9e2aefa | 11 | #include "TObject.h" |
12 | class AliMUONHitMap; | |
13 | class AliMUONHitMapA1; | |
14 | class AliMUONDigit; | |
15 | class TClonesArray; | |
16 | class AliMUONSegmentation; | |
17 | class AliMUONResponse; | |
18 | class AliMUONRawCluster; | |
19 | ||
20 | class TF1; | |
21 | ||
22 | const Int_t kMaxNeighbours = 24; // max number of neighbours | |
23 | ||
a897a37a | 24 | class AliMUONClusterFinder : |
25 | public TObject | |
26 | { | |
a897a37a | 27 | public: |
28 | AliMUONClusterFinder | |
a9e2aefa | 29 | (AliMUONSegmentation *segmentation, |
30 | AliMUONResponse *response, TClonesArray *digits, Int_t chamber); | |
31 | AliMUONClusterFinder(const AliMUONClusterFinder& clusterFinder); | |
a897a37a | 32 | AliMUONClusterFinder(); |
a9e2aefa | 33 | virtual ~AliMUONClusterFinder(); |
34 | // Set segmentation model | |
a897a37a | 35 | virtual void SetSegmentation( |
a9e2aefa | 36 | AliMUONSegmentation *segmentation){ |
9825400f | 37 | fSegmentation[0]=segmentation; |
a897a37a | 38 | } |
a9e2aefa | 39 | // Set response model |
40 | virtual void SetResponse(AliMUONResponse *response) { | |
a897a37a | 41 | fResponse=response; |
42 | } | |
a9e2aefa | 43 | // Set pointer to digits |
44 | virtual void SetDigits(TClonesArray *MUONdigits); | |
45 | virtual void SetDigits(TClonesArray *MUONdigits1, | |
46 | TClonesArray *MUONdigits2 ) {;} | |
a897a37a | 47 | |
a9e2aefa | 48 | // Set current chamber id |
a897a37a | 49 | virtual void SetChamber(Int_t ich){ |
50 | fChamber=ich; | |
51 | } | |
a9e2aefa | 52 | // Add a new raw cluster |
53 | virtual void AddRawCluster(const AliMUONRawCluster cluster); | |
54 | // Search for raw clusters | |
a897a37a | 55 | virtual void FindRawClusters(); |
a9e2aefa | 56 | // Find cluster |
a897a37a | 57 | virtual void FindCluster(Int_t i, Int_t j, AliMUONRawCluster &c); |
a9e2aefa | 58 | // Decluster |
a897a37a | 59 | virtual void Decluster(AliMUONRawCluster *cluster); |
a9e2aefa | 60 | // Set max. number of pads per local cluster |
a897a37a | 61 | virtual void SetNperMax(Int_t npermax=5) {fNperMax = npermax;} |
a9e2aefa | 62 | // Decluster ? |
a897a37a | 63 | virtual void SetDeclusterFlag(Int_t flag=1) {fDeclusterFlag =flag;} |
a9e2aefa | 64 | // Set max. cluster size ; bigger clusters will deconvoluted |
a897a37a | 65 | virtual void SetClusterSize(Int_t clsize=5) {fClusterSize = clsize;} |
a9e2aefa | 66 | // Self Calibration of COG |
a897a37a | 67 | virtual void CalibrateCOG(); |
a9e2aefa | 68 | // Perform fit to sinoidal function |
a897a37a | 69 | virtual void SinoidalFit(Float_t x, Float_t y, TF1 &func); |
a9e2aefa | 70 | // |
a897a37a | 71 | virtual void CorrectCOG(){;} |
a9e2aefa | 72 | // True if 3-cluster is centred |
a897a37a | 73 | virtual Bool_t Centered(AliMUONRawCluster *cluster); |
a9e2aefa | 74 | // Perform split by local maxima |
a897a37a | 75 | virtual void SplitByLocalMaxima(AliMUONRawCluster *cluster); |
a9e2aefa | 76 | // Perform Double Mathieson Fit |
77 | Bool_t DoubleMathiesonFit(AliMUONRawCluster *c); | |
78 | Bool_t SingleMathiesonFit(AliMUONRawCluster *c); | |
79 | // Build up full cluster information | |
80 | virtual void FillCluster(AliMUONRawCluster *cluster, Int_t n); | |
a897a37a | 81 | virtual void FillCluster(AliMUONRawCluster *cluster) { |
82 | FillCluster(cluster,1);} | |
a9e2aefa | 83 | virtual void SetTracks(Int_t, Int_t) {;} |
84 | virtual Bool_t TestTrack(Int_t) {return kTRUE;} | |
85 | ||
86 | // Return pointer to raw clusters | |
a897a37a | 87 | TClonesArray* RawClusters(){return fRawClusters;} |
a9e2aefa | 88 | // Assignment operator |
89 | AliMUONClusterFinder & operator = (const AliMUONClusterFinder& rhs); | |
90 | ||
91 | protected: | |
92 | TClonesArray* fDigits; // Digits | |
93 | Int_t fNdigits; // Number of Digits | |
9825400f | 94 | AliMUONSegmentation* fSegmentation[2]; // Chamber segmentation |
a9e2aefa | 95 | AliMUONResponse* fResponse; // Chamber Response |
96 | TClonesArray* fRawClusters; // Raw Clusters | |
97 | Int_t fChamber; // Chamber Number | |
98 | Int_t fNRawClusters; // Number of Raw Clusters | |
99 | AliMUONHitMapA1* fHitMap; // Hit Map | |
100 | TF1* fCogCorr; // Systematic correction function | |
101 | Int_t fNperMax; // Maximum number of pads per | |
102 | // local maximum | |
103 | Int_t fDeclusterFlag; // flaf for declusterin | |
104 | Int_t fClusterSize; // cluster size | |
105 | Int_t fNPeaks; // number of local maxima | |
106 | // Current cluster | |
107 | AliMUONDigit* fDig[100]; // current list of digits | |
108 | Int_t fIx[100]; // current list of x-pad-coord. | |
109 | Int_t fIy[100]; // current list of y-pad-coord. | |
110 | Float_t fX[100]; // current list of x-coord. | |
111 | Float_t fY[100]; // current list of y-coord. | |
112 | Int_t fIndLocal[100]; // indices of local maxima | |
113 | Int_t fNLocal; // Number of local maxima | |
114 | Int_t fQ[100]; // current list of charges | |
115 | Int_t fMul; // current multiplicity | |
a897a37a | 116 | ClassDef(AliMUONClusterFinder,1) //Class for clustering and reconstruction of space points |
117 | }; | |
118 | #endif | |
119 | ||
120 | ||
121 | ||
122 | ||
123 | ||
124 | ||
125 |