00001 #ifndef TrackReco_TransientTrackFromFTS_h 00002 #define TrackReco_TransientTrackFromFTS_h 00003 00009 #include "TrackingTools/TransientTrack/interface/BasicTransientTrack.h" 00010 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" 00011 #include "DataFormats/TrackReco/interface/Track.h" 00012 #include "TrackingTools/PatternTools/interface/TSCPBuilderNoMaterial.h" 00013 00014 namespace reco { 00015 00016 class TransientTrackFromFTS : public BasicTransientTrack { 00017 public: 00018 00019 TransientTrackFromFTS(); 00020 00021 TransientTrackFromFTS(const FreeTrajectoryState & fts); 00022 TransientTrackFromFTS(const FreeTrajectoryState & fts, 00023 const edm::ESHandle<GlobalTrackingGeometry>& trackingGeometry); 00024 00025 TransientTrackFromFTS( const TransientTrackFromFTS & tt ); 00026 00027 TransientTrackFromFTS& operator=(const TransientTrackFromFTS & tt); 00028 00029 void setES(const edm::EventSetup& ); 00030 00031 void setTrackingGeometry(const edm::ESHandle<GlobalTrackingGeometry>& ); 00032 00033 void setBeamSpot(const reco::BeamSpot& beamSpot); 00034 00035 FreeTrajectoryState initialFreeState() const {return initialFTS;} 00036 00037 TrajectoryStateOnSurface outermostMeasurementState() const; 00038 00039 TrajectoryStateOnSurface innermostMeasurementState() const; 00040 00041 TrajectoryStateClosestToPoint 00042 trajectoryStateClosestToPoint( const GlobalPoint & point ) const 00043 {return builder(initialFTS, point);} 00044 00048 TrajectoryStateOnSurface stateOnSurface(const GlobalPoint & point) const; 00049 00050 TrajectoryStateClosestToPoint impactPointTSCP() const; 00051 00052 TrajectoryStateOnSurface impactPointState() const; 00053 00054 bool impactPointStateAvailable() const {return initialTSOSAvailable;} 00055 00056 TrackCharge charge() const {return initialFTS.charge();} 00057 00058 const MagneticField* field() const {return theField;} 00059 00060 const Track & track() const; 00061 00062 TrackBaseRef trackBaseRef() const; 00063 00064 TrajectoryStateClosestToBeamLine stateAtBeamLine() const; 00065 00066 private: 00067 00068 void calculateTSOSAtVertex() const; 00069 00070 FreeTrajectoryState initialFTS; 00071 const MagneticField* theField; 00072 mutable bool initialTSOSAvailable, initialTSCPAvailable, trackAvailable, blStateAvailable; 00073 mutable TrajectoryStateOnSurface initialTSOS; 00074 mutable TrajectoryStateClosestToPoint initialTSCP; 00075 mutable Track theTrack; 00076 TSCPBuilderNoMaterial builder; 00077 edm::ESHandle<GlobalTrackingGeometry> theTrackingGeometry; 00078 reco::BeamSpot theBeamSpot; 00079 mutable TrajectoryStateClosestToBeamLine trajectoryStateClosestToBeamLine; 00080 00081 }; 00082 00083 } 00084 00085 #endif