Merge form ITS-working to HEAD. Added many new functions. Also added hits
[u/mrichter/AliRoot.git] / ITS / AliITShit.h
1 #ifndef ALIITSHIT_H
2 #define ALIITSHIT_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 "AliDetector.h"
9 #include "TParticle.h"
10 #include "AliHit.h" 
11 #include "AliDigit.h"
12 #include "AliITSgeom.h"
13
14
15 class AliITShit : public AliHit {
16 ////////////////////////////////////////////////////////////////////////
17 // Version: 0
18 // Written by Rene Brun, Federico Carminati, and Roberto Barbera
19 //
20 // Version: 1
21 // Modified and documented by Bjorn S. Nilsen
22 // July 11 1999
23 //
24 // AliITShit is the hit class for the ITS. Hits are the information
25 // that comes from a Monte Carlo at each step as a particle mass through
26 // sensitive detector elements as particles are transported through a
27 // detector.
28 //
29 // Data members:
30 //
31 // Int_t fTrack
32 //     See AliHit for a full description. The track number of the track
33 // that made this hit.
34 //
35 // Float_t fX
36 //     See AliHit for a full description. The global x position of the
37 // hit (in the standard units of the Monte Carlo).
38 //
39 // Float_t fY
40 //     See AliHit for a full description. The global y position of the
41 // hit (in the standard units of the Monte Carlo).
42 //
43 // Float_t fZ
44 //     See AliHit for a full description. The global z position of the
45 // hit (in the standard units of the Monte Carlo).
46 //
47 // Int_t fStatus
48 //     The track status flag. This flag indicates the track status
49 // at the time of creating this hit. It is made up of the following 8
50 // status bits from highest order to lowest order bits
51 // 0           :  IsTrackAlive():    IsTrackStop():IsTrackDisappeared():
52 // IsTrackOut():IsTrackExiting():IsTrackEntering():IsTrackInside()     .
53 // See AliMC for a description of these functions. If the function is
54 // true then the bit is set to one, otherwise it is zero.
55 //
56 // Int_t fLayer
57 //     The layer number of the detector that contains this hit. See
58 // AliITSgeom and AliITSv? for a description of the geometry.
59 //
60 // Int_t fLadder
61 //     The ladder number of the detector that contains this hit. See
62 // AliITSgeom and AliITSv? for a description of the geometry.
63 //
64 // Int_t fDet
65 //     The detector number of the detector that contains this hit. See
66 // AliITSgeom and AliITSv? for a description of the geometry.
67 //
68 // Float_t fPx
69 //     The x momentum, in global coordinates, of the particle that
70 // "created" the hit at the time and position of the hit. The units
71 // are those determined by the Monte Carlo.
72 //
73 // Float_t fPy
74 //     The y momentum, in global coordinates, of the particle that
75 // "created" the hit at the time and position of the hit. The units
76 // are those determined by the Monte Carlo.
77 //
78 // Float_t fPz
79 //     The z momentum, in global coordinates, of the particle that
80 // "created" the hit at the time and position of the hit. The units
81 // are those determined by the Monte Carlo.
82 //
83 // Float_t fDestep
84 //     The energy lost by the particle during the step ending in this
85 // hit. The units are those determined by the Monte Carlo.
86 //
87 // Float_t fTof
88 //     The time of flight associated with the particle ending in this
89 // hit. The time is typically measured from the point of creation of the
90 // original particle (if this particle is a daughter).  The units
91 // are those determined by the Monte Carlo.
92 //
93 //
94 ////////////////////////////////////////////////////////////////////////
95     // public;       // defined in AliHit
96     // Int_t fTrack  // defined in AliHit
97     // Float_t fX;   // defined in AliHit
98     // Float_t fY;   // defined in AliHit
99     // Float_t fZ;   // defined in AliHit
100
101  public:
102 //protected:
103     Int_t     fStatus; // Track Status
104     Int_t     fLayer;  // Layer number
105     Int_t     fLadder; // Ladder number
106     Int_t     fDet;    // Detector number  
107     Float_t   fPx;     // PX of particle at the point of the hit
108     Float_t   fPy;     // PY of particle at the point of the hit
109     Float_t   fPz;     // PZ of particle at the point of the hit
110     Float_t   fDestep; // Energy deposited in the current step
111     Float_t   fTof;    // Time of flight at the point of the hit
112
113  public:
114     AliITShit() {}
115     AliITShit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits);
116     virtual ~AliITShit() {}
117     // Get Hit information functions.
118     // virtual int GetTrack() const {return fTrack;} // define in AliHit
119     // virtual void SetTrack(int track) const {fTrack=track;) // AliHit
120     virtual Int_t GetTrackStatus() const {return fStatus;}
121     virtual Int_t GetLayer() const {return fLayer;}
122     virtual Int_t GetLadder() const {return fLadder;}
123     virtual Int_t GetDetector() const {return fDet;}
124     virtual void  GetDetectorID(Int_t &layer,Int_t &ladder,
125                                        Int_t &detector)
126                      const {layer=fLayer;ladder=fLadder;detector=fDet;return;};
127     virtual Int_t GetModule();
128     virtual Float_t GetIonization() const {return fDestep;}
129     //
130     virtual void GetPositionG(Float_t &x,Float_t &y,Float_t &z)
131                                     const {x=fX;y=fY;z=fZ;return;};
132     virtual void GetPositionG(Double_t &x,Double_t &y,Double_t &z)
133                                     const {x=fX;y=fY;z=fZ;return;};
134     virtual Float_t GetTOF() const {return fTof;}
135     // Returns particle 3 position at this hit in global coordinates.
136     virtual void GetPositionG(Float_t &x,Float_t &y,Float_t &z,
137                                     Float_t &tof)
138                                     const {x=fX;y=fY;z=fZ,tof=fTof;return;};
139     virtual void GetPositionG(Double_t &x,Double_t &y,Double_t &z,
140                                     Double_t &tof)
141                                     const {x=fX;y=fY;z=fZ,tof=fTof;return;};
142     // Returns particle 3 position and the time of flight at this hit
143     // in global coordinates.
144     virtual Float_t GetXG()const {return fX;}
145     // Returns particle X position at this hit in global coordinates.
146     virtual Float_t GetYG()const {return fY;}
147     // Returns particle Y position at this hit in global coordinates.
148     virtual Float_t GetZG()const {return fZ;}
149     // Returns particle Z position at this hit in global coordinates.
150     virtual void GetPositionL(Float_t &x,Float_t &y,Float_t &z);
151     // Returns particle 3 position at this hit in local coordinates.
152     virtual void GetPositionL(Float_t &x,Float_t &y,Float_t &z,
153                                      Float_t &tof);
154     virtual void GetPositionL(Double_t &x,Double_t &y,Double_t &z){
155         Float_t xf,yf,zf;GetPositionL(xf,yf,zf);x=xf,y=yf;z=zf;}
156     // Returns particle 3 position at this hit in local coordinates.
157     virtual void GetPositionL(Double_t &x,Double_t &y,Double_t &z,
158                                      Double_t &tof){
159         Float_t xf,yf,zf,tf;GetPositionL(xf,yf,zf,tf);x=xf,y=yf;z=zf;tof=tf;}
160     // Returns particle 3 position and the time of flight at this hit
161     // in local coordinates.
162     virtual Float_t GetXL();
163     // Returns particle X position at this hit in local coordinates.
164     virtual Float_t GetYL();
165     // Returns particle Y position at this hit in local coordinates.
166     virtual Float_t GetZL();
167     // Returns particle Z position at this hit in local coordinates.
168     // Get Monti Carlo information about hit.
169     virtual void GetMomentumG(Float_t &px,Float_t &py,Float_t &pz)
170                                     const {px=fPx;py=fPy;pz=fPz;return;};
171     virtual void GetMomentumG(Double_t &px,Double_t &py,Double_t &pz)
172                                     const {px=fPx;py=fPy;pz=fPz;return;};
173     // Returns particle 3 momentum at this hit in global coordinates.
174     virtual Float_t GetPXG()const {return fPx;}
175     // Returns particle X momentum at this hit in global coordinates.
176     virtual Float_t GetPYG()const {return fPy;}
177     // Returns particle Y momentum at this hit in global coordinates.
178     virtual Float_t GetPZG()const {return fPz;}
179     // Returns particle Z momentum at this hit in global coordinates.
180     virtual void GetMomentumL(Float_t &px,Float_t &py,Float_t &pz);
181     virtual void GetMomentumL(Double_t &px,Double_t &py,Double_t &pz){
182         Float_t x,y,z;GetMomentumL(x,y,z);px=x,py=y,pz=z;}
183     // Returns particle 3 momentum at this hit in local coordinates.
184     virtual Float_t GetPXL();
185     // Returns particle X momentum at this hit in local coordinates.
186     virtual Float_t GetPYL();
187     // Returns particle Y momentum at this hit in local coordinates.
188     virtual Float_t GetPZL();
189     // Returns particle Z momentum at this hit in local coordinates.
190     virtual TParticle * GetParticle(); // Returns pointer to this particle.
191     Bool_t StatusInside() {if((fStatus&0x0001)==0) return kFALSE;
192                                               else return kTRUE;}
193     Bool_t StatusEntering() {if((fStatus&0x0002)==0) return kFALSE;
194                                                 else return kTRUE;}
195     Bool_t StatusExiting() {if((fStatus&0x0004)==0) return kFALSE;
196                                                else return kTRUE;}
197     Bool_t StatusOut() {if((fStatus&0x0008)==0) return kFALSE;
198                                            else return kTRUE;}
199     Bool_t StatusDisappeared() {if((fStatus&0x00010)==0) return kFALSE;
200                                                     else return kTRUE;}
201     Bool_t StatusStop() {if((fStatus&0x00020)==0) return kFALSE;
202                                              else return kTRUE;}
203     Bool_t StatusAlive() {if((fStatus&0x00030)==0) return kFALSE;
204                                               else return kTRUE;}
205
206     ClassDef(AliITShit,1)  //Hits object for set:ITS
207 };
208
209 #endif