]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - TOF/AliTOFtrack.cxx
Modifications for TOFnoiseda:
[u/mrichter/AliRoot.git] / TOF / AliTOFtrack.cxx
... / ...
CommitLineData
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/* $Id$ */
17
18/////////////////////////////////////////////////////////////////////////////
19// //
20// AliTOFtrack class //
21// //
22// Authors: Bologna-CERN-ITEP-Salerno Group //
23// //
24// Description: class for handling ESD extracted tracks for TOF matching. //
25// //
26/////////////////////////////////////////////////////////////////////////////
27
28#include "AliESDtrack.h"
29#include "AliTracker.h"
30
31#include "AliTOFGeometry.h"
32#include "AliTOFtrack.h"
33
34ClassImp(AliTOFtrack)
35
36//_____________________________________________________________________________
37AliTOFtrack::AliTOFtrack() :
38 AliKalmanTrack(),
39 fSeedInd(-1),
40 fSeedLab(-1)
41{
42 //
43 // Default constructor.
44 //
45}
46
47//_____________________________________________________________________________
48AliTOFtrack::AliTOFtrack(const AliTOFtrack& t) :
49 AliKalmanTrack(t),
50 fSeedInd(t.fSeedInd),
51 fSeedLab(t.fSeedLab)
52{
53 //
54 // Copy constructor.
55 //
56}
57
58//_____________________________________________________________________________
59AliTOFtrack::AliTOFtrack(const AliESDtrack& t) :
60 AliKalmanTrack(),
61 fSeedInd(-1),
62 fSeedLab(-1)
63{
64 //
65 // Constructor from AliESDtrack
66 //
67 SetLabel(t.GetLabel());
68 SetChi2(0.);
69 SetMass(t.GetMass());
70
71 Set(t.GetX(),t.GetAlpha(),t.GetParameter(),t.GetCovariance());
72
73 if ((t.GetStatus()&AliESDtrack::kTIME) == 0) return;
74 StartTimeIntegral();
75 Double_t times[10]; t.GetIntegratedTimes(times); SetIntegratedTimes(times);
76 SetIntegratedLength(t.GetIntegratedLength());
77
78}
79
80//____________________________________________________________________________
81AliTOFtrack& AliTOFtrack::operator=(const AliTOFtrack &/*source*/)
82{
83 // ass. op.
84
85 return *this;
86
87}
88
89//_____________________________________________________________________________
90Bool_t AliTOFtrack::PropagateTo(Double_t xk,Double_t x0,Double_t rho)
91{
92 // Propagates a track of particle with mass=pm to a reference plane
93 // defined by x=xk through media of density=rho and radiationLength=x0
94
95 if (xk == GetX()) return kTRUE;
96
97 Double_t oldX=GetX(), oldY=GetY(), oldZ=GetZ();
98
99 Double_t bz=GetBz();
100 if (!AliExternalTrackParam::PropagateTo(xk,bz)) return kFALSE;
101
102 Double_t d = TMath::Sqrt((GetX()-oldX)*(GetX()-oldX) +
103 (GetY()-oldY)*(GetY()-oldY) +
104 (GetZ()-oldZ)*(GetZ()-oldZ));
105 if (IsStartedTimeIntegral() && GetX()>oldX) AddTimeStep(d);
106
107 if (!AliExternalTrackParam::CorrectForMaterial(d*rho/x0,x0,GetMass()))
108 return kFALSE;
109
110 /*
111 //Energy losses************************
112 if((5940*beta2/(1-beta2+1e-10) - beta2) < 0){return 0;}
113
114 Double_t dE=0.153e-3/beta2*(log(5940*beta2/(1-beta2+1e-10)) - beta2)*d*rho;
115 //
116 // suspicious part - think about it ?
117 Double_t kinE = TMath::Sqrt(p2);
118 if (dE>0.8*kinE) dE = 0.8*kinE; //
119 if (dE<0) dE = 0.0; // not valid region for Bethe bloch
120 */
121
122 return kTRUE;
123}
124
125//_____________________________________________________________________________
126Bool_t AliTOFtrack::PropagateToInnerTOF()
127{
128 // Propagates a track of particle with mass=pm to a reference plane
129 // defined by x=xk through media of density=rho and radiationLength=x0
130
131
132 Double_t ymax=AliTOFGeometry::RinTOF()*TMath::Tan(0.5*AliTOFGeometry::GetAlpha());
133 Bool_t skip = kFALSE;
134 Double_t y=GetYat(AliTOFGeometry::RinTOF(),skip);
135 if (skip) {
136 return kFALSE;
137 }
138 if (y > ymax) {
139 if (!Rotate(AliTOFGeometry::GetAlpha())) {
140 return kFALSE;
141 }
142 } else if (y <-ymax) {
143 if (!Rotate(-AliTOFGeometry::GetAlpha())) {
144 return kFALSE;
145 }
146 }
147
148
149 Double_t x = GetX();
150 Int_t nsteps=Int_t((370.-x)/0.5); // 0.5 cm Steps
151 for (Int_t istep=0;istep<nsteps;istep++){
152 Float_t xp = x+istep*0.5;
153 Double_t param[2];
154 GetPropagationParameters(param);
155 PropagateTo(xp,param[0],param[1]);
156
157 }
158
159 if(!PropagateTo(AliTOFGeometry::RinTOF()))return 0;
160
161 return kTRUE;
162
163}
164
165//_________________________________________________________________________
166Double_t AliTOFtrack::GetPredictedChi2(const AliCluster3D *c) const {
167 //
168 //
169 //
170 Double_t p[3]={c->GetX(), c->GetY(), c->GetZ()};
171 Double_t covyz[3]={c->GetSigmaY2(), c->GetSigmaYZ(), c->GetSigmaZ2()};
172 Double_t covxyz[3]={c->GetSigmaX2(), c->GetSigmaXY(), c->GetSigmaXZ()};
173 return AliExternalTrackParam::GetPredictedChi2(p, covyz, covxyz);
174}
175//_________________________________________________________________________
176Bool_t AliTOFtrack::PropagateTo(const AliCluster3D *c) {
177 //
178 //
179 //
180 Double_t oldX=GetX(), oldY=GetY(), oldZ=GetZ();
181 Double_t p[3]={c->GetX(), c->GetY(), c->GetZ()};
182 Double_t covyz[3]={c->GetSigmaY2(), c->GetSigmaYZ(), c->GetSigmaZ2()};
183 Double_t covxyz[3]={c->GetSigmaX2(), c->GetSigmaXY(), c->GetSigmaXZ()};
184 Double_t bz=GetBz();
185 if (!AliExternalTrackParam::PropagateTo(p, covyz, covxyz, bz)) return kFALSE;
186 if (IsStartedTimeIntegral()) {
187 Double_t d = TMath::Sqrt((GetX()-oldX)*(GetX()-oldX) +
188 (GetY()-oldY)*(GetY()-oldY) +
189 (GetZ()-oldZ)*(GetZ()-oldZ));
190 if (GetX()<oldX) d=-d;
191 AddTimeStep(d);
192 }
193 return kTRUE;
194}
195//_________________________________________________________________________
196Double_t AliTOFtrack::GetYat(Double_t xk, Bool_t & skip) const {
197//-----------------------------------------------------------------
198// This function calculates the Y-coordinate of a track at the plane x=xk.
199// Needed for matching with the TOF (I.Belikov)
200//-----------------------------------------------------------------
201 Double_t y=0.;
202 skip=(!GetYAt(xk,GetBz(),y));
203 return y;
204}
205
206//_____________________________________________________________________________
207Int_t AliTOFtrack::Compare(const TObject *o) const {
208 //-----------------------------------------------------------------
209 // This function compares tracks according to the their curvature
210 //-----------------------------------------------------------------
211 AliTOFtrack *t=(AliTOFtrack*)o;
212 Double_t co=t->GetSigmaY2()*t->GetSigmaZ2();
213 Double_t c =GetSigmaY2()*GetSigmaZ2();
214 if (c>co) return 1;
215 else if (c<co) return -1;
216 return 0;
217}
218
219
220//_____________________________________________________________________________
221void AliTOFtrack::GetPropagationParameters(Double_t *param) {
222
223 //Get average medium density, x0 while propagating the track
224
225 //For TRD holes description
226 /*
227 Double_t thetamin = (90.-31.1) * TMath::Pi()/180.;
228 Double_t thetamax = (90.+31.1) * TMath::Pi()/180.;
229
230 Double_t zmin = -55.;
231 Double_t zmax = 55.;
232 */
233
234 // Detector inner/outer radii
235 Double_t rTPC = 261.53;
236 Double_t rTPCTRD = 294.5;
237 Double_t rTRD = 369.1;
238
239 // Medium parameters
240 Double_t x0TPC = 40.;
241 Double_t rhoTPC =0.06124;
242
243 Double_t x0Air = 36.66;
244 Double_t rhoAir =1.2931e-3;
245
246 Double_t x0TRD = 171.7;
247 Double_t rhoTRD =0.33;
248
249 // Int_t isec = GetSector();
250 Double_t r[3]; GetXYZ(r);
251 // Float_t thetatr = TMath::ATan2(TMath::Sqrt(r[0]*r[0]+r[1]*r[1]),r[2]);
252
253 /*
254 if(holes){
255 if (isec == 0 || isec == 1 || isec == 2 ) {
256 if( thetatr>=thetamin && thetatr<=thetamax){
257 x0TRD= x0Air;
258 rhoTRD = rhoAir;
259 }
260 }
261 if (isec == 11 || isec == 12 || isec == 13 || isec == 14 || isec == 15 ) {
262 if( r[2]>=zmin && r[2]<=zmax){
263 x0TRD= x0Air;
264 rhoTRD = rhoAir;
265 }
266 }
267 }
268 */
269 if(GetX() <= rTPC)
270 {param[0]=x0TPC;param[1]=rhoTPC;}
271 else if(GetX() > rTPC && GetX() < rTPCTRD)
272 {param[0]=x0Air;param[1]=rhoAir;}
273 else if(GetX() >= rTPCTRD && GetX() < rTRD)
274 {param[0]=x0TRD;param[1]=rhoTRD;}
275 else if(GetX() >= rTRD )
276 {param[0]=x0Air;param[1]=rhoAir;}
277}