#include <RecoVertex/VertexTools/interface/VertexDistance3D.h>
Public Member Functions | |
virtual VertexDistance3D * | clone () const |
virtual Measurement1D | signedDistance (const reco::Vertex &primVtx, const reco::Vertex &secVtx, const GlobalVector &momentum) const |
The signed distance is computed using a vector from the primary to the secondary vertex and a given reference vector. | |
VertexDistance3D () | |
Private Member Functions | |
virtual float | compatibility (const GlobalPoint &vtx1Position, const GlobalError &vtx1PositionError, const GlobalPoint &vtx2Position, const GlobalError &vtx2PositionError) const |
virtual Measurement1D | distance (const GlobalPoint &vtx1Position, const GlobalError &vtx1PositionError, const GlobalPoint &vtx2Position, const GlobalError &vtx2PositionError) const |
Private Attributes | |
AlgebraicSymMatrix | theNullMatrix |
Definition at line 14 of file VertexDistance3D.h.
VertexDistance3D::VertexDistance3D | ( | ) | [inline] |
Definition at line 19 of file VertexDistance3D.h.
Referenced by clone().
00019 : theNullMatrix(3, 0) {}
virtual VertexDistance3D* VertexDistance3D::clone | ( | void | ) | const [inline, virtual] |
Implements VertexDistance.
Definition at line 33 of file VertexDistance3D.h.
References VertexDistance3D().
00034 { 00035 return new VertexDistance3D(*this); 00036 }
float VertexDistance3D::compatibility | ( | const GlobalPoint & | vtx1Position, | |
const GlobalError & | vtx1PositionError, | |||
const GlobalPoint & | vtx2Position, | |||
const GlobalError & | vtx2PositionError | |||
) | const [private, virtual] |
Implements VertexDistance.
Definition at line 47 of file VertexDistance3D.cc.
References diff, err1, err2, error, Exception, GlobalErrorBase< T, ErrorWeightType >::matrix(), theNullMatrix, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
00051 { 00052 // error matrix of residuals 00053 AlgebraicSymMatrix err1 = vtx1PositionError.matrix(); 00054 AlgebraicSymMatrix err2 = vtx2PositionError.matrix(); 00055 AlgebraicSymMatrix error = err1 + err2; 00056 if (error == theNullMatrix) return FLT_MAX; 00057 00058 // position residuals 00059 GlobalVector diff = vtx2Position - vtx1Position; 00060 AlgebraicVector vDiff(3); 00061 vDiff[0] = diff.x(); 00062 vDiff[1] = diff.y(); 00063 vDiff[2] = diff.z(); 00064 00065 // Invert error matrix of residuals 00066 int ifail; 00067 error.invert(ifail); 00068 if (ifail != 0) { 00069 throw cms::Exception("VertexDistance3D::matrix inversion problem"); 00070 } 00071 00072 return error.similarity(vDiff); 00073 }
Measurement1D VertexDistance3D::distance | ( | const GlobalPoint & | vtx1Position, | |
const GlobalError & | vtx1PositionError, | |||
const GlobalPoint & | vtx2Position, | |||
const GlobalError & | vtx2PositionError | |||
) | const [private, virtual] |
Implements VertexDistance.
Definition at line 22 of file VertexDistance3D.cc.
References diff, dist(), err, err2, error, PV3DBase< T, PVType, FrameType >::mag(), GlobalErrorBase< T, ErrorWeightType >::matrix(), funct::sqrt(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
Referenced by signedDistance().
00026 { 00027 AlgebraicSymMatrix error = vtx1PositionError.matrix() 00028 + vtx2PositionError.matrix(); 00029 GlobalVector diff = vtx1Position - vtx2Position; 00030 AlgebraicVector vDiff(3); 00031 vDiff[0] = diff.x(); 00032 vDiff[1] = diff.y(); 00033 vDiff[2] = diff.z(); 00034 00035 double dist=diff.mag(); 00036 00037 double err2 = error.similarity(vDiff); 00038 double err = 0.; 00039 if (dist != 0) err = sqrt(err2)/dist; 00040 00041 return Measurement1D(dist,err); 00042 }
Measurement1D VertexDistance3D::signedDistance | ( | const reco::Vertex & | primVtx, | |
const reco::Vertex & | secVtx, | |||
const GlobalVector & | momentum | |||
) | const [virtual] |
The signed distance is computed using a vector from the primary to the secondary vertex and a given reference vector.
The sign is determined by the scalar product of the vector connecting the vertices and the reference vector: if the scalar product is greater than zero, the sign is +1, else -1
Implements VertexDistance.
Definition at line 8 of file VertexDistance3D.cc.
References diff, distance(), Measurement1D::error(), reco::Vertex::position(), Measurement1D::value(), PV3DBase< T, PVType, FrameType >::x(), Basic3DVector< T >::x(), PV3DBase< T, PVType, FrameType >::y(), Basic3DVector< T >::y(), PV3DBase< T, PVType, FrameType >::z(), and Basic3DVector< T >::z().
00010 { 00011 Measurement1D unsignedDistance = distance(vtx1, vtx2); 00012 Basic3DVector<float> diff = Basic3DVector<float> (vtx2.position()) - 00013 Basic3DVector<float> (vtx1.position()); 00014 // Basic3DVector<float> (vtx2 - vtx1); 00015 if ((momentum.x()*diff.x() + momentum.y()*diff.y() * momentum.z()*diff.z()) < 0 ) 00016 return Measurement1D(-1.0*unsignedDistance.value(),unsignedDistance.error()); 00017 return unsignedDistance; 00018 }