00001 #ifndef PerigeeMultiLTS_H 00002 #define PerigeeMultiLTS_H 00003 00004 #include "RecoVertex/VertexPrimitives/interface/LinearizedTrackState.h" 00005 #include "RecoVertex/VertexTools/interface/LinearizedTrackStateFactory.h" 00006 #include "TrackingTools/TransientTrack/interface/TransientTrack.h" 00007 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h" 00008 #include <vector> 00009 00014 class PerigeeMultiLTS : public LinearizedTrackState<5> { 00015 00016 00017 public: 00018 00019 typedef ReferenceCountingPointer<LinearizedTrackState<5> > RefCountedLinearizedTrackState; 00020 00024 friend class MultiPerigeeLTSFactory; 00025 00031 virtual RefCountedLinearizedTrackState stateWithNewLinearizationPoint 00032 (const GlobalPoint & newLP) const; 00033 00034 00038 const GlobalPoint & linearizationPoint() const { return theLinPoint; } 00039 00040 virtual reco::TransientTrack track() const { return theTrack; } 00041 00046 const TrajectoryStateOnSurface state() const { return theTSOS; } 00047 00051 virtual const AlgebraicVectorN & constantTerm() const; 00052 00056 virtual const AlgebraicMatrixN3 & positionJacobian() const; 00057 00061 virtual const AlgebraicMatrixNM & momentumJacobian() const; 00062 00066 virtual const AlgebraicVectorN & parametersFromExpansion() const; 00067 00072 const TrajectoryStateClosestToPoint & predictedState() const; 00073 00077 AlgebraicVectorN predictedStateParameters() const; 00078 00082 virtual AlgebraicVectorM predictedStateMomentumParameters() const; 00083 00088 AlgebraicSymMatrixNN predictedStateWeight(int & error) const; 00089 00093 AlgebraicSymMatrixNN predictedStateError() const; 00094 00098 AlgebraicSymMatrixMM predictedStateMomentumError() const; 00099 00100 TrackCharge charge() const {return theCharge;} 00101 00102 bool hasError() const; 00103 00104 bool operator ==(LinearizedTrackState<5>& other)const; 00105 00109 virtual RefCountedRefittedTrackState createRefittedTrackState( 00110 const GlobalPoint & vertexPosition, 00111 const AlgebraicVectorM & vectorParameters, 00112 const AlgebraicSymMatrixOO & covarianceMatrix) const; 00113 00114 virtual AlgebraicVector5 refittedParamFromEquation( 00115 const RefCountedRefittedTrackState & theRefittedState) const; 00116 00117 virtual void inline checkParameters(AlgebraicVector5 & parameters) const; 00123 virtual double weightInMixture() const {return theTSOS.weight();} 00124 00129 virtual std::vector<ReferenceCountingPointer<LinearizedTrackState<5> > > components() 00130 const {return ltComp;} 00131 00132 private: 00133 00140 PerigeeMultiLTS(const GlobalPoint & linP, const reco::TransientTrack & track, 00141 const TrajectoryStateOnSurface& tsos); 00142 00145 void prepareCollapsedState() const; 00146 00147 GlobalPoint theLinPoint; 00148 reco::TransientTrack theTrack; 00149 00150 00151 const TrajectoryStateOnSurface theTSOS; 00152 std::vector<RefCountedLinearizedTrackState> ltComp; 00153 mutable RefCountedLinearizedTrackState collapsedStateLT; 00154 LinearizedTrackStateFactory theLTSfactory; 00155 TrackCharge theCharge; 00156 mutable bool collapsedStateAvailable; 00157 }; 00158 00159 #endif