First version of the parallel TPC tracking (M.Ivanov)
[u/mrichter/AliRoot.git] / TPC / AliComplexCluster.h
1 #ifndef ALICOMPLEXCLUSTER_H
2 #define ALICOMPLEXCLUSTER_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 #include "TObject.h"
9 #include "TMath.h"
10
11 class AliComplexCluster : public TObject {
12 public:
13   Int_t     fTracks[3];//labels of overlapped tracks
14   Float_t   fX ;       //Y of cluster
15   Float_t   fY ;       //Z of cluster
16   Float_t   fQ ;       //Q of cluster (in ADC counts)
17   Float_t   fSigmaX2;  //Sigma Y square of cluster
18   Float_t   fSigmaY2;  //Sigma Z square of cluster
19   Float_t   fSigmaXY;  //      XY moment 
20   Float_t   fArea;     //area of cluster
21   Float_t   fMax;     //amplitude at maximum 
22 public:
23   AliComplexCluster() {
24     fTracks[0]=fTracks[1]=fTracks[2]=0; 
25     fX=fY=fQ=fSigmaX2=fSigmaY2=fSigmaXY=fArea=fMax=0.;
26   }
27   virtual ~AliComplexCluster() {;}
28   Bool_t    IsSortable() const;
29   Int_t Compare(const TObject *o) const;
30   ClassDef(AliComplexCluster,1)  // Cluster manager
31 };
32
33 class AliDigitCluster : public AliComplexCluster {
34 public:
35   Int_t fNx; //number of accepted x bins
36   Int_t fNy; //number of accepted y bins
37   Float_t fMaxX; //maximum x bin
38   Float_t fMaxY; //maximum y bin
39 public:  
40   ClassDef(AliDigitCluster,1)  // Tclusters
41 };
42
43
44
45 class AliTPCTrackerPoint  {  
46  private:
47   Short_t   fTX;        // x position of the cluster  in cm - 10 mum prec
48   Short_t   fTZ;        // current prolongation in Z  in cm - 10 mum prec.
49   Short_t   fTY;        // current prolongation in Y  in cm - 10 mum prec.
50   Char_t   fTAngleZ;   // angle 
51   Char_t   fTAngleY;   // angle
52  public:
53   AliTPCTrackerPoint(){fTX=0; fTY=0; fTZ=0; fTAngleZ=0; fTAngleY=0;}
54   inline Float_t  GetX() {return (fTX*0.01);}
55   inline Float_t  GetZ() {return (fTZ*0.01);}
56   inline Float_t  GetY() {return (fTY*0.01);}
57   inline Float_t  GetAngleZ() {return (Float_t(fTAngleZ)*0.02);}
58   inline Float_t  GetAngleY() {return (Float_t(fTAngleY)*0.02);}
59   //
60   void     SetX(Float_t x){ fTX = Short_t(TMath::Nint(x*100.));} 
61   void     SetY(Float_t y){ fTY = Short_t(TMath::Nint(y*100.));} 
62   void     SetZ(Float_t z){ fTZ = Short_t(TMath::Nint(z*100.));} 
63   void     SetAngleZ(Float_t anglez) {fTAngleZ = Char_t(TMath::Nint(anglez*50.));}
64   void     SetAngleY(Float_t angley) {fTAngleY = Char_t(TMath::Nint(angley*50.));}
65   //
66  public:
67   ClassDef(AliTPCTrackerPoint,1)  
68 };
69
70 class AliTPCClusterPoint  {
71  private:
72   Short_t  fCZ;       // current cluster position Z in cm - 100 mum precision
73   Short_t  fCY;       // current cluster position Y in cm - 100 mum precision
74   UChar_t  fErrZ;     // z error estimate - in  mm - 50 mum precision 
75   UChar_t  fErrY;     // y error estimate - in  mm - 50 mum precision 
76   UChar_t  fSigmaZ;   // shape  Z - normalised shape - normaliziation 1 - precision 2 percent
77   UChar_t  fSigmaY;   // shape  Y - normalised shape - normaliziation 1 - precision 2 percent
78   UShort_t fQ;        // total charge in cluster 
79   UShort_t fMax;      // charge at maximum  
80   Char_t   fCType;    // type of the cluster
81  public:
82   AliTPCClusterPoint(){fCZ=fCY=fSigmaZ=fSigmaY=fErrZ=fErrY=fQ=fMax=fCType=0;}
83   inline Float_t  GetZ()    {return (fCZ*0.01);}
84   inline Float_t  GetY()    {return (fCY*0.01);}
85   inline Float_t  GetErrZ()   {return (fErrZ*0.005);}
86   inline Float_t  GetErrY()   {return (fErrY*0.005);}
87   inline Float_t  GetSigmaZ() {return (fSigmaZ*0.02);}
88   inline Float_t  GetSigmaY() {return (fSigmaY*0.02);}  
89   inline Int_t  GetType()   {return fCType;}
90   inline Int_t  GetMax()   {return fMax;}
91   inline Float_t  GetQ()   {return fQ;}
92
93   //
94   void     SetY(Float_t y){ fCY = Short_t(TMath::Nint(y*100.));} 
95   void     SetZ(Float_t z){ fCZ = Short_t(TMath::Nint(z*100.));} 
96   void     SetErrZ(Float_t errz) {fErrZ = UChar_t(TMath::Nint(errz*200.));}
97   void     SetErrY(Float_t erry) {fErrY = UChar_t(TMath::Nint(erry*200.));}
98   void     SetSigmaZ(Float_t sigmaz) {fSigmaZ = UChar_t(TMath::Nint(sigmaz*50.));}
99   void     SetSigmaY(Float_t sigmay) {fSigmaY = UChar_t(TMath::Nint(sigmay*50.));}
100   void     SetQ(Float_t q) {fQ = UShort_t(q);}
101   void     SetMax(Float_t max) {fMax = UShort_t(max);}
102   void     SetType(Char_t type) {fCType = type;}
103
104   //
105  public:
106   ClassDef(AliTPCClusterPoint,1)  
107 };
108
109
110 class AliTPCExactPoint : public TObject{
111  public:
112   AliTPCExactPoint(){fEZ=fEY=fEAngleZ=fEAngleY=fEAmp=fEPrim=fTrackID=0;}
113   Float_t fEZ;       // current "exact" position according simulation
114   Float_t fEY;       // current "exact" position according simulation
115   Float_t fEAngleZ;  // angle Z
116   Float_t fEAngleY;  // angle Y
117   Float_t fEAmp;     // total charge deposited in row
118   Float_t fEPrim;    // primary charge deposited in row
119   Int_t   fTrackID;  // id of the track
120   ClassDef(AliTPCExactPoint,1)  
121 };
122
123
124 class AliTPCTrackPoint: public TObject{
125  public:
126   AliTPCTrackPoint(){ fIsShared = kFALSE;}
127   AliTPCClusterPoint & GetCPoint(){return fCPoint;}
128   AliTPCTrackerPoint & GetTPoint(){return fTPoint;}
129  public:
130   AliTPCClusterPoint fCPoint;
131   AliTPCTrackerPoint fTPoint;
132   Bool_t fIsShared;  // indicate sharing of the point between several tracks
133   ClassDef(AliTPCTrackPoint,1)  
134 };
135
136
137 class AliTPCTrackPointRef: public AliTPCTrackPoint{
138  public:
139   AliTPCExactPoint & GetExactPoint(){return fEPoint;}
140   AliTPCExactPoint & GetNearestPoint(){return fNPoint;}  
141  public:
142   AliTPCExactPoint fEPoint; //exact point belonging to track
143   AliTPCExactPoint fNPoint; //nearest point  
144   ClassDef(AliTPCTrackPointRef,1)  
145 };
146
147
148 #endif //ALICOMPLEXCLUSTER_H