]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDtrackingSector.cxx
compiling warnigs free
[u/mrichter/AliRoot.git] / TRD / AliTRDtrackingSector.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /*
17 $Log$
18 Revision 1.7.6.2  2002/07/24 10:09:31  alibrary
19 Updating VirtualMC
20
21 Revision 1.9  2002/06/12 09:54:36  cblume
22 Update of tracking code provided by Sergei
23
24 Revision 1.8  2002/03/28 14:59:07  cblume
25 Coding conventions
26
27 Revision 1.7  2001/11/19 08:44:08  cblume
28 Fix bugs reported by Rene
29
30 Revision 1.6  2001/05/28 17:07:58  hristov
31 Last minute changes; ExB correction in AliTRDclusterizerV1; taking into account of material in G10 TEC frames and material between TEC planes (C.Blume,S.Sedykh)
32
33 Revision 1.5  2000/12/08 16:07:02  cblume
34 Update of the tracking by Sergei
35
36 Revision 1.4  2000/10/16 01:16:53  cblume
37 Changed timebin 0 to be the one closest to the readout
38
39 Revision 1.3  2000/10/15 23:40:01  cblume
40 Remove AliTRDconst
41
42 Revision 1.2  2000/10/06 16:49:46  cblume
43 Made Getters const
44
45 Revision 1.1.2.2  2000/10/04 16:34:58  cblume
46 Replace include files by forward declarations
47
48 Revision 1.1.2.1  2000/09/22 14:47:52  cblume
49 Add the tracking code
50
51 */ 
52
53 /////////////////////////////////////////////////////////////////////////
54 //                                                                     //
55 //  Tracking sector                                                    //
56 //                                                                     //
57 /////////////////////////////////////////////////////////////////////////                       
58                                 
59 #include <TObject.h>
60
61 #include "AliRun.h"
62
63 #include "AliTRD.h" 
64 #include "AliTRDgeometry.h" 
65 #include "AliTRDcluster.h" 
66 #include "AliTRDtimeBin.h" 
67 #include "AliTRDtrackingSector.h" 
68 #include "AliTRDparameter.h"
69
70 ClassImp(AliTRDtrackingSector) 
71
72 //_______________________________________________________
73 AliTRDtrackingSector::~AliTRDtrackingSector()
74 {
75   //
76   // Destructor
77   //
78
79   delete fTimeBin;
80
81 }
82
83 //_______________________________________________________
84 AliTRDtimeBin &AliTRDtrackingSector::operator[](Int_t i)
85 {
86   //
87   // Index operator 
88   //
89
90   return *(fTimeBin+i);
91
92 }
93
94 //_______________________________________________________
95 void AliTRDtrackingSector::SetUp()
96
97   //
98   // Initialization
99   //
100
101   AliTRD *trd = (AliTRD*) gAlice->GetDetector("TRD");
102   fGeom = trd->GetGeometry();
103
104   fN = AliTRDgeometry::Nplan() * (Int_t(AliTRDgeometry::DrThick()
105                                        /fTimeBinSize) + 1);
106
107   fTimeBin = new AliTRDtimeBin[fN]; 
108
109   if (!fPar) {
110     fPar = new AliTRDparameter("TRDparameter","Standard TRD parameter");
111   }
112
113   fTimeBinSize = fPar->GetTimeBinSize();
114
115 }
116
117 //______________________________________________________
118 Double_t AliTRDtrackingSector::GetX(Int_t tb) const
119 {
120   //
121   // Get global x coordinate
122   //
123
124   if( (tb<0) || (tb>fN-1)) {
125     fprintf(stderr,"AliTRDtrackingSector::GetX: TimeBin index is out of range !\n");
126     return -99999.;
127   }
128   else { 
129     
130     Int_t tbPerPlane = fN/AliTRDgeometry::Nplan();
131     Int_t localTb = tbPerPlane - tb%tbPerPlane - 1;
132
133     Int_t plane = tb/tbPerPlane;
134     Float_t t0 = fPar->GetTime0(plane);
135     Double_t x = t0 - (localTb + 0.5) * fTimeBinSize;
136
137     return x;
138
139   }
140
141 }
142
143 //______________________________________________________
144 Int_t AliTRDtrackingSector::GetTimeBinNumber(Double_t x) const
145 {
146   //
147   // Returns the time bin number
148   //
149
150   Float_t rOut = fPar->GetTime0(AliTRDgeometry::Nplan()-1); 
151   Float_t rIn  = fPar->GetTime0(0) - AliTRDgeometry::DrThick();
152
153
154   if(x >= rOut) return fN-1;
155   if(x <= rIn)  return 0;
156
157   Int_t plane;
158   for (plane = AliTRDgeometry::Nplan()-1; plane >= 0; plane--) {
159     if(x > (fPar->GetTime0(plane) - AliTRDgeometry::DrThick())) break;
160   }  
161  
162   Int_t tbPerPlane = fN/AliTRDgeometry::Nplan();
163   Int_t localTb = Int_t((fPar->GetTime0(plane)-x)/fTimeBinSize);
164
165   if((localTb < 0) || (localTb >= tbPerPlane)) {
166     printf("AliTRDtrackingSector::GetTimeBinNumber: \n");
167     printf("local time bin %d is out of bounds [0..%d]: x = %f \n",
168            localTb,tbPerPlane-1,x);
169     return -1;
170   }
171       
172   Int_t timeBin = (plane + 1) * tbPerPlane - 1 - localTb;
173
174   return timeBin;
175 }
176
177 //______________________________________________________
178 Int_t AliTRDtrackingSector::GetTimeBin(Int_t det, Int_t localTb) const 
179 {
180   //
181   // Time bin
182   //
183
184   Int_t plane = fGeom->GetPlane(det);
185
186   Int_t tbPerPlane = fN/AliTRDgeometry::Nplan();
187
188   Int_t timeBin = (plane + 1) * tbPerPlane - 1 - localTb;
189
190   return timeBin;
191
192 }
193
194
195 //______________________________________________________
196
197 Bool_t AliTRDtrackingSector::TECframe(Int_t tb, Double_t y, Double_t z) const
198 {
199   //  
200   // Returns <true> if point defined by <x(tb),y,z> is within 
201   // the TEC G10 frame, otherwise returns <false>  
202   //  
203
204   if((tb > (fN-1)) || (tb < 0)) return kFALSE; 
205
206   Int_t tbPerPlane = fN/AliTRDgeometry::Nplan();
207   Int_t plane = tb/tbPerPlane;
208   
209   Double_t x = GetX(tb);
210   y = TMath::Abs(y);
211
212   if((y > fGeom->GetChamberWidth(plane)/2.) &&
213      (y < x*TMath::Tan(0.5*AliTRDgeometry::GetAlpha()))) return kTRUE; 
214
215   Double_t zmin, zmax;
216   Float_t  fRowPadSize, fRow0;
217   Int_t    nPadRows;
218
219   for(Int_t iCha = 1; iCha < AliTRDgeometry::Ncham(); iCha++) {
220
221     fRow0 = fPar->GetRow0(plane,iCha-1,0);
222     fRowPadSize = fPar->GetRowPadSize(plane,iCha-1,0);
223     nPadRows = fPar->GetRowMax(plane,iCha-1,0);
224     zmin = fRow0 - fRowPadSize/2 + fRowPadSize * nPadRows;
225
226     fRow0 = fPar->GetRow0(plane,iCha,0);
227     fRowPadSize = fPar->GetRowPadSize(plane,iCha,0);
228     zmax = fRow0 - fRowPadSize/2;
229
230     if((z > zmin) && (z < zmax)) return kTRUE;     
231   }
232
233   return kFALSE;
234
235 }