14#include "CbmKFTrack.h"
15#include "CbmStsTrack.h"
58 fG(0, 0) =
fG(1, 1) =
fG(2, 2) =
fG(3, 3) =
fG(4, 4) = 0.001;
195 MpdKalmanTrack *trackKF = (MpdKalmanTrack*) track;
196 Double_t pt = 1. / TMath::Abs(trackKF->GetParam(4));
197 Double_t ptthis = 1. / TMath::Abs((*fParam)(4,0));
198 if (ptthis < pt) return 1;
199 else if (ptthis > pt) return -1;
219 fMeas.ResizeTo(5, 1);
223 fJinv.ResizeTo(3, 3);
250 FairTrackParam param;
252 fMeas(0, 0) = param.GetX();
253 fMeas(1, 0) = param.GetY();
254 fMeas(2, 0) = param.GetTx();
255 fMeas(3, 0) = param.GetTy();
256 fMeas(4, 0) = param.GetQp();
268 for (
int i = 0;
i < 5; ++
i) {
269 covar(
i,
i) = param.GetCovariance(
i,
i);
271 for (
int j =
i + 1; j < 5; ++j)
272 covar(
i, j) = covar(j,
i) = param.GetCovariance(
i, j);
291 for (
int iter = 0; iter < 2; ++iter) {
296 for (
int i = -1;
i < 2; ++
i) {
300 Double_t dx = pars[0] - vert[0], dy = pars[1] - vert[1];
307 zpca = -cba[1] / cba[2] / 2;
319 Double_t x[3] = {pos0[2], pos1[2], pos2[2]};
320 Double_t y[3] = {pos0[0], pos1[0], pos2[0]};
322 Double_t denom = (x[0] - x[1]) * (x[0] - x[2]) * (x[1] - x[2]);
326 Double_t a = x[2] * dy10 + x[1] * dy02 + x[0] * dy21;
328 Double_t b = -x[0] * x[0] * dy21 - x[2] * x[2] * dy10 - x[1] * x[1] * dy02;
330 Double_t c = x[1] * x[1] * (x[2] * y[0] - x[0] * y[2]) + x[1] * (x[0] * x[0] * y[2] - x[2] * x[2] * y[0])
331 + x[0] * x[2] * (x[2] - x[0]) * y[1];
446 fJ(0, 0) = pz - pz * tx * tx / denom2;
447 fJ(1, 0) = -pz * tx * ty / denom2;
448 fJ(2, 0) = -pz * tx / denom2;
450 fJ(0, 1) = -pz * tx * ty / denom2;
451 fJ(1, 1) = pz - pz * ty * ty / denom2;
452 fJ(2, 1) = -pz * ty / denom2;
458 fJ(0, 2) = -tx * pz /
fq(2, 0);
459 fJ(1, 2) = -ty * pz /
fq(2, 0);
460 fJ(2, 2) = -pz /
fq(2, 0);
464 fJ(0, 0) = pz - pz * tx * tx / denom2;
465 fJ(1, 0) = -pz * tx * ty / denom2;
466 fJ(2, 0) = -pz * tx / denom2;
468 fJ(0, 1) = -pz * tx * ty / denom2;
469 fJ(1, 1) = pz - pz * ty * ty / denom2;
470 fJ(2, 1) = -pz * ty / denom2;
472 fJ(0, 2) = tx / denom;
473 fJ(1, 2) = ty / denom;
474 fJ(2, 2) = 1 / denom;
497 fJinv(0, 0) = 1 / pz0;
502 fJinv(1, 1) = 1 / pz0;
505 fJinv(0, 2) = -px0 / pz02;
506 fJinv(1, 2) = -py0 / pz02;
511 fJinv(0, 0) = 1 / pz0;
513 fJinv(2, 0) = px0 / p0;
516 fJinv(1, 1) = 1 / pz0;
517 fJinv(2, 1) = py0 / p0;
519 fJinv(0, 2) = -px0 / pz02;
520 fJinv(1, 2) = -py0 / pz02;
521 fJinv(2, 2) = pz0 / p0;
573 meas(0, 0) =
Getx()(0, 0);
574 meas(1, 0) =
Getx()(1, 0);
575 meas(2, 0) =
Getq()(0, 0);
576 meas(3, 0) =
Getq()(1, 0);
577 meas(4, 0) =
Getq()(2, 0);
587 meas(0, 0) = par.GetX();
588 meas(1, 0) = par.GetY();
589 meas(2, 0) = par.GetTx();
590 meas(3, 0) = par.GetTy();
600 for (
int i = 0;
i < 5; ++
i) {
601 covar(
i,
i) = par.GetCovariance(
i,
i);
603 for (
int j =
i + 1; j < 5; ++j)
604 covar(
i, j) = covar(j,
i) = par.GetCovariance(
i, j);
621 for (
int i = 0;
i < 5; ++
i) {
624 for (
int j =
i + 1; j < 5; ++j) {
625 covMatr(
i, j) = covMatr(j,
i) =
fG(
i, j);
vector< Double_t > dist(vector< Double_t > qp, Double_t mu)
TMatrixTSym< Double_t > TMatrixDSym
TMatrixT< Double_t > TMatrixD
TMatrixTSym< Float_t > TMatrixFSym
Double_t Chi2Vertex(BmnParticle *part, const CbmVertex *vtx)
compute Chi2 w.r.t. vertex
static BmnMotherFitterPart * Instance()
get singleton instance
Double_t BuildMother(BmnParticle *mother, vector< BmnParticle * > &vDaught)
Particle object in BM@N (to work with decays).
void SetG(TMatrixD &matr)
TMatrixD fJinv
Jacobian matrix (from geometrical to kinematical momentum).
Double_t BuildMother(vector< BmnParticle * > &vDaught)
TMatrixD fG
covariance cov(xk)
CbmKFTrack GetKFTrack() const
Double_t Rapidity() const
BmnParticle()
Default constructor.
const Double_t Chi2Vertex()
return Chi2 w.r.t. vertex
void Track2Part(CbmKFTrack &track, Bool_t setWeight, Double_t *orig)
TMatrixD fA
covariance cov(xk,qk)
TVector3 Momentum3() const
virtual ~BmnParticle()
Destructor.
void SetMass(Double_t mass=-2.0)
TMatrixD fD
Jacobian matrix (from kinematical to geometrical momentum).
void FindPca(CbmKFTrack &tr, Double_t *vert)
TVector3 Parabola(TVector3 &pos0, TVector3 &pos1, TVector3 &pos2)
void SetMeas(TMatrixD &matr)
void FillJinv(TVector3 &mom3)
void AddDaughter(Int_t indx)
vector< Int_t > fDaughtersInds
field constant
void Print()
Ouput to screen.
Double_t Momentum() const
void WeightAtDca(CbmKFTrack &track, Double_t *vert)
BmnParticle & operator=(const BmnParticle &part)
assignment operator
TMatrixD fE
covariance cov(qk)
Int_t Propagate(Double_t z_out, Double_t QP0, Bool_t line=false)
Int_t Extrapolate(Double_t z, Double_t *QP0=0, Bool_t line=false)
Access to i-th hit.
void GetTrackParam(FairTrackParam &track)
Double_t * GetTrack()
Is it electron.
static CbmKF * Instance()
static TDatabasePDG * Instance()
TParticlePDG * GetParticle(const char *name) const
TMatrixTSym< Element > & Invert(Double_t *det=nullptr)
const Element * GetMatrixArray() const override
TObject & operator=(const TObject &rhs)
Double_t Sign(Double_t a, Double_t b)
Double_t Sqrt(Double_t x)