14 #include <analysis/utility/DistanceTools.h>
15 #include <framework/logging/Logger.h>
21 TVector3
DistanceTools::poca(TVector3
const& trackPos, TVector3
const& trackP, TVector3
const& vtxPos)
23 TVector3 trackDir(trackP.Unit());
24 TVector3 r(vtxPos - trackPos);
25 return trackPos + r.Dot(trackDir) * trackDir;
30 TVector3 trackDir(trackP.Unit());
31 TVector3 r(vtxPos - trackPos);
32 return r - (r.Dot(trackDir)) * trackDir;
41 TMatrixDSym
const& trackPosCovMat, TMatrixDSym
const& vtxPosCovMat)
43 if (trackPosCovMat.GetNcols() != 3 || vtxPosCovMat.GetNcols() != 3) {
44 B2ERROR(
"in DistanceTools::trackToVtxCovmat, matrices must be of size 3");
45 return TMatrixDSym(3);
48 TMatrixDSym rCovMat(trackPosCovMat + vtxPosCovMat);
49 TVector3 trackDir(trackP.Unit());
54 TMatrixDSym Jacobian(3);
56 for (
int i(0); i < 3; ++i)
57 for (
int j(0); j < 3; ++j)
58 Jacobian(i, j) = -trackDir(i) * trackDir(j);
59 for (
int i(0); i < 3; ++i)
62 return rCovMat.Similarity(Jacobian);
67 TMatrixDSym
const& trackPosCovMat, TMatrixDSym
const& vtxPosCovMat)
72 TVector3 n((1. / dVec.Mag()) * dVec);
77 for (
int i(0); i < 3; ++i)
78 for (
int j(0); j < 3; ++j)
79 ret += n(i) * covMat(i, j) * n(j);
81 return TMath::Sqrt(ret);
87 return vtx2Pos - vtx1Pos;
97 if (vtx1CovMat.GetNcols() != 3 || vtx2CovMat.GetNcols() != 3) {
98 B2ERROR(
"in DistanceTools::vtxToVtxCovMat, matrices must be of size 3");
99 return TMatrixDSym(3);
102 return vtx1CovMat + vtx2CovMat;
106 TMatrixDSym
const& vtx1CovMat, TMatrixDSym
const& vtx2CovMat)
110 TVector3 n((1. / dVec.Mag()) * dVec);
115 for (
int i(0); i < 3; ++i)
116 for (
int j(0); j < 3; ++j)
117 ret += n(i) * covMat(i, j) * n(j);
119 return TMath::Sqrt(ret);