CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Types | Public Member Functions | Private Attributes
KalmanVertexTrackUpdator< N > Class Template Reference

#include <KalmanVertexTrackUpdator.h>

Inheritance diagram for KalmanVertexTrackUpdator< N >:
VertexTrackUpdator< N >

Public Types

typedef ROOT::Math::SMatrix
< double, 3, N-2,
ROOT::Math::MatRepStd< double,
3, N-2 > > 
AlgebraicMatrix3M
 
typedef ROOT::Math::SMatrix
< double, N+1, N+1,
ROOT::Math::MatRepSym< double,
N+1 > > 
AlgebraicSymMatrixOO
 
typedef VertexTrack< N >
::RefCountedLinearizedTrackState 
RefCountedLinearizedTrackState
 
typedef VertexTrack< N >
::RefCountedRefittedTrackState 
RefCountedRefittedTrackState
 
typedef CachingVertex< N >
::RefCountedVertexTrack 
RefCountedVertexTrack
 
typedef std::pair
< RefCountedRefittedTrackState,
AlgebraicSymMatrixOO
trackMatrixPair
 

Public Member Functions

KalmanVertexTrackUpdator< N > * clone () const override
 
 KalmanVertexTrackUpdator ()
 
trackMatrixPair trackRefit (const VertexState &vertex, RefCountedLinearizedTrackState linTrackState, float weight) const
 
RefCountedVertexTrack update (const CachingVertex< N > &vertex, RefCountedVertexTrack track) const override
 
 ~KalmanVertexTrackUpdator () override
 
- Public Member Functions inherited from VertexTrackUpdator< N >
virtual CachingVertex< N >
::RefCountedVertexTrack 
update (const CachingVertex< N > &v, typename CachingVertex< N >::RefCountedVertexTrack t) const =0
 
virtual ~VertexTrackUpdator ()
 

Private Attributes

KVFHelper< Nhelper
 
VertexTrackFactory< NtheVTFactory
 
KalmanVertexUpdator< Nupdator
 

Detailed Description

template<unsigned int N>
class KalmanVertexTrackUpdator< N >

Performs the refit of the tracks with the vertex constraint, using the Kalman filter algorithms.

Definition at line 17 of file KalmanVertexTrackUpdator.h.

Member Typedef Documentation

template<unsigned int N>
typedef ROOT::Math::SMatrix<double, 3, N - 2, ROOT::Math::MatRepStd<double, 3, N - 2> > KalmanVertexTrackUpdator< N >::AlgebraicMatrix3M

Definition at line 47 of file KalmanVertexTrackUpdator.h.

template<unsigned int N>
typedef ROOT::Math::SMatrix<double, N + 1, N + 1, ROOT::Math::MatRepSym<double, N + 1> > KalmanVertexTrackUpdator< N >::AlgebraicSymMatrixOO

Definition at line 48 of file KalmanVertexTrackUpdator.h.

Definition at line 20 of file KalmanVertexTrackUpdator.h.

Definition at line 21 of file KalmanVertexTrackUpdator.h.

Definition at line 19 of file KalmanVertexTrackUpdator.h.

Definition at line 49 of file KalmanVertexTrackUpdator.h.

Constructor & Destructor Documentation

template<unsigned int N>
KalmanVertexTrackUpdator< N >::KalmanVertexTrackUpdator ( )
inline

Default constructor

Definition at line 27 of file KalmanVertexTrackUpdator.h.

Referenced by KalmanVertexTrackUpdator< 5 >::clone().

27 {}
template<unsigned int N>
KalmanVertexTrackUpdator< N >::~KalmanVertexTrackUpdator ( )
inlineoverride

Definition at line 29 of file KalmanVertexTrackUpdator.h.

29 {}

Member Function Documentation

template<unsigned int N>
KalmanVertexTrackUpdator<N>* KalmanVertexTrackUpdator< N >::clone ( void  ) const
inlineoverridevirtual

Clone method

Implements VertexTrackUpdator< N >.

Definition at line 45 of file KalmanVertexTrackUpdator.h.

template<unsigned int N>
KalmanVertexTrackUpdator< N >::trackMatrixPair KalmanVertexTrackUpdator< N >::trackRefit ( const VertexState vertex,
RefCountedLinearizedTrackState  linTrackState,
float  weight 
) const

Refit of the track with the vertex constraint.

Parameters
vertexThe vertex which has to be used as constraint.
trackThe track to refit.
Returns
The refitted state with the track-to-vertex covariance.

Definition at line 28 of file KalmanVertexTrackUpdator.cc.

References a, b, VertexState::error(), invertPosDefMatrix(), GlobalErrorBase< T, ErrorWeightType >::matrix(), N, VertexState::position(), alignCSCRings::s, VertexState::weight(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by GsfVertexSmoother::createNewComponent().

31  {
32  typedef ROOT::Math::SVector<double, N> AlgebraicVectorN;
33  typedef ROOT::Math::SVector<double, N - 2> AlgebraicVectorM;
34  typedef ROOT::Math::SMatrix<double, N, 3, ROOT::Math::MatRepStd<double, N, 3> > AlgebraicMatrixN3;
35  typedef ROOT::Math::SMatrix<double, 3, N, ROOT::Math::MatRepStd<double, 3, N> > AlgebraicMatrix3N;
36  typedef ROOT::Math::SMatrix<double, 3, N - 2, ROOT::Math::MatRepStd<double, 3, N - 2> > AlgebraicMatrix3M;
37  typedef ROOT::Math::SMatrix<double, N, N - 2, ROOT::Math::MatRepStd<double, N, N - 2> > AlgebraicMatrixNM;
38  typedef ROOT::Math::SMatrix<double, N - 2, 3, ROOT::Math::MatRepStd<double, N - 2, 3> > AlgebraicMatrixM3;
39  typedef ROOT::Math::SMatrix<double, N, N, ROOT::Math::MatRepSym<double, N> > AlgebraicSymMatrixNN;
40  // typedef ROOT::Math::SMatrix<double,N+1,N+1,ROOT::Math::MatRepSym<double,N+1> > AlgebraicSymMatrixOO;
41  typedef ROOT::Math::SMatrix<double, N + 1, N + 1, ROOT::Math::MatRepStd<double, N + 1, N + 1> > AlgebraicMatrixOO;
42  typedef ROOT::Math::SMatrix<double, N - 2, N - 2, ROOT::Math::MatRepSym<double, N - 2> > AlgebraicSymMatrixMM;
43 
44  //Vertex position
45  GlobalPoint vertexPosition = vertex.position();
46 
47  AlgebraicVector3 vertexCoord;
48  vertexCoord(0) = vertexPosition.x();
49  vertexCoord(1) = vertexPosition.y();
50  vertexCoord(2) = vertexPosition.z();
51  const AlgebraicSymMatrix33 vertexErrorMatrix = vertex.error().matrix();
52 
53  //track information
54  const AlgebraicMatrixN3 a = linTrackState->positionJacobian();
55  const AlgebraicMatrixNM b = linTrackState->momentumJacobian();
56 
57  // AlgebraicVectorN trackParameters =
58  // linTrackState->predictedStateParameters();
59 
60  int ifail;
61  AlgebraicSymMatrixNN trackParametersWeight = linTrackState->predictedStateWeight(ifail);
62 
63  AlgebraicSymMatrixMM s = ROOT::Math::SimilarityT(b, trackParametersWeight);
64 
65  if (!invertPosDefMatrix(s))
66  throw VertexException("KalmanVertexTrackUpdator::S matrix inversion failed");
67 
68  // NN NM MM
69  AlgebraicMatrixNM twbs = trackParametersWeight * b * s;
70 
71  AlgebraicVectorN vv = linTrackState->predictedStateParameters() - linTrackState->constantTerm() - a * vertexCoord;
72  // MM MN NN
73  // AlgebraicVectorM newTrackMomentumP = s * (ROOT::Math::Transpose(b)) * trackParametersWeight * vv;
74  AlgebraicVectorM newTrackMomentumP = ROOT::Math::Transpose(twbs) * vv;
75 
76  //AlgebraicMatrix3M refittedPositionMomentumConvariance =
77  // 33 3N NN NM MM
78  // -vertexErrorMatrix * (ROOT::Math::Transpose(a)) * trackParametersWeight * b * s;
79 
80  AlgebraicMatrix3N tmpM1 = -vertexErrorMatrix * (ROOT::Math::Transpose(a));
81  AlgebraicMatrix3M refittedPositionMomentumConvariance = tmpM1 * twbs;
82 
83  AlgebraicSymMatrixMM refittedMomentumConvariance =
84  s / weight + ROOT::Math::SimilarityT(refittedPositionMomentumConvariance, vertex.weight().matrix());
85 
86  // int matrixSize = 3+3; //refittedMomentumConvariance.num_col();
87  AlgebraicMatrixOO covMatrix; //(matrixSize, matrixSize);
88  covMatrix.Place_at(refittedPositionMomentumConvariance, 0, 3);
89  covMatrix.Place_at(ROOT::Math::Transpose(refittedPositionMomentumConvariance), 3, 0);
90  covMatrix.Place_at(vertexErrorMatrix, 0, 0);
91  covMatrix.Place_at(refittedMomentumConvariance, 3, 3);
92 
93  AlgebraicSymMatrixOO covSymMatrix(covMatrix.LowerBlock());
94 
95  RefCountedRefittedTrackState refittedTrackState =
96  linTrackState->createRefittedTrackState(vertexPosition, newTrackMomentumP, covSymMatrix);
97 
98  return trackMatrixPair(refittedTrackState, covSymMatrix);
99  // (refittedTrackState, refittedPositionMomentumConvariance);
100 }
ROOT::Math::SMatrix< double, 3, N-2, ROOT::Math::MatRepStd< double, 3, N-2 > > AlgebraicMatrix3M
Common base class.
const AlgebraicSymMatrix33 matrix() const
T y() const
Definition: PV3DBase.h:60
GlobalPoint position() const
Definition: VertexState.h:62
std::pair< RefCountedRefittedTrackState, AlgebraicSymMatrixOO > trackMatrixPair
ROOT::Math::SMatrix< double, N+1, N+1, ROOT::Math::MatRepSym< double, N+1 > > AlgebraicSymMatrixOO
T z() const
Definition: PV3DBase.h:61
bool invertPosDefMatrix(ROOT::Math::SMatrix< T, N, N, ROOT::Math::MatRepSym< T, N > > &m)
GlobalWeight weight() const
Definition: VertexState.h:69
#define N
Definition: blowfish.cc:9
double b
Definition: hdecay.h:118
double a
Definition: hdecay.h:119
ROOT::Math::SVector< double, 3 > AlgebraicVector3
VertexTrack< N >::RefCountedRefittedTrackState RefCountedRefittedTrackState
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
GlobalError error() const
Definition: VertexState.h:64
int weight
Definition: histoStyle.py:51
T x() const
Definition: PV3DBase.h:59
template<unsigned int N>
CachingVertex< N >::RefCountedVertexTrack KalmanVertexTrackUpdator< N >::update ( const CachingVertex< N > &  vertex,
RefCountedVertexTrack  track 
) const
override

Refit of the track with the vertex constraint.

Parameters
vertexThe vertex which has to be used as constraint.
trackThe track to refit.
Returns
The VertexTrack containing the refitted track and the track-to-vertex covariance.

Definition at line 12 of file KalmanVertexTrackUpdator.cc.

References mps_fire::result, HLT_FULL_cff::updator, and CachingVertex< N >::vertexState().

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), progressbar.ProgressBar::finish(), and MatrixUtil.Steps::overwrite().

15 {
16  trackMatrixPair thePair = trackRefit(vertex.vertexState(), track->linearizedTrack(), track->weight());
17 
18  VertexState rVert = updator.positionUpdate(vertex.vertexState(), track->linearizedTrack(), track->weight(), -1);
19 
20  std::pair<bool, double> result = helper.trackParameterChi2(track->linearizedTrack(), thePair.first);
21  float smoothedChi2 = helper.vertexChi2(rVert, vertex.vertexState()) + result.second;
22 
23  return theVTFactory.vertexTrack(
24  track->linearizedTrack(), vertex.vertexState(), thePair.first, smoothedChi2, thePair.second, track->weight());
25 }
VertexState const & vertexState() const
tuple result
Definition: mps_fire.py:311
std::pair< RefCountedRefittedTrackState, AlgebraicSymMatrixOO > trackMatrixPair
VertexTrackFactory< N > theVTFactory
trackMatrixPair trackRefit(const VertexState &vertex, RefCountedLinearizedTrackState linTrackState, float weight) const
KalmanVertexUpdator< N > updator

Member Data Documentation

template<unsigned int N>
KVFHelper<N> KalmanVertexTrackUpdator< N >::helper
private

Definition at line 64 of file KalmanVertexTrackUpdator.h.

template<unsigned int N>
VertexTrackFactory<N> KalmanVertexTrackUpdator< N >::theVTFactory
private

Definition at line 63 of file KalmanVertexTrackUpdator.h.

template<unsigned int N>
KalmanVertexUpdator<N> KalmanVertexTrackUpdator< N >::updator
private

Definition at line 65 of file KalmanVertexTrackUpdator.h.