CMS 3D CMS Logo

VertexDistance3D Class Reference

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

#include <RecoVertex/VertexTools/interface/VertexDistance3D.h>

Inheritance diagram for VertexDistance3D:

VertexDistance

List of all members.

Public Member Functions

virtual VertexDistance3Dclone () 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


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().

00019 : theNullMatrix(3, 0) {}


Member Function Documentation

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 }


Member Data Documentation

AlgebraicSymMatrix VertexDistance3D::theNullMatrix [private]

Definition at line 42 of file VertexDistance3D.h.

Referenced by compatibility().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:34:59 2009 for CMSSW by  doxygen 1.5.4