1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 Revision 1.7.6.2 2002/07/24 10:09:31 alibrary
21 Revision 1.9 2002/06/12 09:54:36 cblume
22 Update of tracking code provided by Sergei
24 Revision 1.8 2002/03/28 14:59:07 cblume
27 Revision 1.7 2001/11/19 08:44:08 cblume
28 Fix bugs reported by Rene
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)
33 Revision 1.5 2000/12/08 16:07:02 cblume
34 Update of the tracking by Sergei
36 Revision 1.4 2000/10/16 01:16:53 cblume
37 Changed timebin 0 to be the one closest to the readout
39 Revision 1.3 2000/10/15 23:40:01 cblume
42 Revision 1.2 2000/10/06 16:49:46 cblume
45 Revision 1.1.2.2 2000/10/04 16:34:58 cblume
46 Replace include files by forward declarations
48 Revision 1.1.2.1 2000/09/22 14:47:52 cblume
53 /////////////////////////////////////////////////////////////////////////
57 /////////////////////////////////////////////////////////////////////////
64 #include "AliTRDgeometry.h"
65 #include "AliTRDcluster.h"
66 #include "AliTRDtimeBin.h"
67 #include "AliTRDtrackingSector.h"
68 #include "AliTRDparameter.h"
70 ClassImp(AliTRDtrackingSector)
72 //_______________________________________________________
73 AliTRDtrackingSector::~AliTRDtrackingSector()
83 //_______________________________________________________
84 AliTRDtimeBin &AliTRDtrackingSector::operator[](Int_t i)
94 //_______________________________________________________
95 void AliTRDtrackingSector::SetUp()
101 AliTRD *trd = (AliTRD*) gAlice->GetDetector("TRD");
102 fGeom = trd->GetGeometry();
104 fN = AliTRDgeometry::Nplan() * (Int_t(AliTRDgeometry::DrThick()
107 fTimeBin = new AliTRDtimeBin[fN];
110 fPar = new AliTRDparameter("TRDparameter","Standard TRD parameter");
113 fTimeBinSize = fPar->GetTimeBinSize();
117 //______________________________________________________
118 Double_t AliTRDtrackingSector::GetX(Int_t tb) const
121 // Get global x coordinate
124 if( (tb<0) || (tb>fN-1)) {
125 fprintf(stderr,"AliTRDtrackingSector::GetX: TimeBin index is out of range !\n");
130 Int_t tbPerPlane = fN/AliTRDgeometry::Nplan();
131 Int_t localTb = tbPerPlane - tb%tbPerPlane - 1;
133 Int_t plane = tb/tbPerPlane;
134 Float_t t0 = fPar->GetTime0(plane);
135 Double_t x = t0 - (localTb + 0.5) * fTimeBinSize;
143 //______________________________________________________
144 Int_t AliTRDtrackingSector::GetTimeBinNumber(Double_t x) const
147 // Returns the time bin number
150 Float_t rOut = fPar->GetTime0(AliTRDgeometry::Nplan()-1);
151 Float_t rIn = fPar->GetTime0(0) - AliTRDgeometry::DrThick();
154 if(x >= rOut) return fN-1;
155 if(x <= rIn) return 0;
158 for (plane = AliTRDgeometry::Nplan()-1; plane >= 0; plane--) {
159 if(x > (fPar->GetTime0(plane) - AliTRDgeometry::DrThick())) break;
162 Int_t tbPerPlane = fN/AliTRDgeometry::Nplan();
163 Int_t localTb = Int_t((fPar->GetTime0(plane)-x)/fTimeBinSize);
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);
172 Int_t timeBin = (plane + 1) * tbPerPlane - 1 - localTb;
177 //______________________________________________________
178 Int_t AliTRDtrackingSector::GetTimeBin(Int_t det, Int_t localTb) const
184 Int_t plane = fGeom->GetPlane(det);
186 Int_t tbPerPlane = fN/AliTRDgeometry::Nplan();
188 Int_t timeBin = (plane + 1) * tbPerPlane - 1 - localTb;
195 //______________________________________________________
197 Bool_t AliTRDtrackingSector::TECframe(Int_t tb, Double_t y, Double_t z) const
200 // Returns <true> if point defined by <x(tb),y,z> is within
201 // the TEC G10 frame, otherwise returns <false>
204 if((tb > (fN-1)) || (tb < 0)) return kFALSE;
206 Int_t tbPerPlane = fN/AliTRDgeometry::Nplan();
207 Int_t plane = tb/tbPerPlane;
209 Double_t x = GetX(tb);
212 if((y > fGeom->GetChamberWidth(plane)/2.) &&
213 (y < x*TMath::Tan(0.5*AliTRDgeometry::GetAlpha()))) return kTRUE;
216 Float_t fRowPadSize, fRow0;
219 for(Int_t iCha = 1; iCha < AliTRDgeometry::Ncham(); iCha++) {
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;
226 fRow0 = fPar->GetRow0(plane,iCha,0);
227 fRowPadSize = fPar->GetRowPadSize(plane,iCha,0);
228 zmax = fRow0 - fRowPadSize/2;
230 if((z > zmin) && (z < zmax)) return kTRUE;