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
00012
00013 namespace IPTools
00014 {
00015 std::pair<bool,Measurement1D> signedTransverseImpactParameter(const reco::TransientTrack & track,
00016 const GlobalVector & direction, const reco::Vertex & vertex);
00017
00018
00019 inline TrajectoryStateOnSurface transverseExtrapolate(const TrajectoryStateOnSurface & track,const GlobalPoint & vertexPosition, const MagneticField * field)
00020 {
00021 TransverseImpactPointExtrapolator extrapolator(field);
00022 return extrapolator.extrapolate(track, vertexPosition);
00023 }
00024
00025
00026
00027 TrajectoryStateOnSurface closestApproachToJet(const TrajectoryStateOnSurface & state, const reco::Vertex & vertex,
00028 const GlobalVector& aJetDirection,const MagneticField * field);
00029
00030 GlobalVector linearImpactParameter(const TrajectoryStateOnSurface & aTSOS, const GlobalPoint & point);
00031
00032
00033 std::pair<bool,Measurement1D> signedImpactParameter3D(const TrajectoryStateOnSurface & state,
00034 const GlobalVector & direction, const reco::Vertex & vertex);
00035
00036 inline std::pair<bool,Measurement1D> signedImpactParameter3D(const reco::TransientTrack & transientTrack,
00037 const GlobalVector & direction, const reco::Vertex & vertex)
00038 {
00039
00040 TrajectoryStateOnSurface closestToJetState = closestApproachToJet(transientTrack.impactPointState(), vertex, direction,transientTrack.field());
00041 return signedImpactParameter3D(closestToJetState,direction,vertex);
00042 }
00043
00044 std::pair<bool,Measurement1D> signedDecayLength3D(const TrajectoryStateOnSurface & state,
00045 const GlobalVector & direction, const reco::Vertex & vertex);
00046
00047 inline std::pair<bool,Measurement1D> signedDecayLength3D(const reco::TransientTrack & transientTrack,
00048 const GlobalVector & direction, const reco::Vertex & vertex)
00049 {
00050
00051 TrajectoryStateOnSurface closestToJetState = closestApproachToJet(transientTrack.impactPointState(), vertex, direction,transientTrack.field());
00052 return signedDecayLength3D(closestToJetState,direction,vertex);
00053 }
00054
00055
00056 std::pair<double,Measurement1D> jetTrackDistance(const reco::TransientTrack & track, const GlobalVector & direction,
00057 const reco::Vertex & vertex);
00058 }
00059
00060 #endif