1 #ifndef ALIMUONCLUSTERFINDER_H
2 #define ALIMUONCLUSTERFINDER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
8 ////////////////////////////////////////////////
9 // MUON Cluster Finder Class //
10 ////////////////////////////////////////////////
13 class AliMUONHitMapA1;
16 class AliMUONSegmentation;
17 class AliMUONResponse;
18 class AliMUONRawCluster;
22 const Int_t kMaxNeighbours = 24; // max number of neighbours
24 class AliMUONClusterFinder :
29 (AliMUONSegmentation *segmentation,
30 AliMUONResponse *response, TClonesArray *digits, Int_t chamber);
31 AliMUONClusterFinder(const AliMUONClusterFinder& clusterFinder);
32 AliMUONClusterFinder();
33 virtual ~AliMUONClusterFinder();
34 // Set segmentation model
35 virtual void SetSegmentation(
36 AliMUONSegmentation *segmentation){
37 fSegmentation[0]=segmentation;
40 virtual void SetResponse(AliMUONResponse *response) {
43 // Set pointer to digits
44 virtual void SetDigits(TClonesArray *MUONdigits);
45 virtual void SetDigits(TClonesArray *MUONdigits1,
46 TClonesArray *MUONdigits2 ) {;}
48 // Set current chamber id
49 virtual void SetChamber(Int_t ich){
52 // Add a new raw cluster
53 virtual void AddRawCluster(const AliMUONRawCluster cluster);
54 // Search for raw clusters
55 virtual void FindRawClusters();
57 virtual void FindCluster(Int_t i, Int_t j, AliMUONRawCluster &c);
59 virtual void Decluster(AliMUONRawCluster *cluster);
60 // Set max. number of pads per local cluster
61 virtual void SetNperMax(Int_t npermax=5) {fNperMax = npermax;}
63 virtual void SetDeclusterFlag(Int_t flag=1) {fDeclusterFlag =flag;}
64 // Set max. cluster size ; bigger clusters will deconvoluted
65 virtual void SetClusterSize(Int_t clsize=5) {fClusterSize = clsize;}
66 // Self Calibration of COG
67 virtual void CalibrateCOG();
68 // Perform fit to sinoidal function
69 virtual void SinoidalFit(Float_t x, Float_t y, TF1 &func);
71 virtual void CorrectCOG(){;}
72 // True if 3-cluster is centred
73 virtual Bool_t Centered(AliMUONRawCluster *cluster);
74 // Perform split by local maxima
75 virtual void SplitByLocalMaxima(AliMUONRawCluster *cluster);
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);
81 virtual void FillCluster(AliMUONRawCluster *cluster) {
82 FillCluster(cluster,1);}
83 virtual void SetTracks(Int_t, Int_t) {;}
84 virtual Bool_t TestTrack(Int_t) {return kTRUE;}
86 // Return pointer to raw clusters
87 TClonesArray* RawClusters(){return fRawClusters;}
88 // Assignment operator
89 AliMUONClusterFinder & operator = (const AliMUONClusterFinder& rhs);
92 TClonesArray* fDigits; // Digits
93 Int_t fNdigits; // Number of Digits
94 AliMUONSegmentation* fSegmentation[2]; // Chamber segmentation
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
103 Int_t fDeclusterFlag; // flaf for declusterin
104 Int_t fClusterSize; // cluster size
105 Int_t fNPeaks; // number of local maxima
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
116 ClassDef(AliMUONClusterFinder,1) //Class for clustering and reconstruction of space points