BmnRoot 26.10.0-210-gc52d34b0
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
KFParticle.h
Go to the documentation of this file.
1//---------------------------------------------------------------------------------
2// The KFParticle class
3// .
4// @author S.Gorbunov, I.Kisel
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 KFParticleBase
14//
15// -= Copyright &copy ALICE HLT and CBM L1 Groups =-
16//_________________________________________________________________________________
17
18#define NonhomogeneousField
19// #define HomogeneousField
20
21#ifndef ALIKFPARTICLE_H
22#define ALIKFPARTICLE_H
23
24#include "KFParticleBase.h"
25#include "TMath.h"
26
27#ifdef HomogeneousField
28class AliVTrack;
29class AliVVertex;
30#endif
31
32#ifdef NonhomogeneousField
33#include "CbmKF.h"
36#endif
37
39{
40
41 public:
42 //*
43 //* INITIALIZATION
44 //*
45
46 //* Set magnetic field for all particles
47#ifdef HomogeneousField
48 static void SetField(Double_t Bz);
49#endif
50 //* Constructor (empty)
51
54 {
55 ;
56 }
57
58 //* Destructor (empty)
59
61
62 //* Construction of mother particle by its 2-3-4 daughters
63
64 KFParticle(const KFParticle& d1, const KFParticle& d2, Bool_t gamma = kFALSE);
65
66 KFParticle(const KFParticle& d1, const KFParticle& d2, const KFParticle& d3);
67
68 KFParticle(const KFParticle& d1, const KFParticle& d2, const KFParticle& d3, const KFParticle& d4);
69
70 //* Initialisation from "cartesian" coordinates ( X Y Z Px Py Pz )
71 //* Parameters, covariance matrix, charge and PID hypothesis should be provided
72
73 void Create(const Double_t Param[], const Double_t Cov[], Int_t Charge, Double_t mass /*Int_t PID*/);
74
75#ifdef HomogeneousField
76 //* Initialisation from ALICE track, PID hypothesis shoould be provided
77
78 KFParticle(const AliVTrack& track, Int_t PID);
79
80 //* Initialisation from VVertex
81
82 KFParticle(const AliVVertex& vertex);
83#endif
84
85#ifdef NonhomogeneousField
86 KFParticle(CbmKFTrackInterface* Track, Double_t* z0 = 0, Int_t* qHypo = 0, Int_t* PID = 0);
88#endif
89
90 void CleanDaughtersId() { fDaughtersIds.clear(); }
91 void SetNDaughters(int n) { fDaughtersIds.reserve(n); }
92 void AddDaughter(int id) { fDaughtersIds.push_back(id); }
93
94 //* Initialise covariance matrix and set current parameters to 0.0
95
96 void Initialize();
97
98 //* Set decay vertex parameters for linearisation
99
101
102 //*
103 //* ACCESSORS
104 //*
105
106 //* Simple accessors
107
108 Double_t GetX() const; //* x of current position
109 Double_t GetY() const; //* y of current position
110 Double_t GetZ() const; //* z of current position
111 Double_t GetPx() const; //* x-compoment of 3-momentum
112 Double_t GetPy() const; //* y-compoment of 3-momentum
113 Double_t GetPz() const; //* z-compoment of 3-momentum
114 Double_t GetE() const; //* energy
115 Double_t GetS() const; //* decay length / momentum
116 Int_t GetQ() const; //* charge
117 Double_t GetChi2() const; //* chi^2
118 Int_t GetNDF() const; //* Number of Degrees of Freedom
119
122
123#ifdef NonhomogeneousField
124 float* GetFieldCoeff() { return fieldRegion; }
125 void SetFieldCoeff(float c, int i) { fieldRegion[i] = c; }
126#endif
127
128 const Double_t& X() const { return fP[0]; }
129 const Double_t& Y() const { return fP[1]; }
130 const Double_t& Z() const { return fP[2]; }
131 const Double_t& Px() const { return fP[3]; }
132 const Double_t& Py() const { return fP[4]; }
133 const Double_t& Pz() const { return fP[5]; }
134 const Double_t& E() const { return fP[6]; }
135 const Double_t& S() const { return fP[7]; }
136 const Int_t& Q() const { return fQ; }
137 const Double_t& Chi2() const { return fChi2; }
138 const Int_t& NDF() const { return fNDF; }
139
140 Double_t GetParameter(int i) const;
141 Double_t GetCovariance(int i) const;
142 Double_t GetCovariance(int i, int j) const;
143
144 //* Accessors with calculations, value returned w/o error flag
145
146 Double_t GetP() const; //* momentum
147 Double_t GetPt() const; //* transverse momentum
148 Double_t GetEta() const; //* pseudorapidity
149 Double_t GetPhi() const; //* phi
150 Double_t GetMomentum() const; //* momentum (same as GetP() )
151 Double_t GetMass() const; //* mass
152 Double_t GetDecayLength() const; //* decay length
153 Double_t GetDecayLengthXY() const; //* decay length in XY
154 Double_t GetLifeTime() const; //* life time
155 Double_t GetR() const; //* distance to the origin
156
157 //* Accessors to estimated errors
158
159 Double_t GetErrX() const; //* x of current position
160 Double_t GetErrY() const; //* y of current position
161 Double_t GetErrZ() const; //* z of current position
162 Double_t GetErrPx() const; //* x-compoment of 3-momentum
163 Double_t GetErrPy() const; //* y-compoment of 3-momentum
164 Double_t GetErrPz() const; //* z-compoment of 3-momentum
165 Double_t GetErrE() const; //* energy
166 Double_t GetErrS() const; //* decay length / momentum
167 Double_t GetErrP() const; //* momentum
168 Double_t GetErrPt() const; //* transverse momentum
169 Double_t GetErrEta() const; //* pseudorapidity
170 Double_t GetErrPhi() const; //* phi
171 Double_t GetErrMomentum() const; //* momentum
172 Double_t GetErrMass() const; //* mass
173 Double_t GetErrDecayLength() const; //* decay length
174 Double_t GetErrDecayLengthXY() const; //* decay length in XY
175 Double_t GetErrLifeTime() const; //* life time
176 Double_t GetErrR() const; //* distance to the origin
177
178 //* Accessors with calculations( &value, &estimated sigma )
179 //* error flag returned (0 means no error during calculations)
180
181 int GetP(Double_t& P, Double_t& SigmaP) const; //* momentum
182 int GetPt(Double_t& Pt, Double_t& SigmaPt) const; //* transverse momentum
183 int GetEta(Double_t& Eta, Double_t& SigmaEta) const; //* pseudorapidity
184 int GetPhi(Double_t& Phi, Double_t& SigmaPhi) const; //* phi
185 int GetMomentum(Double_t& P, Double_t& SigmaP) const; //* momentum
186 int GetMass(Double_t& M, Double_t& SigmaM) const; //* mass
187 int GetDecayLength(Double_t& L, Double_t& SigmaL) const; //* decay length
188 int GetDecayLengthXY(Double_t& L, Double_t& SigmaL) const; //* decay length in XY
189 int GetLifeTime(Double_t& T, Double_t& SigmaT) const; //* life time
190 int GetR(Double_t& R, Double_t& SigmaR) const; //* R
191 Double_t GetRapidity() const { return 0.5 * TMath::Log((fP[6] + fP[5]) / (fP[6] - fP[5])); }
192 Double_t GetTheta() const { return TMath::ATan2(GetPt(), fP[5]); }
193
194 //*
195 //* MODIFIERS
196 //*
197
198 Double_t& X();
199 Double_t& Y();
200 Double_t& Z();
201 Double_t& Px();
202 Double_t& Py();
203 Double_t& Pz();
204 Double_t& E();
205 Double_t& S();
206 Int_t& Q();
207 Double_t& Chi2();
208 Int_t& NDF();
209
210 Double_t& Parameter(int i);
211 Double_t& Covariance(int i);
212 Double_t& Covariance(int i, int j);
215
216 //*
217 //* CONSTRUCTION OF THE PARTICLE BY ITS DAUGHTERS AND MOTHER
218 //* USING THE KALMAN FILTER METHOD
219 //*
220
221 //* Add daughter to the particle
222
223 void AddDaughter(const KFParticle& Daughter);
224
225 //* Add daughter via += operator: ex.{ D0; D0+=Pion; D0+= Kaon; }
226
227 void operator+=(const KFParticle& Daughter);
228
229 //* Set production vertex
230
231 void SetProductionVertex(const KFParticle& Vtx);
232
233 //* Set mass constraint
234
235 void SetMassConstraint(Double_t Mass, Double_t SigmaMass = 0);
236
237 //* Set no decay length for resonances
238
239 void SetNoDecayLength();
240
241 //* Everything in one go
242
243 void Construct(const KFParticle* vDaughters[],
244 int nDaughters,
245 const KFParticle* ProdVtx = 0,
246 Double_t Mass = -1,
247 Bool_t IsConstrained = 0);
248
249 //*
250 //* TRANSPORT
251 //*
252 //* ( main transportation parameter is S = SignedPath/Momentum )
253 //* ( parameters of decay & production vertices are stored locally )
254 //*
255
256 //* Transport the particle to its decay vertex
257
259
260 //* Transport the particle to its production vertex
261
263
264 //* Transport the particle close to xyz[] point
265
266 void TransportToPoint(const Double_t xyz[]);
267
268 //* Transport the particle close to VVertex
269#ifdef HomogeneousField
270 void TransportToVertex(const AliVVertex& v);
271#endif
272 //* Transport the particle close to another particle p
273
274 void TransportToParticle(const KFParticle& p);
275
276 //* Transport the particle on dS parameter (SignedPath/Momentum)
277
278 void TransportToDS(Double_t dS);
279
280 //* Get dS to a certain space point
281
282 Double_t GetDStoPoint(const Double_t xyz[]) const;
283
284 //* Get dS to other particle p (dSp for particle p also returned)
285
286 void GetDStoParticle(const KFParticle& p, Double_t& DS, Double_t& DSp) const;
287
288 //* Get dS to other particle p in XY-plane
289
290 void GetDStoParticleXY(const KFParticleBase& p, Double_t& DS, Double_t& DSp) const;
291
292 //*
293 //* OTHER UTILITIES
294 //*
295
296 //* Calculate distance from another object [cm]
297
298 Double_t GetDistanceFromVertex(const Double_t vtx[]) const;
299 Double_t GetDistanceFromVertex(const KFParticle& Vtx) const;
300#ifdef HomogeneousField
301 Double_t GetDistanceFromVertex(const AliVVertex& Vtx) const;
302#endif
304
305 //* Calculate sqrt(Chi2/ndf) deviation from another object
306 //* ( v = [xyz]-vertex, Cv=[Cxx,Cxy,Cyy,Cxz,Cyz,Czz]-covariance matrix )
307
308 Double_t GetDeviationFromVertex(const Double_t v[], const Double_t Cv[] = 0) const;
310#ifdef HomogeneousField
311 Double_t GetDeviationFromVertex(const AliVVertex& Vtx) const;
312#endif
314
315 //* Calculate distance from another object [cm] in XY-plane
316
317 Bool_t GetDistanceFromVertexXY(const Double_t vtx[], Double_t& val, Double_t& err) const;
318 Bool_t GetDistanceFromVertexXY(const Double_t vtx[], const Double_t Cv[], Double_t& val, Double_t& err) const;
319 Bool_t GetDistanceFromVertexXY(const KFParticle& Vtx, Double_t& val, Double_t& err) const;
320#ifdef HomogeneousField
321 Bool_t GetDistanceFromVertexXY(const AliVVertex& Vtx, Double_t& val, Double_t& err) const;
322#endif
323
324 Double_t GetDistanceFromVertexXY(const Double_t vtx[]) const;
326#ifdef HomogeneousField
327 Double_t GetDistanceFromVertexXY(const AliVVertex& Vtx) const;
328#endif
330
331 //* Calculate sqrt(Chi2/ndf) deviation from another object in XY plane
332 //* ( v = [xyz]-vertex, Cv=[Cxx,Cxy,Cyy,Cxz,Cyz,Czz]-covariance matrix )
333
334 Double_t GetDeviationFromVertexXY(const Double_t v[], const Double_t Cv[] = 0) const;
336#ifdef HomogeneousField
337 Double_t GetDeviationFromVertexXY(const AliVVertex& Vtx) const;
338#endif
340
341 //* Calculate opennig angle between two particles
342
343 Double_t GetAngle(const KFParticle& p) const;
344 Double_t GetAngleXY(const KFParticle& p) const;
345 Double_t GetAngleRZ(const KFParticle& p) const;
346
347 //* Subtract the particle from the vertex
348
349 void SubtractFromVertex(KFParticle& v) const;
350
351 //* Special method for creating gammas
352
353 void ConstructGamma(const KFParticle& daughter1, const KFParticle& daughter2);
354
355 // * Pseudo Proper Time of decay = (r*pt) / |pt| * M/|pt|
356 // @primVertex - primary vertex
357 // @mass - mass of the mother particle (in the case of "Hb -> JPsi" it would be JPsi mass)
358 // @*timeErr2 - squared error of the decay time. If timeErr2 = 0 it isn't calculated
359 Double_t GetPseudoProperDecayTime(const KFParticle& primVertex, const Double_t& mass, Double_t* timeErr2 = 0) const;
360
361 protected:
362 //*
363 //* INTERNAL STUFF
364 //*
365
366 //* Method to access ALICE field
367#ifdef HomogeneousField
368 static Double_t GetFieldAlice();
369#endif
370 //* Other methods required by the abstract KFParticleBase class
371
372 void GetFieldValue(const Double_t xyz[], Double_t B[]) const;
373 void GetDStoParticle(const KFParticleBase& p, Double_t& DS, Double_t& DSp) const;
374 void Transport(Double_t dS, Double_t P[], Double_t C[]) const;
375 static void GetExternalTrackParam(const KFParticleBase& p, Double_t& X, Double_t& Alpha, Double_t P[5]);
376
377 // void GetDStoParticleALICE( const KFParticleBase &p, Double_t &DS, Double_t &DS1 ) const;
378
379 private:
380#ifdef HomogeneousField
381 static Double_t fgBz; //* Bz compoment of the magnetic field
382#endif
383#ifdef NonhomogeneousField
384 float fieldRegion[10];
385#endif
386
388};
389
390//---------------------------------------------------------------------
391//
392// Inline implementation of the KFParticle methods
393//
394//---------------------------------------------------------------------
395
396#ifdef HomogeneousField
397inline void KFParticle::SetField(Double_t Bz)
398{
399 fgBz = Bz;
400}
401#endif
402
403inline KFParticle::KFParticle(const KFParticle& d1, const KFParticle& d2, const KFParticle& d3)
404{
405 KFParticle mother;
406 mother += d1;
407 mother += d2;
408 mother += d3;
409 *this = mother;
410}
411
412inline KFParticle::KFParticle(const KFParticle& d1, const KFParticle& d2, const KFParticle& d3, const KFParticle& d4)
413{
414 KFParticle mother;
415 mother += d1;
416 mother += d2;
417 mother += d3;
418 mother += d4;
419 *this = mother;
420}
421
426
431
433{
434 return KFParticleBase::GetX();
435}
436
438{
439 return KFParticleBase::GetY();
440}
441
443{
444 return KFParticleBase::GetZ();
445}
446
448{
449 return KFParticleBase::GetPx();
450}
451
453{
454 return KFParticleBase::GetPy();
455}
456
458{
459 return KFParticleBase::GetPz();
460}
461
463{
464 return KFParticleBase::GetE();
465}
466
468{
469 return KFParticleBase::GetS();
470}
471
473{
474 return KFParticleBase::GetQ();
475}
476
478{
480}
481
483{
484 return KFParticleBase::GetNDF();
485}
486
488{
490}
491
493{
495}
496
497inline Double_t KFParticle::GetCovariance(int i, int j) const
498{
500}
501
503{
504 Double_t par, err;
505 if (KFParticleBase::GetMomentum(par, err))
506 return 0;
507 else
508 return par;
509}
510
512{
513 Double_t par, err;
514 if (KFParticleBase::GetPt(par, err))
515 return 0;
516 else
517 return par;
518}
519
521{
522 Double_t par, err;
523 if (KFParticleBase::GetEta(par, err))
524 return 0;
525 else
526 return par;
527}
528
530{
531 Double_t par, err;
532 if (KFParticleBase::GetPhi(par, err))
533 return 0;
534 else
535 return par;
536}
537
539{
540 Double_t par, err;
541 if (KFParticleBase::GetMomentum(par, err))
542 return 0;
543 else
544 return par;
545}
546
548{
549 Double_t par, err;
550 if (KFParticleBase::GetMass(par, err))
551 return 0;
552 else
553 return par;
554}
555
557{
558 Double_t par, err;
559 if (KFParticleBase::GetDecayLength(par, err))
560 return 0;
561 else
562 return par;
563}
564
566{
567 Double_t par, err;
569 return 0;
570 else
571 return par;
572}
573
575{
576 Double_t par, err;
577 if (KFParticleBase::GetLifeTime(par, err))
578 return 0;
579 else
580 return par;
581}
582
584{
585 Double_t par, err;
586 if (KFParticleBase::GetR(par, err))
587 return 0;
588 else
589 return par;
590}
591
593{
594 return TMath::Sqrt(TMath::Abs(GetCovariance(0, 0)));
595}
596
598{
599 return TMath::Sqrt(TMath::Abs(GetCovariance(1, 1)));
600}
601
603{
604 return TMath::Sqrt(TMath::Abs(GetCovariance(2, 2)));
605}
606
608{
609 return TMath::Sqrt(TMath::Abs(GetCovariance(3, 3)));
610}
611
613{
614 return TMath::Sqrt(TMath::Abs(GetCovariance(4, 4)));
615}
616
618{
619 return TMath::Sqrt(TMath::Abs(GetCovariance(5, 5)));
620}
621
623{
624 return TMath::Sqrt(TMath::Abs(GetCovariance(6, 6)));
625}
626
628{
629 return TMath::Sqrt(TMath::Abs(GetCovariance(7, 7)));
630}
631
633{
634 Double_t par, err;
635 if (KFParticleBase::GetMomentum(par, err))
636 return 1.e10;
637 else
638 return err;
639}
640
642{
643 Double_t par, err;
644 if (KFParticleBase::GetPt(par, err))
645 return 1.e10;
646 else
647 return err;
648}
649
651{
652 Double_t par, err;
653 if (KFParticleBase::GetEta(par, err))
654 return 1.e10;
655 else
656 return err;
657}
658
660{
661 Double_t par, err;
662 if (KFParticleBase::GetPhi(par, err))
663 return 1.e10;
664 else
665 return err;
666}
667
669{
670 Double_t par, err;
671 if (KFParticleBase::GetMomentum(par, err))
672 return 1.e10;
673 else
674 return err;
675}
676
678{
679 Double_t par, err;
680 if (KFParticleBase::GetMass(par, err))
681 return 1.e10;
682 else
683 return err;
684}
685
687{
688 Double_t par, err;
689 if (KFParticleBase::GetDecayLength(par, err))
690 return 1.e10;
691 else
692 return err;
693}
694
696{
697 Double_t par, err;
699 return 1.e10;
700 else
701 return err;
702}
703
705{
706 Double_t par, err;
707 if (KFParticleBase::GetLifeTime(par, err))
708 return 1.e10;
709 else
710 return err;
711}
712
714{
715 Double_t par, err;
716 if (KFParticleBase::GetR(par, err))
717 return 1.e10;
718 else
719 return err;
720}
721
722inline int KFParticle::GetP(Double_t& P, Double_t& SigmaP) const
723{
724 return KFParticleBase::GetMomentum(P, SigmaP);
725}
726
727inline int KFParticle::GetPt(Double_t& Pt, Double_t& SigmaPt) const
728{
729 return KFParticleBase::GetPt(Pt, SigmaPt);
730}
731
732inline int KFParticle::GetEta(Double_t& Eta, Double_t& SigmaEta) const
733{
734 return KFParticleBase::GetEta(Eta, SigmaEta);
735}
736
737inline int KFParticle::GetPhi(Double_t& Phi, Double_t& SigmaPhi) const
738{
739 return KFParticleBase::GetPhi(Phi, SigmaPhi);
740}
741
742inline int KFParticle::GetMomentum(Double_t& P, Double_t& SigmaP) const
743{
744 return KFParticleBase::GetMomentum(P, SigmaP);
745}
746
747inline int KFParticle::GetMass(Double_t& M, Double_t& SigmaM) const
748{
749 return KFParticleBase::GetMass(M, SigmaM);
750}
751
752inline int KFParticle::GetDecayLength(Double_t& L, Double_t& SigmaL) const
753{
754 return KFParticleBase::GetDecayLength(L, SigmaL);
755}
756
757inline int KFParticle::GetDecayLengthXY(Double_t& L, Double_t& SigmaL) const
758{
759 return KFParticleBase::GetDecayLengthXY(L, SigmaL);
760}
761
762inline int KFParticle::GetLifeTime(Double_t& T, Double_t& SigmaT) const
763{
764 return KFParticleBase::GetLifeTime(T, SigmaT);
765}
766
767inline int KFParticle::GetR(Double_t& R, Double_t& SigmaR) const
768{
769 return KFParticleBase::GetR(R, SigmaR);
770}
771
773{
774 return KFParticleBase::X();
775}
776
778{
779 return KFParticleBase::Y();
780}
781
783{
784 return KFParticleBase::Z();
785}
786
788{
789 return KFParticleBase::Px();
790}
791
793{
794 return KFParticleBase::Py();
795}
796
798{
799 return KFParticleBase::Pz();
800}
801
803{
804 return KFParticleBase::E();
805}
806
808{
809 return KFParticleBase::S();
810}
811
813{
814 return KFParticleBase::Q();
815}
816
818{
819 return KFParticleBase::Chi2();
820}
821
823{
824 return KFParticleBase::NDF();
825}
826
828{
830}
831
836
838{
839 return KFParticleBase::Covariance(i, j);
840}
841
843{
844 return fP;
845}
846
848{
849 return fC;
850}
851
852inline void KFParticle::operator+=(const KFParticle& Daughter)
853{
855}
856
857inline void KFParticle::AddDaughter(const KFParticle& Daughter)
858{
860}
861
866
868{
869 KFParticleBase::SetMassConstraint(Mass, SigmaMass);
870}
871
876
877inline void KFParticle::Construct(const KFParticle* vDaughters[],
878 int nDaughters,
879 const KFParticle* ProdVtx,
880 Double_t Mass,
881 Bool_t IsConstrained)
882{
883 KFParticleBase::Construct((const KFParticleBase**)vDaughters, nDaughters, (const KFParticleBase*)ProdVtx, Mass,
884 IsConstrained);
885}
886
891
896
898{
900}
901#ifdef HomogeneousField
902inline void KFParticle::TransportToVertex(const AliVVertex& v)
903{
905}
906#endif
908{
909 Double_t dS, dSp;
910 GetDStoParticle(p, dS, dSp);
911 TransportToDS(dS);
912}
913
918
920{
921#ifdef HomogeneousField
922 return KFParticleBase::GetDStoPointBz(GetFieldAlice(), xyz);
923#endif
924#ifdef NonhomogeneousField
926#endif
927}
928
929inline void KFParticle::GetDStoParticle(const KFParticle& p, Double_t& DS, Double_t& DSp) const
930{
931 GetDStoParticleXY(p, DS, DSp);
932}
933
938
940{
942}
943
948
953#ifdef HomogeneousField
954inline Double_t KFParticle::GetDistanceFromVertex(const AliVVertex& Vtx) const
955{
957}
958
959inline Double_t KFParticle::GetDeviationFromVertex(const AliVVertex& Vtx) const
960{
962}
963#endif
968
973
978
979#ifdef HomogeneousField
980inline Double_t KFParticle::GetFieldAlice()
981{
982 return fgBz;
983}
984#endif
985
986#ifdef HomogeneousField
987inline void KFParticle::GetFieldValue(const Double_t* /*xyz*/, Double_t B[]) const
988{
989 B[0] = B[1] = 0;
990 B[2] = GetFieldAlice();
991}
992#endif
993
994#ifdef NonhomogeneousField
995inline void KFParticle::GetFieldValue(const Double_t xyz[], Double_t B[]) const
996{
998 MF->GetFieldValue(xyz, B);
999}
1000#endif
1001
1002inline void KFParticle::GetDStoParticle(const KFParticleBase& p, Double_t& DS, Double_t& DSp) const
1003{
1004 GetDStoParticleXY(p, DS, DSp);
1005}
1006
1008{
1009#ifdef HomogeneousField
1010 KFParticleBase::GetDStoParticleBz(GetFieldAlice(), p, DS, DSp);
1011#endif
1012#ifdef NonhomogeneousField
1014#endif
1015 // GetDStoParticleALICE( p, DS, DSp ) ;
1016}
1017
1018inline void KFParticle::Transport(Double_t dS, Double_t P[], Double_t C[]) const
1019{
1020#ifdef HomogeneousField
1021 KFParticleBase::TransportBz(GetFieldAlice(), dS, P, C);
1022#endif
1023#ifdef NonhomogeneousField
1025#endif
1026}
1027
1028inline void KFParticle::ConstructGamma(const KFParticle& daughter1, const KFParticle& daughter2)
1029{
1030#ifdef HomogeneousField
1031 KFParticleBase::ConstructGammaBz(daughter1, daughter2, GetFieldAlice());
1032#endif
1033}
1034
1035#endif
__m128 v
Definition P4_F32vec4.h:1
int i
Definition P4_F32vec4.h:22
bool Bool_t
int Int_t
constexpr Bool_t kFALSE
double Double_t
#define ClassDef(name, id)
static CbmKF * Instance()
Definition CbmKF.h:34
BmnNewFieldMap * GetMagneticField()
Definition CbmKF.h:72
Int_t GetNDF() const
void SetProductionVertex(const KFParticleBase &Vtx)
const Int_t & Q() const
Int_t GetPhi(Double_t &Phi, Double_t &SigmaPhi) const
const Double_t & Y() const
const Double_t & S() const
Double_t GetPz() const
void GetDStoParticleBz(Double_t Bz, const KFParticleBase &p, Double_t &dS, Double_t &dS1) const
Double_t GetDStoPointCBM(const Double_t xyz[]) const
void AddDaughter(const KFParticleBase &Daughter)
Double_t GetE() const
Int_t GetLifeTime(Double_t &T, Double_t &SigmaT) const
Int_t GetEta(Double_t &Eta, Double_t &SigmaEta) const
Int_t GetDecayLength(Double_t &L, Double_t &SigmaL) const
Int_t GetR(Double_t &R, Double_t &SigmaR) const
const Double_t & Z() const
void TransportCBM(Double_t dS, Double_t P[], Double_t C[]) const
Int_t GetMomentum(Double_t &P, Double_t &SigmaP) const
Double_t GetY() const
void SubtractFromVertex(KFParticleBase &Vtx) const
const Double_t & E() const
Double_t & Parameter(Int_t i)
Bool_t fAtProductionVertex
Double_t GetDistanceFromVertex(const Double_t vtx[]) const
Double_t GetDStoPointBz(Double_t Bz, const Double_t xyz[]) const
void GetDStoParticleCBM(const KFParticleBase &p, Double_t &dS, Double_t &dS1) const
Double_t GetPx() const
const Double_t & Pz() const
Double_t GetZ() const
Int_t GetQ() const
Double_t GetDistanceFromParticle(const KFParticleBase &p) const
void operator+=(const KFParticleBase &Daughter)
Double_t GetS() const
Double_t GetDeviationFromParticle(const KFParticleBase &p) const
Double_t GetCovariance(Int_t i) const
void SetVtxGuess(Double_t x, Double_t y, Double_t z)
const Double_t & Chi2() const
const Double_t & Px() const
std::vector< int > fDaughtersIds
Int_t GetMass(Double_t &M, Double_t &SigmaM) const
void TransportToProductionVertex()
Double_t GetPy() const
Double_t GetChi2() const
void TransportBz(Double_t Bz, Double_t dS, Double_t P[], Double_t C[]) const
const Double_t & X() const
Int_t GetDecayLengthXY(Double_t &L, Double_t &SigmaL) const
Double_t GetParameter(Int_t i) const
const Double_t & Py() const
Double_t GetX() const
void Construct(const KFParticleBase *vDaughters[], Int_t nDaughters, const KFParticleBase *ProdVtx=0, Double_t Mass=-1, Bool_t IsConstrained=0)
void SetMassConstraint(Double_t Mass, Double_t SigmaMass=0)
Double_t GetDeviationFromVertex(const Double_t v[], const Double_t Cv[]=0) const
const Int_t & NDF() const
Double_t fC[36]
void ConstructGammaBz(const KFParticleBase &daughter1, const KFParticleBase &daughter2, double Bz)
Double_t & Covariance(Int_t i)
void TransportToDS(Double_t dS)
Int_t GetPt(Double_t &Pt, Double_t &SigmaPt) const
void ConstructGamma(const KFParticle &daughter1, const KFParticle &daughter2)
Double_t GetErrE() const
Definition KFParticle.h:622
Double_t GetY() const
Definition KFParticle.h:437
void GetDStoParticleXY(const KFParticleBase &p, Double_t &DS, Double_t &DSp) const
Bool_t GetDistanceFromVertexXY(const Double_t vtx[], Double_t &val, Double_t &err) const
Double_t GetZ() const
Definition KFParticle.h:442
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
void TransportToDecayVertex()
Definition KFParticle.h:887
float * GetFieldCoeff()
Definition KFParticle.h:124
const Double_t & Pz() const
Definition KFParticle.h:133
Double_t * CovarianceMatrix()
Definition KFParticle.h:847
Double_t GetPx() const
Definition KFParticle.h:447
Double_t GetDeviationFromVertexXY(const Double_t v[], const Double_t Cv[]=0) const
Double_t GetPhi() const
Definition KFParticle.h:529
Double_t GetErrZ() const
Definition KFParticle.h:602
Double_t GetTheta() const
Definition KFParticle.h:192
Double_t GetDeviationFromParticleXY(const KFParticle &p) const
Double_t * Parameters()
Definition KFParticle.h:842
void SetAtProductionVertex(Bool_t b)
Definition KFParticle.h:121
void GetFieldValue(const Double_t xyz[], Double_t B[]) const
Definition KFParticle.h:995
void Transport(Double_t dS, Double_t P[], Double_t C[]) const
const Double_t & Y() const
Definition KFParticle.h:129
const Double_t & S() const
Definition KFParticle.h:135
void CleanDaughtersId()
Definition KFParticle.h:90
Double_t GetErrP() const
Definition KFParticle.h:632
Double_t GetMass() const
Definition KFParticle.h:547
Double_t GetErrMomentum() const
Definition KFParticle.h:668
const Int_t & NDF() const
Definition KFParticle.h:138
void SetProductionVertex(const KFParticle &Vtx)
Definition KFParticle.h:862
const Double_t & Py() const
Definition KFParticle.h:132
Int_t GetNDF() const
Definition KFParticle.h:482
Double_t GetAngle(const KFParticle &p) const
Double_t GetDecayLengthXY() const
Definition KFParticle.h:565
Double_t GetDeviationFromVertex(const Double_t v[], const Double_t Cv[]=0) const
Definition KFParticle.h:939
Double_t GetPseudoProperDecayTime(const KFParticle &primVertex, const Double_t &mass, Double_t *timeErr2=0) const
Double_t GetErrPhi() const
Definition KFParticle.h:659
const Int_t & Q() const
Definition KFParticle.h:136
void SetVtxGuess(Double_t x, Double_t y, Double_t z)
Definition KFParticle.h:427
Double_t GetErrR() const
Definition KFParticle.h:713
void SetMassConstraint(Double_t Mass, Double_t SigmaMass=0)
Definition KFParticle.h:867
Double_t GetErrS() const
Definition KFParticle.h:627
const Double_t & E() const
Definition KFParticle.h:134
Double_t GetErrEta() const
Definition KFParticle.h:650
void TransportToParticle(const KFParticle &p)
Definition KFParticle.h:907
void TransportToDS(Double_t dS)
Definition KFParticle.h:914
Double_t GetEta() const
Definition KFParticle.h:520
Double_t GetMomentum() const
Definition KFParticle.h:538
Double_t GetDistanceFromVertex(const Double_t vtx[]) const
Definition KFParticle.h:934
Double_t GetDeviationFromParticle(const KFParticle &p) const
Definition KFParticle.h:969
Double_t & Parameter(int i)
Definition KFParticle.h:827
void AddDaughter(int id)
Definition KFParticle.h:92
Double_t GetDistanceFromParticleXY(const KFParticle &p) const
void SubtractFromVertex(KFParticle &v) const
Definition KFParticle.h:974
Double_t GetErrDecayLength() const
Definition KFParticle.h:686
Double_t GetAngleXY(const KFParticle &p) const
Double_t GetErrPy() const
Definition KFParticle.h:612
void Initialize()
Definition KFParticle.h:422
Double_t GetP() const
Definition KFParticle.h:502
Double_t GetAngleRZ(const KFParticle &p) const
Double_t GetChi2() const
Definition KFParticle.h:477
const Double_t & X() const
Definition KFParticle.h:128
void TransportToProductionVertex()
Definition KFParticle.h:892
Double_t GetPz() const
Definition KFParticle.h:457
Double_t GetErrDecayLengthXY() const
Definition KFParticle.h:695
Double_t & Covariance(int i)
Definition KFParticle.h:832
Bool_t GetAtProductionVertex() const
Definition KFParticle.h:120
Double_t GetDStoPoint(const Double_t xyz[]) const
Definition KFParticle.h:919
void SetFieldCoeff(float c, int i)
Definition KFParticle.h:125
Double_t GetErrY() const
Definition KFParticle.h:597
Double_t GetErrMass() const
Definition KFParticle.h:677
Double_t GetErrPx() const
Definition KFParticle.h:607
const Double_t & Z() const
Definition KFParticle.h:130
void SetNDaughters(int n)
Definition KFParticle.h:91
Int_t GetQ() const
Definition KFParticle.h:472
Double_t GetDistanceFromParticle(const KFParticle &p) const
Definition KFParticle.h:964
void GetDStoParticle(const KFParticle &p, Double_t &DS, Double_t &DSp) const
Definition KFParticle.h:929
void SetNoDecayLength()
Definition KFParticle.h:872
const Double_t & Chi2() const
Definition KFParticle.h:137
Double_t GetCovariance(int i) const
Definition KFParticle.h:492
Double_t GetX() const
Definition KFParticle.h:432
Double_t GetParameter(int i) const
Definition KFParticle.h:487
Double_t GetR() const
Definition KFParticle.h:583
Double_t GetS() const
Definition KFParticle.h:467
void Construct(const KFParticle *vDaughters[], int nDaughters, const KFParticle *ProdVtx=0, Double_t Mass=-1, Bool_t IsConstrained=0)
Definition KFParticle.h:877
Double_t GetDecayLength() const
Definition KFParticle.h:556
Double_t GetErrPt() const
Definition KFParticle.h:641
Double_t GetE() const
Definition KFParticle.h:462
void TransportToPoint(const Double_t xyz[])
Definition KFParticle.h:897
void operator+=(const KFParticle &Daughter)
Definition KFParticle.h:852
Double_t GetPt() const
Definition KFParticle.h:511
Double_t GetErrLifeTime() const
Definition KFParticle.h:704
Double_t GetPy() const
Definition KFParticle.h:452
Double_t GetErrPz() const
Definition KFParticle.h:617
float fieldRegion[10]
Definition KFParticle.h:384
Double_t GetErrX() const
Definition KFParticle.h:592
Double_t GetLifeTime() const
Definition KFParticle.h:574
void Create(const Double_t Param[], const Double_t Cov[], Int_t Charge, Double_t mass)
Double_t GetRapidity() const
Definition KFParticle.h:191
constexpr Double_t C()
Double_t ATan2(Double_t y, Double_t x)
Double_t Log(Double_t x)
Double_t Sqrt(Double_t x)
constexpr Double_t R()
Double_t Abs(Double_t d)