2728ab7a0908f0b10de7a0f46c63cb1f9dafbbce
[u/mrichter/AliRoot.git] / MUON / AliMUONClusterFinderVS.h
1 #ifndef ALIMUONCLUSTERFINDERVS_H
2 #define ALIMUONCLUSTERFINDERVS_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 //  MUON Cluster Finder Class                 //
10 ////////////////////////////////////////////////
11 #include "AliMUONHitMap.h"
12 #include "TF1.h"
13 #include "AliMUONClusterFinder.h"
14 class AliMUONClusterFinderVS : 
15  public AliMUONClusterFinder
16 {
17  public:
18     AliMUONClusterFinderVS
19         (AliMUONSegmentation *segmentation1, AliMUONSegmentation *segmentation2,
20          AliMUONResponse *response,
21          TClonesArray *digits1, TClonesArray *digits2,
22          Int_t chamber);
23     AliMUONClusterFinderVS();
24     AliMUONClusterFinderVS(const AliMUONClusterFinderVS& clusterFinder);
25     virtual ~AliMUONClusterFinderVS(){;}
26 // Set segmentation model    
27     virtual void SetSegmentation(AliMUONSegmentation *seg1, AliMUONSegmentation *seg2)
28         {
29         fSegmentation=seg1;
30         fSegmentation2=seg2;
31         }
32 // Set pointer to digits
33     virtual void SetDigits(TClonesArray *MUONdigits1, TClonesArray *MUONdigits2);
34     
35 // Get Segmentation
36     virtual AliMUONSegmentation*  Segmentation(Int_t i);
37 // Get Number of Digits
38     virtual Int_t NDigits(Int_t i);
39 // Get Digits
40     virtual TClonesArray* Digits(Int_t i);
41 // Get HitMap
42     virtual AliMUONHitMap* HitMap(Int_t i);
43     
44 // Search for raw clusters
45     virtual void FindRawClusters();
46 // Find cluster    
47     virtual void  FindCluster(Int_t i, Int_t j, Int_t cath, AliMUONRawCluster &c);
48 // Decluster
49     virtual void Decluster(AliMUONRawCluster *cluster);
50 //  Perform split by local maxima  
51     virtual void   SplitByLocalMaxima(AliMUONRawCluster *cluster);
52     virtual void   FindLocalMaxima(AliMUONRawCluster *cluster);
53     virtual void   Split(AliMUONRawCluster * cluster);
54     
55 //  Perform Double Mathieson Fit
56     Bool_t DoubleMathiesonFit(AliMUONRawCluster *c, Int_t cath);
57     Float_t CombiDoubleMathiesonFit(AliMUONRawCluster *c);
58     Float_t SingleMathiesonFit(AliMUONRawCluster *c, Int_t cath);
59     Float_t CombiSingleMathiesonFit(AliMUONRawCluster *c);    
60 //  Build up full cluster information    
61     virtual void   FillCluster(AliMUONRawCluster *cluster, Int_t flag, Int_t cath);
62     virtual void   FillCluster(AliMUONRawCluster *cluster, Int_t cath);
63     virtual void   FillCluster(AliMUONRawCluster *cluster) {
64         FillCluster(cluster,1,0);}
65     // Add a new raw cluster    
66     virtual void AddRawCluster(const AliMUONRawCluster cluster);
67     
68     virtual void SetTracks(Int_t t1, Int_t t2) 
69         {
70             fTrack[0]=t1;
71             fTrack[1]=t2;
72         }
73     
74     virtual Bool_t TestTrack(Int_t t) {
75         if (fTrack[0]==-1 || fTrack[1]==-1) {
76             return kTRUE;
77         } else if (t==fTrack[0] || t==fTrack[1]) {
78             return kTRUE;
79         } else {
80             return kFALSE;
81         }
82     }
83     //  Assignment operator
84     AliMUONClusterFinderVS & operator = (const AliMUONClusterFinderVS& rhs);
85 protected:
86     TClonesArray*           fDigits2;            // Digits
87     Int_t                   fNdigits2;           // Number of Digits    
88     AliMUONSegmentation*    fSegmentation2;      // Chamber segmentation
89     AliMUONHitMapA1*        fHitMap2;            // Hit Map
90     AliMUONDigit*           fDig[100][2];        // current list of digits 
91     Int_t                   fIx[100][2];         // current list of x-pad-coord.
92     Int_t                   fIy[100][2];         // current list of y-pad-coord.
93     Float_t                 fX[100][2];          // current list of x-coord.
94     Float_t                 fY[100][2];          // current list of y-coord.
95     Int_t                   fIndLocal[100][2];   // indices of local maxima
96     Int_t                   fNLocal[2];          // Number of local maxima
97     Int_t                   fQ[100][2];          // current list of charges
98     Int_t                   fMul[2];             // current multiplicity
99 // Current Fit
100     Double_t                 fXFit[2];         // x-coordinate
101     Double_t                 fYFit[2];         // y-coordinate
102     Double_t                 fQrFit[2];        // charge ratio
103     Float_t                  fChi2[2];         // chi2 of fit
104     Float_t                  fXInit[2];        // start values
105     Float_t                  fYInit[2];        // start values
106     Float_t                  fQrInit[2];       // start values
107     Int_t                    fFitStat;         // status of fit
108     
109 // Selected track for debugging
110     Int_t                    fTrack[2];        // Only digits with main contributions from these tracks are
111                                                // considered 
112 //  Return pointer to raw clusters    
113     ClassDef(AliMUONClusterFinderVS,1) //Class for clustering and reconstruction of space points
114 };
115 #endif
116
117
118
119
120
121
122
123
124
125