10#include <analysis/utility/DistanceTools.h>
11#include <framework/logging/Logger.h>
17ROOT::Math::XYZVector
DistanceTools::poca(ROOT::Math::XYZVector
const& trackPos, ROOT::Math::XYZVector
const& trackP,
18 ROOT::Math::XYZVector
const& vtxPos)
20 ROOT::Math::XYZVector trackDir(trackP.Unit());
21 ROOT::Math::XYZVector r(vtxPos - trackPos);
22 return trackPos + r.Dot(trackDir) * trackDir;
26 ROOT::Math::XYZVector
const& vtxPos)
28 ROOT::Math::XYZVector trackDir(trackP.Unit());
29 ROOT::Math::XYZVector r(vtxPos - trackPos);
30 return r - (r.Dot(trackDir)) * trackDir;
34 ROOT::Math::XYZVector
const& vtxPos)
40 TMatrixDSym
const& trackPosCovMat, TMatrixDSym
const& vtxPosCovMat)
42 if (trackPosCovMat.GetNcols() != 3 || vtxPosCovMat.GetNcols() != 3) {
43 B2ERROR(
"in DistanceTools::trackToVtxCovmat, matrices must be of size 3");
44 return TMatrixDSym(3);
47 TMatrixDSym rCovMat(trackPosCovMat + vtxPosCovMat);
48 ROOT::Math::XYZVector trackDir(trackP.Unit());
53 TMatrixDSym Jacobian(3);
55 for (
int i(0); i < 3; ++i) {
56 for (
int j(0); j < 3; ++j) {
57 double trackDir_i = (i == 0) ? trackDir.X() : (i == 1) ? trackDir.Y() : trackDir.Z();
58 double trackDir_j = (j == 0) ? trackDir.X() : (j == 1) ? trackDir.Y() : trackDir.Z();
59 Jacobian(i, j) = -trackDir_i * trackDir_j;
62 for (
int i(0); i < 3; ++i)
65 return rCovMat.Similarity(Jacobian);
70 ROOT::Math::XYZVector
const& vtxPos,
71 TMatrixDSym
const& trackPosCovMat, TMatrixDSym
const& vtxPosCovMat)
74 ROOT::Math::XYZVector dVec(
trackToVtxVec(trackPos, trackP, vtxPos));
76 ROOT::Math::XYZVector n((1. / dVec.R()) * dVec);
81 for (
int i(0); i < 3; ++i) {
82 for (
int j(0); j < 3; ++j) {
83 double n_i = (i == 0) ? n.X() : (i == 1) ? n.Y() : n.Z();
84 double n_j = (j == 0) ? n.X() : (j == 1) ? n.Y() : n.Z();
85 ret += n_i * covMat(i, j) * n_j;
89 return TMath::Sqrt(ret);
95 return vtx2Pos - vtx1Pos;
105 if (vtx1CovMat.GetNcols() != 3 || vtx2CovMat.GetNcols() != 3) {
106 B2ERROR(
"in DistanceTools::vtxToVtxCovMat, matrices must be of size 3");
107 return TMatrixDSym(3);
110 return vtx1CovMat + vtx2CovMat;
114 TMatrixDSym
const& vtx1CovMat, TMatrixDSym
const& vtx2CovMat)
117 ROOT::Math::XYZVector dVec(
vtxToVtxVec(vtx1Pos, vtx2Pos));
118 ROOT::Math::XYZVector n((1. / dVec.R()) * dVec);
123 for (
int i(0); i < 3; ++i) {
124 for (
int j(0); j < 3; ++j) {
125 double n_i = (i == 0) ? n.X() : (i == 1) ? n.Y() : n.Z();
126 double n_j = (j == 0) ? n.X() : (j == 1) ? n.Y() : n.Z();
127 ret += n_i * covMat(i, j) * n_j;
131 return TMath::Sqrt(ret);
Abstract base class for different kinds of events.