10 #include <analysis/utility/DistanceTools.h>
11 #include <framework/logging/Logger.h>
17 TVector3
DistanceTools::poca(TVector3
const& trackPos, TVector3
const& trackP, TVector3
const& vtxPos)
19 TVector3 trackDir(trackP.Unit());
20 TVector3 r(vtxPos - trackPos);
21 return trackPos + r.Dot(trackDir) * trackDir;
26 TVector3 trackDir(trackP.Unit());
27 TVector3 r(vtxPos - trackPos);
28 return r - (r.Dot(trackDir)) * trackDir;
37 TMatrixDSym
const& trackPosCovMat, TMatrixDSym
const& vtxPosCovMat)
39 if (trackPosCovMat.GetNcols() != 3 || vtxPosCovMat.GetNcols() != 3) {
40 B2ERROR(
"in DistanceTools::trackToVtxCovmat, matrices must be of size 3");
41 return TMatrixDSym(3);
44 TMatrixDSym rCovMat(trackPosCovMat + vtxPosCovMat);
45 TVector3 trackDir(trackP.Unit());
50 TMatrixDSym Jacobian(3);
52 for (
int i(0); i < 3; ++i)
53 for (
int j(0); j < 3; ++j)
54 Jacobian(i, j) = -trackDir(i) * trackDir(j);
55 for (
int i(0); i < 3; ++i)
58 return rCovMat.Similarity(Jacobian);
63 TMatrixDSym
const& trackPosCovMat, TMatrixDSym
const& vtxPosCovMat)
68 TVector3 n((1. / dVec.Mag()) * dVec);
73 for (
int i(0); i < 3; ++i)
74 for (
int j(0); j < 3; ++j)
75 ret += n(i) * covMat(i, j) * n(j);
77 return TMath::Sqrt(ret);
83 return vtx2Pos - vtx1Pos;
93 if (vtx1CovMat.GetNcols() != 3 || vtx2CovMat.GetNcols() != 3) {
94 B2ERROR(
"in DistanceTools::vtxToVtxCovMat, matrices must be of size 3");
95 return TMatrixDSym(3);
98 return vtx1CovMat + vtx2CovMat;
102 TMatrixDSym
const& vtx1CovMat, TMatrixDSym
const& vtx2CovMat)
106 TVector3 n((1. / dVec.Mag()) * dVec);
111 for (
int i(0); i < 3; ++i)
112 for (
int j(0); j < 3; ++j)
113 ret += n(i) * covMat(i, j) * n(j);
115 return TMath::Sqrt(ret);
Abstract base class for different kinds of events.