EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
FairTrackParH.cxx
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file FairTrackParH.cxx
1 // Class for the representation of a track as helix (SC system)
2 //
3 // Authors: M. Al-Turany, A. Fontana, L. Lavezzi and A. Rotondi
4 //
5 //
6 // GEANE parameters (q/p, lambda, phi, y_perp, z_perp) of Helix track
7 // The Helix can be constructed using the Helix parameter (1/p, lambda, phi,y_perp,z_perp) in SC reference
8 // and the covariance matrix. Or using position and momentum in LAB referance.
9 
10 
11 #include "FairTrackParH.h"
12 
13 #include "FairGeaneUtil.h"
14 #include "FairRunAna.h"
15 #include "FairField.h"
16 
17 #include "TMath.h"
18 #include <cmath>
19 #include <iostream>
20 
21 using std::cout;
22 using std::endl;
23 
25 
27  : FairTrackPar(),
28  fLm (0.),
29  fPhi (0.),
30  fDLm(0.),
31  fDPhi(0.),
32  fX_sc (0.),
33  fY_sc (0.),
34  fZ_sc (0.),
35  fDX_sc(0.),
36  fDY_sc(0.),
37  fDZ_sc(0.),
38  cLm(0.),
39  sLm(0.),
40  cphi(0.),
41  sphi(0.)
42 {
43  for(Int_t i=0; i<15; i++) {
44  fCovMatrix[i]=0;
45  }
46  for(int i = 0; i < 6; i++) for(int j = 0; j < 6; j++) { fCovMatrix66[i][j] = 0.; }
47 
48 }
49 
50 // constructor in SC
51 FairTrackParH::FairTrackParH(Double_t x, Double_t y, Double_t z,
52  Double_t lm, Double_t phi, Double_t qp,
53  Double_t CovMatrix[15])
54  : FairTrackPar(),
55  fLm (lm),
56  fPhi (phi),
57  fDLm(0.),
58  fDPhi(0.),
59  fX_sc (x),
60  fY_sc (y),
61  fZ_sc (z),
62  fDX_sc(0.),
63  fDY_sc(0.),
64  fDZ_sc(0.),
65  cLm(TMath::Cos(lm)),
66  sLm(TMath::Sin(lm)),
67  cphi(TMath::Cos(phi)),
68  sphi(TMath::Sin(phi))
69 {
70 
71  /*
72  fLm = lm;
73  fPhi = phi;
74  */
75  fQp = qp;
76  Double_t P = TMath::Abs(1/fQp);
77  //fq= int (P * fQp);
78  fq = (int)TMath::Sign(1.0, fQp);
79  for(Int_t i=0; i<15; i++) {
80  fCovMatrix[i]=CovMatrix[i];
81  }
82  /*
83  cLm= TMath::Cos(fLm);
84  sLm= TMath::Sin(fLm);
85  cphi= TMath::Cos(fPhi);
86  sphi= TMath::Sin(fPhi);
87  */
88  fPx = P * cLm* cphi;
89  fPy = P * cLm* sphi;
90  fPz = P * sLm;
91 
92 
93  /*
94  fX_sc = x;
95  fY_sc = y;
96  fZ_sc = z;
97  */
98 
99  fX =fX_sc*cLm*cphi -fY_sc*sphi -fZ_sc*cphi*sLm;
100  fY =fX_sc*cLm*sphi +fY_sc*cphi -fZ_sc*sphi*sLm;
101  fZ =fX_sc*sLm +fZ_sc*cLm;
102 
103  fDQp = TMath::Sqrt(fabs(fCovMatrix[0]));
104  fDLm = TMath::Sqrt(fabs(fCovMatrix[5]));
105  fDPhi = TMath::Sqrt(fabs(fCovMatrix[9]));
106  fDX_sc = 0.;
107  fDY_sc = TMath::Sqrt(fabs(fCovMatrix[12]));
108  fDZ_sc = TMath::Sqrt(fabs(fCovMatrix[14]));
109 
110  Double_t PD[3],RD[6][6],H[3],PC[3],RC[15];
111  Int_t CH;
112  PC[0] = fQp;
113  PC[1] = fLm;
114  PC[2] = fPhi;
115 
116  for(Int_t i=0; i<15; i++) {
117  RC[i]=fCovMatrix[i];
118  }
119 
120  // retrieve field
121  Double_t pnt[3];
122  pnt[0] = fX;
123  pnt[1] = fY;
124  pnt[2] = fZ;
126  fRun->GetField()->GetFieldValue(pnt, H);
127 
128  CH=fq;
129  FairGeaneUtil util;
130  util.FromSCToMars(PC,RC,H,CH,PD,RD);
131 
132  // test
133  fDPx = sqrt(fabs(RD[0][0]));
134  fDPy = sqrt(fabs(RD[1][1]));
135  fDPz = sqrt(fabs(RD[2][2]));
136  fDX = sqrt(fabs(RD[3][3]));
137  fDY = sqrt(fabs(RD[4][4]));
138  fDZ = sqrt(fabs(RD[5][5]));
139 
140  for(int i = 0; i < 6; i++) for(int j = 0; j < 6; j++) { fCovMatrix66[i][j] = RD[i][j]; }
141 
142 }
143 
144 //constructor in LAB
145 FairTrackParH::FairTrackParH(TVector3 pos, TVector3 Mom, TVector3 posErr, TVector3 MomErr, Int_t q)
146  : FairTrackPar(pos.x(),pos.y(),pos.z(),Mom.x(),Mom.y(),Mom.z(),q),
147  fLm (0.),
148  fPhi (0.),
149  fDLm(0.),
150  fDPhi(0.),
151  fX_sc (0.),
152  fY_sc (0.),
153  fZ_sc (0.),
154  fDX_sc(0.),
155  fDY_sc(0.),
156  fDZ_sc(0.),
157  cLm(0.),
158  sLm(0.),
159  cphi(0.),
160  sphi(0.)
161 {
162  Reset();
163  SetPx(Mom.x());
164  SetPy(Mom.y());
165  SetPz(Mom.z());
166 
167  SetX(pos.x()); //x (lab)
168  SetY(pos.y()); //y (lab)
169  SetZ(pos.z()); //z (lab)
170 
171 
172 
173  fq= int (q/TMath::Abs(q));
174  Double_t P =TMath::Sqrt(fPx*fPx+fPy*fPy+fPz*fPz);
175  fLm = TMath::ASin(fPz/P);
176 
177  fPhi = TMath::ATan2(fPy,fPx);
178  fQp = fq/P;
179 
180  cLm= TMath::Cos(fLm);
181  sLm= TMath::Sin(fLm);
182  cphi= TMath::Cos(fPhi);
183  sphi= TMath::Sin(fPhi);
184 
185  fDPx= MomErr.x(); //dpx
186  fDPy= MomErr.y(); //dpy
187  fDPz= MomErr.z(); //dpz
188 
189  fX_sc = fX*cphi*cLm+ fY*cLm*sphi+fZ*sLm;
190  fY_sc = fY*cphi-fX*sphi;
191  fZ_sc = fZ*cLm-fY*sLm*sphi-fX*sLm*cphi;
192 
193  fDX = posErr.x(); //dx (lab)
194  fDY = posErr.y(); //dy (lab)
195  fDZ = posErr.z(); //dz (lab)
196 
197 
198 
199  Double_t PD[3],RD[6][6],H[3],PC[3],RC[15];
200  Int_t CH;
201  PD[0]=Mom.x();
202  PD[1]=Mom.y();
203  PD[2]=Mom.z();
204  for(Int_t i=0; i<6; i++) for(Int_t j=0; j<6; j++) {
205  RD[i][j]=0;
206  }
207  RD[0][0] = fDPx * fDPx;
208  RD[1][1] = fDPy * fDPy;
209  RD[2][2] = fDPz * fDPz;
210  RD[3][3] = fDX * fDX;
211  RD[4][4] = fDY * fDY;
212  RD[5][5] = fDZ * fDZ;
213 
214  // retrieve field
215  Double_t pnt[3];
216  pnt[0] = fX;
217  pnt[1] = fY;
218  pnt[2] = fZ;
220  fRun->GetField()->GetFieldValue(pnt, H);
221 
222  CH=fq;
223  FairGeaneUtil util;
224 
225  util.FromMarsToSC(PD,RD,H,CH,PC,RC);
226 
227  for(Int_t i=0; i<15; i++) {
228  fCovMatrix[i]=RC[i];
229  }
230 
231  fDX_sc = 0;
232  fDY_sc = TMath::Sqrt(fabs(fCovMatrix[12]));
233  fDZ_sc = TMath::Sqrt(fabs(fCovMatrix[14]));
234 
235  for(int i = 0; i < 6; i++) for(int j = 0; j < 6; j++) { fCovMatrix66[i][j] = RD[i][j]; }
236 
237 }
238 
240  : FairTrackPar(),
241  fLm (0.),
242  fPhi (0.),
243  fDLm(0.),
244  fDPhi(0.),
245  fX_sc (0.),
246  fY_sc (0.),
247  fZ_sc (0.),
248  fDX_sc(0.),
249  fDY_sc(0.),
250  fDZ_sc(0.),
251  cLm(0.),
252  sLm(0.),
253  cphi(0.),
254  sphi(0.)
255 {
256 
257  // q/p, v', w' --> q/p, lambda, phi
258  Double_t PD[3] = {parab->GetQp(), parab->GetTV(), parab->GetTW()};
259  Double_t RD[15];
260  parab->GetCov(RD);
261  // retrieve field
262  TVector3 xyz(parab->GetX(), parab->GetY(), parab->GetZ());
263  Double_t H[3], pnt[3];
264  pnt[0] = xyz.X();
265  pnt[1] = xyz.Y();
266  pnt[2] = xyz.Z();
268  fRun->GetField()->GetFieldValue(pnt, H);
269  Int_t CH = parab->GetQ();
270 
271  Double_t DJ[3] = {parab->GetJVer().X(), parab->GetJVer().Y(), parab->GetJVer().Z()};
272  Double_t DK[3] = {parab->GetKVer().X(), parab->GetKVer().Y(), parab->GetKVer().Z()};
273 
274  Double_t SPU = parab->GetSPU();
275 
276  Int_t IERR = 0;
277  Double_t PC[3], RC[15];
278 
279  FairGeaneUtil util;
280  util.FromSDToSC(PD, RD, H, CH, SPU, DJ, DK,
281  IERR, PC, RC);
282 
283  ierr = IERR;
284 
285  if(ierr == 0) SetTrackPar(parab->GetX(), parab->GetY(), parab->GetZ(),
286  parab->GetPx(), parab->GetPy(), parab->GetPz(),
287  CH, RC);
288  else { cout << "FairTrackParH(FairTrackParP *) contructor ERROR: CANNOT convert parabola to helix" << endl; }
289 
290 }
291 
292 // track definition in LAB
293 void FairTrackParH::SetTrackPar(Double_t X, Double_t Y, Double_t Z,
294  Double_t Px, Double_t Py, Double_t Pz, Int_t Q,
295  Double_t CovMatrix[15])
296 {
297  Reset();
298  Double_t P =TMath::Sqrt(Px*Px+Py*Py+Pz*Pz);
299  fLm = TMath::ASin(Pz/P);
300 
301  fPhi = TMath::ATan2(Py,Px);
302  if (Q!=0) { fq = int (TMath::Abs(Q)/Q); }
303  fQp = fq/P;
304 
305  cLm= TMath::Cos(fLm);
306  sLm= TMath::Sin(fLm);
307  cphi= TMath::Cos(fPhi);
308  sphi= TMath::Sin(fPhi);
309 
310  SetX(X);
311  SetY(Y);
312  SetZ(Z);
313 
314  SetPx(Px);
315  SetPy(Py);
316  SetPz(Pz);
317 
318  fX_sc = fX*cphi*cLm+ fY*cLm*sphi+fZ*sLm;
319  fY_sc = fY*cphi-fX*sphi;
320  fZ_sc = fZ*cLm-fY*sLm*sphi-fX*sLm*cphi;
321 
322  for(Int_t i=0; i<15; i++) {
323  fCovMatrix[i]=CovMatrix[i];
324  }
325 
326  fDQp = TMath::Sqrt(fabs(fCovMatrix[0]));
327  fDLm = TMath::Sqrt(fabs(fCovMatrix[5]));
328  fDPhi = TMath::Sqrt(fabs(fCovMatrix[9]));
329  fDX_sc = 0;
330  fDY_sc = TMath::Sqrt(fabs(fCovMatrix[12]));
331  fDZ_sc = TMath::Sqrt(fabs(fCovMatrix[14]));
332 
333  fDPx= GetDPx();
334  fDPy= GetDPy();
335  fDPz= GetDPz();
336 
337 
338  Double_t PD[3],RD[6][6],H[3],PC[3],RC[15];
339  Int_t CH;
340  PC[0] = fQp;
341  PC[1] = fLm;
342  PC[2] = fPhi;
343 
344  for(Int_t i=0; i<15; i++) {
345  RC[i]=fCovMatrix[i];
346  }
347 
348  // retrieve field
349  Double_t pnt[3];
350  pnt[0] = fX;
351  pnt[1] = fY;
352  pnt[2] = fZ;
354  fRun->GetField()->GetFieldValue(pnt, H);
355 
356  CH=fq;
357  FairGeaneUtil util;
358  util.FromSCToMars(PC,RC,H,CH,PD,RD);
359 
360  fDPx = sqrt(fabs(RD[0][0]));
361  fDPy = sqrt(fabs(RD[1][1]));
362  fDPz = sqrt(fabs(RD[2][2]));
363  fDX = sqrt(fabs(RD[3][3]));
364  fDY = sqrt(fabs(RD[4][4]));
365  fDZ = sqrt(fabs(RD[5][5]));
366 
367  for(int i = 0; i < 6; i++) for(int j = 0; j < 6; j++) { fCovMatrix66[i][j] = RD[i][j]; }
368 
369 }
370 
371 //track definition in SC
372 void FairTrackParH::SetTrackPar(Double_t x, Double_t y, Double_t z,
373  Double_t qp, Double_t lm, Double_t phi, Double_t CovMatrix[15])
374 {
375  fLm = lm;
376  fPhi = phi;
377  fQp = qp;
378  Double_t P = TMath::Abs(1/fQp);
379 // fq= int (P * fQp);
380  fq = (int)TMath::Sign(1.0, fQp);
381  for(Int_t i=0; i<15; i++) {
382  fCovMatrix[i]=CovMatrix[i];
383 
384  }
385 
386  cLm= TMath::Cos(fLm);
387  sLm= TMath::Sin(fLm);
388  cphi= TMath::Cos(fPhi);
389  sphi= TMath::Sin(fPhi);
390 
391  fPx = P * cLm* cphi;
392  fPy = P * cLm* sphi;
393  fPz = P * sLm;
394 
395  fX_sc = x;
396  fY_sc = y;
397  fZ_sc = z;
398 
399  fX =fX_sc*cLm*cphi -fY_sc*sphi -fZ_sc*cphi*sLm;
400  fY =fX_sc*cLm*sphi +fY_sc*cphi -fZ_sc*sphi*sLm;
401  fZ =fX_sc*sLm +fZ_sc*cLm;
402 
403  fDQp = TMath::Sqrt(fabs(fCovMatrix[0]));
404  fDLm = TMath::Sqrt(fabs(fCovMatrix[5]));
405  fDPhi = TMath::Sqrt(fabs(fCovMatrix[9]));
406  fDX_sc = 0;
407  fDY_sc = TMath::Sqrt(fabs(fCovMatrix[12]));
408  fDZ_sc = TMath::Sqrt(fabs(fCovMatrix[14]));
409 
410  fDPx= GetDPx() ;
411  fDPy= GetDPy() ;
412  fDPz= GetDPz() ;
413 
414 
415  Double_t PD[3],RD[6][6],H[3],PC[3],RC[15];
416  Int_t CH;
417  PC[0] = fQp;
418  PC[1] = fLm;
419  PC[2] = fPhi;
420 
421  for(Int_t i=0; i<15; i++) {
422  RC[i]=fCovMatrix[i];
423  }
424 
425  // retrieve field
426  Double_t pnt[3];
427  pnt[0] = fX;
428  pnt[1] = fY;
429  pnt[2] = fZ;
431  fRun->GetField()->GetFieldValue(pnt, H);
432 
433  CH=fq;
434  FairGeaneUtil util;
435  util.FromSCToMars(PC,RC,H,CH,PD,RD);
436 
437  // test
438  fDPx = sqrt(fabs(RD[0][0]));
439  fDPy = sqrt(fabs(RD[1][1]));
440  fDPz = sqrt(fabs(RD[2][2]));
441  fDX = sqrt(fabs(RD[3][3]));
442  fDY = sqrt(fabs(RD[4][4]));
443  fDZ = sqrt(fabs(RD[5][5]));
444 
445  for(int i = 0; i < 6; i++) for(int j = 0; j < 6; j++) { fCovMatrix66[i][j] = RD[i][j]; }
446 }
447 
448 
450 {
451 
452  fDPx= GetDPx();
453  fDPy= GetDPy();
454  fDPz= GetDPz();
455 
456  Double_t fP =sqrt(fPx*fPx+fPy*fPy+fPz*fPz);
457  Double_t fDP= (2*fPx*fDPx+2*fPy*fDPy+2*fPz*fDPz)/(2*fP); //dp
458  fDQp = - fDP/(fP*fP); // d(1/p)
459 
460  Double_t fDPQDLm = - sLm * cphi / fPx; // d(1/p)/dLambda
461  Double_t fDPQDPhi= - cLm * TMath::Sin(fPhi) / fPx; // d(1/p)/dphi
462 
463  Double_t fDPQDX_sc = (fX_sc*pow(fZ,3))/(fPz*pow(pow(fX_sc,2) + pow(fY_sc,2),2.5)*
464  pow(1 + pow(fZ_sc,2)/(pow(fX_sc,2) + pow(fY_sc,2)),1.5)) -
465  (fX_sc*fZ_sc)/(fPz*pow(pow(fX_sc,2) +
466  pow(fY_sc,2),1.5)*TMath::Sqrt(1 + pow(fZ_sc,2)/(pow(fX_sc,2) + pow(fY_sc,2)))); //d(1/p)/dx
467 
468  Double_t fDPQDY_sc = (fY_sc*pow(fZ_sc,3))/(fPz*pow(pow(fX_sc,2) + pow(fY_sc,2),2.5)*
469  pow(1 + pow(fZ_sc,2)/(pow(fX_sc,2) + pow(fY_sc,2)),1.5)) -
470  (fY_sc*fZ_sc)/(fPz*pow(pow(fX_sc,2) + pow(fY_sc,2),1.5)*
471  TMath::Sqrt(1 + pow(fZ_sc,2)/(pow(fX_sc,2) + pow(fY_sc,2)))); //d(1/p)/dy
472 
473  fDLm= (-((fPz*fDP)/pow(fP,2)) + fDPz/fP)/ TMath::Sqrt(1 - pow(fPz,2)/pow(fP,2)); // d(Lambda)
474 
475  Double_t fDLmDPhi =-((fPx*TMath::Tan(fPhi)/cphi)/
476  (fP*TMath::Sqrt(1 - (pow(fPx,2)*pow(1/cphi,2))/pow(fP,2)))); // dLambda/dPhi
477 
478  Double_t fDLmDX_sc = -((fX_sc*fZ_sc)/(pow(pow(fX_sc,2) + pow(fY_sc,2),1.5)*
479  (1 + pow(fZ_sc,2)/(pow(fX_sc,2) + pow(fY_sc,2))))); // dLambda/dX
480 
481  Double_t fDLmDY_sc = -((fY_sc*fZ_sc)/(pow(pow(fX_sc,2) + pow(fY_sc,2),1.5)*
482  (1 + pow(fZ_sc,2)/(pow(fX_sc,2) + pow(fY_sc,2))))); // dLambda/dY
483 
484  fDPhi= (-((fPy*fDP/cLm)/pow(fP,2)) +
485  (fDPy/cLm)/fP +(fPy*fDLm*TMath::Tan(fLm)/cLm)/fP) /TMath::Sqrt(1 - (pow(fPy,2)*pow(1/cLm,2))/pow(fP,2)); // d(Phi)
486 
487  Double_t fDPhiDx_sc = -(fY_sc/(pow(fX_sc,2)*(1 + pow(fY_sc,2)/pow(fX_sc,2)))); // dPhi/dx
488 
489  Double_t fDPhiDy_sc = 1/(fX_sc*(1 + pow(fY_sc,2)/pow(fX_sc,2))); // dPhi/dy
490 
491  Double_t fDXDY_sc = 1/TMath::Tan(fPhi); // dX/dY
492 
493  if(fDQp==0 && fDLm==0 && fDPhi ==0 ) {
494  cout << "FairTrackParH::CalCov() No Errors" << endl;
495  } else {
496  fCovMatrix[0] =fDQp*fDQp;
497  fCovMatrix[1] =fDPQDLm;
498  fCovMatrix[2] =fDPQDPhi;
499  fCovMatrix[3] =fDPQDX_sc;
500  fCovMatrix[4] =fDPQDY_sc;
501  fCovMatrix[5] =fDLm*fDLm;
502  fCovMatrix[6] =fDLmDPhi;
503  fCovMatrix[7] =fDLmDX_sc;
504  fCovMatrix[8] =fDLmDY_sc;
505  fCovMatrix[9] =fDPhi*fDPhi;
506  fCovMatrix[10] =fDPhiDx_sc;
507  fCovMatrix[11] =fDPhiDy_sc;
508  fCovMatrix[12] =fDX_sc*fDX_sc;
509  fCovMatrix[13] =fDXDY_sc;
510  fCovMatrix[14] =fDY_sc*fDY_sc;
511  }
512 }
513 
515  : FairTrackPar(Trkbase),
516  fLm (0.),
517  fPhi (0.),
518  fDLm(0.),
519  fDPhi(0.),
520  fX_sc (0.),
521  fY_sc (0.),
522  fZ_sc (0.),
523  fDX_sc(0.),
524  fDY_sc(0.),
525  fDZ_sc(0.),
526  cLm(0.),
527  sLm(0.),
528  cphi(0.),
529  sphi(0.)
530 {
531  cout << "FairTrackParH::FairTrackParH(FairTrackPar &Trkbase)" << endl;
532  Reset();
533  fX = Trkbase.GetX();
534  fY = Trkbase.GetY();
535  fZ = Trkbase.GetZ();
536 
537  fPx = Trkbase.GetPx();
538  fPy = Trkbase.GetPy();
539  fPz = Trkbase.GetPz();
540  fq = Trkbase.GetQ();
541  Double_t fP=TMath::Sqrt(fPx*fPx +fPy*fPy +fPz*fPz );
542  if (fP!=0) { fQp = fq/fP; }
543  else { fQp=0; }
544  fLm = TMath::ASin(fPz/fP);
545  fPhi = TMath::ATan2(fPy,fPx);
546 
547  cLm= TMath::Cos(fLm);
548  sLm= TMath::Sin(fLm);
549  cphi= TMath::Cos(fPhi);
550  sphi= TMath::Sin(fPhi);
551 
552  fDPx = Trkbase.GetDPx();
553  fDPy = Trkbase.GetDPy();
554  fDPz = Trkbase.GetDPz();
555 
556  fDX = Trkbase.GetDX();
557  fDY = Trkbase.GetDY();
558  fDZ = Trkbase.GetDZ();
559 
560  fX_sc = fX*cphi*cLm+ fY*cLm*sphi+fZ*sLm;
561  fY_sc = fY*cphi-fX*sphi;
562  fZ_sc = fZ*cLm-fY*sLm*sphi-fX*sLm*cphi;
563 
564  for(Int_t i=0; i<15; i++) {
565  fCovMatrix[i]=0;
566  }
567 
568  Double_t PD[3],RD[6][6],H[3],PC[3],RC[15];
569  Int_t CH;
570  PD[0]=fPx;
571  PD[1]=fPy;
572  PD[2]=fPz;
573  for(Int_t i=0; i<6; i++) for(Int_t j=0; j<6; j++) {
574  RD[i][j]=0;
575  }
576  RD[0][0] = fDPx * fDPx;
577  RD[1][1] = fDPy * fDPy;
578  RD[2][2] = fDPz * fDPz;
579  RD[3][3] = fDX * fDX;
580  RD[4][4] = fDY * fDY;
581  RD[5][5] = fDZ * fDZ;
582 
583  // retrieve field
584  Double_t pnt[3];
585  pnt[0] = fX;
586  pnt[1] = fY;
587  pnt[2] = fZ;
589  fRun->GetField()->GetFieldValue(pnt, H);
590 
591  CH=fq;
592  FairGeaneUtil fUtil;
593  fUtil.FromMarsToSC(PD,RD,H,CH,PC,RC);
594  for(Int_t i=0; i<15; i++) {
595  fCovMatrix[i]=RC[i];
596  }
597  fDX_sc = 0;
598  fDY_sc = TMath::Sqrt(fabs(fCovMatrix[12]));
599  fDZ_sc = TMath::Sqrt(fabs(fCovMatrix[14]));
600 
601  for(int i = 0; i < 6; i++) for(int j = 0; j < 6; j++) { fCovMatrix66[i][j] = RD[i][j]; }
602 
603 }
604 
606 {
607 
608 }
609 void FairTrackParH::Print(Option_t* option) const
610 {
611  cout << this<< endl;
612  cout << "Position : (";
613  cout.precision(2);
614  cout << fX << ", " << fY << ", " << fZ << ")" << endl;
615  cout << "Angles : Lambda = " << fLm << ", Phi = " << fPhi << endl;
616  cout << "q/p = " << fQp << endl;
617  for(Int_t i=0; i<15; i++) {
618  cout << "fCovMatrix[" << i << "] = " << this << " " << fCovMatrix[i] << endl;
619  }
620 
621 }
623 {
624  return fDX_sc;
625 }
626 
628 {
629  return fDY_sc;
630 }
632 {
633  return fDZ_sc;
634 }
635 
637 {
638 
639  if(fX==0) {
641  }
642  return fX;
643 }
645 {
646  if(fY==0) {
648  }
649  return fY;
650 }
651 
653 {
654  if(fZ==0) {
655  fZ =fX_sc*sLm +fZ_sc*cLm;
656  }
657  return fZ;
658 }
659 
660 
661 /*Double_t FairTrackParH::GetDPx()
662 {
663  return fDPx;
664 }
665 Double_t FairTrackParH::GetDPy()
666 {
667  return fDPy;
668 }
669 Double_t FairTrackParH::GetDPz()
670 {
671  return fDPz;
672 }
673 
674 Double_t FairTrackParH::GetDQp()
675 {
676  return fDQp;
677 }
678 */
680 {
681  return fDLm;
682 };
684 {
685  return fDPhi;
686 };
687 
689 {
690  fLm=0;
691  fPhi=0;
692  fDLm=0;
693  fDPhi=0;
694  fX_sc= fY_sc= fZ_sc=0;
695  fDX_sc= fDY_sc= fDZ_sc =0;
696  cLm =sLm= cphi =sphi=0;
697  for(Int_t i= 0; i<15; i++) { fCovMatrix[i] =0; }
698 
699  //base class members
700 
701  fX= fY= fZ=0;
702  fDX= fDY= fDZ=0;
703  fPx= fPy= fPz=0;
704  fDPx= fDPy= fDPz=0;
705  fQp=fDQp=fq=0;
706 
707 
708 }
709 
710 void FairTrackParH::GetCovQ(Double_t* CovQ)
711 {
712  // return error matrix in 1/p instead of q/p
713 
714  for(int i = 0; i < 15; i++) {
715  CovQ[i] = fCovMatrix[i];
716  if(fq!=0) {
717  if(i == 0) { CovQ[i] = CovQ[i] / (fq * fq); }
718  if(i > 0 && i < 5) { CovQ[i] = CovQ[i] / fq; }
719  }
720  }
721 }
722 
723 
724