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