new classes added
[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 #include "AliTPCclusterMI.h"
11
12 class AliComplexCluster : public TObject {
13 public:
14   Int_t     fTracks[3];//labels of overlapped tracks
15   Float_t   fX ;       //Y of cluster
16   Float_t   fY ;       //Z of cluster
17   Float_t   fQ ;       //Q of cluster (in ADC counts)
18   Float_t   fSigmaX2;  //Sigma Y square of cluster
19   Float_t   fSigmaY2;  //Sigma Z square of cluster
20   Float_t   fSigmaXY;  //      XY moment 
21   Float_t   fArea;     //area of cluster
22   Float_t   fMax;     //amplitude at maximum 
23 public:
24   AliComplexCluster() {
25     fTracks[0]=fTracks[1]=fTracks[2]=0; 
26     fX=fY=fQ=fSigmaX2=fSigmaY2=fSigmaXY=fArea=fMax=0.;
27   }
28   virtual ~AliComplexCluster() {;}
29   Bool_t    IsSortable() const;
30   Int_t Compare(const TObject *o) const;
31   ClassDef(AliComplexCluster,1)  // Cluster manager
32 };
33
34 class AliDigitCluster : public AliComplexCluster {
35 public:
36   Int_t fNx; //number of accepted x bins
37   Int_t fNy; //number of accepted y bins
38   Float_t fMaxX; //maximum x bin
39   Float_t fMaxY; //maximum y bin
40 public:  
41   ClassDef(AliDigitCluster,1)  // Tclusters
42 };
43
44
45
46 class AliTPCTrackerPoint  {  
47  private:
48   Short_t   fTX;        // x position of the cluster  in cm - 10 mum prec
49   Short_t   fTZ;        // current prolongation in Z  in cm - 10 mum prec.
50   Short_t   fTY;        // current prolongation in Y  in cm - 10 mum prec.
51   Char_t    fTAngleZ;    // angle 
52   Char_t    fTAngleY;    // angle 
53   UShort_t  fSigmaZ;     // shape  Z - normalised shape - normaliziation 1 - precision 2 percent
54   UShort_t  fSigmaY;     // shape  Y - normalised shape - normaliziation 1 - precision 2 percent
55   UShort_t  fErrZ;       // z error estimate - in  mm - 50 mum precision 
56   UShort_t  fErrY;       // y error estimate - in  mm - 50 mum precision 
57  public:
58   Char_t   fIsShared;     // indicate sharing of the point between several tracks
59
60   AliTPCTrackerPoint(){fTX=0; fTY=0; fTZ=0; fTAngleZ=0; fTAngleY=0; fIsShared = 0;}
61   inline Float_t  GetX() {return (fTX*0.01);}
62   inline Float_t  GetZ() {return (fTZ*0.01);}
63   inline Float_t  GetY() {return (fTY*0.01);}
64   inline Float_t  GetAngleZ() {return (Float_t(fTAngleZ)*0.02);}
65   inline Float_t  GetAngleY() {return (Float_t(fTAngleY)*0.02);}
66   //
67   void     SetX(Float_t x){ fTX = Short_t(TMath::Nint(x*100.));} 
68   void     SetY(Float_t y){ fTY = Short_t(TMath::Nint(y*100.));} 
69   void     SetZ(Float_t z){ fTZ = Short_t(TMath::Nint(z*100.));} 
70   void     SetAngleZ(Float_t anglez) {fTAngleZ = Char_t(TMath::Nint(anglez*50.));}
71   void     SetAngleY(Float_t angley) {fTAngleY = Char_t(TMath::Nint(angley*50.));}
72   inline Float_t  GetSigmaZ() {return (fSigmaZ*0.02);}
73   inline Float_t  GetSigmaY() {return (fSigmaY*0.02);}  
74   inline Float_t  GetErrZ()   {return (fErrZ*0.005);}
75   inline Float_t  GetErrY()   {return (fErrY*0.005);}
76   void     SetErrZ(Float_t errz) {fErrZ = UChar_t(TMath::Nint(errz*200.));}
77   void     SetErrY(Float_t erry) {fErrY = UChar_t(TMath::Nint(erry*200.));}
78
79   void     SetSigmaZ(Float_t sigmaz) {fSigmaZ = UChar_t(TMath::Nint(sigmaz*50.));}
80   void     SetSigmaY(Float_t sigmay) {fSigmaY = UChar_t(TMath::Nint(sigmay*50.));}
81   //
82  public:
83   ClassDef(AliTPCTrackerPoint,1)  
84 };
85
86 class AliTPCClusterPoint  {
87  private:
88   Short_t  fCZ;       // current cluster position Z in cm - 100 mum precision
89   Short_t  fCY;       // current cluster position Y in cm - 100 mum precision
90   UChar_t  fSigmaZ;   // shape  Z - normalised shape - normaliziation 1 - precision 2 percent
91   UChar_t  fSigmaY;   // shape  Y - normalised shape - normaliziation 1 - precision 2 percent
92   UShort_t fQ;        // total charge in cluster 
93   UShort_t fMax;      // charge at maximum  
94   Char_t   fCType;    // type of the cluster
95  public:
96   AliTPCClusterPoint(){fCZ=fCY=fSigmaZ=fSigmaY=fQ=fMax=fCType=0;}
97   inline Float_t  GetZ()    {return (fCZ*0.01);}
98   inline Float_t  GetY()    {return (fCY*0.01);}
99   inline Float_t  GetSigmaZ() {return (fSigmaZ*0.02);}
100   inline Float_t  GetSigmaY() {return (fSigmaY*0.02);}  
101   inline Int_t  GetType()   {return fCType;}
102   inline Int_t  GetMax()   {return fMax;}
103   inline Float_t  GetQ()   {return fQ;}
104
105   //
106   void     SetY(Float_t y){ fCY = Short_t(TMath::Nint(y*100.));} 
107   void     SetZ(Float_t z){ fCZ = Short_t(TMath::Nint(z*100.));} 
108   void     SetSigmaZ(Float_t sigmaz) {fSigmaZ = UChar_t(TMath::Nint(sigmaz*50.));}
109   void     SetSigmaY(Float_t sigmay) {fSigmaY = UChar_t(TMath::Nint(sigmay*50.));}
110   void     SetQ(Float_t q) {fQ = UShort_t(q);}
111   void     SetMax(Float_t max) {fMax = UShort_t(max);}
112   void     SetType(Char_t type) {fCType = type;}
113
114   //
115  public:
116   ClassDef(AliTPCClusterPoint,1)  
117 };
118
119
120 class AliTPCExactPoint : public TObject{
121  public:
122   AliTPCExactPoint(){fEZ=fEY=fEAngleZ=fEAngleY=fEAmp=fEPrim=fTrackID=0;}
123   Float_t fEZ;       // current "exact" position according simulation
124   Float_t fEY;       // current "exact" position according simulation
125   Float_t fEX;       // x poistion of the cluster
126   Float_t fEAngleZ;  // angle Z
127   Float_t fEAngleY;  // angle Y
128   Float_t fEAmp;     // total charge deposited in row
129   Float_t fEPrim;    // primary charge deposited in row
130   Int_t   fTrackID;  // id of the track
131   Int_t   fRow;      // row
132   Int_t   fSec;      //sector
133   ClassDef(AliTPCExactPoint,1)  
134 };
135
136
137 class AliTPCTrackPoint: public TObject{
138  public:
139   AliTPCTrackPoint(){}
140   // AliTPCClusterPoint & GetCPoint(){return fCPoint;}
141   AliTPCTrackerPoint & GetTPoint(){return fTPoint;}
142   AliTPCclusterMI & GetCPoint(){return fCPoint;}  
143  public:
144   //  AliTPCClusterPoint fCPoint; 
145   //Char_t fIsShared;
146   AliTPCTrackerPoint fTPoint;
147   AliTPCclusterMI    fCPoint;
148   ClassDef(AliTPCTrackPoint,1)  
149 };
150
151 class AliTPCTrackPoint2: public AliTPCTrackPoint{
152  public:
153   AliTPCTrackPoint2(){}
154   Float_t fGX;    //global poition of the point
155   Float_t fGY;    //global poition of the point
156   Float_t fGZ;    //global poition of the point
157   //
158   Float_t fDY;    //distortion of the clusters from the global helix (3 point interpolation)
159   Float_t fDZ;    //distortion of the clusters from the global helix (3 point interpolation)
160   //
161   Float_t fDYU;  //derivation in y up
162   Float_t fDYD;  //distortion of y down
163   //
164   Float_t fDZU;  //derivation in y up
165   Float_t fDZD;  //distortion of y down
166   //
167   Float_t fDDY;  //derivation in y,z up-down
168   Float_t fDDZ;  //derivation in y,z up-down
169   //
170   Int_t   fID;            //id of the corresponding track
171   Int_t   fLab;           //MC label of the track
172  public:
173   ClassDef(AliTPCTrackPoint2,1)  
174 };
175
176
177
178
179 class AliTPCTrackPointRef: public AliTPCTrackPoint{
180  public:
181   AliTPCExactPoint & GetExactPoint(){return fEPoint;}
182   AliTPCExactPoint & GetNearestPoint(){return fNPoint;}  
183  public:
184   AliTPCExactPoint fEPoint; //exact point belonging to track
185   AliTPCExactPoint fNPoint; //nearest point  
186   ClassDef(AliTPCTrackPointRef,1)  
187 };
188
189
190 #endif //ALICOMPLEXCLUSTER_H