BmnRoot
Loading...
Searching...
No Matches
KFParticle.cxx
Go to the documentation of this file.
1//----------------------------------------------------------------------------
2// Implementation of the KFParticle class
3// .
4// @author S.Gorbunov, I.Kisel, I.Kulakov, M.Zyzak
5// @version 1.0
6// @since 13.05.07
7//
8// Class to reconstruct and store the decayed particle parameters.
9// The method is described in CBM-SOFT note 2007-003,
10// ``Reconstruction of decayed particles based on the Kalman filter'',
11// http://www.gsi.de/documents/DOC-2007-May-14-1.pdf
12//
13// This class is ALICE interface to general mathematics in KFParticleCore
14//
15// -= Copyright &copy ALICE HLT and CBM L1 Groups =-
16//____________________________________________________________________________
17
18
19#include "KFParticle.h"
20#include "TDatabasePDG.h"
21#include "TParticlePDG.h"
22
23#ifdef HomogeneousField
24#include "AliVTrack.h"
25#include "AliVVertex.h"
26#endif
27
28#ifdef NonhomogeneousField
29#include "CbmKFTrack.h"
30#include "CbmKFVertex.h"
31#endif
32
33#ifdef HomogeneousField
34Double_t KFParticle::fgBz = -5.; //* Bz compoment of the magnetic field
35#endif
36
37KFParticle::KFParticle( const KFParticle &d1, const KFParticle &d2, Bool_t gamma )
38{
39 if (!gamma) {
40 KFParticle mother;
41 mother+= d1;
42 mother+= d2;
43 *this = mother;
44 } else
45 ConstructGamma(d1, d2);
46}
47
48void KFParticle::Create( const Double_t Param[], const Double_t Cov[], Int_t Charge, Double_t mass /*Int_t PID*/ )
49{
50 // Constructor from "cartesian" track, PID hypothesis should be provided
51 //
52 // Param[6] = { X, Y, Z, Px, Py, Pz } - position and momentum
53 // Cov [21] = lower-triangular part of the covariance matrix:
54 //
55 // ( 0 . . . . . )
56 // ( 1 2 . . . . )
57 // Cov. matrix = ( 3 4 5 . . . ) - numbering of covariance elements in Cov[]
58 // ( 6 7 8 9 . . )
59 // ( 10 11 12 13 14 . )
60 // ( 15 16 17 18 19 20 )
61 Double_t C[21];
62 for( int i=0; i<21; i++ ) C[i] = Cov[i];
63
64// TParticlePDG* particlePDG = TDatabasePDG::Instance()->GetParticle(PID);
65// Double_t mass = (particlePDG) ? particlePDG->Mass() :0.13957;
66
67 KFParticleBase::Initialize( Param, C, Charge, mass );
68}
69
70#ifdef NonhomogeneousField
71KFParticle::KFParticle( CbmKFTrackInterface* Track, Double_t *z0, Int_t *qHypo, Int_t *PID)
72{
73 CbmKFTrack Tr( *Track );
74
75 Double_t *m = Tr.GetTrack();
76 Double_t *V = Tr.GetCovMatrix();
77
78 //* Fit of vertex track slopes and momentum (a,b,qp) to xyz0 vertex
79
80// if( z0 ) Tr.Extrapolate( *z0 );
81
82 Double_t a = m[2], b = m[3], qp = m[4];
83
84 //* convert the track to (x,y,px,py,pz,e,t/p) parameterization
85
86 double c2 = 1./(1. + a*a + b*b);
87 double pq = 1./qp;
88 if(qHypo) pq *= *qHypo;
89 double p2 = pq*pq;
90 double pz = sqrt(p2*c2);
91 double px = a*pz;
92 double py = b*pz;
93 double H[3] = { -px*c2, -py*c2, -pz*pq };
94
95 Double_t r[6];
96
97 r[0] = m[0];
98 r[1] = m[1];
99 r[2] = m[5];
100 r[3] = px;
101 r[4] = py;
102 r[5] = pz;
103
104 double cxpz = H[0]*V[ 3] + H[1]*V[ 6] + H[2]*V[10];
105 double cypz = H[0]*V[ 4] + H[1]*V[ 7] + H[2]*V[11];
106 double capz = H[0]*V[ 5] + H[1]*V[ 8] + H[2]*V[12];
107 double cbpz = H[0]*V[ 8] + H[1]*V[ 9] + H[2]*V[13];
108// double cqpz = H[0]*V[12] + H[1]*V[13] + H[2]*V[14];
109 double cpzpz = H[0]*H[0]*V[5] +H[1]*H[1]*V[9] + H[2]*H[2]*V[14]
110 + 2*( H[0]*H[1]*V[8] +H[0]*H[2]*V[12] +H[1]*H[2]*V[13]);
111
112 Double_t C[21];
113
114 C[ 0] = V[0];
115 C[ 1] = V[1];
116 C[ 2] = V[2];
117 C[ 3] = 0;
118 C[ 4] = 0;
119 C[ 5] = 0;
120 C[ 6] = V[3]*pz + a*cxpz;
121 C[ 7] = V[4]*pz + a*cypz;
122 C[ 8] = 0;
123 C[ 9] = V[5]*pz*pz + 2*a*pz*capz + a*a*cpzpz;
124 C[10] = V[6]*pz+b*cxpz;
125 C[11] = V[7]*pz+b*cypz;
126 C[12] = 0;
127 C[13] = V[8]*pz*pz + a*pz*cbpz + b*pz*capz + a*b*cpzpz;
128 C[14] = V[9]*pz*pz + 2*b*pz*cbpz + b*b*cpzpz;
129 C[15] = cxpz;
130 C[16] = cypz;
131 C[17] = 0;
132 C[18] = capz*pz + a*cpzpz;
133 C[19] = cbpz*pz + b*cpzpz;
134 C[20] = cpzpz;
135
136 Double_t Charge = (qp>0.) ?1 :( (qp<0) ?-1 :0);
137 if(qHypo) Charge *= *qHypo;
138
139 Double_t mass = Tr.GetMass();
140
141 if(PID)
142 {
143 TParticlePDG* particlePDG = TDatabasePDG::Instance()->GetParticle(*PID);
144 mass = (particlePDG) ? particlePDG->Mass() :0.13957;
145 }
146
147 Create(r,C,Charge,mass);
148}
149
151{
152 // Constructor from CBM KF vertex
153 fP[0] = vertex.GetRefX();
154 fP[1] = vertex.GetRefY();
155 fP[2] = vertex.GetRefZ();
156 for( Int_t i=0; i<6; i++)
157 fC[i] = vertex.GetCovMatrix( )[i];
158 fChi2 = vertex.GetRefChi2();
159 fNDF = vertex.GetRefNDF();//2*vertex.GetNContributors() - 3;
160 fQ = 0;
162 fIsLinearized = 0;
163 fSFromDecay = 0;
164}
165
166#endif
167
168#ifdef HomogeneousField
169KFParticle::KFParticle( const AliVTrack &track, Int_t PID )
170{
171 // Constructor from ALICE track, PID hypothesis should be provided
172
173 track.XvYvZv(fP);
174 track.PxPyPz(fP+3);
175 fQ = track.Charge();
176 track.GetCovarianceXYZPxPyPz( fC );
177
178 TParticlePDG* particlePDG = TDatabasePDG::Instance()->GetParticle(PID);
179 Double_t mass = (particlePDG) ? particlePDG->Mass() :0.13957;
180
181 Create(fP,fC,fQ,mass);
182}
183
184KFParticle::KFParticle( const AliVVertex &vertex )
185{
186 // Constructor from ALICE vertex
187
188 vertex.GetXYZ( fP );
189 vertex.GetCovarianceMatrix( fC );
190 fChi2 = vertex.GetChi2();
191 fNDF = 2*vertex.GetNContributors() - 3;
192 fQ = 0;
194 fIsLinearized = 0;
195 fSFromDecay = 0;
196}
197
198void KFParticle::GetExternalTrackParam( const KFParticleBase &p, Double_t &X, Double_t &Alpha, Double_t P[5] )
199{
200 // Conversion to AliExternalTrackParam parameterization
201
202 Double_t cosA = p.GetPx(), sinA = p.GetPy();
203 Double_t pt = TMath::Sqrt(cosA*cosA + sinA*sinA);
204 Double_t pti = 0;
205 if( pt<1.e-4 ){
206 cosA = 1;
207 sinA = 0;
208 } else {
209 pti = 1./pt;
210 cosA*=pti;
211 sinA*=pti;
212 }
213 Alpha = TMath::ATan2(sinA,cosA);
214 X = p.GetX()*cosA + p.GetY()*sinA;
215 P[0]= p.GetY()*cosA - p.GetX()*sinA;
216 P[1]= p.GetZ();
217 P[2]= 0;
218 P[3]= p.GetPz()*pti;
219 P[4]= p.GetQ()*pti;
220}
221
222#endif
223
224
225Bool_t KFParticle::GetDistanceFromVertexXY( const Double_t vtx[], const Double_t Cv[], Double_t &val, Double_t &err ) const
226{
227 //* Calculate DCA distance from vertex (transverse impact parameter) in XY
228 //* v = [xy], Cv=[Cxx,Cxy,Cyy ]-covariance matrix
229
230 Bool_t ret = 0;
231
232 Double_t mP[8];
233 Double_t mC[36];
234
235 Transport( GetDStoPoint(vtx), mP, mC );
236
237 Double_t dx = mP[0] - vtx[0];
238 Double_t dy = mP[1] - vtx[1];
239 Double_t px = mP[3];
240 Double_t py = mP[4];
241 Double_t pt = TMath::Sqrt(px*px + py*py);
242 Double_t ex=0, ey=0;
243 if( pt<1.e-4 ){
244 ret = 1;
245 pt = 1.;
246 val = 1.e4;
247 } else{
248 ex = px/pt;
249 ey = py/pt;
250 val = dy*ex - dx*ey;
251 }
252
253 Double_t h0 = -ey;
254 Double_t h1 = ex;
255 Double_t h3 = (dy*ey + dx*ex)*ey/pt;
256 Double_t h4 = -(dy*ey + dx*ex)*ex/pt;
257
258 err =
259 h0*(h0*GetCovariance(0,0) + h1*GetCovariance(0,1) + h3*GetCovariance(0,3) + h4*GetCovariance(0,4) ) +
260 h1*(h0*GetCovariance(1,0) + h1*GetCovariance(1,1) + h3*GetCovariance(1,3) + h4*GetCovariance(1,4) ) +
261 h3*(h0*GetCovariance(3,0) + h1*GetCovariance(3,1) + h3*GetCovariance(3,3) + h4*GetCovariance(3,4) ) +
262 h4*(h0*GetCovariance(4,0) + h1*GetCovariance(4,1) + h3*GetCovariance(4,3) + h4*GetCovariance(4,4) );
263
264 if( Cv ){
265 err+= h0*(h0*Cv[0] + h1*Cv[1] ) + h1*(h0*Cv[1] + h1*Cv[2] );
266 }
267
268 err = TMath::Sqrt(TMath::Abs(err));
269
270 return ret;
271}
272
273Bool_t KFParticle::GetDistanceFromVertexXY( const Double_t vtx[], Double_t &val, Double_t &err ) const
274{
275 return GetDistanceFromVertexXY( vtx, 0, val, err );
276}
277
278
279Bool_t KFParticle::GetDistanceFromVertexXY( const KFParticle &Vtx, Double_t &val, Double_t &err ) const
280{
281 //* Calculate distance from vertex [cm] in XY-plane
282
283 return GetDistanceFromVertexXY( Vtx.fP, Vtx.fC, val, err );
284}
285
286#ifdef HomogeneousField
287Bool_t KFParticle::GetDistanceFromVertexXY( const AliVVertex &Vtx, Double_t &val, Double_t &err ) const
288{
289 //* Calculate distance from vertex [cm] in XY-plane
290
291 return GetDistanceFromVertexXY( KFParticle(Vtx), val, err );
292}
293#endif
294
295Double_t KFParticle::GetDistanceFromVertexXY( const Double_t vtx[] ) const
296{
297 //* Calculate distance from vertex [cm] in XY-plane
298 Double_t val, err;
299 GetDistanceFromVertexXY( vtx, 0, val, err );
300 return val;
301}
302
304{
305 //* Calculate distance from vertex [cm] in XY-plane
306
307 return GetDistanceFromVertexXY( Vtx.fP );
308}
309
310#ifdef HomogeneousField
311Double_t KFParticle::GetDistanceFromVertexXY( const AliVVertex &Vtx ) const
312{
313 //* Calculate distance from vertex [cm] in XY-plane
314
316}
317#endif
318
320{
321 //* Calculate distance to other particle [cm]
322
323 Double_t dS, dS1;
324 GetDStoParticleXY( p, dS, dS1 );
325 Double_t mP[8], mC[36], mP1[8], mC1[36];
326 Transport( dS, mP, mC );
327 p.Transport( dS1, mP1, mC1 );
328 Double_t dx = mP[0]-mP1[0];
329 Double_t dy = mP[1]-mP1[1];
330 return TMath::Sqrt(dx*dx+dy*dy);
331}
332
334{
335 //* Calculate sqrt(Chi2/ndf) deviation from other particle
336
337 Double_t dS, dS1;
338 GetDStoParticleXY( p, dS, dS1 );
339 Double_t mP1[8], mC1[36];
340 p.Transport( dS1, mP1, mC1 );
341
342 Double_t d[2]={ fP[0]-mP1[0], fP[1]-mP1[1] };
343
344 Double_t sigmaS = .1+10.*TMath::Sqrt( (d[0]*d[0]+d[1]*d[1] )/
345 (mP1[3]*mP1[3]+mP1[4]*mP1[4] ) );
346
347 Double_t h[2] = { mP1[3]*sigmaS, mP1[4]*sigmaS };
348
349 mC1[0] +=h[0]*h[0];
350 mC1[1] +=h[1]*h[0];
351 mC1[2] +=h[1]*h[1];
352
353 return GetDeviationFromVertexXY( mP1, mC1 )*TMath::Sqrt(2./1.);
354}
355
356
357Double_t KFParticle::GetDeviationFromVertexXY( const Double_t vtx[], const Double_t Cv[] ) const
358{
359 //* Calculate sqrt(Chi2/ndf) deviation from vertex
360 //* v = [xyz], Cv=[Cxx,Cxy,Cyy,Cxz,Cyz,Czz]-covariance matrix
361
362 Double_t val, err;
363 Bool_t problem = GetDistanceFromVertexXY( vtx, Cv, val, err );
364 if( problem || err<1.e-20 ) return 1.e4;
365 else return val/err;
366}
367
368
370{
371 //* Calculate sqrt(Chi2/ndf) deviation from vertex
372 //* v = [xyz], Cv=[Cxx,Cxy,Cyy,Cxz,Cyz,Czz]-covariance matrix
373
374 return GetDeviationFromVertexXY( Vtx.fP, Vtx.fC );
375}
376
377#ifdef HomogeneousField
378Double_t KFParticle::GetDeviationFromVertexXY( const AliVVertex &Vtx ) const
379{
380 //* Calculate sqrt(Chi2/ndf) deviation from vertex
381 //* v = [xyz], Cv=[Cxx,Cxy,Cyy,Cxz,Cyz,Czz]-covariance matrix
382
383 KFParticle v(Vtx);
384 return GetDeviationFromVertexXY( v.fP, v.fC );
385}
386#endif
387
388Double_t KFParticle::GetAngle ( const KFParticle &p ) const
389{
390 //* Calculate the opening angle between two particles
391
392 Double_t dS, dS1;
393 GetDStoParticle( p, dS, dS1 );
394 Double_t mP[8], mC[36], mP1[8], mC1[36];
395 Transport( dS, mP, mC );
396 p.Transport( dS1, mP1, mC1 );
397 Double_t n = TMath::Sqrt( mP[3]*mP[3] + mP[4]*mP[4] + mP[5]*mP[5] );
398 Double_t n1= TMath::Sqrt( mP1[3]*mP1[3] + mP1[4]*mP1[4] + mP1[5]*mP1[5] );
399 n*=n1;
400 Double_t a = 0;
401 if( n>1.e-8 ) a = ( mP[3]*mP1[3] + mP[4]*mP1[4] + mP[5]*mP1[5] )/n;
402 if (TMath::Abs(a)<1.) a = TMath::ACos(a);
403 else a = (a>=0) ?0 :TMath::Pi();
404 return a;
405}
406
407Double_t KFParticle::GetAngleXY( const KFParticle &p ) const
408{
409 //* Calculate the opening angle between two particles in XY plane
410
411 Double_t dS, dS1;
412 GetDStoParticleXY( p, dS, dS1 );
413 Double_t mP[8], mC[36], mP1[8], mC1[36];
414 Transport( dS, mP, mC );
415 p.Transport( dS1, mP1, mC1 );
416 Double_t n = TMath::Sqrt( mP[3]*mP[3] + mP[4]*mP[4] );
417 Double_t n1= TMath::Sqrt( mP1[3]*mP1[3] + mP1[4]*mP1[4] );
418 n*=n1;
419 Double_t a = 0;
420 if( n>1.e-8 ) a = ( mP[3]*mP1[3] + mP[4]*mP1[4] )/n;
421 if (TMath::Abs(a)<1.) a = TMath::ACos(a);
422 else a = (a>=0) ?0 :TMath::Pi();
423 return a;
424}
425
426Double_t KFParticle::GetAngleRZ( const KFParticle &p ) const
427{
428 //* Calculate the opening angle between two particles in RZ plane
429
430 Double_t dS, dS1;
431 GetDStoParticle( p, dS, dS1 );
432 Double_t mP[8], mC[36], mP1[8], mC1[36];
433 Transport( dS, mP, mC );
434 p.Transport( dS1, mP1, mC1 );
435 Double_t nr = TMath::Sqrt( mP[3]*mP[3] + mP[4]*mP[4] );
436 Double_t n1r= TMath::Sqrt( mP1[3]*mP1[3] + mP1[4]*mP1[4] );
437 Double_t n = TMath::Sqrt( nr*nr + mP[5]*mP[5] );
438 Double_t n1= TMath::Sqrt( n1r*n1r + mP1[5]*mP1[5] );
439 n*=n1;
440 Double_t a = 0;
441 if( n>1.e-8 ) a = ( nr*n1r +mP[5]*mP1[5])/n;
442 if (TMath::Abs(a)<1.) a = TMath::ACos(a);
443 else a = (a>=0) ?0 :TMath::Pi();
444 return a;
445}
446
447
448/*
449
450#include "AliExternalTrackParam.h"
451
452void KFParticle::GetDStoParticleALICE( const KFParticleBase &p,
453 Double_t &DS, Double_t &DS1 )
454 const
455{
456 DS = DS1 = 0;
457 Double_t x1, a1, x2, a2;
458 Double_t par1[5], par2[5], cov[15];
459 for(int i=0; i<15; i++) cov[i] = 0;
460 cov[0] = cov[2] = cov[5] = cov[9] = cov[14] = .001;
461
462 GetExternalTrackParam( *this, x1, a1, par1 );
463 GetExternalTrackParam( p, x2, a2, par2 );
464
465 AliExternalTrackParam t1(x1,a1, par1, cov);
466 AliExternalTrackParam t2(x2,a2, par2, cov);
467
468 Double_t xe1=0, xe2=0;
469 t1.GetDCA( &t2, -GetFieldAlice(), xe1, xe2 );
470 t1.PropagateTo( xe1, -GetFieldAlice() );
471 t2.PropagateTo( xe2, -GetFieldAlice() );
472
473 Double_t xyz1[3], xyz2[3];
474 t1.GetXYZ( xyz1 );
475 t2.GetXYZ( xyz2 );
476
477 DS = GetDStoPoint( xyz1 );
478 DS1 = p.GetDStoPoint( xyz2 );
479
480 return;
481}
482*/
483
484 // * Pseudo Proper Time of decay = (r*pt) / |pt| * M/|pt|
485Double_t KFParticle::GetPseudoProperDecayTime( const KFParticle &pV, const Double_t& mass, Double_t* timeErr2 ) const
486{ // TODO optimize with respect to time and stability
487 const Double_t ipt2 = 1/( Px()*Px() + Py()*Py() );
488 const Double_t mipt2 = mass*ipt2;
489 const Double_t dx = X() - pV.X();
490 const Double_t dy = Y() - pV.Y();
491
492 if ( timeErr2 ) {
493 // -- calculate error = sigma(f(r)) = f'Cf'
494 // r = {x,y,px,py,x_pV,y_pV}
495 // df/dr = { px*m/pt^2,
496 // py*m/pt^2,
497 // ( x - x_pV )*m*(1/pt^2 - 2(px/pt^2)^2),
498 // ( y - y_pV )*m*(1/pt^2 - 2(py/pt^2)^2),
499 // -px*m/pt^2,
500 // -py*m/pt^2 }
501 const Double_t f0 = Px()*mipt2;
502 const Double_t f1 = Py()*mipt2;
503 const Double_t mipt2derivative = mipt2*(1-2*Px()*Px()*ipt2);
504 const Double_t f2 = dx*mipt2derivative;
505 const Double_t f3 = -dy*mipt2derivative;
506 const Double_t f4 = -f0;
507 const Double_t f5 = -f1;
508
509 const Double_t& mC00 = GetCovariance(0,0);
510 const Double_t& mC10 = GetCovariance(0,1);
511 const Double_t& mC11 = GetCovariance(1,1);
512 const Double_t& mC20 = GetCovariance(3,0);
513 const Double_t& mC21 = GetCovariance(3,1);
514 const Double_t& mC22 = GetCovariance(3,3);
515 const Double_t& mC30 = GetCovariance(4,0);
516 const Double_t& mC31 = GetCovariance(4,1);
517 const Double_t& mC32 = GetCovariance(4,3);
518 const Double_t& mC33 = GetCovariance(4,4);
519 const Double_t& mC44 = pV.GetCovariance(0,0);
520 const Double_t& mC54 = pV.GetCovariance(1,0);
521 const Double_t& mC55 = pV.GetCovariance(1,1);
522
523 *timeErr2 =
524 f5*mC55*f5 +
525 f5*mC54*f4 +
526 f4*mC44*f4 +
527 f3*mC33*f3 +
528 f3*mC32*f2 +
529 f3*mC31*f1 +
530 f3*mC30*f0 +
531 f2*mC22*f2 +
532 f2*mC21*f1 +
533 f2*mC20*f0 +
534 f1*mC11*f1 +
535 f1*mC10*f0 +
536 f0*mC00*f0;
537 }
538 return ( dx*Px() + dy*Py() )*mipt2;
539}
const Float_t d
Z-ccordinate of the first GEM-station.
Definition BmnMwpcHit.cxx:7
const Float_t z0
Definition BmnMwpcHit.cxx:6
friend F32vec4 sqrt(const F32vec4 &a)
Definition P4_F32vec4.h:34
__m128 v
Definition P4_F32vec4.h:1
int i
Definition P4_F32vec4.h:22
__m128 m
Definition P4_F32vec4.h:27
Double_t GetMass()
Definition CbmKFTrack.h:55
Double_t * GetTrack()
Is it electron.
Definition CbmKFTrack.h:51
Double_t * GetCovMatrix()
array[6] of track parameters(x,y,tx,ty,qp,z)
Definition CbmKFTrack.h:52
virtual Double_t & GetRefY()
virtual Double_t & GetRefX()
virtual Double_t & GetRefZ()
virtual Double_t & GetRefChi2()
Array[6] of covariance matrix.
virtual Int_t & GetRefNDF()
Chi^2 after fit.
virtual Double_t * GetCovMatrix()
Double_t GetPz() const
Double_t GetY() const
Bool_t fAtProductionVertex
Double_t GetPx() const
Double_t GetZ() const
Int_t GetQ() const
Double_t GetPy() const
Double_t GetX() const
Double_t fC[36]
void ConstructGamma(const KFParticle &daughter1, const KFParticle &daughter2)
void GetDStoParticleXY(const KFParticleBase &p, Double_t &DS, Double_t &DSp) const
Definition KFParticle.h:986
Bool_t GetDistanceFromVertexXY(const Double_t vtx[], Double_t &val, Double_t &err) const
static void GetExternalTrackParam(const KFParticleBase &p, Double_t &X, Double_t &Alpha, Double_t P[5])
const Double_t & Px() const
Definition KFParticle.h:131
Double_t GetDeviationFromVertexXY(const Double_t v[], const Double_t Cv[]=0) const
Double_t GetDeviationFromParticleXY(const KFParticle &p) const
void Transport(Double_t dS, Double_t P[], Double_t C[]) const
Definition KFParticle.h:998
const Double_t & Y() const
Definition KFParticle.h:129
const Double_t & Py() const
Definition KFParticle.h:132
Double_t GetAngle(const KFParticle &p) const
Double_t GetPseudoProperDecayTime(const KFParticle &primVertex, const Double_t &mass, Double_t *timeErr2=0) const
Double_t GetDistanceFromParticleXY(const KFParticle &p) const
Double_t GetAngleXY(const KFParticle &p) const
Double_t GetAngleRZ(const KFParticle &p) const
const Double_t & X() const
Definition KFParticle.h:128
Double_t GetDStoPoint(const Double_t xyz[]) const
Definition KFParticle.h:893
void GetDStoParticle(const KFParticle &p, Double_t &DS, Double_t &DSp) const
Definition KFParticle.h:904
Double_t GetCovariance(int i) const
Definition KFParticle.h:505
void Create(const Double_t Param[], const Double_t Cov[], Int_t Charge, Double_t mass)