]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/global/AliHLTGlobalTrackMerger.cxx
cleaning up HLT defines
[u/mrichter/AliRoot.git] / HLT / global / AliHLTGlobalTrackMerger.cxx
CommitLineData
ec6160d5 1//$Id$
2
3/**************************************************************************
4 * This file is property of and copyright by the ALICE HLT Project *
5 * ALICE Experiment at CERN, All rights reserved. *
6 * *
7 * Primary Authors: Jacek Otwinowski (Jacek.Otwinowski@gsi.de) *
8 * for The ALICE HLT Project. *
9 * *
10 * Permission to use, copy, modify and distribute this software and its *
11 * documentation strictly for non-commercial purposes is hereby granted *
12 * without fee, provided that the above copyright notice appears in all *
13 * copies and that both the copyright notice and this permission notice *
14 * appear in the supporting documentation. The authors make no claims *
15 * about the suitability of this software for any purpose. It is *
16 * provided "as is" without express or implied warranty. *
17 **************************************************************************/
18
a0395f81 19// @file AliHLTGlobalTrackMerger.cxx
20// @author Jacek Otwinowski
21// @date
22// @brief The HLT global merger base class
23//
ec6160d5 24
18ada816 25//#include "AliTPCReconstructor.h"
ec6160d5 26
ec6160d5 27#include "AliESDEvent.h"
28#include "AliESDVertex.h"
a0395f81 29#include "AliESDtrack.h"
ec6160d5 30#include "AliTracker.h"
a9f060e5 31#include "TTreeStream.h"
ec6160d5 32
33#include <TClonesArray.h>
34
35#include "AliHLTGlobalTrackMerger.h"
36
37#if __GNUC__>= 3
38using namespace std;
39#endif
40
41ClassImp(AliHLTGlobalTrackMerger)
42
43AliHLTGlobalTrackMerger::AliHLTGlobalTrackMerger()
44 :
45 fMaxY(0.0),
46 fMaxZ(0.0),
47 fMaxSnp(0.0),
48 fMaxTgl(0.0),
49 fMaxSigned1Pt(0.0),
a9f060e5 50 fVertex(0),
51 fDebugStreamer(0)
ec6160d5 52{
53 //Default constructor
54
55 // standard vertex settings at the moment
56 // V(0.,0.,0.), sigmaVx=sigmaVy=5.e-3 [cm], sigmaVz=5.3 [cm]
57 fVertex = new AliESDVertex;
a9f060e5 58
18ada816 59 // if (AliTPCReconstructor::StreamLevel()>0) {
60 // fDebugStreamer = new TTreeSRedirector("debugGlobalMerger.root");
61 // }
a9f060e5 62
ec6160d5 63}
64
65//_____________________________________________________________________________
66AliHLTGlobalTrackMerger::~AliHLTGlobalTrackMerger()
67{
68 //Destructor
69 if(fVertex) delete fVertex; fVertex =0;
a9f060e5 70 if(fDebugStreamer) delete fDebugStreamer; fDebugStreamer =0;
ec6160d5 71}
72
ec6160d5 73//_____________________________________________________________________________
74Bool_t AliHLTGlobalTrackMerger::Merge(AliESDEvent* esdEvent)
75{
76 // merge TPC and TRD tracks
77 // 1. propagate TPC track to the radius between TPC and TRD
78 // 2. propagate TRD track to the same radius between TPC and TRD
79 // 3. matches TPC and TRD tracks at the radius
4b6d0cc6 80 // 4. propagate matched TRD track to the merging radius (first measured TPC point - x coordinate)
ec6160d5 81 // 5. merge TPC and TRD track parameters at the merging radius
82 // 6. create AliESDtrack from merged tracks
83 // 7. add AliESDtrack to AliESDEvent
84
85 if(!esdEvent) return kFALSE;
86
87 const Double_t kMaxStep = 10.0; // [cm] track propagation step
88 const Double_t kMatchRadius = 285.0; // [cm] matching at radius between TPC and TRD
89 Double_t kMergeRadius = 0.0;
90 Bool_t isOk = kFALSE;
91 Bool_t isMatched = kFALSE;
a9f060e5 92 AliESDtrack *track=0;
4b6d0cc6 93 AliExternalTrackParam *extTPCTrack = 0;
ec6160d5 94
95 Int_t nTracks = esdEvent->GetNumberOfTracks();
ec6160d5 96 HLTWarning("nTracks %d",nTracks);
97
a9f060e5 98 Int_t nTracksTPC =0;
ec6160d5 99 for(Int_t iTrack = 0; iTrack<nTracks; ++iTrack)
100 {
a9f060e5 101 track = esdEvent->GetTrack(iTrack);
ec6160d5 102 if(!track) continue;
103
104 // TPC tracks
105 if((track->GetStatus()&AliESDtrack::kTPCin)==0) continue;
106 AliESDtrack *tpcTrack = track;
a9f060e5 107 nTracksTPC++;
ec6160d5 108
4b6d0cc6 109 // create external tpc track param (needed to propagate to matching radius)
110 if ((extTPCTrack = new AliExternalTrackParam(*tpcTrack)) == 0) continue;
111
a9f060e5 112 kMergeRadius = tpcTrack->GetTPCPoints(0); // [cm] merging at first measured TPC point
ec6160d5 113
a9f060e5 114 HLTInfo("-------------------------------------------------------------------------------------");
4b6d0cc6 115 //HLTInfo("-----tpc track before matching: alpha %f, x %f, y, %f, z %f, snp %f, tgl %f, 1pt %f",tpcTrack->GetAlpha(),tpcTrack->GetX(),tpcTrack->GetY(),tpcTrack->GetZ(),tpcTrack->GetSnp(),tpcTrack->GetTgl(),tpcTrack->GetSigned1Pt());
116 HLTInfo("-----ext tpc track before matching: alpha %f, x %f, y, %f, z %f, snp %f, tgl %f, 1pt %f",extTPCTrack->GetAlpha(),extTPCTrack->GetX(),extTPCTrack->GetY(),extTPCTrack->GetZ(),extTPCTrack->GetSnp(),extTPCTrack->GetTgl(),extTPCTrack->GetSigned1Pt());
ec6160d5 117
118 // propagate tracks to the matching radius
4b6d0cc6 119 //isOk = AliTracker::PropagateTrackTo(tpcTrack,kMatchRadius,tpcTrack->GetMass(),kMaxStep,kFALSE);
120 isOk = AliTracker::PropagateTrackTo(extTPCTrack,kMatchRadius,tpcTrack->GetMass(),kMaxStep,kFALSE);
ec6160d5 121 if(!isOk) continue;
122
4b6d0cc6 123 HLTInfo("-----ext tpc track at matching radius: alpha %f, x %f, y, %f, z %f, snp %f, tgl %f, 1pt %f",extTPCTrack->GetAlpha(),extTPCTrack->GetX(),extTPCTrack->GetY(),extTPCTrack->GetZ(),extTPCTrack->GetSnp(),extTPCTrack->GetTgl(),extTPCTrack->GetSigned1Pt());
ec6160d5 124
a9f060e5 125 Int_t nTracksTRD =0;
ec6160d5 126 for(Int_t jTrack = 0; jTrack<nTracks; ++jTrack)
127 {
a9f060e5 128 track = esdEvent->GetTrack(jTrack);
ec6160d5 129 if(!track) continue;
130
131 // TRD tracks
132 if((track->GetStatus()&AliESDtrack::kTRDin)==0) continue;
133 AliESDtrack *trdTrack = track;
a9f060e5 134 nTracksTRD++;
135
4b6d0cc6 136 HLTInfo("-----trd track before matching: alpha %f, x %f, y %f, z %f, snp %f, tgl %f, 1pt %f",trdTrack->GetAlpha(),trdTrack->GetX(),trdTrack->GetY(),trdTrack->GetZ(),trdTrack->GetSnp(),trdTrack->GetTgl(),trdTrack->GetSigned1Pt());
ec6160d5 137
138 isOk = AliTracker::PropagateTrackTo(trdTrack,kMatchRadius,trdTrack->GetMass(),kMaxStep,kFALSE);
139 if(!isOk) continue;
140
4b6d0cc6 141 HLTInfo("-----trd track at matching radius: alpha %f, x %f, y %f, z %f, snp %f, tgl %f, 1pt %f",trdTrack->GetAlpha(),trdTrack->GetX(),trdTrack->GetY(),trdTrack->GetZ(),trdTrack->GetSnp(),trdTrack->GetTgl(),trdTrack->GetSigned1Pt());
ec6160d5 142
143 // match TPC and TRD tracks
4b6d0cc6 144 //isMatched = MatchTracks(tpcTrack,trdTrack);
145 isMatched = MatchTracks(extTPCTrack,trdTrack);
ec6160d5 146 if(!isMatched) continue;
147
4b6d0cc6 148 //HLTInfo("-----tpc track after matching: alpha %f, x %f, y %f, z %f, snp %f, tgl %f, 1pt %f",tpcTrack->GetAlpha(),tpcTrack->GetX(),tpcTrack->GetY(),tpcTrack->GetZ(),tpcTrack->GetSnp(),tpcTrack->GetTgl(),tpcTrack->GetSigned1Pt());
149 HLTInfo("-----ext tpc track after matching: alpha %f, x %f, y %f, z %f, snp %f, tgl %f, 1pt %f",extTPCTrack->GetAlpha(),extTPCTrack->GetX(),extTPCTrack->GetY(),extTPCTrack->GetZ(),extTPCTrack->GetSnp(),extTPCTrack->GetTgl(),extTPCTrack->GetSigned1Pt());
150 HLTInfo("-----trd track after matching: alpha %f, x %f, y %f, z %f, snp %f, tgl %f, 1pt %f",trdTrack->GetAlpha(),trdTrack->GetX(),trdTrack->GetY(),trdTrack->GetZ(),trdTrack->GetSnp(),trdTrack->GetTgl(),trdTrack->GetSigned1Pt());
ec6160d5 151
4b6d0cc6 152 // propagate TRD tracks to the merging radius
153 //isOk = AliTracker::PropagateTrackTo(tpcTrack,kMergeRadius,tpcTrack->GetMass(),kMaxStep,kFALSE);
154 //if(!isOk) continue;
ec6160d5 155 isOk = AliTracker::PropagateTrackTo(trdTrack,kMergeRadius,trdTrack->GetMass(),kMaxStep,kFALSE);
156 if(!isOk) continue;
157
4b6d0cc6 158 HLTInfo("-----tpc before merging: alpha %f, x %f, y %f, z %f, snp %f, tgl %f, 1pt %f",tpcTrack->GetAlpha(),tpcTrack->GetX(),tpcTrack->GetY(),tpcTrack->GetZ(),tpcTrack->GetSnp(),tpcTrack->GetTgl(),tpcTrack->GetSigned1Pt());
159 HLTInfo("-----trd before merging: alpha %f, x %f, y %f, z %f, snp %f, tgl %f, 1pt %f",trdTrack->GetAlpha(),trdTrack->GetX(),trdTrack->GetY(),trdTrack->GetZ(),trdTrack->GetSnp(),trdTrack->GetTgl(),trdTrack->GetSigned1Pt());
ec6160d5 160
161 // merge TPC and TRD tracks
162 // create AliESDtrack and add it to AliESDevent
163 Bool_t isMerged = MergeTracks(tpcTrack,trdTrack,esdEvent);
a9f060e5 164 if(!isMerged)
165 HLTInfo("No merged tracks");
ec6160d5 166 }
a9f060e5 167 HLTInfo("nTracksTRD %d",nTracksTRD);
4b6d0cc6 168
169 // delete external TPC track
170 if(extTPCTrack) delete extTPCTrack; extTPCTrack=0;
ec6160d5 171 }
a9f060e5 172 HLTInfo("nTracksTPC %d",nTracksTPC);
ec6160d5 173
174return kTRUE;
175}
176
177//_____________________________________________________________________________
178Bool_t AliHLTGlobalTrackMerger::MergeTracks(AliESDtrack *tpcTrack, AliESDtrack* trdTrack, AliESDEvent *esdEvent)
179{
180 // merge TPC and TRD track parameters
181 // create new AliESDtrack with TPC+TRD merged track parameters
182 // add AliESDtrack to AliESDEvent
183
184 if(!tpcTrack) return kFALSE;
185 if(!trdTrack) return kFALSE;
186
ec6160d5 187 Double_t trackParam[5], trackCovar[15];
188 Double_t trackChi2;
189 Int_t trackNDF;
190
191 // calculate merged track parameters
192 Bool_t isNotOK = SmoothTracks(tpcTrack->GetParameter(), tpcTrack->GetCovariance(), tpcTrack->GetTPCchi2(), 5,
193 trdTrack->GetParameter(), trdTrack->GetCovariance(), trdTrack->GetTRDchi2(), 5,
194 trackParam, trackCovar, trackChi2, trackNDF,5);
195
196 if(isNotOK)
197 return kFALSE;
198
199 //
200 // create AliESDtrack
201 // merged TPC+TRD information
202 //
203
204 AliESDtrack track;
205 //track.UpdateTrackParams(tpcTrack, AliESDtrack::kTPCrefit);
206 track.SetStatus(AliESDtrack::kGlobalMerge);
207 track.SetLabel(tpcTrack->GetLabel());
208 track.Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),trackParam,trackCovar);
209 track.SetGlobalChi2(trackChi2);
210
211 //track.SetTPCLabel(tpcTrack->GetLabel());
212 Double32_t tpcPID[AliPID::kSPECIES];
213 tpcTrack->GetTPCpid(tpcPID);
214 track.SetTPCpid(tpcPID);
215 //fTPCncls=t->GetNumberOfClusters(); // no cluster on HLT
216 //fTPCchi2=t->GetChi2();
217
218 //track.SetTRDLabel(trdTrack->GetLabel());
219 Double32_t trdPID[AliPID::kSPECIES];
220 trdTrack->GetTRDpid(trdPID);
221 track.SetTRDpid(trdPID);
222 //fTRDchi2 = t->GetChi2();
223 //fTRDncls = t->GetNumberOfClusters();
224 //for (Int_t i=0;i<6;i++) index[i]=t->GetTrackletIndex(i);
225
226 // add track to AliESDEvent
227 esdEvent->AddTrack(&track);
228
229return kTRUE;
230}
231
232//_____________________________________________________________________________
233void AliHLTGlobalTrackMerger::SetParameter(Double_t maxy, Double_t maxz, Double_t maxsnp, Double_t maxtgl, Double_t signed1Pt)
234{
235 //set parameters for merger
236 fMaxY = maxy;
237 fMaxZ = maxz;
238 fMaxSnp = maxsnp;
239 fMaxTgl = maxtgl;
240 fMaxSigned1Pt = signed1Pt;
241}
242
243//_____________________________________________________________________________
a0395f81 244Bool_t AliHLTGlobalTrackMerger::MatchTracks(AliExternalTrackParam *trackTPC, const AliESDtrack *trackTRD)
ec6160d5 245{
246 // match TPC and TRD tracks
247 // return kTRUE in case of matching
248
249 if(!trackTPC) return kFALSE;
250 if(!trackTRD) return kFALSE;
251
a0395f81 252 Double_t xTpc=trackTPC->GetX();
253 Double_t yTpc=trackTPC->GetY();
254 Double_t zTpc=trackTPC->GetZ();
255 Double_t snpTpc=trackTPC->GetSnp();
256 Double_t tglTpc=trackTPC->GetTgl();
257 Double_t signed1PtTpc=trackTPC->GetSigned1Pt();
a9f060e5 258
a0395f81 259 Double_t xTrd=trackTRD->GetX();
260 Double_t yTrd=trackTRD->GetY();
261 Double_t zTrd=trackTRD->GetZ();
262 Double_t snpTrd=trackTRD->GetSnp();
263 Double_t tglTrd=trackTRD->GetTgl();
264 Double_t signed1PtTrd=trackTRD->GetSigned1Pt();
a9f060e5 265
266 // debug stream
18ada816 267 // if (AliTPCReconstructor::StreamLevel()>0) {
268 // //TTreeSRedirector &cstream = *fDebugStreamer;
269 // *fDebugStreamer<<"match"<<
a0395f81 270 // "xTpc="<<xTpc<<
271 // "yTpc="<<yTpc<<
272 // "zTpc="<<zTpc<<
273 // "snpTpc="<<snpTpc<<
274 // "tglTpc="<<tglTpc<<
275 // "signed1PtTpc="<<signed1PtTpc<<
276 // "xTrd="<<xTrd<<
277 // "yTrd="<<yTrd<<
278 // "zTrd="<<zTrd<<
279 // "snpTrd="<<snpTrd<<
280 // "tglTrd="<<tglTrd<<
281 // "signed1PtTrd="<<signed1PtTrd<<
18ada816 282 // "\n";
283 // }
a9f060e5 284
a0395f81 285 if (TMath::Abs(xTpc-xTrd) > 0) {/* get rid of warning*/;}
286 if (TMath::Abs(yTpc-yTrd) > fMaxY) return kFALSE;
287 if (TMath::Abs(zTpc-zTrd) > fMaxZ) return kFALSE;
288 if (TMath::Abs(snpTpc-snpTrd) > fMaxSnp) return kFALSE;
289 if (TMath::Abs(tglTpc-tglTrd) > fMaxTgl) return kFALSE;
290 if (TMath::Abs(signed1PtTpc-signed1PtTrd) > fMaxSigned1Pt) return kFALSE;
ec6160d5 291
292return kTRUE;
293}
294
295//_____________________________________________________________________________
296Bool_t AliHLTGlobalTrackMerger::SmoothTracks( const Double_t T1[], const Double_t C1[], Double_t Chi21, Int_t NDF1,
297 const Double_t T2[], const Double_t C2[], Double_t Chi22, Int_t NDF2,
298 Double_t T [], Double_t C [], Double_t &Chi2, Int_t &NDF,
299 Int_t N )
300{
301 //* Smooth two tracks with parameter vectors of size N
302 //*
303 //* Input:
304 //*
305 //* T1[N], T2[N] - tracks
306 //* C1[N*(N+1)/2], C2[N*(N+1)/2] - covariance matrices in low-diagonal form:
307 //* C = { c00,
308 //* c10, c11,
309 //* c20, c21, c22,
310 //* ... };
311 //* Chi2{1,2}, NDF{1,2} - \Chi^2 and "Number of Degrees of Freedom" values for both tracks
312 //* Output:
313 //*
314 //* T[N], C[N] ( can be aqual to {T1,C1}, or {T2,C2} )
315 //* Chi2, NDF
316 //*
317 //* returns error flag (0 means OK, 1 not OK )
318
319 Int_t M = N*(N+1)/2;
320
321 Double_t A[M];
322 Double_t K[N*N];
323
324 for(Int_t k=0; k<M; k++) A[k] = C1[k] + C2[k];
325 Bool_t err = InvertS(A,N);
326 if( err ) return 1;
327
328 Chi2 = Chi21 + Chi22;
329 NDF = NDF1 + NDF2;
330
331 MultSSQ( C1, A, K, N);
332 Double_t r[N];
333 for( Int_t k=0; k<N;k++) r[k] = T1[k] - T2[k];
334 for( Int_t k=0; k<N;k++ )
335 for( Int_t l=0;l<N;l++) T[k] = T1[k] - K[k*N+l]*r[l];
336
337 for( Int_t ind=0,i=0; i<N; i++ ){
338 for( Int_t j=0; j<i; j++ ) Chi2+= 2*r[i]*r[j]*A[ind++];
339 Chi2+= r[i]*r[i]*A[ind++];
340 }
341 NDF+=N;
342
343 for( Int_t l=0; l<N; l++ ) K[ (N+1)*l ] -= 1;
344
345 for( Int_t ind = 0, l=0; l<N; ++l ){
346 for( Int_t j=0; j<=l; ++j, ind++ ){
347 A[ind] = 0;
348 for( Int_t k=0; k<N; ++k ) A[ind] -= K[l*N+k] * C1[IndexS(j,k)];
349 }
350 }
351 for( Int_t l=0; l<N; l++ ) C[l] = A[l];
352 return 0;
353}
354
355//_____________________________________________________________________________
356void AliHLTGlobalTrackMerger::MultSSQ( const Double_t *A, const Double_t *B, Double_t *C, Int_t N )
357{
a0395f81 358 // no clue
ec6160d5 359 for( Int_t ind=0, i=0; i<N; ++i ){
360 for( Int_t j=0; j<N; ++j, ++ind ){
361 C[ind] = 0;
362 for( Int_t k=0; k<N; ++k ) C[ind] += A[IndexS(i,k)] * B[IndexS(k,j)];
363 }
364 }
365}
366
367//_____________________________________________________________________________
368Bool_t AliHLTGlobalTrackMerger::InvertS( Double_t A[], Int_t N )
369{
370 //* input: simmetric > 0 NxN matrix A = {a11,a21,a22,a31..a33,..}
371 //* output: inverse A, in case of problems fill zero and return 1
372 //*
373 //* A->low triangular Anew : A = Anew x Anew^T
374 //* method:
375 //* for(j=1,N) for(i=j,N) Aij=(Aii-sum_{k=1}^{j-1}Aik*Ajk )/Ajj
376 //*
377
378 Bool_t ret = 0;
379
380 const Double_t ZERO = 1.E-20;
381
382 {
383 Double_t *j1 = A, *jj = A;
384 for( Int_t j=1; j<=N; j1+=j++, jj+=j ){
385 Double_t *ik = j1, x = 0;
386 while( ik!=jj ){
387 x -= (*ik) * (*ik);
388 ik++;
389 }
390 x += *ik;
391 if( x > ZERO ){
392 x = sqrt(x);
393 *ik = x;
394 ik++;
395 x = 1 / x;
396 for( Int_t step=1; step<=N-j; ik+=++step ){ // ik==Ai1
397 Double_t sum = 0;
bb7774d6 398 for( Double_t *jk=j1; jk!=jj; sum += (*(jk++)) * (*(ik++)) ) {}
ec6160d5 399 *ik = (*ik - sum) * x; // ik == Aij
400 }
401 }else{
402 Double_t *ji=jj;
403 for( Int_t i=j; i<N; i++ ) *(ji+=i) = 0.;
404 ret = 1;
405 }
406 }
407 }
408
409 //* A -> Ainv
410 //* method :
411 //* for(i=1,N){
412 //* Aii = 1/Aii;
413 //* for(j=1,i-1) Aij=-(sum_{k=j}^{i-1} Aik * Akj) / Aii ;
414 //* }
415
416 {
417 Double_t *ii=A,*ij=A;
418 for( Int_t i = 1; i<=N; ij=ii+1, ii+=++i ){
419 if( *ii > ZERO ){
420 Double_t x = -(*ii = 1./ *ii);
421 {
422 Double_t *jj = A;
423 for( Int_t j=1; j<i; jj+=++j, ij++ ){
424 Double_t *ik = ij, *kj = jj, sum = 0.;
425 for( Int_t k=j; ik!=ii; kj+=k++, ik++ ){
426 sum += *ik * *kj;
427 }
428 *kj = sum * x;
429 }
430 }
431 }else{
432 for( Double_t *ik = ij; ik!=ii+1; ik++ ){
433 *ik = 0.;
434 }
435 ret = 1;
436 }
437 }
438 }
439
440 //* A -> A^T x A
441 //* method:
442 //* Aij = sum_{k=i}^N Aki * Akj
443
444 {
445 Double_t *ii=A, *ij=A;
446 for( Int_t i=1; i<=N; ii+=++i ){
447 do{
448 Double_t *ki = ii, *kj = ij, sum = 0.;
449 for( Int_t k=i; k<=N; ki+=k, kj+=k++ ) sum += (*ki) * (*kj);
450 *ij = sum;
451 }while( (ij++)!=ii );
452 }
453 }
454 return ret;
455}
456
457//_____________________________________________________________________________
a0395f81 458void AliHLTGlobalTrackMerger::PropagateTracksToDCA(const AliESDEvent *esdEvent)
ec6160d5 459{
460 // try to propagate all tracks to DCA to primary vertex
461 if(!esdEvent) return;
462
463 const Double_t kBz = esdEvent->GetMagneticField();
464 const Double_t kSmallRadius = 2.8; // [cm] something less than the beam pipe radius
465 const Double_t kMaxStep = 10.0; // [cm] track propagation step
466 Bool_t isOK = kFALSE;
467
468 Int_t nTracks = esdEvent->GetNumberOfTracks();
469 for(Int_t iTrack = 0; iTrack<nTracks; ++iTrack) {
470 AliESDtrack *track = esdEvent->GetTrack(iTrack);
471 if(!track) continue;
472
ec6160d5 473 // propagate to small radius (material budget included)
474 isOK = AliTracker::PropagateTrackTo(track,kSmallRadius,track->GetMass(),kMaxStep,kFALSE);
475
ec6160d5 476 // relate tracks to DCA to primary vertex
477 if(isOK)
478 {
479 track->RelateToVertex(fVertex, kBz, kVeryBig);
a9f060e5 480 HLTInfo("1-------: alpha %f, x %f, y %f, z %f, snp %f, tgl %f, 1pt %f",track->GetAlpha(),track->GetX(),track->GetY(),track->GetZ(),track->GetSnp(),track->GetTgl(),track->GetSigned1Pt());
481 }
482
483 //
484 // the same procedure must be repeated for TPCinner (TPC only) tracks
485 //
486 AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
487 if(!tpcTrack) continue;
488
489 // propagate tpcTracks to small radius (material budget included)
490 isOK = AliTracker::PropagateTrackTo(tpcTrack,kSmallRadius,track->GetMass(),kMaxStep,kFALSE);
491
492 // relate tracks to DCA to primary vertex
493 if(isOK)
494 {
495 Double_t par[2], cov[3];
496 tpcTrack->PropagateToDCA(fVertex, kBz, kVeryBig,par,cov);
497 HLTInfo("2-------: alpha %f, x %f, y %f, z %f, snp %f, tgl %f, 1pt %f",tpcTrack->GetAlpha(),tpcTrack->GetX(),tpcTrack->GetY(),tpcTrack->GetZ(),tpcTrack->GetSnp(),tpcTrack->GetTgl(),tpcTrack->GetSigned1Pt());
ec6160d5 498 }
499 }
500}