2 // origin: hough/AliL3HoughKalmanTrack.cxx,v 1.3 Tue Sep 5 08:45:27 2006 UTC by hristov
4 /**************************************************************************
5 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
7 * Author: The ALICE Off-line Project. *
8 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
19 //-------------------------------------------------------------------------
20 // Implementation of the HLT TPC Hough Kalman track class
22 // Origin: Cvetan Cheshkov, CERN, Cvetan.Cheshkov@cern.ch
23 //-------------------------------------------------------------------------
25 #include "AliHLTTPCHoughKalmanTrack.h"
27 #include "AliHLTStdIncludes.h"
28 #include "AliHLTTPCHoughTrack.h"
29 #include "AliHLTTPCHoughTransformer.h"
30 #include "AliHLTTPCHoughTransformerRow.h"
31 #include "AliHLTTPCHistogram.h"
33 Int_t CalcExternalParams(const AliHLTTPCHoughTrack& t, Double_t deltax, Double_t deltay, Double_t deltaeta, const Double_t zvertex, const Double_t xhit, Double_t xx[5]);
35 ClassImp(AliHLTTPCHoughKalmanTrack)
37 //____________________________________________________________________________
38 AliHLTTPCHoughKalmanTrack::AliHLTTPCHoughKalmanTrack(const AliHLTTPCHoughTrack& t) throw (const Char_t *)
41 // The method constructs an AliHLTTPCHoughKalmanTrack object
42 // from an HLT TPC Hough track
45 SetNumberOfClusters(t.GetLastRow()-t.GetFirstRow());
46 SetLabel(t.GetMCid());
51 Double_t alpha = fmod((t.GetSector()+0.5)*(2*TMath::Pi()/18),2*TMath::Pi());
52 if (alpha < -TMath::Pi()) alpha += 2*TMath::Pi();
53 else if (alpha >= TMath::Pi()) alpha -= 2*TMath::Pi();
55 const Double_t xhit = 82.97;
56 const Double_t zvertex = t.GetFirstPointZ();
58 Double_t deltax = t.GetPterr();
59 Double_t deltay = t.GetPsierr();
60 Double_t deltaeta = t.GetTglerr();
61 if(CalcExternalParams(t,0,0,0,zvertex,xhit,par)==0) throw "AliHLTTPCHoughKalmanTrack: conversion failed !\n";
63 Double_t cnv=1./(GetBz()*kB2C);
65 //and covariance matrix
66 //For the moment estimate the covariance matrix numerically
68 if(CalcExternalParams(t,deltax,0,0,zvertex,xhit,xx1)==0) throw "AliHLTTPCHoughKalmanTrack: conversion failed !\n";
70 if(CalcExternalParams(t,0,deltay,0,zvertex,xhit,xx2)==0) throw "AliHLTTPCHoughKalmanTrack: conversion failed !\n";
72 if(CalcExternalParams(t,0,0,deltaeta,zvertex,xhit,xx3)==0) throw "AliHLTTPCHoughKalmanTrack: conversion failed !\n";
74 Double_t dx1[5],dx2[5],dx3[5];
75 for(Int_t i=0;i<5;i++) {
82 dx1[0]*dx1[0]+dx2[0]*dx2[0],
84 0., 0., dx1[2]*dx1[2]+dx2[2]*dx2[2],
85 0., dx3[3]*dx3[1], 0., dx3[3]*dx3[3],
86 0., 0., 0., 0., dx1[4]*dx1[4]+dx2[4]*dx2[4]
89 fC20=dx1[2]*dx1[0]+dx2[2]*dx2[0];
90 fC40=dx1[4]*dx1[0]+dx2[4]*dx2[0];
91 fC42=dx1[4]*dx1[2]+dx2[4]*dx2[2];
95 fC10=fC30=fC21=fC41=fC32=fC43=0;
98 cov[10]*=cnv; cov[11]*=cnv; cov[12]*=cnv; cov[13]*=cnv; cov[14]*=(cnv*cnv);
101 Set(xhit,alpha,par,cov);
105 //____________________________________________________________________________
106 Int_t CalcExternalParams(const AliHLTTPCHoughTrack& t, Double_t deltax, Double_t deltay, Double_t deltaeta, const Double_t zvertex, const Double_t xhit, Double_t xx[5])
108 // Translate the parameters of the Hough tracks into
109 // AliKalmanTrack paramters
111 //First get the emiision angle and track curvature
112 Double_t binx = t.GetBinX()+deltax;
113 Double_t biny = t.GetBinY()+deltay;
114 Double_t psi = atan((binx-biny)/(AliHLTTPCHoughTransformerRow::GetBeta1()-AliHLTTPCHoughTransformerRow::GetBeta2()));
115 Double_t kappa = 2.0*(binx*cos(psi)-AliHLTTPCHoughTransformerRow::GetBeta1()*sin(psi));
116 Double_t radius = 1./kappa;
119 Double_t centerx = -1.*radius*sin(psi);
120 Double_t centery = radius*cos(psi);
121 Double_t aa = (xhit - centerx)*(xhit - centerx);
122 Double_t r2 = radius*radius;
123 if(aa > r2) return 0;
124 Double_t aa2 = sqrt(r2 - aa);
125 Double_t y1 = centery + aa2;
126 Double_t y2 = centery - aa2;
128 if(fabs(y2) < fabs(y1)) yhit = y2;
131 Double_t stot = sqrt(xhit*xhit+yhit*yhit);
135 Double_t eta=t.GetPseudoRapidity()+deltaeta;
136 Double_t theta = 2*atan(exp(-1.*eta));
137 Double_t tanl = 1./tan(theta);
138 zhit = zvertex + stot*tanl;
142 xx[2] = (xhit-centerx)/radius;