Belle II Software  release-05-01-25
DistanceTools.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2016 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Thibaud Humair *
7  * *
8  * Inspired from DistanceCalculatorModule by Sourav Dey & Abi Soffer *
9  * *
10  * This software is provided "as is" without any warranty. *
11 **************************************************************************/
12 
13 
14 #include <analysis/utility/DistanceTools.h>
15 #include <framework/logging/Logger.h>
16 #include "TMath.h"
17 
18 using namespace Belle2;
19 
20 
21 TVector3 DistanceTools::poca(TVector3 const& trackPos, TVector3 const& trackP, TVector3 const& vtxPos)
22 {
23  TVector3 trackDir(trackP.Unit());
24  TVector3 r(vtxPos - trackPos);
25  return trackPos + r.Dot(trackDir) * trackDir;
26 }
27 
28 TVector3 DistanceTools::trackToVtxVec(TVector3 const& trackPos, TVector3 const& trackP, TVector3 const& vtxPos)
29 {
30  TVector3 trackDir(trackP.Unit());
31  TVector3 r(vtxPos - trackPos);
32  return r - (r.Dot(trackDir)) * trackDir;
33 }
34 
35 double DistanceTools::trackToVtxDist(TVector3 const& trackPos, TVector3 const& trackP, TVector3 const& vtxPos)
36 {
37  return trackToVtxVec(trackPos, trackP, vtxPos).Mag();
38 }
39 
40 TMatrixDSym DistanceTools::trackToVtxCovmat(TVector3 const& trackP,
41  TMatrixDSym const& trackPosCovMat, TMatrixDSym const& vtxPosCovMat)
42 {
43  if (trackPosCovMat.GetNcols() != 3 || vtxPosCovMat.GetNcols() != 3) {
44  B2ERROR("in DistanceTools::trackToVtxCovmat, matrices must be of size 3");
45  return TMatrixDSym(3);
46  }
47 
48  TMatrixDSym rCovMat(trackPosCovMat + vtxPosCovMat);
49  TVector3 trackDir(trackP.Unit());
50  //d_j = r_j - v_j * v_k r_k
51  //Jij = del_i d_j = delta_ij - v_i * v_j
52  //Since the vector of closest approach is a linear function of r, its
53  //propagation of errors is exact
54  TMatrixDSym Jacobian(3);
55  // Jacobian_ij = delta_ij -v(i)v(j)
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)
60  Jacobian(i, i) += 1;
61 
62  return rCovMat.Similarity(Jacobian); //calculates J * rCovMat * J^T, and returns it
63 
64 }
65 
66 double DistanceTools::trackToVtxDistErr(TVector3 const& trackPos, TVector3 const& trackP, TVector3 const& vtxPos,
67  TMatrixDSym const& trackPosCovMat, TMatrixDSym const& vtxPosCovMat)
68 {
69  TMatrixDSym covMat(trackToVtxCovmat(trackP, trackPosCovMat, vtxPosCovMat));
70  TVector3 dVec(trackToVtxVec(trackPos, trackP, vtxPos));
71  // n is the normalise vector in the direction of the POCA between the track and the vtx
72  TVector3 n((1. / dVec.Mag()) * dVec);
73 
74  double ret(0);
75 
76  //error on the distance computed as d^T * covMat * d
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);
80 
81  return TMath::Sqrt(ret);
82 }
83 
84 
85 TVector3 DistanceTools::vtxToVtxVec(TVector3 const& vtx1Pos, TVector3 const& vtx2Pos)
86 {
87  return vtx2Pos - vtx1Pos;
88 }
89 
90 double DistanceTools::vtxToVtxDist(TVector3 const& vtx1Pos, TVector3 const& vtx2Pos)
91 {
92  return vtxToVtxVec(vtx1Pos, vtx2Pos).Mag();
93 }
94 
95 TMatrixDSym DistanceTools::vtxToVtxCovMat(TMatrixDSym const& vtx1CovMat, TMatrixDSym const& vtx2CovMat)
96 {
97  if (vtx1CovMat.GetNcols() != 3 || vtx2CovMat.GetNcols() != 3) {
98  B2ERROR("in DistanceTools::vtxToVtxCovMat, matrices must be of size 3");
99  return TMatrixDSym(3);
100  }
101 
102  return vtx1CovMat + vtx2CovMat;
103 }
104 
105 double DistanceTools::vtxToVtxDistErr(TVector3 const& vtx1Pos, TVector3 const& vtx2Pos,
106  TMatrixDSym const& vtx1CovMat, TMatrixDSym const& vtx2CovMat)
107 {
108  TMatrixDSym covMat(vtxToVtxCovMat(vtx1CovMat, vtx2CovMat));
109  TVector3 dVec(vtxToVtxVec(vtx1Pos, vtx2Pos));
110  TVector3 n((1. / dVec.Mag()) * dVec);
111 
112  double ret(0);
113 
114  //error on the distance computed as d^T * covMat * d
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);
118 
119  return TMath::Sqrt(ret);
120 }
121 
Belle2::DistanceTools::trackToVtxVec
TVector3 trackToVtxVec(TVector3 const &trackPos, TVector3 const &trackP, TVector3 const &vtxPos)
Returns the 3D vector between a vertex and a track's point of closest approach to that vertex.
Definition: DistanceTools.cc:28
Belle2::DistanceTools::vtxToVtxDist
double vtxToVtxDist(TVector3 const &vtx1Pos, TVector3 const &vtx2Pos)
Returns the distance between two vertices.
Definition: DistanceTools.cc:90
Belle2::DistanceTools::trackToVtxCovmat
TMatrixDSym trackToVtxCovmat(TVector3 const &trackP, TMatrixDSym const &trackPosCovMat, TMatrixDSym const &vtxPosCovMat)
Returns the covariance (error) matrix of the 3D vector between a vertex and a track's point of closes...
Definition: DistanceTools.cc:40
Belle2::DistanceTools::vtxToVtxCovMat
TMatrixDSym vtxToVtxCovMat(TMatrixDSym const &vtx1CovMat, TMatrixDSym const &vtx2CovMat)
Returns the covariance (error) matrix related to the vector linking two vertices.
Definition: DistanceTools.cc:95
Belle2::DistanceTools::trackToVtxDist
double trackToVtxDist(TVector3 const &trackPos, TVector3 const &trackP, TVector3 const &vtxPos)
Returns the distance between a vertex and a track's point of closest approach to that vertex.
Definition: DistanceTools.cc:35
Belle2::DistanceTools::vtxToVtxDistErr
double vtxToVtxDistErr(TVector3 const &vtx1Pos, TVector3 const &vtx2Pos, TMatrixDSym const &vtx1CovMat, TMatrixDSym const &vtx2CovMat)
Returns the estimated uncertainty on the distance between two vertices.
Definition: DistanceTools.cc:105
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::DistanceTools::trackToVtxDistErr
double trackToVtxDistErr(TVector3 const &trackPos, TVector3 const &trackP, TVector3 const &vtxPos, TMatrixDSym const &trackPosCovMat, TMatrixDSym const &vtxPosCovMat)
Returns the estimated uncertainty between a vertex and a track's point of closest approach to that ve...
Definition: DistanceTools.cc:66
Belle2::DistanceTools::vtxToVtxVec
TVector3 vtxToVtxVec(TVector3 const &vtx1Pos, TVector3 const &vtx2Pos)
Returns the 3D vector between two vertices, ie vtxPos2 - vtxPos1.
Definition: DistanceTools.cc:85
Belle2::DistanceTools::poca
TVector3 poca(TVector3 const &trackPos, TVector3 const &trackP, TVector3 const &vtxPos)
Returns the Point Of Closest Approach of a track to a vertex.
Definition: DistanceTools.cc:21