00001 #ifndef TrackingTools_IPTools_h
00002 #define TrackingTools_IPTools_h
00003 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00004 #include "DataFormats/GeometryCommonDetAlgo/interface/Measurement1D.h"
00005 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
00006 #include "DataFormats/VertexReco/interface/Vertex.h"
00007 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
00008 #include <utility>
00009 #include "DataFormats/CLHEP/interface/Migration.h"
00010 #include "TrackingTools/PatternTools/interface/TransverseImpactPointExtrapolator.h"
00011 #include "RecoVertex/VertexTools/interface/VertexDistance.h"
00012 #include "RecoVertex/VertexTools/interface/VertexDistance3D.h"
00013 #include "RecoVertex/VertexTools/interface/VertexDistanceXY.h"
00014 #include "RecoVertex/VertexPrimitives/interface/VertexState.h"
00015
00016
00017
00018 namespace IPTools
00019 {
00025 std::pair<bool,Measurement1D> absoluteImpactParameter3D(const reco::TransientTrack & transientTrack, const reco::Vertex & vertex);
00026
00033 std::pair<bool,Measurement1D> absoluteTransverseImpactParameter(const reco::TransientTrack & transientTrack, const reco::Vertex & vertex);
00034
00040 std::pair<bool,Measurement1D> signedTransverseImpactParameter(const reco::TransientTrack & track,
00041 const GlobalVector & direction, const reco::Vertex & vertex);
00042
00049 std::pair<bool,Measurement1D> signedImpactParameter3D(const reco::TransientTrack & track,
00050 const GlobalVector & direction, const reco::Vertex & vertex);
00051
00053 std::pair<bool,Measurement1D> absoluteImpactParameter(const TrajectoryStateOnSurface & tsos , const reco::Vertex & vertex, VertexDistance & distanceComputer) ;
00054
00055
00056 inline TrajectoryStateOnSurface transverseExtrapolate(const TrajectoryStateOnSurface & track,const GlobalPoint & vertexPosition, const MagneticField * field)
00057 {
00058 TransverseImpactPointExtrapolator extrapolator(field);
00059 return extrapolator.extrapolate(track, vertexPosition);
00060 }
00061
00062
00063
00064 TrajectoryStateOnSurface closestApproachToJet(const TrajectoryStateOnSurface & state, const reco::Vertex & vertex,
00065 const GlobalVector& aJetDirection,const MagneticField * field);
00066
00067 GlobalVector linearImpactParameter(const TrajectoryStateOnSurface & aTSOS, const GlobalPoint & point);
00068
00069
00070 std::pair<bool,Measurement1D> linearizedSignedImpactParameter3D(const TrajectoryStateOnSurface & state,
00071 const GlobalVector & direction, const reco::Vertex & vertex);
00072
00073 inline std::pair<bool,Measurement1D> linearizedSignedImpactParameter3D(const reco::TransientTrack & transientTrack,
00074 const GlobalVector & direction, const reco::Vertex & vertex)
00075 {
00076
00077 TrajectoryStateOnSurface closestToJetState = closestApproachToJet(transientTrack.impactPointState(), vertex, direction,transientTrack.field());
00078 return linearizedSignedImpactParameter3D(closestToJetState,direction,vertex);
00079 }
00080
00081 std::pair<bool,Measurement1D> signedDecayLength3D(const TrajectoryStateOnSurface & state,
00082 const GlobalVector & direction, const reco::Vertex & vertex);
00083
00084 inline std::pair<bool,Measurement1D> signedDecayLength3D(const reco::TransientTrack & transientTrack,
00085 const GlobalVector & direction, const reco::Vertex & vertex)
00086 {
00087
00088 TrajectoryStateOnSurface closestToJetState = closestApproachToJet(transientTrack.impactPointState(), vertex, direction,transientTrack.field());
00089 return signedDecayLength3D(closestToJetState,direction,vertex);
00090 }
00091
00092
00093 std::pair<double,Measurement1D> jetTrackDistance(const reco::TransientTrack & track, const GlobalVector & direction,
00094 const reco::Vertex & vertex);
00095 }
00096
00097 #endif