00001 #ifndef LinearizedTrackState_H
00002 #define LinearizedTrackState_H
00003
00004
00005
00006
00007 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h"
00008 #include "TrackingTools/TrajectoryState/interface/CopyUsingClone.h"
00009 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00010 #include "DataFormats/TrajectoryState/interface/TrackCharge.h"
00011 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
00012 #include "Math/SMatrix.h"
00013 #include "DataFormats/CLHEP/interface/Migration.h"
00014
00015 #include "RecoVertex/VertexPrimitives/interface/RefittedTrackState.h"
00016 #include <vector>
00017
00036 template <unsigned int N>
00037 class LinearizedTrackState : public ReferenceCounted {
00038
00039 public:
00040
00041 typedef ROOT::Math::SVector<double,N> AlgebraicVectorN;
00042 typedef ROOT::Math::SVector<double,N-2> AlgebraicVectorM;
00043 typedef ROOT::Math::SMatrix<double,N,3,ROOT::Math::MatRepStd<double,N,3> > AlgebraicMatrixN3;
00044 typedef ROOT::Math::SMatrix<double,N,N-2,ROOT::Math::MatRepStd<double,N,N-2> > AlgebraicMatrixNM;
00045 typedef ROOT::Math::SMatrix<double,N-2,3,ROOT::Math::MatRepStd<double,N-2,3> > AlgebraicMatrixM3;
00046 typedef ROOT::Math::SMatrix<double,N,N,ROOT::Math::MatRepSym<double,N> > AlgebraicSymMatrixNN;
00047 typedef ROOT::Math::SMatrix<double,N-2,N-2,ROOT::Math::MatRepSym<double,N-2> > AlgebraicSymMatrixMM;
00048 typedef ROOT::Math::SMatrix<double,N+1,N+1,ROOT::Math::MatRepSym<double,N+1> > AlgebraicSymMatrixOO;
00049
00050 typedef ReferenceCountingPointer<RefittedTrackState<N> > RefCountedRefittedTrackState;
00051
00052 virtual ~LinearizedTrackState(){}
00053
00058 virtual ReferenceCountingPointer<LinearizedTrackState<N> > stateWithNewLinearizationPoint
00059 (const GlobalPoint & newLP) const = 0;
00060
00063 virtual const GlobalPoint & linearizationPoint() const = 0;
00064
00068 virtual const AlgebraicVectorN & constantTerm() const = 0;
00069
00073 virtual const AlgebraicMatrixN3 & positionJacobian() const = 0;
00074
00078 virtual const AlgebraicMatrixNM & momentumJacobian() const = 0;
00079
00082 virtual const AlgebraicVectorN & parametersFromExpansion() const = 0;
00083
00087 virtual AlgebraicVectorN predictedStateParameters() const = 0;
00088
00092 virtual AlgebraicVectorM predictedStateMomentumParameters() const = 0;
00093
00097 virtual AlgebraicSymMatrixNN predictedStateWeight() const = 0;
00098
00102 virtual AlgebraicSymMatrixMM predictedStateMomentumError() const = 0;
00103
00107 virtual AlgebraicSymMatrixNN predictedStateError() const = 0;
00108
00109 virtual bool hasError() const = 0;
00110
00111 virtual TrackCharge charge() const = 0;
00112
00115
00116
00117 virtual bool operator ==(LinearizedTrackState<N> & other) const = 0;
00118
00122 virtual RefCountedRefittedTrackState createRefittedTrackState(
00123 const GlobalPoint & vertexPosition,
00124 const AlgebraicVectorM & vectorParameters,
00125 const AlgebraicSymMatrixOO & covarianceMatrix) const = 0;
00126
00130 virtual AlgebraicVectorN refittedParamFromEquation(
00131 const RefCountedRefittedTrackState & theRefittedState) const = 0;
00132
00133 virtual inline void checkParameters(AlgebraicVectorN & parameters) const
00134 {}
00135
00136 virtual double weightInMixture() const = 0;
00137
00138 virtual std::vector< ReferenceCountingPointer<LinearizedTrackState<N> > > components()
00139 const = 0;
00140
00141 virtual reco::TransientTrack track() const = 0;
00142
00143 };
00144
00145 #endif