Go to the documentation of this file.00001
00002 #include "RecoVertex/TertiaryTracksVertexFinder/interface/DistanceOfVertices2D.h"
00003
00004 Measurement1D DistanceOfVertices2D::distance ( const TransientVertex & v1 , const TransientVertex & v2 ) {
00005
00006 double FlightDistance2D = deltaV2V1(v1,v2).perp() ;
00007
00008
00009
00010
00011
00012 double sigmaFlightDistance2D2;
00013 if( FlightDistance2D > 0.000001 )
00014 sigmaFlightDistance2D2 = ( 1 / ( FlightDistance2D*FlightDistance2D ) ) * terms2D ( v1 , v2 ) ;
00015 else
00016 sigmaFlightDistance2D2 = 0.0;
00017
00018 double sigmaFlightDistance2D ;
00019 if ( sigmaFlightDistance2D2 >= 0 ) {
00020 sigmaFlightDistance2D = sqrt ( sigmaFlightDistance2D2 ) ;
00021 }
00022 else {
00023 std::cout << "DistanceOfVertices2D::distance : sigmaFlightDistance2D2 <= 0 : " << sigmaFlightDistance2D2 << std::endl ;
00024 sigmaFlightDistance2D = 0.0 ;
00025 }
00026
00027 return Measurement1D ( FlightDistance2D , sigmaFlightDistance2D ) ;
00028 }
00029
00030
00031 Measurement1D DistanceOfVertices2D::signedDistance ( const TransientVertex & v1 , const TransientVertex & v2 , const CLHEP::Hep3Vector & direction ) {
00032
00033
00034
00035 CLHEP::Hep3Vector v1ToV2 = deltaV2V1 ( v1, v2 ) ;
00036 int sign2d = -1 ;
00037 if ( ( direction.x()*v1ToV2.x() + direction.y()*v1ToV2.y() ) > 0 ) sign2d = 1 ;
00038
00039 Measurement1D unsignedFlightDistance = distance ( v1 , v2 ) ;
00040
00041 return Measurement1D ( sign2d * unsignedFlightDistance.value() , unsignedFlightDistance.error() ) ;
00042 }
00043