CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
VertexDistance3D Class Reference

#include <VertexDistance3D.h>

Inheritance diagram for VertexDistance3D:
VertexDistance

Public Member Functions

virtual VertexDistance3Dclone () const
 
virtual Measurement1D signedDistance (const reco::Vertex &primVtx, const reco::Vertex &secVtx, const GlobalVector &momentum) const
 
 VertexDistance3D ()
 
- Public Member Functions inherited from VertexDistance
virtual float compatibility (const reco::Vertex &, const reco::Vertex &) const
 
virtual float compatibility (const VertexState &, const VertexState &) const
 
virtual float compatibility (const reco::Vertex &, const VertexState &) const
 
virtual float compatibility (const VertexState &, const reco::Vertex &) const
 
Measurement1D distance (const reco::Vertex &, const reco::Vertex &) const
 
Measurement1D distance (const VertexState &, const VertexState &) const
 
Measurement1D distance (const reco::Vertex &, const VertexState &) const
 
Measurement1D distance (const VertexState &, const reco::Vertex &) const
 
virtual ~VertexDistance ()
 

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
 

Additional Inherited Members

Detailed Description

Computes the distance and chi-squared compatibility between two vertices with their 3D positions.

Definition at line 14 of file VertexDistance3D.h.

Constructor & Destructor Documentation

VertexDistance3D::VertexDistance3D ( )
inline

Definition at line 19 of file VertexDistance3D.h.

Referenced by clone().

19 : theNullMatrix(3, 0) {}
AlgebraicSymMatrix theNullMatrix

Member Function Documentation

virtual VertexDistance3D* VertexDistance3D::clone ( void  ) const
inlinevirtual

Implements VertexDistance.

Definition at line 33 of file VertexDistance3D.h.

References VertexDistance3D().

34  {
35  return new VertexDistance3D(*this);
36  }
float VertexDistance3D::compatibility ( const GlobalPoint vtx1Position,
const GlobalError vtx1PositionError,
const GlobalPoint vtx2Position,
const GlobalError vtx2PositionError 
) const
privatevirtual

Implements VertexDistance.

Definition at line 47 of file VertexDistance3D.cc.

References diffTreeTool::diff, error, edm::hlt::Exception, GlobalErrorBase< T, ErrorWeightType >::matrix(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

51 {
52  // error matrix of residuals
53  AlgebraicSymMatrix err1 = vtx1PositionError.matrix();
54  AlgebraicSymMatrix err2 = vtx2PositionError.matrix();
55  AlgebraicSymMatrix error = err1 + err2;
56  if (error == theNullMatrix) return FLT_MAX;
57 
58  // position residuals
59  GlobalVector diff = vtx2Position - vtx1Position;
60  AlgebraicVector vDiff(3);
61  vDiff[0] = diff.x();
62  vDiff[1] = diff.y();
63  vDiff[2] = diff.z();
64 
65  // Invert error matrix of residuals
66  int ifail;
67  error.invert(ifail);
68  if (ifail != 0) {
69  throw cms::Exception("VertexDistance3D::matrix inversion problem");
70  }
71 
72  return error.similarity(vDiff);
73 }
T y() const
Definition: PV3DBase.h:57
AlgebraicSymMatrix matrix() const
T z() const
Definition: PV3DBase.h:58
CLHEP::HepVector AlgebraicVector
CLHEP::HepSymMatrix AlgebraicSymMatrix
AlgebraicSymMatrix theNullMatrix
T x() const
Definition: PV3DBase.h:56
Measurement1D VertexDistance3D::distance ( const GlobalPoint vtx1Position,
const GlobalError vtx1PositionError,
const GlobalPoint vtx2Position,
const GlobalError vtx2PositionError 
) const
privatevirtual

Implements VertexDistance.

Definition at line 22 of file VertexDistance3D.cc.

References diffTreeTool::diff, error, PV3DBase< T, PVType, FrameType >::mag(), GlobalErrorBase< T, ErrorWeightType >::matrix(), mathSSE::sqrt(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by AddTvTrack::getSecondaryVertices(), InclusiveVertexFinder::nearTracks(), and TrackIPProducer::produce().

26 {
27  AlgebraicSymMatrix error = vtx1PositionError.matrix()
28  + vtx2PositionError.matrix();
29  GlobalVector diff = vtx1Position - vtx2Position;
30  AlgebraicVector vDiff(3);
31  vDiff[0] = diff.x();
32  vDiff[1] = diff.y();
33  vDiff[2] = diff.z();
34 
35  double dist=diff.mag();
36 
37  double err2 = error.similarity(vDiff);
38  double err = 0.;
39  if (dist != 0) err = sqrt(err2)/dist;
40 
41  return Measurement1D(dist,err);
42 }
T y() const
Definition: PV3DBase.h:57
AlgebraicSymMatrix matrix() const
T mag() const
Definition: PV3DBase.h:61
T sqrt(T t)
Definition: SSEVec.h:28
T z() const
Definition: PV3DBase.h:58
CLHEP::HepVector AlgebraicVector
CLHEP::HepSymMatrix AlgebraicSymMatrix
T x() const
Definition: PV3DBase.h:56
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 diffTreeTool::diff, 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().

10 {
11  Measurement1D unsignedDistance = distance(vtx1, vtx2);
12  Basic3DVector<float> diff = Basic3DVector<float> (vtx2.position()) -
13  Basic3DVector<float> (vtx1.position());
14 // Basic3DVector<float> (vtx2 - vtx1);
15  if ((momentum.x()*diff.x() + momentum.y()*diff.y() * momentum.z()*diff.z()) < 0 )
16  return Measurement1D(-1.0*unsignedDistance.value(),unsignedDistance.error());
17  return unsignedDistance;
18 }
virtual Measurement1D distance(const GlobalPoint &vtx1Position, const GlobalError &vtx1PositionError, const GlobalPoint &vtx2Position, const GlobalError &vtx2PositionError) const
T y() const
Cartesian y coordinate.
T x() const
Cartesian x coordinate.
T y() const
Definition: PV3DBase.h:57
double error() const
Definition: Measurement1D.h:30
T z() const
Cartesian z coordinate.
T z() const
Definition: PV3DBase.h:58
double value() const
Definition: Measurement1D.h:28
T x() const
Definition: PV3DBase.h:56

Member Data Documentation

AlgebraicSymMatrix VertexDistance3D::theNullMatrix
private

Definition at line 42 of file VertexDistance3D.h.