![]() |
![]() |
00001 #ifndef TrackReco_TransientTrack_h 00002 #define TrackReco_TransientTrack_h 00003 00004 00012 #include "TrackingTools/TransientTrack/interface/BasicTransientTrack.h" 00013 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" 00014 00015 #include "DataFormats/TrackReco/interface/Track.h" 00016 #include "DataFormats/TrackReco/interface/TrackFwd.h" 00017 #include "DataFormats/Common/interface/RefToBase.h" 00018 00019 namespace reco { 00020 00021 class TransientTrack : private BasicTransientTrack::Proxy { 00022 00023 typedef BasicTransientTrack::Proxy Base; 00024 00025 public: 00026 00027 // constructor from persistent track 00028 TransientTrack(); 00029 TransientTrack( const Track & tk , const MagneticField* field); 00030 TransientTrack( const TrackRef & tk , const MagneticField* field); 00031 00032 TransientTrack( const TrackRef & tk , const MagneticField* field, const edm::ESHandle<GlobalTrackingGeometry>& trackingGeometry); 00033 00034 TransientTrack( const Track & tk , const MagneticField* field, const edm::ESHandle<GlobalTrackingGeometry>& trackingGeometry); 00035 00036 TransientTrack( BasicTransientTrack * btt ) : Base(btt) {} 00037 00038 void setES(const edm::EventSetup& es) {sharedData().setES(es);} 00039 00040 void setTrackingGeometry(const edm::ESHandle<GlobalTrackingGeometry>& tg) 00041 {sharedData().setTrackingGeometry(tg);} 00042 00043 void setBeamSpot(const reco::BeamSpot& beamSpot) 00044 {sharedData().setBeamSpot(beamSpot);} 00045 00046 FreeTrajectoryState initialFreeState() const {return data().initialFreeState();} 00047 00048 TrajectoryStateOnSurface outermostMeasurementState() const 00049 {return data().outermostMeasurementState();} 00050 00051 TrajectoryStateOnSurface innermostMeasurementState() const 00052 {return data().innermostMeasurementState();} 00053 00054 TrajectoryStateClosestToPoint 00055 trajectoryStateClosestToPoint( const GlobalPoint & point ) const 00056 {return data().trajectoryStateClosestToPoint(point);} 00057 00058 TrajectoryStateOnSurface stateOnSurface(const GlobalPoint & point) const 00059 {return data().stateOnSurface(point);} 00060 00061 TrajectoryStateClosestToPoint impactPointTSCP() const 00062 {return data().impactPointTSCP();} 00063 00064 TrajectoryStateOnSurface impactPointState() const 00065 {return data().impactPointState();} 00066 00067 bool impactPointStateAvailable() const 00068 {return data().impactPointStateAvailable();} 00069 00070 TrackCharge charge() const {return data().charge();} 00071 00072 bool operator== (const TransientTrack & other) const 00073 {return &(data()) == &(other.data());} 00074 // {return (a.persistentTrackRef()==tkr_);} 00075 00076 bool operator< (const TransientTrack & other) const 00077 {return &(data()) < &(other.data());} 00078 // {return (initialFTS.momentum().z()<a.initialFreeState().momentum().z());} 00079 00080 const MagneticField* field() const {return data().field();} 00081 00082 const BasicTransientTrack* basicTransientTrack() const {return &(data());} 00083 00084 const Track & track() const {return data().track();} 00085 00086 TrackBaseRef trackBaseRef() const {return data().trackBaseRef();} 00087 00088 TrajectoryStateClosestToBeamLine stateAtBeamLine() const 00089 {return data().stateAtBeamLine();} 00090 00091 // Methods forwarded to original track. 00092 00094 trackingRecHit_iterator recHitsBegin() const { return track().recHitsBegin(); } 00096 trackingRecHit_iterator recHitsEnd() const { return track().recHitsEnd(); } 00098 TrackingRecHitRef recHit( size_t i ) const { return track().recHit( i ); } 00100 size_t recHitsSize() const { return track().recHitsSize(); } 00101 // hit pattern 00102 const HitPattern & hitPattern() const { return track().hitPattern(); } 00104 unsigned short numberOfValidHits() const { return track().hitPattern().numberOfValidHits(); } 00106 unsigned short numberOfLostHits() const { return track().hitPattern().numberOfLostHits(); } 00108 double chi2() const { return track().chi2(); } 00110 double ndof() const { return track().ndof(); } 00112 double normalizedChi2() const { return track().chi2() / track().ndof(); } 00113 00115 bool isValid() const {return Base::isValid() ;} 00116 00117 }; 00118 00119 } 00120 00121 #endif