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