Line data Source code
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 : ////////////////////////////////////////////////////////////////////////
9 : // Version: 0
10 : // Written by Rene Brun, Federico Carminati, and Roberto Barbera
11 : //
12 : // Version: 1
13 : // Modified and documented by Bjorn S. Nilsen
14 : // July 11 1999
15 : //
16 : // AliITShit is the hit class for the ITS. Hits are the information
17 : // that comes from a Monte Carlo at each step as a particle mass through
18 : // sensitive detector elements as particles are transported through a
19 : // detector.
20 : //
21 : // Data members:
22 : //
23 : // Int_t fTrack
24 : // See AliHit for a full description. The track number of the track
25 : // that made this hit.
26 : //
27 : // Float_t fX
28 : // See AliHit for a full description. The global x position of the
29 : // hit (in the standard units of the Monte Carlo).
30 : //
31 : // Float_t fY
32 : // See AliHit for a full description. The global y position of the
33 : // hit (in the standard units of the Monte Carlo).
34 : //
35 : // Float_t fZ
36 : // See AliHit for a full description. The global z position of the
37 : // hit (in the standard units of the Monte Carlo).
38 : //
39 : // Int_t fStatus
40 : // The track status flag. This flag indicates the track status
41 : // at the time of creating this hit. It is made up of the following 8
42 : // status bits from highest order to lowest order bits
43 : // 0 : IsTrackAlive(): IsTrackStop():IsTrackDisappeared():
44 : // IsTrackOut():IsTrackExiting():IsTrackEntering():IsTrackInside() .
45 : // See AliMC for a description of these functions. If the function is
46 : // true then the bit is set to one, otherwise it is zero.
47 : //
48 : // Int_t fLayer
49 : // The layer number of the detector that contains this hit. See
50 : // AliITSgeom and AliITSv? for a description of the geometry.
51 : //
52 : // Int_t fLadder
53 : // The ladder number of the detector that contains this hit. See
54 : // AliITSgeom and AliITSv? for a description of the geometry.
55 : //
56 : // Int_t fDet
57 : // The detector number of the detector that contains this hit. See
58 : // AliITSgeom and AliITSv? for a description of the geometry.
59 : //
60 : // Float_t fPx
61 : // The x momentum, in global coordinates, of the particle that
62 : // "created" the hit at the time and position of the hit. The units
63 : // are those determined by the Monte Carlo.
64 : //
65 : // Float_t fPy
66 : // The y momentum, in global coordinates, of the particle that
67 : // "created" the hit at the time and position of the hit. The units
68 : // are those determined by the Monte Carlo.
69 : //
70 : // Float_t fPz
71 : // The z momentum, in global coordinates, of the particle that
72 : // "created" the hit at the time and position of the hit. The units
73 : // are those determined by the Monte Carlo.
74 : //
75 : // Float_t fDestep
76 : // The energy lost by the particle during the step ending in this
77 : // hit. The units are those determined by the Monte Carlo.
78 : //
79 : // Float_t fTof
80 : // The time of flight associated with the particle ending in this
81 : // hit. The time is typically measured from the point of creation of the
82 : // original particle (if this particle is a daughter). The units
83 : // are those determined by the Monte Carlo.
84 : //
85 : //
86 : ////////////////////////////////////////////////////////////////////////
87 : #include <TLorentzVector.h>
88 :
89 : #include "AliHit.h"
90 :
91 : class TParticle;
92 :
93 : using std::istream;
94 : using std::ostream;
95 : class AliITShit : public AliHit {
96 :
97 : public:
98 : AliITShit();// Default consrtructor
99 : // Old Standard Constructor
100 : AliITShit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits);
101 : // New Standard Constructor
102 : AliITShit(Int_t shunt,Int_t track,Int_t *vol,Float_t edep,Float_t tof,
103 : TLorentzVector &x,TLorentzVector &x0,TLorentzVector &p);
104 : // Copy Constructor
105 : AliITShit(const AliITShit &h);
106 : // Equals operator
107 : AliITShit& operator=(const AliITShit &h);
108 : // Default destructor
109 27724 : virtual ~AliITShit() {};
110 : // Get Hit information functions.
111 : // virtual int GetTrack() const {return fTrack;} // define in AliHit
112 : // virtual void SetTrack(int track) const {fTrack=track;) // AliHit
113 2714 : virtual void SetModule(Int_t mod){fModule=mod;};
114 : virtual void SetShunt(Int_t shunt);
115 2714 : virtual void SetPosition(TLorentzVector &x){fX=x.X();fY=x.Y();fZ=x.Z();}
116 2714 : virtual void SetStartPosition(TLorentzVector &x){fx0=x.X();fy0=x.Y();
117 1357 : fz0=x.Z();}
118 2714 : virtual void SetTime(Float_t t){fTof = t;}
119 2714 : virtual void SetStartTime(Float_t t){ft0 = t;}
120 2714 : virtual void SetStatus(Int_t stat){fStatus = stat;}
121 2714 : virtual void SetStartStatus(Int_t stat){fStatus0 = stat;}
122 2714 : virtual void SetEdep(Float_t de){fDestep = de;}
123 2714 : virtual void SetMomentum(TLorentzVector &p){fPx=p.Px();fPy=p.Py();
124 1357 : fPz=p.Pz();}
125 : virtual Int_t GetTrackStatus() const {//returns the status code
126 0 : return fStatus;}
127 : virtual Int_t GetTrackStatus0() const {//returns the status code
128 0 : return fStatus0;}
129 0 : virtual Int_t GetLayer() const{Int_t a,b,c;// returns the layer number
130 0 : GetDetectorID(a,b,c); return a;}
131 0 : virtual Int_t GetLadder() const{Int_t a,b,c;// returns the ladder number
132 0 : GetDetectorID(a,b,c); return b;}
133 0 : virtual Int_t GetDetector() const{Int_t a,b,c;//returns the detector number
134 0 : GetDetectorID(a,b,c); return c;}
135 : // returns the detector ID
136 : virtual void GetDetectorID(Int_t &layer,Int_t &ladder,Int_t &det)const;
137 0 : virtual Int_t GetModule(){return fModule;};
138 4470 : virtual Float_t GetIonization() const {return fDestep;}//returns the Destep
139 : //
140 : virtual void GetPositionG(Float_t &x,Float_t &y,Float_t &z)const {
141 : // returns the position in the Global frame
142 0 : x=fX;y=fY;z=fZ;return;};
143 : virtual void GetPositionG(Double_t &x,Double_t &y,Double_t &z)const {
144 : // returns the position in the Global frame
145 0 : x=fX;y=fY;z=fZ;return;};
146 : virtual Float_t GetTOF() const {// returns the time of flight
147 2808 : return fTof;}
148 : // Returns particle 3 position at this hit in global coordinates.
149 : virtual void GetPositionG(Float_t &x,Float_t &y,Float_t &z,Float_t &tof)
150 : const {// returns the position in the Global frame and the time of
151 : // flight
152 0 : x=fX;y=fY;z=fZ,tof=fTof;return;};
153 : virtual void GetPositionG(Double_t &x,Double_t &y,Double_t &z,Double_t &t)
154 : const {// Returns particle 3 position and the time of flight at this
155 : // hit in global coordinates.
156 0 : x=fX;y=fY;z=fZ,t=fTof;return;};
157 : virtual Float_t GetXG()const {// Returns particle X position at this hit
158 : // in global coordinates.
159 1892 : return fX;}
160 : virtual Float_t GetYG()const {// Returns particle X position at this hit
161 : // in global coordinates.
162 1892 : return fY;}
163 : virtual Float_t GetZG()const {// Returns particle Z position at this hit
164 : // in global coordinates.
165 946 : return fZ;}
166 : // Returns particle 3 position at this hit in global coordinates.
167 : virtual void GetPositionG0(Float_t &x,Float_t &y,Float_t &z,Float_t &tof)
168 : const {// returns the initial position in the Global frame and the
169 : // time of flight
170 0 : x=fx0;y=fy0;z=fz0,tof=fTof;return;};
171 : // Returns particle 3 position at this hit in global coordinates.
172 : virtual void GetPositionG0(Double_t &x,Double_t &y,Double_t &z,
173 : Double_t &tof)const {
174 : // returns the initial position in the Global frame and the
175 : // time of flight
176 0 : x=fx0;y=fy0;z=fz0,tof=fTof;return;};
177 : virtual void GetPositionL(Float_t &x,Float_t &y,Float_t &z){
178 : // Returns particle 3 position at this hit in local coordinates.
179 0 : Float_t tf;GetPositionL(x,y,z,tf);}
180 : virtual void GetPositionL(Float_t &x,Float_t &y,Float_t &z,Float_t &tof);
181 : virtual void GetPositionL(Double_t &x,Double_t &y,Double_t &z){
182 : // Returns particle 3 position at this hit in local coordinates.
183 1762 : Float_t xf,yf,zf,tf;GetPositionL(xf,yf,zf,tf);x=xf,y=yf;z=zf;}
184 : virtual void GetPositionL(Double_t &x,Double_t &y,Double_t &z,Double_t &t){
185 : // Returns particle 3 position and the time of flight at this hit
186 : // in local coordinates.
187 816 : Float_t xf,yf,zf,tf;GetPositionL(xf,yf,zf,tf);x=xf,y=yf;z=zf;t=tf;}
188 : // Returns particle 3 initial position and the time of flight at this hit
189 : // in local coordinates.
190 : virtual void GetPositionL0(Double_t &x,Double_t &y,Double_t &z,
191 : Double_t &t);
192 : virtual Float_t GetXL(){
193 : // Returns particle X position at this hit in local coordinates.
194 946 : Float_t xf,yf,zf,tf;GetPositionL(xf,yf,zf,tf);return xf;}
195 : virtual Float_t GetYL(){
196 : // Returns particle Y position at this hit in local coordinates.
197 946 : Float_t xf,yf,zf,tf;GetPositionL(xf,yf,zf,tf);return yf;}
198 : virtual Float_t GetZL(){
199 : // Returns particle Z position at this hit in local coordinates.
200 946 : Float_t xf,yf,zf,tf;GetPositionL(xf,yf,zf,tf);return zf;}
201 :
202 : // Get Monti Carlo information about hit.
203 : virtual void GetMomentumG(Float_t &px,Float_t &py,Float_t &pz)const {
204 : // returns the particle momentum in the Global frame
205 0 : px=fPx;py=fPy;pz=fPz;return;};
206 : virtual void GetMomentumG(Double_t &px,Double_t &py,Double_t &pz)const {
207 : // returns the particle momentum in the Global frame
208 0 : px=fPx;py=fPy;pz=fPz;return;};
209 : virtual Float_t GetPXG()const {// Returns particle X momentum at this hit
210 : // in global coordinates.
211 0 : return fPx;}
212 : virtual Float_t GetPYG()const {// Returns particle Y momentum at
213 : // this hit in global coordinates.
214 0 : return fPy;}
215 : virtual Float_t GetPZG()const {// Returns particle Z momentum at
216 : // this hit in global coordinates.
217 0 : return fPz;}
218 : // Returns particle Z momentum at this hit in local coordinates.
219 : virtual TParticle * GetParticle() const; // Returns ptr to this particle.
220 : Bool_t StatusInside() const {// checks if the particle is "inside"
221 0 : if((fStatus&0x0001)==0) return kFALSE;else return kTRUE;}
222 : Bool_t StatusEntering() const {// checks if the particle is "entering"
223 3524 : if((fStatus&0x0002)==0) return kFALSE;else return kTRUE;}
224 : Bool_t StatusExiting() const {// checks if the particle is "exiting"
225 0 : if((fStatus&0x0004)==0) return kFALSE;else return kTRUE;}
226 : Bool_t StatusOut() const {// checks if the particle is "out"
227 0 : if((fStatus&0x0008)==0) return kFALSE;else return kTRUE;}
228 : Bool_t StatusDisappeared() const {// checks if the part. is "disappeared"
229 0 : if((fStatus&0x00010)==0) return kFALSE;else return kTRUE;}
230 : Bool_t StatusStop() const {// checks if the particle is "stopped"
231 0 : if((fStatus&0x00020)==0) return kFALSE;else return kTRUE;}
232 : Bool_t StatusAlive() const {// checks if the particle is "alive"
233 0 : if((fStatus&0x00030)==0) return kFALSE;else return kTRUE;}
234 : // Prints out the content of this class in ASCII format.
235 : void Print(ostream *os) const;
236 : // Reads in the content of this class in the format of Print
237 : void Read(istream *is);
238 0 : virtual void Print(Option_t *option="") const {TObject::Print(option);}
239 0 : virtual Int_t Read(const char *name) {return TObject::Read(name);}
240 :
241 :
242 : protected:
243 : Int_t fStatus; // Track Status
244 : Int_t fModule; // Module number
245 : Float_t fPx; // PX of particle at the point of the hit
246 : Float_t fPy; // PY of particle at the point of the hit
247 : Float_t fPz; // PZ of particle at the point of the hit
248 : Float_t fDestep; // Energy deposited in the current step
249 : Float_t fTof; // Time of flight at the point of the hit
250 : Int_t fStatus0;// Track Status of Starting point
251 : Float_t fx0; // Starting point of this step
252 : Float_t fy0; // Starting point of this step
253 : Float_t fz0; // Starting point of this step
254 : Float_t ft0; // Starting point of this step
255 :
256 120 : ClassDef(AliITShit,3) //Hits object for set:ITS
257 :
258 : };
259 : // Input and output function for standard C++ input/output.
260 : ostream& operator<<(ostream &os,AliITShit &source);
261 : istream& operator>>(istream &os,AliITShit &source);
262 :
263 : #endif
|