4 template <
unsigned int N>
9 typedef ROOT::Math::SMatrix<double,N,3,ROOT::Math::MatRepStd<double,N,3> > AlgebraicMatrixN3;
10 typedef ROOT::Math::SMatrix<double,
N,N-2,ROOT::Math::MatRepStd<double,
N,N-2> > AlgebraicMatrixNM;
11 typedef ROOT::Math::SMatrix<double,N-2,3,ROOT::Math::MatRepStd<double,N-2,3> > AlgebraicMatrixM3;
12 typedef ROOT::Math::SMatrix<double,3,N-2,ROOT::Math::MatRepStd<double,3,N-2> > AlgebraicMatrix3M;
13 typedef ROOT::Math::SMatrix<double,N,N,ROOT::Math::MatRepSym<double,N> > AlgebraicSymMatrixNN;
14 typedef ROOT::Math::SMatrix<double,N-2,N-2,ROOT::Math::MatRepSym<double,N-2> > AlgebraicSymMatrixMM;
15 typedef ROOT::Math::SMatrix<double,N-2,N-2,ROOT::Math::MatRepStd<double,N-2,N-2> > AlgebraicMatrixMM;
19 std::vector<RefCountedVertexTrack>
tracks = vertex.tracks();
24 for(
typename std::vector<RefCountedVertexTrack>::iterator
i = tracks.begin();
25 i != tracks.end();
i++)
27 const AlgebraicMatrixN3 & leftA = (*i)->linearizedTrack()->positionJacobian();
28 const AlgebraicMatrixNM & leftB = (*i)->linearizedTrack()->momentumJacobian();
29 AlgebraicSymMatrixNN leftG = (*i)->linearizedTrack()->predictedStateWeight(ifail);
30 AlgebraicSymMatrixMM leftW = ROOT::Math::SimilarityT(leftB,leftG);
32 ifail = ! leftW.Invert();
34 (
"KalmanTrackToTrackCovarianceCalculator::leftW matrix inversion failed");
35 AlgebraicMatrixM3 leftPart = leftW * (ROOT::Math::Transpose(leftB)) * leftG * leftA;
37 for(
typename std::vector<RefCountedVertexTrack>::iterator j = tracks.begin(); j != tracks.end(); j++)
43 const AlgebraicMatrixN3 & rightA = (*j)->linearizedTrack()->positionJacobian();
44 const AlgebraicMatrixNM & rightB = (*j)->linearizedTrack()->momentumJacobian();
45 AlgebraicSymMatrixNN rightG = (*j)->linearizedTrack()->predictedStateWeight(ifail);
46 AlgebraicSymMatrixMM rightW = ROOT::Math::SimilarityT(rightB,rightG);
48 ifail = ! rightW.Invert();
51 (
"KalmanTrackToTrackCovarianceCalculator::rightW matrix inversion failed");
52 AlgebraicMatrix3M rightPart = (ROOT::Math::Transpose(rightA)) * rightG * rightB * rightW;
53 internalMap[(*j)] = leftPart * vertexC * rightPart;
56 returnMap[*
i] = internalMap;
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
std::map< RefCountedVertexTrack, AlgebraicMatrixMM > TrackMap
std::map< RefCountedVertexTrack, TrackMap > TrackToTrackMap