00001 #ifndef TrackReco_GsfTransientTrack_h 00002 #define TrackReco_GsfTransientTrack_h 00003 00009 #include "TrackingTools/TransientTrack/interface/BasicTransientTrack.h" 00010 #include "DataFormats/TrackReco/interface/Track.h" 00011 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" 00012 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" 00013 #include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" 00014 #include "TrackingTools/PatternTools/interface/TSCPBuilderNoMaterial.h" 00015 #include "TrackingTools/PatternTools/interface/TransverseImpactPointExtrapolator.h" 00016 00017 namespace reco { 00018 00019 class GsfTransientTrack : public GsfTrack, public BasicTransientTrack { 00020 public: 00021 00022 // constructor from persistent track 00023 GsfTransientTrack(); 00024 GsfTransientTrack( const GsfTrack & tk , const MagneticField* field); 00025 GsfTransientTrack( const GsfTrackRef & tk , const MagneticField* field); 00026 00027 GsfTransientTrack( const GsfTrackRef & tk , const MagneticField* field, const edm::ESHandle<GlobalTrackingGeometry>& trackingGeometry); 00028 00029 GsfTransientTrack( const GsfTrack & tk , const MagneticField* field, const edm::ESHandle<GlobalTrackingGeometry>& trackingGeometry); 00030 00031 GsfTransientTrack( const GsfTransientTrack & tt ); 00032 00033 GsfTransientTrack& operator=(const GsfTransientTrack & tt); 00034 00035 void setES(const edm::EventSetup& ); 00036 00037 void setTrackingGeometry(const edm::ESHandle<GlobalTrackingGeometry>& ); 00038 00039 void setBeamSpot(const reco::BeamSpot& beamSpot); 00040 00041 FreeTrajectoryState initialFreeState() const {return initialFTS;} 00042 00043 TrajectoryStateOnSurface outermostMeasurementState() const; 00044 00045 TrajectoryStateOnSurface innermostMeasurementState() const; 00046 00052 TrajectoryStateClosestToPoint 00053 trajectoryStateClosestToPoint( const GlobalPoint & point ) const; 00054 00059 TrajectoryStateOnSurface stateOnSurface(const GlobalPoint & point) const; 00060 00065 TrajectoryStateClosestToPoint impactPointTSCP() const; 00066 00071 TrajectoryStateOnSurface impactPointState() const; 00072 00073 bool impactPointStateAvailable() const {return initialTSOSAvailable;} 00074 00078 GsfTrackRef persistentTrackRef() const { return tkr_; } 00079 00080 TrackBaseRef trackBaseRef() const {return TrackBaseRef(tkr_);} 00081 00082 TrackCharge charge() const {return GsfTrack::charge();} 00083 00084 const MagneticField* field() const {return theField;} 00085 00086 const Track & track() const {return *this;} 00087 00088 TrajectoryStateClosestToBeamLine stateAtBeamLine() const; 00089 00090 private: 00091 00092 void init(); 00093 void calculateTSOSAtVertex() const; 00094 00095 GsfTrackRef tkr_; 00096 const MagneticField* theField; 00097 00098 FreeTrajectoryState initialFTS; 00099 mutable bool initialTSOSAvailable, initialTSCPAvailable, blStateAvailable; 00100 mutable TrajectoryStateOnSurface initialTSOS; 00101 mutable TrajectoryStateClosestToPoint initialTSCP; 00102 TSCPBuilderNoMaterial builder; 00103 edm::ESHandle<GlobalTrackingGeometry> theTrackingGeometry; 00104 reco::BeamSpot theBeamSpot; 00105 mutable TrajectoryStateClosestToBeamLine trajectoryStateClosestToBeamLine; 00106 00107 TransverseImpactPointExtrapolator theTIPExtrapolator; 00108 00109 00110 }; 00111 00112 } 00113 00114 #endif