00001 #ifndef MultiRefittedTS_H 00002 #define MultiRefittedTS_H 00003 00004 #include "RecoVertex/VertexPrimitives/interface/RefittedTrackState.h" 00005 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h" 00006 #include "RecoVertex/VertexPrimitives/interface/LinearizedTrackState.h" 00007 #include "DataFormats/GeometrySurface/interface/Surface.h" 00008 00015 class Surface; 00016 00017 class MultiRefittedTS : public RefittedTrackState<5> { 00018 00019 public: 00020 00021 typedef ReferenceCountingPointer<RefittedTrackState<5> > RefCountedRefittedTrackState; 00022 typedef ReferenceCountingPointer<LinearizedTrackState<5> > RefCountedLinearizedTrackState; 00023 00028 MultiRefittedTS(const std::vector<RefCountedRefittedTrackState> & prtsComp, 00029 const Surface & referenceSurface); 00030 00036 MultiRefittedTS(const std::vector<RefCountedRefittedTrackState> & prtsComp, 00037 const GlobalPoint & referencePosition); 00038 00039 virtual ~MultiRefittedTS(){} 00040 00046 virtual FreeTrajectoryState freeTrajectoryState() const; 00047 00051 virtual TrajectoryStateOnSurface trajectoryStateOnSurface( 00052 const Surface & surface) const; 00053 00058 virtual TrajectoryStateOnSurface trajectoryStateOnSurface( 00059 const Surface & surface, const Propagator & propagator) const; 00060 00066 virtual reco::TransientTrack transientTrack() const; 00067 00073 virtual AlgebraicVectorN parameters() const; 00074 00080 virtual AlgebraicSymMatrixNN covariance() const; 00081 00087 virtual GlobalPoint position() const; 00088 00095 virtual AlgebraicVectorM momentumVector() const; 00096 00097 virtual double weight() const; 00098 00099 virtual std::vector<ReferenceCountingPointer<RefittedTrackState<5> > > components() const 00100 { 00101 return theComponents; 00102 } 00103 00112 virtual ReferenceCountingPointer<RefittedTrackState<5> > stateWithNewWeight 00113 (const double newWeight) const; 00114 00115 00116 private: 00117 00118 void computeFreeTrajectoryState() const; 00119 00120 00121 typedef std::vector<RefCountedRefittedTrackState > RTSvector; 00122 00123 mutable RTSvector theComponents; 00124 mutable bool totalWeightAvailable, ftsAvailable; 00125 mutable double totalWeight; 00126 mutable FreeTrajectoryState fts; 00127 const GlobalPoint refPosition; 00128 ConstReferenceCountingPointer<Surface> refSurface; 00129 const bool surf; 00130 00131 }; 00132 #endif