(Marian)
[u/mrichter/AliRoot.git] / TPC / AliTPCTrackHitsV2.h
1 #ifndef ALITPCTRACKHITSV2_H
2 #define ALITPCTRACKHITSV2_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 //  Manager class for TPC   hits                   //
9 ////////////////////////////////////////////////
10 //
11
12 #include "TObject.h"
13
14 class TClonesArray;
15 class AliTPChit;
16 class AliTPCTempHitInfoV2;
17 class AliTPCCurrentHitV2;
18 class AliHit;
19
20 class AliTrackHitsParamV2 : public TObject {
21   friend class   AliTPC;
22   friend class   AliTRD;
23   friend class   AliTPCTrackHitsV2;
24   friend class   AliTPCTempHitInfoV2;
25   friend class   AliTRDtrackHits;
26
27 public:
28   AliTrackHitsParamV2();
29   AliTrackHitsParamV2(const AliTrackHitsParamV2 &hit):  TObject(hit)
30     {hit.Copy(*this);}
31   AliTrackHitsParamV2& operator = (const AliTrackHitsParamV2 &hit)
32      {hit.Copy(*this); return (*this);}
33   ~AliTrackHitsParamV2();
34
35   Float_t Eta() const;
36
37  private:
38   Int_t fTrackID; // ID of the track
39   Short_t fVolumeID;// volume ID
40   Float_t fR;  //radius
41   Float_t fZ;  //z position
42   Float_t fFi; //radial angle
43   Float_t fAn; //angle with  the radial vector
44   Float_t fAd; //derivation of angle
45   Float_t fTheta; //theta angle
46   Float_t fThetaD; //theta angle derivation
47   Int_t   fNHits; //nuber of thits
48   Short_t * fHitDistance; //[fNHits] array of hits distances
49   Short_t * fCharge; //[fNHits] array of charges
50   Short_t * fTime; //[fNHits] array of hits time
51   static Int_t fgCounter1; //First internal counter
52   static Int_t fgCounter2; // Second internal counter
53
54   void Copy(TObject &) const
55   {Error("Copy","Not Implemented");}
56
57   ClassDef(AliTrackHitsParamV2,2)  
58 };
59
60
61 class AliTPCTrackHitsV2 : public TObject {
62   friend class AliTPCTempHitInfoV2;
63
64 public:
65   AliTPCTrackHitsV2(); 
66   ~AliTPCTrackHitsV2();
67   AliTPCTrackHitsV2(const AliTPCTrackHitsV2 &hit):  TObject(hit)
68     {hit.Copy(*this);}
69   AliTPCTrackHitsV2& operator = (const AliTPCTrackHitsV2 &hit)
70      {hit.Copy(*this); return (*this);}
71   void Clear(Option_t * /*option*/ ="");
72   void AddHitKartez(Int_t volumeID, Int_t trackID, Double_t x, 
73                     Double_t y, Double_t z,Int_t q,Float_t time);
74   void AddHit(Int_t volumeID, Int_t trackID, Double_t r, 
75               Double_t z, Double_t fi,Int_t q,Float_t time);
76  
77   Bool_t First(); //set current hit to first hit 
78   Bool_t Next();  //set current hit to next
79   AliHit * GetHit() const;
80   AliTrackHitsParamV2 * GetParam();
81
82   TClonesArray * GetArray(){return fArray;}
83   Int_t  GetEntriesFast() const { return fSize;}
84   void SetHitPrecision(Double_t prec) {fPrecision=prec;}
85   void SetStepPrecision(Double_t prec) {fStep=prec;}
86   void SetMaxDistance(UInt_t distance) {fMaxDistance = distance;}
87   Bool_t  FlushHitStack(Bool_t force=kTRUE);    //
88   Int_t *  GetVolumes(){ return fVolumes;}
89   Int_t GetNVolumes() const {return fNVolumes;}
90
91 public:
92   void AddVolume(Int_t volume); //add volumes to tthe list of volumes
93   void FlushHitStack2(Int_t index1, Int_t index2);   //
94
95 protected:
96   TClonesArray * fArray;  //array of compressed hits
97   Int_t fSize;            //total number of hits in track
98   Double_t fPrecision;  // required precision
99   Double_t fStep;       //unit step size
100   UInt_t fMaxDistance;   //maximal distance between two connected hits 
101   Int_t fNVolumes;      //number of volumes in track  
102   Int_t *  fVolumes;    //[fNVolumes] list of volumes
103   AliTPCTempHitInfoV2 * fTempInfo; //!information about track
104   AliTPCCurrentHitV2  * fCurrentHit; //!information about current hit 
105   AliHit * fHit;                     //! current hit information
106   static const Double_t fgkPrecision;  //precision 
107   static const Double_t fgkPrecision2;  //precision
108   static const Double_t fgkTimePrecision;  //hit time precision 
109   static Int_t fgCounter1; // First internal counter
110   static Int_t fgCounter2; // Second internal counter
111
112 private:
113   void Copy(TObject &) const
114   {Error("Copy","Not Implemented");}
115
116
117   ClassDef(AliTPCTrackHitsV2,2) 
118 };
119
120 struct AliTPCCurrentHitV2 {
121   Int_t   fParamIndex;//  - current param pointer
122   Int_t   fStackIndex; // - current hit stack index
123   Double_t fR;   //current Radius
124   Bool_t  fStatus; //current status    
125 };   
126
127
128
129 #endif //ALITPCTRACKHITSV2_H